{
  "version": 3,
  "sources": ["../../../../../shared/node_modules/@intrnl/esbuild-plugin-env/src/inject.js", "../../../node_modules/jquery/dist/jquery.js", "../../../node_modules/i18n-js/app/assets/javascripts/i18n.js", "../../../node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js", "../../../node_modules/devbridge-autocomplete/dist/jquery.autocomplete.js", "../../../node_modules/accounting/accounting.js", "../../../node_modules/air-datepicker/src/js/datepicker.js", "../../../node_modules/air-datepicker/src/js/body.js", "../../../node_modules/air-datepicker/src/js/navigation.js", "../../../node_modules/air-datepicker/src/js/timepicker.js", "../../../node_modules/axe-core/axe.js", "../../../node_modules/unfetch/src/index.mjs", "../../../node_modules/isomorphic-unfetch/browser.js", "../../../node_modules/velocity-animate/velocity.js", "../../../node_modules/magnific-popup/dist/jquery.magnific-popup.js", "../../../node_modules/velocity-ui-pack/velocity.ui.js", "../../../node_modules/flightjs/build/flight.js", "../../../node_modules/turbolinks/dist/turbolinks.js", "../../../node_modules/select2/dist/js/select2.js", "../../../node_modules/codemirror/lib/codemirror.js", "../../../node_modules/codemirror/addon/edit/continuelist.js", "../../../node_modules/simplemde/src/js/codemirror/tablist.js", "../../../node_modules/codemirror/addon/display/fullscreen.js", "../../../node_modules/codemirror/mode/xml/xml.js", "../../../node_modules/codemirror/mode/meta.js", "../../../node_modules/codemirror/mode/markdown/markdown.js", "../../../node_modules/codemirror/addon/mode/overlay.js", "../../../node_modules/codemirror/addon/display/placeholder.js", "../../../node_modules/codemirror/addon/selection/mark-selection.js", "../../../node_modules/codemirror/mode/gfm/gfm.js", "../../../node_modules/typo-js/typo.js", "../../../node_modules/codemirror-spell-checker/src/js/spell-checker.js", "../../../node_modules/marked/lib/marked.js", "../../../node_modules/simplemde/src/js/simplemde.js", "../../../node_modules/sticky-kit/dist/sticky-kit.js", "../../../node_modules/lodash/lodash.js", "../../../node_modules/vue/dist/vue.esm.js", "../../../node_modules/cropperjs/dist/cropper.js", "../../../node_modules/jqtree/lib/version.js", "../../../node_modules/jqtree/lib/node.js", "../../../node_modules/jqtree/lib/dragAndDropHandler.js", "../../../node_modules/jqtree/lib/util.js", "../../../node_modules/jqtree/lib/elementsRenderer.js", "../../../node_modules/jqtree/lib/dataLoader.js", "../../../node_modules/jqtree/lib/keyHandler.js", "../../../node_modules/jqtree/lib/simple.widget.js", "../../../node_modules/jqtree/lib/mouse.widget.js", "../../../node_modules/jqtree/lib/saveStateHandler.js", "../../../node_modules/jqtree/lib/scrollHandler.js", "../../../node_modules/jqtree/lib/selectNodeHandler.js", "../../../node_modules/jqtree/lib/nodeElement.js", "../../../node_modules/jqtree/lib/tree.jquery.js", "../../../node_modules/@claviska/jquery-minicolors/jquery.minicolors.js", "webpack://VueGridLayout/webpack/bootstrap", "webpack://VueGridLayout/node_modules/core-js/modules/_iter-define.js", "webpack://VueGridLayout/node_modules/core-js/modules/_string-at.js", "webpack://VueGridLayout/node_modules/core-js/modules/_advance-string-index.js", "webpack://VueGridLayout/node_modules/core-js/modules/_flags.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-keys.js", "webpack://VueGridLayout/src/components/GridLayout.vue?43b0", "webpack://VueGridLayout/node_modules/core-js/modules/_object-gopd.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-dps.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/detection-strategy/object.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/browser-detector.js", "webpack://VueGridLayout/src/helpers/DOM.js", "webpack://VueGridLayout/node_modules/core-js/modules/_fix-re-wks.js", "webpack://VueGridLayout/node_modules/core-js/modules/_dom-create.js", "webpack://VueGridLayout/node_modules/css-loader/lib/css-base.js", "webpack://VueGridLayout/node_modules/core-js/modules/_classof.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-gops.js", "webpack://VueGridLayout/node_modules/vue-loader/lib/runtime/componentNormalizer.js", "webpack://VueGridLayout/node_modules/core-js/modules/_redefine.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-create.js", "webpack://VueGridLayout/src/components/index.js", "webpack://VueGridLayout/node_modules/core-js/modules/_wks.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/id-generator.js", "webpack://VueGridLayout/node_modules/core-js/modules/_library.js", "webpack://VueGridLayout/node_modules/core-js/modules/_cof.js", "webpack://VueGridLayout/node_modules/core-js/modules/_strict-method.js", "webpack://VueGridLayout/node_modules/core-js/modules/_hide.js", "webpack://VueGridLayout/src/components/GridLayout.vue?9453", "webpack://VueGridLayout/src/components/GridLayout.vue", "webpack://VueGridLayout/src/components/GridLayout.vue?2dea", "webpack://VueGridLayout/src/components/GridLayout.vue", "webpack://VueGridLayout/node_modules/core-js/modules/_object-gpo.js", "webpack://VueGridLayout/node_modules/core-js/modules/_iter-create.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.object.keys.js", "webpack://VueGridLayout/node_modules/core-js/modules/_to-integer.js", "webpack://VueGridLayout/node_modules/core-js/modules/_property-desc.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.regexp.match.js", "webpack://VueGridLayout/node_modules/vue-style-loader/lib/listToStyles.js", "webpack://VueGridLayout/node_modules/vue-style-loader/lib/addStylesClient.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/listener-handler.js", "webpack://VueGridLayout/node_modules/core-js/modules/_to-object.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/id-handler.js", "webpack://VueGridLayout/node_modules/batch-processor/src/utils.js", "webpack://VueGridLayout/node_modules/core-js/modules/_regexp-exec.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-pie.js", "webpack://VueGridLayout/node_modules/core-js/modules/_shared.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.array.sort.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/element-utils.js", "webpack://VueGridLayout/node_modules/core-js/modules/_export.js", "webpack://VueGridLayout/node_modules/core-js/modules/_inherit-if-required.js", "webpack://VueGridLayout/src/components/GridItem.vue?70f1", "webpack://VueGridLayout/node_modules/core-js/modules/_object-sap.js", "webpack://VueGridLayout/node_modules/core-js/modules/_regexp-exec-abstract.js", "webpack://VueGridLayout/node_modules/core-js/modules/_shared-key.js", "webpack://VueGridLayout/node_modules/core-js/modules/_iobject.js", "webpack://VueGridLayout/node_modules/core-js/modules/_to-iobject.js", "webpack://VueGridLayout/node_modules/core-js/modules/_has.js", "webpack://VueGridLayout/node_modules/core-js/modules/_to-primitive.js", "webpack://VueGridLayout/src/components/GridItem.vue?73c4", "webpack://VueGridLayout/node_modules/core-js/modules/_object-assign.js", "webpack://VueGridLayout/node_modules/core-js/modules/_global.js", "webpack://VueGridLayout/node_modules/core-js/modules/_to-absolute-index.js", "webpack://VueGridLayout/node_modules/core-js/modules/_fails.js", "webpack://VueGridLayout/node_modules/core-js/modules/_set-to-string-tag.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.function.name.js", "webpack://VueGridLayout/node_modules/core-js/modules/_core.js", "webpack://VueGridLayout/node_modules/core-js/modules/_iterators.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-dp.js", "webpack://VueGridLayout/node_modules/core-js/modules/_set-proto.js", "webpack://VueGridLayout/external%20%7B%22commonjs%22:%22vue%22,%22commonjs2%22:%22vue%22,%22root%22:%22Vue%22%7D", "webpack://VueGridLayout/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-gopn.js", "webpack://VueGridLayout/src/helpers/responsiveUtils.js", "webpack://VueGridLayout/node_modules/core-js/modules/_own-keys.js", "webpack://VueGridLayout/node_modules/core-js/modules/_ctx.js", "webpack://VueGridLayout/node_modules/core-js/modules/_add-to-unscopables.js", "webpack://VueGridLayout/src/components/GridItem.vue?b235", "webpack://VueGridLayout/node_modules/core-js/modules/_to-length.js", "webpack://VueGridLayout/node_modules/core-js/modules/_descriptors.js", "webpack://VueGridLayout/src/helpers/utils.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.regexp.replace.js", "webpack://VueGridLayout/node_modules/core-js/modules/_string-trim.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/reporter.js", "webpack://VueGridLayout/node_modules/core-js/modules/web.dom.iterable.js", "webpack://VueGridLayout/src/components/GridLayout.vue?af6b", "webpack://VueGridLayout/node_modules/@babel/runtime/helpers/esm/defineProperty.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.regexp.exec.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/collection-utils.js", "webpack://VueGridLayout/src/components/GridItem.vue?f637", "webpack://VueGridLayout/src/helpers/draggableUtils.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/domObjects.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/isWindow.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/window.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/is.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/browser.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/arr.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/clone.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/extend.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/raf.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/normalizeListeners.js", "webpack://VueGridLayout/node_modules/@interactjs/core/Eventable.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/domUtils.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/rect.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/getOriginXY.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/hypot.js", "webpack://VueGridLayout/node_modules/@interactjs/core/BaseEvent.js", "webpack://VueGridLayout/node_modules/@interactjs/core/defaultOptions.js", "webpack://VueGridLayout/node_modules/@interactjs/core/InteractEvent.js", "webpack://VueGridLayout/node_modules/@interactjs/core/isNonNativeEvent.js", "webpack://VueGridLayout/node_modules/@interactjs/core/Interactable.js", "webpack://VueGridLayout/node_modules/@interactjs/core/InteractableSet.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/pointerExtend.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/pointerUtils.js", "webpack://VueGridLayout/node_modules/@interactjs/core/events.js", "webpack://VueGridLayout/node_modules/@interactjs/utils/misc.js", "webpack://VueGridLayout/node_modules/@interactjs/core/interactStatic.js", "webpack://VueGridLayout/node_modules/@interactjs/core/PointerInfo.js", "webpack://VueGridLayout/node_modules/@interactjs/core/Interaction.js", "webpack://VueGridLayout/node_modules/@interactjs/core/interactablePreventDefault.js", "webpack://VueGridLayout/node_modules/@interactjs/core/interactionFinder.js", "webpack://VueGridLayout/node_modules/@interactjs/core/interactions.js", "webpack://VueGridLayout/node_modules/@interactjs/core/scope.js", "webpack://VueGridLayout/node_modules/@interactjs/interact/index.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-start/InteractableMethods.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-start/base.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-start/dragAxis.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-start/hold.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-start/plugin.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-start/index.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-scroll/plugin.js", "webpack://VueGridLayout/node_modules/@interactjs/auto-scroll/index.js", "webpack://VueGridLayout/node_modules/@interactjs/actions/drag/plugin.js", "webpack://VueGridLayout/node_modules/@interactjs/actions/drag/index.js", "webpack://VueGridLayout/node_modules/@interactjs/actions/resize/plugin.js", "webpack://VueGridLayout/node_modules/@interactjs/actions/resize/index.js", "webpack://VueGridLayout/node_modules/@interactjs/snappers/edgeTarget.js", "webpack://VueGridLayout/node_modules/@interactjs/snappers/elements.js", "webpack://VueGridLayout/node_modules/@interactjs/snappers/grid.js", "webpack://VueGridLayout/node_modules/@interactjs/snappers/all.js", "webpack://VueGridLayout/node_modules/@interactjs/snappers/plugin.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/Modification.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/base.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/aspectRatio.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/noop.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/restrict/pointer.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/restrict/edges.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/restrict/rect.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/restrict/size.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/snap/pointer.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/snap/size.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/snap/edges.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/all.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/plugin.js", "webpack://VueGridLayout/node_modules/@interactjs/modifiers/index.js", "webpack://VueGridLayout/node_modules/@interactjs/dev-tools/plugin.js", "webpack://VueGridLayout/node_modules/@interactjs/dev-tools/index.js", "webpack://VueGridLayout/src/components/GridItem.vue", "webpack://VueGridLayout/src/components/GridItem.vue?2537", "webpack://VueGridLayout/src/components/GridItem.vue", "webpack://VueGridLayout/node_modules/core-js/modules/_defined.js", "webpack://VueGridLayout/node_modules/batch-processor/src/batch-processor.js", "webpack://VueGridLayout/node_modules/core-js/modules/_array-includes.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.number.constructor.js", "webpack://VueGridLayout/node_modules/core-js/modules/_ie8-dom-define.js", "webpack://VueGridLayout/(webpack)/buildin/global.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/detection-strategy/scroll.js", "webpack://VueGridLayout/node_modules/core-js/modules/_uid.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.array.iterator.js", "webpack://VueGridLayout/node_modules/core-js/modules/_an-object.js", "webpack://VueGridLayout/node_modules/core-js/modules/_object-keys-internal.js", "webpack://VueGridLayout/node_modules/core-js/modules/_is-object.js", "webpack://VueGridLayout/node_modules/core-js/modules/_iter-step.js", "webpack://VueGridLayout/node_modules/element-resize-detector/src/state-handler.js", "webpack://VueGridLayout/node_modules/core-js/modules/_a-function.js", "webpack://VueGridLayout/node_modules/core-js/modules/_enum-bug-keys.js", "webpack://VueGridLayout/src/components/GridLayout.vue?2bdf", "webpack://VueGridLayout/node_modules/element-resize-detector/src/element-resize-detector.js", "webpack://VueGridLayout/node_modules/core-js/modules/_create-property.js", "webpack://VueGridLayout/node_modules/current-script-polyfill/currentScript.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.object.assign.js", "webpack://VueGridLayout/node_modules/core-js/modules/_function-to-string.js", "webpack://VueGridLayout/node_modules/core-js/modules/_html.js", "webpack://VueGridLayout/node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js", "webpack://VueGridLayout/node_modules/@vue/cli-service/lib/commands/build/entry-lib.js", "webpack://VueGridLayout/node_modules/core-js/modules/es6.number.is-finite.js", "webpack://VueGridLayout/node_modules/core-js/modules/_string-ws.js", "../../javascript/admin.js", "../../javascript/lib/commons/index.js", "../../javascript/lib/commons/modules/jquery.js", "../../javascript/lib/commons/modules/i18n.js", "../../javascript/lib/commons/modules/module-search.js", "../../javascript/lib/shared/index.js", "../../javascript/lib/shared/modules/autocomplete_settings.js", "../../javascript/lib/shared/modules/URLParams.js", "../../javascript/lib/shared/modules/d3-locale.js", "../../javascript/lib/shared/modules/createScaleColors.js", "../../../node_modules/d3/src/index.js", "../../../node_modules/d3-array/src/index.js", "../../../node_modules/d3-array/src/group.js", "../../../node_modules/internmap/src/index.js", "../../../node_modules/d3-array/src/identity.js", "../../../node_modules/d3-array/src/max.js", "../../../node_modules/d3-array/src/mean.js", "../../../node_modules/d3-array/src/sum.js", "../../../node_modules/d3-axis/src/index.js", "../../../node_modules/d3-axis/src/axis.js", "../../../node_modules/d3-axis/src/identity.js", "../../../node_modules/d3-brush/src/index.js", "../../../node_modules/d3-brush/src/brush.js", "../../../node_modules/d3-dispatch/src/index.js", "../../../node_modules/d3-dispatch/src/dispatch.js", "../../../node_modules/d3-selection/src/index.js", "../../../node_modules/d3-selection/src/creator.js", "../../../node_modules/d3-selection/src/namespace.js", "../../../node_modules/d3-selection/src/namespaces.js", "../../../node_modules/d3-selection/src/select.js", "../../../node_modules/d3-selection/src/selection/index.js", "../../../node_modules/d3-selection/src/selection/select.js", "../../../node_modules/d3-selection/src/selector.js", "../../../node_modules/d3-selection/src/selection/selectAll.js", "../../../node_modules/d3-selection/src/array.js", "../../../node_modules/d3-selection/src/selectorAll.js", "../../../node_modules/d3-selection/src/selection/selectChild.js", "../../../node_modules/d3-selection/src/matcher.js", "../../../node_modules/d3-selection/src/selection/selectChildren.js", "../../../node_modules/d3-selection/src/selection/filter.js", "../../../node_modules/d3-selection/src/selection/data.js", "../../../node_modules/d3-selection/src/selection/enter.js", "../../../node_modules/d3-selection/src/selection/sparse.js", "../../../node_modules/d3-selection/src/constant.js", "../../../node_modules/d3-selection/src/selection/exit.js", "../../../node_modules/d3-selection/src/selection/join.js", "../../../node_modules/d3-selection/src/selection/merge.js", "../../../node_modules/d3-selection/src/selection/order.js", "../../../node_modules/d3-selection/src/selection/sort.js", "../../../node_modules/d3-selection/src/selection/call.js", "../../../node_modules/d3-selection/src/selection/nodes.js", "../../../node_modules/d3-selection/src/selection/node.js", "../../../node_modules/d3-selection/src/selection/size.js", "../../../node_modules/d3-selection/src/selection/empty.js", "../../../node_modules/d3-selection/src/selection/each.js", "../../../node_modules/d3-selection/src/selection/attr.js", "../../../node_modules/d3-selection/src/selection/style.js", "../../../node_modules/d3-selection/src/window.js", "../../../node_modules/d3-selection/src/selection/property.js", "../../../node_modules/d3-selection/src/selection/classed.js", "../../../node_modules/d3-selection/src/selection/text.js", "../../../node_modules/d3-selection/src/selection/html.js", "../../../node_modules/d3-selection/src/selection/raise.js", "../../../node_modules/d3-selection/src/selection/lower.js", "../../../node_modules/d3-selection/src/selection/append.js", "../../../node_modules/d3-selection/src/selection/insert.js", "../../../node_modules/d3-selection/src/selection/remove.js", "../../../node_modules/d3-selection/src/selection/clone.js", "../../../node_modules/d3-selection/src/selection/datum.js", "../../../node_modules/d3-selection/src/selection/on.js", "../../../node_modules/d3-selection/src/selection/dispatch.js", "../../../node_modules/d3-selection/src/selection/iterator.js", "../../../node_modules/d3-interpolate/src/index.js", "../../../node_modules/d3-interpolate/src/value.js", "../../../node_modules/d3-color/src/index.js", "../../../node_modules/d3-color/src/color.js", "../../../node_modules/d3-color/src/define.js", "../../../node_modules/d3-interpolate/src/rgb.js", "../../../node_modules/d3-interpolate/src/basis.js", "../../../node_modules/d3-interpolate/src/basisClosed.js", "../../../node_modules/d3-interpolate/src/color.js", "../../../node_modules/d3-interpolate/src/constant.js", "../../../node_modules/d3-interpolate/src/array.js", "../../../node_modules/d3-interpolate/src/numberArray.js", "../../../node_modules/d3-interpolate/src/date.js", "../../../node_modules/d3-interpolate/src/number.js", "../../../node_modules/d3-interpolate/src/object.js", "../../../node_modules/d3-interpolate/src/string.js", "../../../node_modules/d3-interpolate/src/round.js", "../../../node_modules/d3-interpolate/src/transform/index.js", "../../../node_modules/d3-interpolate/src/transform/parse.js", "../../../node_modules/d3-interpolate/src/transform/decompose.js", "../../../node_modules/d3-transition/src/index.js", "../../../node_modules/d3-transition/src/selection/index.js", "../../../node_modules/d3-transition/src/selection/interrupt.js", "../../../node_modules/d3-transition/src/interrupt.js", "../../../node_modules/d3-transition/src/transition/schedule.js", "../../../node_modules/d3-timer/src/index.js", "../../../node_modules/d3-timer/src/timer.js", "../../../node_modules/d3-timer/src/timeout.js", "../../../node_modules/d3-transition/src/selection/transition.js", "../../../node_modules/d3-transition/src/transition/index.js", "../../../node_modules/d3-transition/src/transition/attr.js", "../../../node_modules/d3-transition/src/transition/tween.js", "../../../node_modules/d3-transition/src/transition/interpolate.js", "../../../node_modules/d3-transition/src/transition/attrTween.js", "../../../node_modules/d3-transition/src/transition/delay.js", "../../../node_modules/d3-transition/src/transition/duration.js", "../../../node_modules/d3-transition/src/transition/ease.js", "../../../node_modules/d3-transition/src/transition/easeVarying.js", "../../../node_modules/d3-transition/src/transition/filter.js", "../../../node_modules/d3-transition/src/transition/merge.js", "../../../node_modules/d3-transition/src/transition/on.js", "../../../node_modules/d3-transition/src/transition/remove.js", "../../../node_modules/d3-transition/src/transition/select.js", "../../../node_modules/d3-transition/src/transition/selectAll.js", "../../../node_modules/d3-transition/src/transition/selection.js", "../../../node_modules/d3-transition/src/transition/style.js", "../../../node_modules/d3-transition/src/transition/styleTween.js", "../../../node_modules/d3-transition/src/transition/text.js", "../../../node_modules/d3-transition/src/transition/textTween.js", "../../../node_modules/d3-transition/src/transition/transition.js", "../../../node_modules/d3-transition/src/transition/end.js", "../../../node_modules/d3-ease/src/index.js", "../../../node_modules/d3-ease/src/cubic.js", "../../../node_modules/d3-brush/src/constant.js", "../../../node_modules/d3-brush/src/event.js", "../../../node_modules/d3-brush/src/noevent.js", "../../../node_modules/d3-dsv/src/index.js", "../../../node_modules/d3-dsv/src/dsv.js", "../../../node_modules/d3-dsv/src/csv.js", "../../../node_modules/d3-dsv/src/tsv.js", "../../../node_modules/d3-fetch/src/index.js", "../../../node_modules/d3-fetch/src/dsv.js", "../../../node_modules/d3-fetch/src/text.js", "../../../node_modules/d3-format/src/index.js", "../../../node_modules/d3-format/src/defaultLocale.js", "../../../node_modules/d3-format/src/locale.js", "../../../node_modules/d3-format/src/exponent.js", "../../../node_modules/d3-format/src/formatDecimal.js", "../../../node_modules/d3-format/src/formatGroup.js", "../../../node_modules/d3-format/src/formatNumerals.js", "../../../node_modules/d3-format/src/formatSpecifier.js", "../../../node_modules/d3-format/src/formatTrim.js", "../../../node_modules/d3-format/src/formatTypes.js", "../../../node_modules/d3-format/src/formatPrefixAuto.js", "../../../node_modules/d3-format/src/formatRounded.js", "../../../node_modules/d3-format/src/identity.js", "../../../node_modules/d3-format/src/precisionFixed.js", "../../../node_modules/d3-format/src/precisionPrefix.js", "../../../node_modules/d3-format/src/precisionRound.js", "../../../node_modules/d3-scale/src/index.js", "../../../node_modules/d3-scale/src/band.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/index.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/bisect.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/ascending.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/bisector.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/descending.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/number.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/ticks.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/quantile.js", "../../../node_modules/d3-scale/node_modules/d3-array/src/range.js", "../../../node_modules/d3-scale/src/init.js", "../../../node_modules/d3-scale/src/ordinal.js", "../../../node_modules/d3-scale/src/linear.js", "../../../node_modules/d3-scale/src/continuous.js", "../../../node_modules/d3-scale/src/constant.js", "../../../node_modules/d3-scale/src/number.js", "../../../node_modules/d3-scale/src/tickFormat.js", "../../../node_modules/d3-scale/src/quantile.js", "../../../node_modules/d3-zoom/src/index.js", "../../../node_modules/d3-zoom/src/zoom.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/index.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/creator.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/namespace.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/namespaces.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/index.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/select.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selector.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/selectAll.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/array.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selectorAll.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/selectChild.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/matcher.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/selectChildren.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/filter.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/data.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/enter.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/sparse.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/constant.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/exit.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/join.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/merge.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/order.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/sort.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/call.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/nodes.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/node.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/size.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/empty.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/each.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/attr.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/style.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/window.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/property.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/classed.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/text.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/html.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/raise.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/lower.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/append.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/insert.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/remove.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/clone.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/datum.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/on.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/dispatch.js", "../../../node_modules/d3-zoom/node_modules/d3-selection/src/selection/iterator.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/index.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/selection/index.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/selection/interrupt.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/interrupt.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/schedule.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-dispatch/src/index.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-dispatch/src/dispatch.js", "../../../node_modules/d3-zoom/node_modules/d3-timer/src/index.js", "../../../node_modules/d3-zoom/node_modules/d3-timer/src/timer.js", "../../../node_modules/d3-zoom/node_modules/d3-timer/src/timeout.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/selection/transition.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/index.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/attr.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/index.js", "../../../node_modules/d3-zoom/node_modules/d3-color/src/index.js", "../../../node_modules/d3-zoom/node_modules/d3-color/src/color.js", "../../../node_modules/d3-zoom/node_modules/d3-color/src/define.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/rgb.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/basis.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/basisClosed.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/color.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/constant.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/number.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/string.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/transform/index.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/transform/parse.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/node_modules/d3-interpolate/src/transform/decompose.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/tween.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/interpolate.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/attrTween.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/delay.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/duration.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/ease.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/easeVarying.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/filter.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/merge.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/on.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/remove.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/select.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/selectAll.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/selection.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/style.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/styleTween.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/text.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/textTween.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/transition.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/transition/end.js", "../../../node_modules/d3-zoom/node_modules/d3-ease/src/index.js", "../../../node_modules/d3-zoom/node_modules/d3-ease/src/cubic.js", "../../../node_modules/d3-zoom/node_modules/d3-transition/src/active.js", "../../../node_modules/d3-zoom/src/constant.js", "../../../node_modules/d3-zoom/src/event.js", "../../../node_modules/d3-zoom/src/transform.js", "../../../node_modules/d3-zoom/src/noevent.js", "../../javascript/lib/shared/modules/slugString.js", "../../javascript/lib/shared/modules/accounting_settings.js", "../../javascript/lib/shared/modules/air-datepicker.js", "../../../node_modules/air-datepicker/src/js/air-datepicker.js", "../../javascript/lib/shared/modules/read-more.js", "../../javascript/lib/shared/modules/horizontal-carousel.js", "../../javascript/lib/shared/modules/image-lightbox.js", "../../javascript/lib/shared/modules/range-slider.js", "../../javascript/lib/shared/modules/middleware.js", "../../javascript/lib/vue/filters/index.js", "../../javascript/lib/shared/modules/debounce.js", "../../javascript/lib/shared/modules/accessibility.js", "../../javascript/lib/shared/modules/groupBy.js", "../../javascript/lib/shared/modules/d3-format-numbers.js", "../../javascript/lib/shared/modules/appsignal.js", "../../../node_modules/@appsignal/javascript/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/@appsignal/core/src/index.ts", "../../../node_modules/@appsignal/core/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/@appsignal/core/src/utils/functional.ts", "../../../node_modules/@appsignal/core/src/utils/hashmap.ts", "../../../node_modules/@appsignal/core/src/utils/error.ts", "../../../node_modules/@appsignal/core/src/utils/url.ts", "../../../node_modules/@appsignal/core/src/utils/async.ts", "../../../node_modules/@appsignal/core/src/utils/environment.ts", "../../../node_modules/@appsignal/core/src/utils/push-api.ts", "../../../node_modules/@appsignal/core/src/serializable.ts", "../../../node_modules/@appsignal/javascript/src/version.ts", "../../../node_modules/@appsignal/javascript/src/environment.ts", "../../../node_modules/@appsignal/javascript/src/transports/xdomain.ts", "../../../node_modules/@appsignal/javascript/src/transports/xhr.ts", "../../../node_modules/@appsignal/javascript/src/transports/fetch.ts", "../../../node_modules/@appsignal/javascript/src/transports/node.ts", "../../../node_modules/@appsignal/javascript/src/api.ts", "../../../node_modules/@appsignal/javascript/src/span.ts", "../../../node_modules/@appsignal/javascript/src/queue.ts", "../../../node_modules/@appsignal/javascript/src/dispatcher.ts", "../../../node_modules/@appsignal/javascript/src/index.ts", "../../../node_modules/@appsignal/plugin-window-events/src/index.ts", "../../javascript/lib/shared/modules/wordwrap.js", "../../javascript/lib/shared/modules/tspans.js", "../../javascript/lib/shared/modules/safe-division.js", "../../javascript/lib/commons/modules/module-sessions.js", "../../javascript/lib/commons/modules/module-site_header.js", "../../javascript/lib/commons/modules/magnific-popup.js", "../../javascript/lib/events/index.js", "../../javascript/lib/commons/modules/globals.js", "../../../node_modules/tipsy-1a/src/javascripts/jquery.tipsy.js", "../../javascript/lib/commons/modules/tabs.js", "../../javascript/lib/commons/modules/velocity_settings.js", "../../javascript/lib/commons/modules/shareContent.js", "../../javascript/lib/commons/modules/separate-tabs.js", "../../javascript/lib/commons/modules/check-start-turbolinks.js", "../../javascript/lib/commons/modules/iframe_handler.js", "../../javascript/lib/i18n/index.js", "../../javascript/lib/i18n/modules/translations.js", "../../javascript/gobierto_admin/index.js", "../../javascript/gobierto_admin/modules/init.js", "../../javascript/gobierto_admin/modules/admin_groups_admins_controller.js", "../../javascript/gobierto_admin/modules/admin_groups_controller.js", "../../javascript/gobierto_admin/modules/admins_controller.js", "../../javascript/gobierto_admin/modules/application.js", "../../javascript/gobierto_admin/modules/consultation_items_controller.js", "../../javascript/gobierto_admin/modules/consultation_responses_controller.js", "../../javascript/lib/visualizations/index.js", "../../javascript/lib/visualizations/modules/age_report.js", "../../javascript/lib/visualizations/modules/amount_distribution_bars.js", "../../javascript/lib/visualizations/modules/areachart.js", "../../javascript/lib/visualizations/modules/bubbles.js", "../../javascript/lib/visualizations/modules/bubble_cost.js", "../../javascript/lib/visualizations/modules/bubble_legend.js", "../../javascript/lib/visualizations/modules/card_bars.js", "../../javascript/lib/visualizations/modules/card.js", "../../javascript/lib/visualizations/modules/card_comparison.js", "../../javascript/lib/visualizations/modules/card_simple.js", "../../javascript/lib/visualizations/modules/sparkline.js", "../../javascript/lib/visualizations/modules/card_sparkline_table.js", "../../javascript/lib/visualizations/modules/card_table.js", "../../javascript/lib/visualizations/modules/consultation_indicators.js", "../../javascript/lib/visualizations/modules/group_pct_distribution_bars.js", "../../javascript/lib/visualizations/modules/lineas_tabla.js", "../../javascript/lib/visualizations/modules/lines_execution.js", "../../javascript/lib/visualizations/modules/population_pyramid.js", "../../javascript/lib/visualizations/modules/punchcard.js", "../../javascript/lib/visualizations/modules/rent_distribution.js", "../../javascript/lib/visualizations/modules/d3-distance-limited-voronoi.js", "../../../node_modules/d3-voronoi/src/index.js", "../../../node_modules/d3-voronoi/src/voronoi.js", "../../../node_modules/d3-voronoi/src/constant.js", "../../../node_modules/d3-voronoi/src/point.js", "../../../node_modules/d3-voronoi/src/Diagram.js", "../../../node_modules/d3-voronoi/src/Beach.js", "../../../node_modules/d3-voronoi/src/RedBlackTree.js", "../../../node_modules/d3-voronoi/src/Cell.js", "../../../node_modules/d3-voronoi/src/Edge.js", "../../../node_modules/d3-voronoi/src/Circle.js", "../../javascript/lib/visualizations/modules/rowchart.js", "../../javascript/lib/visualizations/modules/slider.js", "../../javascript/lib/visualizations/modules/treemap.js", "../../javascript/lib/visualizations/modules/unemployment_age.js", "../../javascript/lib/visualizations/modules/unemployment_rate.js", "../../javascript/lib/visualizations/modules/unemployment_sex.js", "../../javascript/gobierto_admin/modules/content_blocks_controller.js", "../../javascript/gobierto_admin/modules/dirty_forms_component.js", "../../javascript/gobierto_admin/modules/dynamic_content_component.js", "../../../node_modules/cleave.js/dist/cleave-esm.js", "../../../node_modules/geocomplete/jquery.geocomplete.js", "../../javascript/gobierto_admin/modules/globalized_forms_component.js", "../../javascript/gobierto_admin/modules/gobierto_attachments_controller.js", "../../javascript/gobierto_admin/modules/gobierto_budgets_controller.js", "../../javascript/gobierto_admin/modules/gobierto_calendars_events_controller.js", "../../javascript/gobierto_admin/modules/gobierto_calendars_calendar_configurations_controller.js", "../../javascript/gobierto_admin/modules/gobierto_cms_controller.js", "../../javascript/gobierto_admin/modules/gobierto_core_controller.js", "../../javascript/gobierto_admin/modules/gobierto_plans_indicators_controller.js", "../../../node_modules/slickgrid/src/slick.core.ts", "../../../node_modules/slickgrid/src/controls/slick.columnmenu.ts", "../../../node_modules/slickgrid/src/controls/slick.columnpicker.ts", "../../../node_modules/slickgrid/src/controls/slick.gridmenu.ts", "../../../node_modules/slickgrid/src/controls/slick.pager.ts", "../../../node_modules/slickgrid/src/models/fieldType.enum.ts", "../../../node_modules/slickgrid/src/models/sortDirectionNumber.enum.ts", "../../../node_modules/slickgrid/src/plugins/slick.autotooltips.ts", "../../../node_modules/slickgrid/src/plugins/slick.cellcopymanager.ts", "../../../node_modules/slickgrid/src/plugins/slick.cellexternalcopymanager.ts", "../../../node_modules/slickgrid/src/plugins/slick.cellmenu.ts", "../../../node_modules/slickgrid/src/plugins/slick.cellrangedecorator.ts", "../../../node_modules/slickgrid/src/slick.interactions.ts", "../../../node_modules/slickgrid/src/plugins/slick.cellrangeselector.ts", "../../../node_modules/slickgrid/src/plugins/slick.cellselectionmodel.ts", "../../../node_modules/slickgrid/src/plugins/slick.checkboxselectcolumn.ts", "../../../node_modules/slickgrid/src/plugins/slick.contextmenu.ts", "../../../node_modules/slickgrid/src/plugins/slick.crossgridrowmovemanager.ts", "../../../node_modules/slickgrid/src/plugins/slick.customtooltip.ts", "../../../node_modules/slickgrid/src/plugins/slick.draggablegrouping.ts", "../../../node_modules/slickgrid/src/plugins/slick.headerbuttons.ts", "../../../node_modules/slickgrid/src/plugins/slick.headermenu.ts", "../../../node_modules/slickgrid/src/plugins/slick.resizer.ts", "../../../node_modules/slickgrid/src/plugins/slick.rowdetailview.ts", "../../../node_modules/slickgrid/src/plugins/slick.rowmovemanager.ts", "../../../node_modules/slickgrid/src/plugins/slick.rowselectionmodel.ts", "../../../node_modules/slickgrid/src/plugins/slick.state.ts", "../../../node_modules/slickgrid/src/slick.compositeeditor.ts", "../../../node_modules/slickgrid/src/slick.groupitemmetadataprovider.ts", "../../../node_modules/slickgrid/src/slick.dataview.ts", "../../../node_modules/slickgrid/src/slick.editors.ts", "../../../node_modules/slickgrid/src/slick.formatters.ts", "../../../node_modules/slickgrid/src/slick.grid.ts", "../../../node_modules/slickgrid/src/slick.remotemodel-yahoo.ts", "../../../node_modules/slickgrid/src/slick.remotemodel.ts", "../../javascript/gobierto_admin/modules/gobierto_plans_plan_projects_controller.js", "../../javascript/gobierto_admin/modules/module-admin.js", "../../javascript/gobierto_admin/modules/module-admin-search.js", "../../javascript/gobierto_admin/modules/people_controller.js", "../../javascript/gobierto_admin/modules/person_controller.js", "../../javascript/gobierto_admin/modules/person_events_controller.js", "../../javascript/gobierto_admin/modules/sections_controller.js", "../../javascript/gobierto_admin/modules/terms_controller.js", "../../../node_modules/utils/src/browser-info.ts", "../../../node_modules/utils/src/utils.ts", "../../../node_modules/sortable/src/PluginManager.ts", "../../../node_modules/sortable/src/EventDispatcher.ts", "../../../node_modules/sortable/src/Sortable.ts", "../../../node_modules/plugins/swap/src/index.ts", "../../../node_modules/sortable/src/Animation.ts", "../../../node_modules/plugins/multi-drag/src/index.ts", "../../../node_modules/plugins/on-spill/src/index.ts", "../../../node_modules/plugins/auto-scroll/src/index.ts", "../../../node_modules/sortablejs/src/modular-complete.ts", "../../javascript/gobierto_admin/modules/sites_controller.js", "../../javascript/gobierto_admin/modules/gobierto_common_custom_fields_controller.js", "../../javascript/gobierto_admin/modules/gobierto_common_custom_field_records_controller.js", "../../javascript/gobierto_admin/modules/color_picker_component.js", "../../javascript/gobierto_admin/modules/sortable_component.js", "../../javascript/gobierto_dashboards/index.js", "../../javascript/gobierto_dashboards/modules/dashboard_maker_controller.js", "../../javascript/gobierto_dashboards/webapp/Maker.vue", "../../javascript/lib/vue/components/index.js", "../../javascript/lib/vue/components/modules/BlockHeader.vue", "../../javascript/lib/vue/components/modules/Calendar.vue", "../../javascript/lib/vue/components/modules/HorizontalCarousel.vue", "../../javascript/lib/vue/components/modules/Loading.vue", "../../javascript/lib/vue/components/modules/Checkbox.vue", "../../javascript/lib/vue/components/modules/RangeBars.vue", "../../javascript/lib/vue/components/modules/ReadMore.vue", "../../javascript/lib/vue/components/modules/Dropdown.vue", "../../javascript/lib/vue/components/modules/SkeletonSpinner.vue", "../../javascript/lib/vue/components/modules/Pagination.vue", "../../javascript/lib/vue/components/modules/MultipleLineChart.vue", "../../javascript/lib/vue/components/modules/TextEditable.vue", "../../javascript/lib/vue/components/modules/Autocomplete.vue", "../../javascript/lib/vue/components/modules/Table.vue", "../../javascript/lib/vue/components/modules/TableColumnsSelector.vue", "../../javascript/lib/vue/directives/index.js", "../../javascript/lib/vue/components/modules/SortIcon.vue", "../../javascript/lib/vue/components/modules/Filters.vue", "../../javascript/lib/vue/mixins/index.js", "../../javascript/lib/vue/mixins/modules/items-filter.js", "../../javascript/gobierto_dashboards/webapp/Viewer.vue", "../../javascript/gobierto_dashboards/webapp/lib/widgets.js", "../../javascript/gobierto_dashboards/webapp/components/WidgetHTML.vue", "../../javascript/gobierto_dashboards/webapp/components/WidgetIndicator.vue", "../../javascript/gobierto_dashboards/webapp/components/Button.vue", "../../javascript/gobierto_dashboards/webapp/components/WidgetIndicatorIndividual.vue", "../../javascript/gobierto_dashboards/webapp/components/WidgetIndicatorTable.vue", "../../javascript/gobierto_dashboards/webapp/lib/factories.js", "../../../node_modules/axios/index.js", "../../../node_modules/axios/lib/axios.js", "../../../node_modules/axios/lib/utils.js", "../../../node_modules/axios/lib/helpers/bind.js", "../../../node_modules/axios/lib/core/Axios.js", "../../../node_modules/axios/lib/helpers/buildURL.js", "../../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../../node_modules/axios/lib/helpers/toFormData.js", "../../../node_modules/axios/lib/core/AxiosError.js", "../../../node_modules/axios/lib/helpers/null.js", "../../../node_modules/axios/lib/core/InterceptorManager.js", "../../../node_modules/axios/lib/core/dispatchRequest.js", "../../../node_modules/axios/lib/core/transformData.js", "../../../node_modules/axios/lib/defaults/index.js", "../../../node_modules/axios/lib/defaults/transitional.js", "../../../node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../../node_modules/axios/lib/platform/index.js", "../../../node_modules/axios/lib/platform/browser/index.js", "../../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js", "../../../node_modules/axios/lib/platform/browser/classes/FormData.js", "../../../node_modules/axios/lib/platform/browser/classes/Blob.js", "../../../node_modules/axios/lib/platform/common/utils.js", "../../../node_modules/axios/lib/helpers/formDataToJSON.js", "../../../node_modules/axios/lib/core/AxiosHeaders.js", "../../../node_modules/axios/lib/helpers/parseHeaders.js", "../../../node_modules/axios/lib/cancel/isCancel.js", "../../../node_modules/axios/lib/cancel/CanceledError.js", "../../../node_modules/axios/lib/adapters/adapters.js", "../../../node_modules/axios/lib/adapters/xhr.js", "../../../node_modules/axios/lib/core/settle.js", "../../../node_modules/axios/lib/helpers/parseProtocol.js", "../../../node_modules/axios/lib/helpers/progressEventReducer.js", "../../../node_modules/axios/lib/helpers/speedometer.js", "../../../node_modules/axios/lib/helpers/throttle.js", "../../../node_modules/axios/lib/helpers/resolveConfig.js", "../../../node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../node_modules/axios/lib/helpers/cookies.js", "../../../node_modules/axios/lib/core/buildFullPath.js", "../../../node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../node_modules/axios/lib/helpers/combineURLs.js", "../../../node_modules/axios/lib/core/mergeConfig.js", "../../../node_modules/axios/lib/adapters/fetch.js", "../../../node_modules/axios/lib/helpers/composeSignals.js", "../../../node_modules/axios/lib/helpers/trackStream.js", "../../../node_modules/axios/lib/helpers/validator.js", "../../../node_modules/axios/lib/env/data.js", "../../../node_modules/axios/lib/cancel/CancelToken.js", "../../../node_modules/axios/lib/helpers/spread.js", "../../../node_modules/axios/lib/helpers/isAxiosError.js", "../../../node_modules/axios/lib/helpers/HttpStatusCode.js", "../../javascript/gobierto_dashboards/webapp/components/Widget.vue", "../../javascript/gobierto_dashboards/webapp/components/WidgetEditable.vue", "../../javascript/gobierto_dashboards/webapp/components/HeaderForm.vue", "../../javascript/gobierto_dashboards/webapp/layouts/Header.vue", "../../javascript/gobierto_dashboards/webapp/components/SmallCard.vue", "../../javascript/gobierto_dashboards/webapp/layouts/Aside.vue", "../../javascript/gobierto_dashboards/webapp/layouts/Main.vue", "../../javascript/gobierto_dashboards/modules/dashboard_commons_controller.js", "../../javascript/gobierto_dashboards/modules/dashboard_viewer_controller.js", "../../javascript/gobierto_dashboards/webapp/ViewerManager.vue", "../../javascript/gobierto_dashboards/webapp/components/ListCard.vue"],
  "sourcesContent": ["export const process = {env: {}};\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", "// I18n.js\n// =======\n//\n// This small library provides the Rails I18n API on the Javascript.\n// You don't actually have to use Rails (or even Ruby) to use I18n.js.\n// Just make sure you export all translations in an object like this:\n//\n//     I18n.translations.en = {\n//       hello: \"Hello World\"\n//     };\n//\n// See tests for specific formatting like numbers and dates.\n//\n\n// Using UMD pattern from\n// https://github.com/umdjs/umd#regular-module\n// `returnExports.js` version\n;(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(\"i18n\", function(){ return factory(root);});\n  } else if (typeof module === 'object' && module.exports) {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory(root);\n  } else {\n    // Browser globals (root is window)\n    root.I18n = factory(root);\n  }\n}(this, function(global) {\n  \"use strict\";\n\n  // Use previously defined object if exists in current scope\n  var I18n = global && global.I18n || {};\n\n  // Just cache the Array#slice function.\n  var slice = Array.prototype.slice;\n\n  // Apply number padding.\n  var padding = function(number) {\n    return (\"0\" + number.toString()).substr(-2);\n  };\n\n  // Improved toFixed number rounding function with support for unprecise floating points\n  // JavaScript's standard toFixed function does not round certain numbers correctly (for example 0.105 with precision 2).\n  var toFixed = function(number, precision) {\n    return decimalAdjust('round', number, -precision).toFixed(precision);\n  };\n\n  // Is a given variable an object?\n  // Borrowed from Underscore.js\n  var isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object'\n  };\n\n  var isFunction = function(func) {\n    var type = typeof func;\n    return type === 'function'\n  };\n\n  // Check if value is different than undefined and null;\n  var isSet = function(value) {\n    return typeof(value) !== 'undefined' && value !== null;\n  };\n\n  // Is a given value an array?\n  // Borrowed from Underscore.js\n  var isArray = function(val) {\n    if (Array.isArray) {\n      return Array.isArray(val);\n    }\n    return Object.prototype.toString.call(val) === '[object Array]';\n  };\n\n  var isString = function(val) {\n    return typeof val === 'string' || Object.prototype.toString.call(val) === '[object String]';\n  };\n\n  var isNumber = function(val) {\n    return typeof val === 'number' || Object.prototype.toString.call(val) === '[object Number]';\n  };\n\n  var isBoolean = function(val) {\n    return val === true || val === false;\n  };\n\n  var isNull = function(val) {\n    return val === null;\n  };\n\n  var decimalAdjust = function(type, value, exp) {\n    // If the exp is undefined or zero...\n    if (typeof exp === 'undefined' || +exp === 0) {\n      return Math[type](value);\n    }\n    value = +value;\n    exp = +exp;\n    // If the value is not a number or the exp is not an integer...\n    if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n      return NaN;\n    }\n    // Shift\n    value = value.toString().split('e');\n    value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));\n    // Shift back\n    value = value.toString().split('e');\n    return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));\n  };\n\n  var lazyEvaluate = function(message, scope) {\n    if (isFunction(message)) {\n      return message(scope);\n    } else {\n      return message;\n    }\n  };\n\n  var merge = function (dest, obj) {\n    var key, value;\n    for (key in obj) if (obj.hasOwnProperty(key)) {\n      value = obj[key];\n      if (isString(value) || isNumber(value) || isBoolean(value) || isArray(value) || isNull(value)) {\n        dest[key] = value;\n      } else {\n        if (dest[key] == null) dest[key] = {};\n        merge(dest[key], value);\n      }\n    }\n    return dest;\n  };\n\n  // Set default days/months translations.\n  var DATE = {\n      day_names: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n    , abbr_day_names: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"]\n    , month_names: [null, \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n    , abbr_month_names: [null, \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n    , meridian: [\"AM\", \"PM\"]\n  };\n\n  // Set default number format.\n  var NUMBER_FORMAT = {\n      precision: 3\n    , separator: \".\"\n    , delimiter: \",\"\n    , strip_insignificant_zeros: false\n  };\n\n  // Set default currency format.\n  var CURRENCY_FORMAT = {\n      unit: \"$\"\n    , precision: 2\n    , format: \"%u%n\"\n    , sign_first: true\n    , delimiter: \",\"\n    , separator: \".\"\n  };\n\n  // Set default percentage format.\n  var PERCENTAGE_FORMAT = {\n      unit: \"%\"\n    , precision: 3\n    , format: \"%n%u\"\n    , separator: \".\"\n    , delimiter: \"\"\n  };\n\n  // Set default size units.\n  var SIZE_UNITS = [null, \"kb\", \"mb\", \"gb\", \"tb\"];\n\n  // Other default options\n  var DEFAULT_OPTIONS = {\n    // Set default locale. This locale will be used when fallback is enabled and\n    // the translation doesn't exist in a particular locale.\n      defaultLocale: \"en\"\n    // Set the current locale to `en`.\n    , locale: \"en\"\n    // Set the translation key separator.\n    , defaultSeparator: \".\"\n    // Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`.\n    , placeholder: /(?:\\{\\{|%\\{)(.*?)(?:\\}\\}?)/gm\n    // Set if engine should fallback to the default locale when a translation\n    // is missing.\n    , fallbacks: false\n    // Set the default translation object.\n    , translations: {}\n    // Set missing translation behavior. 'message' will display a message\n    // that the translation is missing, 'guess' will try to guess the string\n    , missingBehaviour: 'message'\n    // if you use missingBehaviour with 'message', but want to know that the\n    // string is actually missing for testing purposes, you can prefix the\n    // guessed string by setting the value here. By default, no prefix!\n    , missingTranslationPrefix: ''\n  };\n\n  // Set default locale. This locale will be used when fallback is enabled and\n  // the translation doesn't exist in a particular locale.\n  I18n.reset = function() {\n    var key;\n    for (key in DEFAULT_OPTIONS) {\n      this[key] = DEFAULT_OPTIONS[key];\n    }\n  };\n\n  // Much like `reset`, but only assign options if not already assigned\n  I18n.initializeOptions = function() {\n    var key;\n    for (key in DEFAULT_OPTIONS) if (!isSet(this[key])) {\n      this[key] = DEFAULT_OPTIONS[key];\n    }\n  };\n  I18n.initializeOptions();\n\n  // Return a list of all locales that must be tried before returning the\n  // missing translation message. By default, this will consider the inline option,\n  // current locale and fallback locale.\n  //\n  //     I18n.locales.get(\"de-DE\");\n  //     // [\"de-DE\", \"de\", \"en\"]\n  //\n  // You can define custom rules for any locale. Just make sure you return a array\n  // containing all locales.\n  //\n  //     // Default the Wookie locale to English.\n  //     I18n.locales[\"wk\"] = function(locale) {\n  //       return [\"en\"];\n  //     };\n  //\n  I18n.locales = {};\n\n  // Retrieve locales based on inline locale, current locale or default to\n  // I18n's detection.\n  I18n.locales.get = function(locale) {\n    var result = this[locale] || this[I18n.locale] || this[\"default\"];\n\n    if (isFunction(result)) {\n      result = result(locale);\n    }\n\n    if (isArray(result) === false) {\n      result = [result];\n    }\n\n    return result;\n  };\n\n  // The default locale list.\n  I18n.locales[\"default\"] = function(locale) {\n    var locales = []\n      , list = []\n    ;\n\n    // Handle the inline locale option that can be provided to\n    // the `I18n.t` options.\n    if (locale) {\n      locales.push(locale);\n    }\n\n    // Add the current locale to the list.\n    if (!locale && I18n.locale) {\n      locales.push(I18n.locale);\n    }\n\n    // Add the default locale if fallback strategy is enabled.\n    if (I18n.fallbacks && I18n.defaultLocale) {\n      locales.push(I18n.defaultLocale);\n    }\n\n    // Locale code format 1:\n    // According to RFC4646 (http://www.ietf.org/rfc/rfc4646.txt)\n    // language codes for Traditional Chinese should be `zh-Hant`\n    //\n    // But due to backward compatibility\n    // We use older version of IETF language tag\n    // @see http://www.w3.org/TR/html401/struct/dirlang.html\n    // @see http://en.wikipedia.org/wiki/IETF_language_tag\n    //\n    // Format: `language-code = primary-code ( \"-\" subcode )*`\n    //\n    // primary-code uses ISO639-1\n    // @see http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n    // @see http://www.iso.org/iso/home/standards/language_codes.htm\n    //\n    // subcode uses ISO 3166-1 alpha-2\n    // @see http://en.wikipedia.org/wiki/ISO_3166\n    // @see http://www.iso.org/iso/country_codes.htm\n    //\n    // @note\n    //   subcode can be in upper case or lower case\n    //   defining it in upper case is a convention only\n\n\n    // Locale code format 2:\n    // Format: `code = primary-code ( \"-\" region-code )*`\n    // primary-code uses ISO 639-1\n    // script-code uses ISO 15924\n    // region-code uses ISO 3166-1 alpha-2\n    // Example: zh-Hant-TW, en-HK, zh-Hant-CN\n    //\n    // It is similar to RFC4646 (or actually the same),\n    // but seems to be limited to language, script, region\n\n    // Compute each locale with its country code.\n    // So this will return an array containing\n    // `de-DE` and `de`\n    // or\n    // `zh-hans-tw`, `zh-hans`, `zh`\n    // locales.\n    locales.forEach(function(locale) {\n      var localeParts = locale.split(\"-\");\n      var firstFallback = null;\n      var secondFallback = null;\n      if (localeParts.length === 3) {\n        firstFallback = [\n          localeParts[0],\n          localeParts[1]\n        ].join(\"-\");\n        secondFallback = localeParts[0];\n      }\n      else if (localeParts.length === 2) {\n        firstFallback = localeParts[0];\n      }\n\n      if (list.indexOf(locale) === -1) {\n        list.push(locale);\n      }\n\n      if (! I18n.fallbacks) {\n        return;\n      }\n\n      [\n        firstFallback,\n        secondFallback\n      ].forEach(function(nullableFallbackLocale) {\n        // We don't want null values\n        if (typeof nullableFallbackLocale === \"undefined\") { return; }\n        if (nullableFallbackLocale === null) { return; }\n        // We don't want duplicate values\n        //\n        // Comparing with `locale` first is faster than\n        // checking whether value's presence in the list\n        if (nullableFallbackLocale === locale) { return; }\n        if (list.indexOf(nullableFallbackLocale) !== -1) { return; }\n\n        list.push(nullableFallbackLocale);\n      });\n    });\n\n    // No locales set? English it is.\n    if (!locales.length) {\n      locales.push(\"en\");\n    }\n\n    return list;\n  };\n\n  // Hold pluralization rules.\n  I18n.pluralization = {};\n\n  // Return the pluralizer for a specific locale.\n  // If no specify locale is found, then I18n's default will be used.\n  I18n.pluralization.get = function(locale) {\n    return this[locale] || this[I18n.locale] || this[\"default\"];\n  };\n\n  // The default pluralizer rule.\n  // It detects the `zero`, `one`, and `other` scopes.\n  I18n.pluralization[\"default\"] = function(count) {\n    switch (count) {\n      case 0: return [\"zero\", \"other\"];\n      case 1: return [\"one\"];\n      default: return [\"other\"];\n    }\n  };\n\n  // Return current locale. If no locale has been set, then\n  // the current locale will be the default locale.\n  I18n.currentLocale = function() {\n    return this.locale || this.defaultLocale;\n  };\n\n  // Check if value is different than undefined and null;\n  I18n.isSet = isSet;\n\n  // Find and process the translation using the provided scope and options.\n  // This is used internally by some functions and should not be used as an\n  // public API.\n  I18n.lookup = function(scope, options) {\n    options = options || {};\n\n    var locales = this.locales.get(options.locale).slice()\n      , locale\n      , scopes\n      , fullScope\n      , translations\n    ;\n\n    fullScope = this.getFullScope(scope, options);\n\n    while (locales.length) {\n      locale = locales.shift();\n      scopes = fullScope.split(options.separator || this.defaultSeparator);\n      translations = this.translations[locale];\n\n      if (!translations) {\n        continue;\n      }\n      while (scopes.length) {\n        translations = translations[scopes.shift()];\n\n        if (translations === undefined || translations === null) {\n          break;\n        }\n      }\n\n      if (translations !== undefined && translations !== null) {\n        return translations;\n      }\n    }\n\n    if (isSet(options.defaultValue)) {\n      return lazyEvaluate(options.defaultValue, scope);\n    }\n  };\n\n  // lookup pluralization rule key into translations\n  I18n.pluralizationLookupWithoutFallback = function(count, locale, translations) {\n    var pluralizer = this.pluralization.get(locale)\n      , pluralizerKeys = pluralizer(count)\n      , pluralizerKey\n      , message;\n\n    if (isObject(translations)) {\n      while (pluralizerKeys.length) {\n        pluralizerKey = pluralizerKeys.shift();\n        if (isSet(translations[pluralizerKey])) {\n          message = translations[pluralizerKey];\n          break;\n        }\n      }\n    }\n\n    return message;\n  };\n\n  // Lookup dedicated to pluralization\n  I18n.pluralizationLookup = function(count, scope, options) {\n    options = options || {};\n    var locales = this.locales.get(options.locale).slice()\n      , locale\n      , scopes\n      , translations\n      , message\n    ;\n    scope = this.getFullScope(scope, options);\n\n    while (locales.length) {\n      locale = locales.shift();\n      scopes = scope.split(options.separator || this.defaultSeparator);\n      translations = this.translations[locale];\n\n      if (!translations) {\n        continue;\n      }\n\n      while (scopes.length) {\n        translations = translations[scopes.shift()];\n        if (!isObject(translations)) {\n          break;\n        }\n        if (scopes.length === 0) {\n          message = this.pluralizationLookupWithoutFallback(count, locale, translations);\n        }\n      }\n      if (typeof message !== \"undefined\" && message !== null) {\n        break;\n      }\n    }\n\n    if (typeof message === \"undefined\" || message === null) {\n      if (isSet(options.defaultValue)) {\n        if (isObject(options.defaultValue)) {\n          message = this.pluralizationLookupWithoutFallback(count, options.locale, options.defaultValue);\n        } else {\n          message = options.defaultValue;\n        }\n        translations = options.defaultValue;\n      }\n    }\n\n    return { message: message, translations: translations };\n  };\n\n  // Rails changed the way the meridian is stored.\n  // It started with `date.meridian` returning an array,\n  // then it switched to `time.am` and `time.pm`.\n  // This function abstracts this difference and returns\n  // the correct meridian or the default value when none is provided.\n  I18n.meridian = function() {\n    var time = this.lookup(\"time\");\n    var date = this.lookup(\"date\");\n\n    if (time && time.am && time.pm) {\n      return [time.am, time.pm];\n    } else if (date && date.meridian) {\n      return date.meridian;\n    } else {\n      return DATE.meridian;\n    }\n  };\n\n  // Merge serveral hash options, checking if value is set before\n  // overwriting any value. The precedence is from left to right.\n  //\n  //     I18n.prepareOptions({name: \"John Doe\"}, {name: \"Mary Doe\", role: \"user\"});\n  //     #=> {name: \"John Doe\", role: \"user\"}\n  //\n  I18n.prepareOptions = function() {\n    var args = slice.call(arguments)\n      , options = {}\n      , subject\n    ;\n\n    while (args.length) {\n      subject = args.shift();\n\n      if (typeof(subject) != \"object\") {\n        continue;\n      }\n\n      for (var attr in subject) {\n        if (!subject.hasOwnProperty(attr)) {\n          continue;\n        }\n\n        if (isSet(options[attr])) {\n          continue;\n        }\n\n        options[attr] = subject[attr];\n      }\n    }\n\n    return options;\n  };\n\n  // Generate a list of translation options for default fallbacks.\n  // `defaultValue` is also deleted from options as it is returned as part of\n  // the translationOptions array.\n  I18n.createTranslationOptions = function(scope, options) {\n    var translationOptions = [{scope: scope}];\n\n    // Defaults should be an array of hashes containing either\n    // fallback scopes or messages\n    if (isSet(options.defaults)) {\n      translationOptions = translationOptions.concat(options.defaults);\n    }\n\n    // Maintain support for defaultValue. Since it is always a message\n    // insert it in to the translation options as such.\n    if (isSet(options.defaultValue)) {\n      translationOptions.push({ message: options.defaultValue });\n    }\n\n    return translationOptions;\n  };\n\n  // Translate the given scope with the provided options.\n  I18n.translate = function(scope, options) {\n    options = options || {};\n\n    var translationOptions = this.createTranslationOptions(scope, options);\n\n    var translation;\n    var usedScope = scope;\n\n    var optionsWithoutDefault = this.prepareOptions(options)\n    delete optionsWithoutDefault.defaultValue\n\n    // Iterate through the translation options until a translation\n    // or message is found.\n    var translationFound =\n      translationOptions.some(function(translationOption) {\n        if (isSet(translationOption.scope)) {\n          usedScope = translationOption.scope;\n          translation = this.lookup(usedScope, optionsWithoutDefault);\n        } else if (isSet(translationOption.message)) {\n          translation = lazyEvaluate(translationOption.message, scope);\n        }\n\n        if (translation !== undefined && translation !== null) {\n          return true;\n        }\n      }, this);\n\n    if (!translationFound) {\n      return this.missingTranslation(scope, options);\n    }\n\n    if (typeof(translation) === \"string\") {\n      translation = this.interpolate(translation, options);\n    } else if (isArray(translation)) {\n      translation = translation.map(function(t) {\n        return (typeof(t) === \"string\" ? this.interpolate(t, options) : t);\n      }, this);\n    } else if (isObject(translation) && isSet(options.count)) {\n      translation = this.pluralize(options.count, usedScope, options);\n    }\n\n    return translation;\n  };\n\n  // This function interpolates the all variables in the given message.\n  I18n.interpolate = function(message, options) {\n    if (message == null) {\n      return message;\n    }\n\n    options = options || {};\n    var matches = message.match(this.placeholder)\n      , placeholder\n      , value\n      , name\n      , regex\n    ;\n\n    if (!matches) {\n      return message;\n    }\n\n    while (matches.length) {\n      placeholder = matches.shift();\n      name = placeholder.replace(this.placeholder, \"$1\");\n\n      if (isSet(options[name])) {\n        value = options[name].toString().replace(/\\$/gm, \"_#$#_\");\n      } else if (name in options) {\n        value = this.nullPlaceholder(placeholder, message, options);\n      } else {\n        value = this.missingPlaceholder(placeholder, message, options);\n      }\n\n      regex = new RegExp(placeholder.replace(/{/gm, \"\\\\{\").replace(/}/gm, \"\\\\}\"));\n      message = message.replace(regex, value);\n    }\n\n    return message.replace(/_#\\$#_/g, \"$\");\n  };\n\n  // Pluralize the given scope using the `count` value.\n  // The pluralized translation may have other placeholders,\n  // which will be retrieved from `options`.\n  I18n.pluralize = function(count, scope, options) {\n    options = this.prepareOptions({count: String(count)}, options)\n    var pluralizer, result;\n\n    result = this.pluralizationLookup(count, scope, options);\n    if (typeof result.translations === \"undefined\" || result.translations == null) {\n      return this.missingTranslation(scope, options);\n    }\n\n    if (typeof result.message !== \"undefined\" && result.message != null) {\n      return this.interpolate(result.message, options);\n    }\n    else {\n      pluralizer = this.pluralization.get(options.locale);\n      return this.missingTranslation(scope + '.' + pluralizer(count)[0], options);\n    }\n  };\n\n  // Return a missing translation message for the given parameters.\n  I18n.missingTranslation = function(scope, options) {\n    //guess intended string\n    if(this.missingBehaviour === 'guess'){\n      //get only the last portion of the scope\n      var s = scope.split('.').slice(-1)[0];\n      //replace underscore with space && camelcase with space and lowercase letter\n      return (this.missingTranslationPrefix.length > 0 ? this.missingTranslationPrefix : '') +\n          s.replace(/_/g,' ').replace(/([a-z])([A-Z])/g,\n          function(match, p1, p2) {return p1 + ' ' + p2.toLowerCase()} );\n    }\n\n    var localeForTranslation = (options != null && options.locale != null) ? options.locale : this.currentLocale();\n    var fullScope           = this.getFullScope(scope, options);\n    var fullScopeWithLocale = [localeForTranslation, fullScope].join(options.separator || this.defaultSeparator);\n\n    return '[missing \"' + fullScopeWithLocale + '\" translation]';\n  };\n\n  // Return a missing placeholder message for given parameters\n  I18n.missingPlaceholder = function(placeholder, message, options) {\n    return \"[missing \" + placeholder + \" value]\";\n  };\n\n  I18n.nullPlaceholder = function() {\n    return I18n.missingPlaceholder.apply(I18n, arguments);\n  };\n\n  // Format number using localization rules.\n  // The options will be retrieved from the `number.format` scope.\n  // If this isn't present, then the following options will be used:\n  //\n  // - `precision`: `3`\n  // - `separator`: `\".\"`\n  // - `delimiter`: `\",\"`\n  // - `strip_insignificant_zeros`: `false`\n  //\n  // You can also override these options by providing the `options` argument.\n  //\n  I18n.toNumber = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.format\")\n      , NUMBER_FORMAT\n    );\n\n    var negative = number < 0\n      , string = toFixed(Math.abs(number), options.precision).toString()\n      , parts = string.split(\".\")\n      , precision\n      , buffer = []\n      , formattedNumber\n      , format = options.format || \"%n\"\n      , sign = negative ? \"-\" : \"\"\n    ;\n\n    number = parts[0];\n    precision = parts[1];\n\n    while (number.length > 0) {\n      buffer.unshift(number.substr(Math.max(0, number.length - 3), 3));\n      number = number.substr(0, number.length -3);\n    }\n\n    formattedNumber = buffer.join(options.delimiter);\n\n    if (options.strip_insignificant_zeros && precision) {\n      precision = precision.replace(/0+$/, \"\");\n    }\n\n    if (options.precision > 0 && precision) {\n      formattedNumber += options.separator + precision;\n    }\n\n    if (options.sign_first) {\n      format = \"%s\" + format;\n    }\n    else {\n      format = format.replace(\"%n\", \"%s%n\");\n    }\n\n    formattedNumber = format\n      .replace(\"%u\", options.unit)\n      .replace(\"%n\", formattedNumber)\n      .replace(\"%s\", sign)\n    ;\n\n    return formattedNumber;\n  };\n\n  // Format currency with localization rules.\n  // The options will be retrieved from the `number.currency.format` and\n  // `number.format` scopes, in that order.\n  //\n  // Any missing option will be retrieved from the `I18n.toNumber` defaults and\n  // the following options:\n  //\n  // - `unit`: `\"$\"`\n  // - `precision`: `2`\n  // - `format`: `\"%u%n\"`\n  // - `delimiter`: `\",\"`\n  // - `separator`: `\".\"`\n  //\n  // You can also override these options by providing the `options` argument.\n  //\n  I18n.toCurrency = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.currency.format\", options)\n      , this.lookup(\"number.format\", options)\n      , CURRENCY_FORMAT\n    );\n\n    return this.toNumber(number, options);\n  };\n\n  // Localize several values.\n  // You can provide the following scopes: `currency`, `number`, or `percentage`.\n  // If you provide a scope that matches the `/^(date|time)/` regular expression\n  // then the `value` will be converted by using the `I18n.toTime` function.\n  //\n  // It will default to the value's `toString` function.\n  //\n  I18n.localize = function(scope, value, options) {\n    options || (options = {});\n\n    switch (scope) {\n      case \"currency\":\n        return this.toCurrency(value, options);\n      case \"number\":\n        scope = this.lookup(\"number.format\", options);\n        return this.toNumber(value, scope);\n      case \"percentage\":\n        return this.toPercentage(value, options);\n      default:\n        var localizedValue;\n\n        if (scope.match(/^(date|time)/)) {\n          localizedValue = this.toTime(scope, value, options);\n        } else {\n          localizedValue = value.toString();\n        }\n\n        return this.interpolate(localizedValue, options);\n    }\n  };\n\n  // Parse a given `date` string into a JavaScript Date object.\n  // This function is time zone aware.\n  //\n  // The following string formats are recognized:\n  //\n  //    yyyy-mm-dd\n  //    yyyy-mm-dd[ T]hh:mm::ss\n  //    yyyy-mm-dd[ T]hh:mm::ss\n  //    yyyy-mm-dd[ T]hh:mm::ssZ\n  //    yyyy-mm-dd[ T]hh:mm::ss+0000\n  //    yyyy-mm-dd[ T]hh:mm::ss+00:00\n  //    yyyy-mm-dd[ T]hh:mm::ss.123Z\n  //\n  I18n.parseDate = function(date) {\n    var matches, convertedDate, fraction;\n    // A date input of `null` or `undefined` will be returned as-is\n    if (date == null) {\n      return date;\n    }\n    // we have a date, so just return it.\n    if (typeof(date) === \"object\") {\n      return date;\n    }\n\n    matches = date.toString().match(/(\\d{4})-(\\d{2})-(\\d{2})(?:[ T](\\d{2}):(\\d{2}):(\\d{2})([\\.,]\\d{1,3})?)?(Z|\\+00:?00)?/);\n\n    if (matches) {\n      for (var i = 1; i <= 6; i++) {\n        matches[i] = parseInt(matches[i], 10) || 0;\n      }\n\n      // month starts on 0\n      matches[2] -= 1;\n\n      fraction = matches[7] ? 1000 * (\"0\" + matches[7]) : null;\n\n      if (matches[8]) {\n        convertedDate = new Date(Date.UTC(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction));\n      } else {\n        convertedDate = new Date(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6], fraction);\n      }\n    } else if (typeof(date) == \"number\") {\n      // UNIX timestamp\n      convertedDate = new Date();\n      convertedDate.setTime(date);\n    } else if (date.match(/([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\\d+) (\\d+:\\d+:\\d+) ([+-]\\d+) (\\d+)/)) {\n      // This format `Wed Jul 20 13:03:39 +0000 2011` is parsed by\n      // webkit/firefox, but not by IE, so we must parse it manually.\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse([\n        RegExp.$1, RegExp.$2, RegExp.$3, RegExp.$6, RegExp.$4, RegExp.$5\n      ].join(\" \")));\n    } else if (date.match(/\\d+ \\d+:\\d+:\\d+ [+-]\\d+ \\d+/)) {\n      // a valid javascript format with timezone info\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse(date));\n    } else {\n      // an arbitrary javascript string\n      convertedDate = new Date();\n      convertedDate.setTime(Date.parse(date));\n    }\n\n    return convertedDate;\n  };\n\n  // Formats time according to the directives in the given format string.\n  // The directives begins with a percent (%) character. Any text not listed as a\n  // directive will be passed through to the output string.\n  //\n  // The accepted formats are:\n  //\n  //     %a     - The abbreviated weekday name (Sun)\n  //     %A     - The full weekday name (Sunday)\n  //     %b     - The abbreviated month name (Jan)\n  //     %B     - The full month name (January)\n  //     %c     - The preferred local date and time representation\n  //     %d     - Day of the month (01..31)\n  //     %-d    - Day of the month (1..31)\n  //     %H     - Hour of the day, 24-hour clock (00..23)\n  //     %-H/%k - Hour of the day, 24-hour clock (0..23)\n  //     %I     - Hour of the day, 12-hour clock (01..12)\n  //     %-I/%l - Hour of the day, 12-hour clock (1..12)\n  //     %m     - Month of the year (01..12)\n  //     %-m    - Month of the year (1..12)\n  //     %M     - Minute of the hour (00..59)\n  //     %-M    - Minute of the hour (0..59)\n  //     %p     - Meridian indicator (AM  or  PM)\n  //     %P     - Meridian indicator (am  or  pm)\n  //     %S     - Second of the minute (00..60)\n  //     %-S    - Second of the minute (0..60)\n  //     %w     - Day of the week (Sunday is 0, 0..6)\n  //     %y     - Year without a century (00..99)\n  //     %-y    - Year without a century (0..99)\n  //     %Y     - Year with century\n  //     %z/%Z  - Timezone offset (+0545)\n  //\n  I18n.strftime = function(date, format, options) {\n    var options = this.lookup(\"date\", options)\n      , meridianOptions = I18n.meridian()\n    ;\n\n    if (!options) {\n      options = {};\n    }\n\n    options = this.prepareOptions(options, DATE);\n\n    if (isNaN(date.getTime())) {\n      throw new Error('I18n.strftime() requires a valid date object, but received an invalid date.');\n    }\n\n    var weekDay = date.getDay()\n      , day = date.getDate()\n      , year = date.getFullYear()\n      , month = date.getMonth() + 1\n      , hour = date.getHours()\n      , hour12 = hour\n      , meridian = hour > 11 ? 1 : 0\n      , secs = date.getSeconds()\n      , mins = date.getMinutes()\n      , offset = date.getTimezoneOffset()\n      , absOffsetHours = Math.floor(Math.abs(offset / 60))\n      , absOffsetMinutes = Math.abs(offset) - (absOffsetHours * 60)\n      , timezoneoffset = (offset > 0 ? \"-\" : \"+\") +\n          (absOffsetHours.toString().length < 2 ? \"0\" + absOffsetHours : absOffsetHours) +\n          (absOffsetMinutes.toString().length < 2 ? \"0\" + absOffsetMinutes : absOffsetMinutes)\n    ;\n\n    if (hour12 > 12) {\n      hour12 = hour12 - 12;\n    } else if (hour12 === 0) {\n      hour12 = 12;\n    }\n\n    format = format.replace(\"%a\", options.abbr_day_names[weekDay]);\n    format = format.replace(\"%A\", options.day_names[weekDay]);\n    format = format.replace(\"%b\", options.abbr_month_names[month]);\n    format = format.replace(\"%B\", options.month_names[month]);\n    format = format.replace(\"%d\", padding(day));\n    format = format.replace(\"%e\", day);\n    format = format.replace(\"%-d\", day);\n    format = format.replace(\"%H\", padding(hour));\n    format = format.replace(\"%-H\", hour);\n    format = format.replace(\"%k\", hour);\n    format = format.replace(\"%I\", padding(hour12));\n    format = format.replace(\"%-I\", hour12);\n    format = format.replace(\"%l\", hour12);\n    format = format.replace(\"%m\", padding(month));\n    format = format.replace(\"%-m\", month);\n    format = format.replace(\"%M\", padding(mins));\n    format = format.replace(\"%-M\", mins);\n    format = format.replace(\"%p\", meridianOptions[meridian]);\n    format = format.replace(\"%P\", meridianOptions[meridian].toLowerCase());\n    format = format.replace(\"%S\", padding(secs));\n    format = format.replace(\"%-S\", secs);\n    format = format.replace(\"%w\", weekDay);\n    format = format.replace(\"%y\", padding(year));\n    format = format.replace(\"%-y\", padding(year).replace(/^0+/, \"\"));\n    format = format.replace(\"%Y\", year);\n    format = format.replace(\"%z\", timezoneoffset);\n    format = format.replace(\"%Z\", timezoneoffset);\n\n    return format;\n  };\n\n  // Convert the given dateString into a formatted date.\n  I18n.toTime = function(scope, dateString, options) {\n    var date = this.parseDate(dateString)\n      , format = this.lookup(scope, options)\n    ;\n\n    // A date input of `null` or `undefined` will be returned as-is\n    if (date == null) {\n      return date;\n    }\n\n    var date_string = date.toString()\n    if (date_string.match(/invalid/i)) {\n      return date_string;\n    }\n\n    if (!format) {\n      return date_string;\n    }\n\n    return this.strftime(date, format, options);\n  };\n\n  // Convert a number into a formatted percentage value.\n  I18n.toPercentage = function(number, options) {\n    options = this.prepareOptions(\n        options\n      , this.lookup(\"number.percentage.format\", options)\n      , this.lookup(\"number.format\", options)\n      , PERCENTAGE_FORMAT\n    );\n\n    return this.toNumber(number, options);\n  };\n\n  // Convert a number into a readable size representation.\n  I18n.toHumanSize = function(number, options) {\n    var kb = 1024\n      , size = number\n      , iterations = 0\n      , unit\n      , precision\n      , fullScope\n    ;\n\n    while (size >= kb && iterations < 4) {\n      size = size / kb;\n      iterations += 1;\n    }\n\n    if (iterations === 0) {\n      fullScope = this.getFullScope(\"number.human.storage_units.units.byte\", options);\n      unit = this.t(fullScope, {count: size});\n      precision = 0;\n    } else {\n      fullScope = this.getFullScope(\"number.human.storage_units.units.\" + SIZE_UNITS[iterations], options);\n      unit = this.t(fullScope);\n      precision = (size - Math.floor(size) === 0) ? 0 : 1;\n    }\n\n    options = this.prepareOptions(\n        options\n      , {unit: unit, precision: precision, format: \"%n%u\", delimiter: \"\"}\n    );\n\n    return this.toNumber(size, options);\n  };\n\n  I18n.getFullScope = function(scope, options) {\n    options = options || {};\n\n    // Deal with the scope as an array.\n    if (isArray(scope)) {\n      scope = scope.join(options.separator || this.defaultSeparator);\n    }\n\n    // Deal with the scope option provided through the second argument.\n    //\n    //    I18n.t('hello', {scope: 'greetings'});\n    //\n    if (options.scope) {\n      scope = [options.scope, scope].join(options.separator || this.defaultSeparator);\n    }\n\n    return scope;\n  };\n  /**\n   * Merge obj1 with obj2 (shallow merge), without modifying inputs\n   * @param {Object} obj1\n   * @param {Object} obj2\n   * @returns {Object} Merged values of obj1 and obj2\n   *\n   * In order to support ES3, `Object.prototype.hasOwnProperty.call` is used\n   * Idea is from:\n   * https://stackoverflow.com/questions/8157700/object-has-no-hasownproperty-method-i-e-its-undefined-ie8\n   */\n  I18n.extend = function ( obj1, obj2 ) {\n    if (typeof(obj1) === \"undefined\" && typeof(obj2) === \"undefined\") {\n      return {};\n    }\n    return merge(obj1, obj2);\n  };\n\n  // Set aliases, so we can save some typing.\n  I18n.t = I18n.translate.bind(I18n);\n  I18n.l = I18n.localize.bind(I18n);\n  I18n.p = I18n.pluralize.bind(I18n);\n\n  return I18n;\n}));\n", "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n\n(function() {\n  var context = this;\n\n  (function() {\n    (function() {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form:not([data-turbo=true])',\n        formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n\n    }).call(this);\n  }).call(context);\n\n  var Rails = context.Rails;\n\n  (function() {\n    (function() {\n      var nonce;\n\n      nonce = null;\n\n      Rails.loadCSPNonce = function() {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n\n      Rails.cspNonce = function() {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n\n    }).call(this);\n    (function() {\n      var expando, m;\n\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n      Rails.matches = function(element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n\n      expando = '_ujsData';\n\n      Rails.getData = function(element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n\n      Rails.setData = function(element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n        return element[expando][key] = value;\n      };\n\n      Rails.isContentEditable = function(element) {\n        var isEditable;\n        isEditable = false;\n        while (true) {\n          if (element.isContentEditable) {\n            isEditable = true;\n            break;\n          }\n          element = element.parentElement;\n          if (!element) {\n            break;\n          }\n        }\n        return isEditable;\n      };\n\n      Rails.$ = function(selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n\n    }).call(this);\n    (function() {\n      var $, csrfParam, csrfToken;\n\n      $ = Rails.$;\n\n      csrfToken = Rails.csrfToken = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n\n      csrfParam = Rails.csrfParam = function() {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n\n      Rails.CSRFProtection = function(xhr) {\n        var token;\n        token = csrfToken();\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n\n      Rails.refreshCSRFTokens = function() {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n        if ((token != null) && (param != null)) {\n          return $('form input[name=\"' + param + '\"]').forEach(function(input) {\n            return input.value = token;\n          });\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var CustomEvent, fire, matches, preventDefault;\n\n      matches = Rails.matches;\n\n      CustomEvent = window.CustomEvent;\n\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function(event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n        CustomEvent.prototype.preventDefault = function() {\n          var result;\n          result = preventDefault.call(this);\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function() {\n                return true;\n              }\n            });\n          }\n          return result;\n        };\n      }\n\n      fire = Rails.fire = function(obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n\n      Rails.stopEverything = function(e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n\n      Rails.delegate = function(element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function(e) {\n          var target;\n          target = e.target;\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n\n    }).call(this);\n    (function() {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n\n      Rails.ajax = function(options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function() {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n        if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n\n      prepareOptions = function(options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n        options.accept = AcceptHeaders[options.dataType];\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n        return options;\n      };\n\n      createXHR = function(options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n          CSRFProtection(xhr);\n        }\n        xhr.withCredentials = !!options.withCredentials;\n        xhr.onreadystatechange = function() {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n        return xhr;\n      };\n\n      processResponse = function(response, type) {\n        var parser, script;\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n        return response;\n      };\n\n      Rails.href = function(element) {\n        return element.href;\n      };\n\n      Rails.isCrossDomain = function(url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n        try {\n          urlAnchor.href = url;\n          return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var matches, toArray;\n\n      matches = Rails.matches;\n\n      toArray = function(e) {\n        return Array.prototype.slice.call(e);\n      };\n\n      Rails.serializeElement = function(element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n        params = [];\n        inputs.forEach(function(input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n          if (matches(input, 'fieldset[disabled] *')) {\n            return;\n          }\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function(option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n        return params.map(function(param) {\n          if (param.name != null) {\n            return (encodeURIComponent(param.name)) + \"=\" + (encodeURIComponent(param.value));\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n\n      Rails.formElements = function(form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function(el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var allowAction, fire, stopEverything;\n\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n      Rails.handleConfirm = function(e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.confirm = function(message, element) {\n        return confirm(message);\n      };\n\n      allowAction = function(element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n        if (!message) {\n          return true;\n        }\n        answer = false;\n        if (fire(element, 'confirm')) {\n          try {\n            answer = Rails.confirm(message, element);\n          } catch (error) {}\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n        return answer && callback;\n      };\n\n    }).call(this);\n    (function() {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isContentEditable, isXhrRedirect, matches, setData, stopEverything;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements, isContentEditable = Rails.isContentEditable;\n\n      Rails.handleDisabledElement = function(e) {\n        var element;\n        element = this;\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.enableElement = function(e) {\n        var element;\n        if (e instanceof Event) {\n          if (isXhrRedirect(e)) {\n            return;\n          }\n          element = e.target;\n        } else {\n          element = e;\n        }\n        if (isContentEditable(element)) {\n          return;\n        }\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n\n      Rails.disableElement = function(e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n        if (isContentEditable(element)) {\n          return;\n        }\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n\n      disableLinkElement = function(element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableLinkElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      disableFormElements = function(form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n\n      disableFormElement = function(element) {\n        var replacement;\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n        replacement = element.getAttribute('data-disable-with');\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableFormElements = function(form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n\n      enableFormElement = function(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n          setData(element, 'ujs:enable-with', null);\n        }\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      isXhrRedirect = function(event) {\n        var ref, xhr;\n        xhr = (ref = event.detail) != null ? ref[0] : void 0;\n        return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n      };\n\n    }).call(this);\n    (function() {\n      var isContentEditable, stopEverything;\n\n      stopEverything = Rails.stopEverything;\n\n      isContentEditable = Rails.isContentEditable;\n\n      Rails.handleMethod = function(e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n        if (!method) {\n          return;\n        }\n        if (isContentEditable(this)) {\n          return;\n        }\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n        if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n\n    }).call(this);\n    (function() {\n      var ajax, fire, getData, isContentEditable, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,\n        slice = [].slice;\n\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement, isContentEditable = Rails.isContentEditable;\n\n      isRemote = function(element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return (value != null) && value !== 'false';\n      };\n\n      Rails.handleRemote = function(e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n        if (!isRemote(element)) {\n          return true;\n        }\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n        if (isContentEditable(element)) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function(xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: (withCredentials != null) && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n\n      Rails.formSubmitButtonClick = function(e) {\n        var button, form;\n        button = this;\n        form = button.form;\n        if (!form) {\n          return;\n        }\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n\n      Rails.preventInsignificantClick = function(e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = (e.button != null) && e.button !== 0;\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n\n    }).call(this);\n    (function() {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n      if ((typeof jQuery !== \"undefined\" && jQuery !== null) && (jQuery.ajax != null)) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n\n      Rails.start = function() {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n        window.addEventListener('pageshow', function() {\n          $(Rails.formEnableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function(el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function(e) {\n          return setTimeout((function() {\n            return disableElement(e);\n          }), 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n\n    }).call(this);\n  }).call(this);\n\n  if (typeof module === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);\n", "/**\n*  Ajax Autocomplete for jQuery, version 1.4.11\n*  (c) 2017 Tomas Kirda\n*\n*  Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.\n*  For details, see the web site: https://github.com/devbridge/jQuery-Autocomplete\n*/\n\n/*jslint  browser: true, white: true, single: true, this: true, multivar: true */\n/*global define, window, document, jQuery, exports, require */\n\n// Expose plugin as an AMD module if AMD loader is present:\n(function (factory) {\n    \"use strict\";\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object' && typeof require === 'function') {\n        // Browserify\n        factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n    'use strict';\n\n    var\n        utils = (function () {\n            return {\n                escapeRegExChars: function (value) {\n                    return value.replace(/[|\\\\{}()[\\]^$+*?.]/g, \"\\\\$&\");\n                },\n                createNode: function (containerClass) {\n                    var div = document.createElement('div');\n                    div.className = containerClass;\n                    div.style.position = 'absolute';\n                    div.style.display = 'none';\n                    return div;\n                }\n            };\n        }()),\n\n        keys = {\n            ESC: 27,\n            TAB: 9,\n            RETURN: 13,\n            LEFT: 37,\n            UP: 38,\n            RIGHT: 39,\n            DOWN: 40\n        },\n\n        noop = $.noop;\n\n    function Autocomplete(el, options) {\n        var that = this;\n\n        // Shared variables:\n        that.element = el;\n        that.el = $(el);\n        that.suggestions = [];\n        that.badQueries = [];\n        that.selectedIndex = -1;\n        that.currentValue = that.element.value;\n        that.timeoutId = null;\n        that.cachedResponse = {};\n        that.onChangeTimeout = null;\n        that.onChange = null;\n        that.isLocal = false;\n        that.suggestionsContainer = null;\n        that.noSuggestionsContainer = null;\n        that.options = $.extend(true, {}, Autocomplete.defaults, options);\n        that.classes = {\n            selected: 'autocomplete-selected',\n            suggestion: 'autocomplete-suggestion'\n        };\n        that.hint = null;\n        that.hintValue = '';\n        that.selection = null;\n\n        // Initialize and set options:\n        that.initialize();\n        that.setOptions(options);\n    }\n\n    Autocomplete.utils = utils;\n\n    $.Autocomplete = Autocomplete;\n\n    Autocomplete.defaults = {\n            ajaxSettings: {},\n            autoSelectFirst: false,\n            appendTo: 'body',\n            serviceUrl: null,\n            lookup: null,\n            onSelect: null,\n            width: 'auto',\n            minChars: 1,\n            maxHeight: 300,\n            deferRequestBy: 0,\n            params: {},\n            formatResult: _formatResult,\n            formatGroup: _formatGroup,\n            delimiter: null,\n            zIndex: 9999,\n            type: 'GET',\n            noCache: false,\n            onSearchStart: noop,\n            onSearchComplete: noop,\n            onSearchError: noop,\n            preserveInput: false,\n            containerClass: 'autocomplete-suggestions',\n            tabDisabled: false,\n            dataType: 'text',\n            currentRequest: null,\n            triggerSelectOnValidInput: true,\n            preventBadQueries: true,\n            lookupFilter: _lookupFilter,\n            paramName: 'query',\n            transformResult: _transformResult,\n            showNoSuggestionNotice: false,\n            noSuggestionNotice: 'No results',\n            orientation: 'bottom',\n            forceFixPosition: false\n    };\n\n    function _lookupFilter(suggestion, originalQuery, queryLowerCase) {\n        return suggestion.value.toLowerCase().indexOf(queryLowerCase) !== -1;\n    };\n\n    function _transformResult(response) {\n        return typeof response === 'string' ? $.parseJSON(response) : response;\n    };\n\n    function _formatResult(suggestion, currentValue) {\n        // Do not replace anything if the current value is empty\n        if (!currentValue) {\n            return suggestion.value;\n        }\n\n        var pattern = '(' + utils.escapeRegExChars(currentValue) + ')';\n\n        return suggestion.value\n            .replace(new RegExp(pattern, 'gi'), '<strong>$1<\\/strong>')\n            .replace(/&/g, '&amp;')\n            .replace(/</g, '&lt;')\n            .replace(/>/g, '&gt;')\n            .replace(/\"/g, '&quot;')\n            .replace(/&lt;(\\/?strong)&gt;/g, '<$1>');\n    };\n\n    function _formatGroup(suggestion, category) {\n        return '<div class=\"autocomplete-group\">' + category + '</div>';\n    };\n\n    Autocomplete.prototype = {\n\n        initialize: function () {\n            var that = this,\n                suggestionSelector = '.' + that.classes.suggestion,\n                selected = that.classes.selected,\n                options = that.options,\n                container;\n\n            that.element.setAttribute('autocomplete', 'off');\n\n            // html() deals with many types: htmlString or Element or Array or jQuery\n            that.noSuggestionsContainer = $('<div class=\"autocomplete-no-suggestion\"></div>')\n                                          .html(this.options.noSuggestionNotice).get(0);\n\n            that.suggestionsContainer = Autocomplete.utils.createNode(options.containerClass);\n\n            container = $(that.suggestionsContainer);\n\n            container.appendTo(options.appendTo || 'body');\n\n            // Only set width if it was provided:\n            if (options.width !== 'auto') {\n                container.css('width', options.width);\n            }\n\n            // Listen for mouse over event on suggestions list:\n            container.on('mouseover.autocomplete', suggestionSelector, function () {\n                that.activate($(this).data('index'));\n            });\n\n            // Deselect active element when mouse leaves suggestions container:\n            container.on('mouseout.autocomplete', function () {\n                that.selectedIndex = -1;\n                container.children('.' + selected).removeClass(selected);\n            });\n\n            // Listen for click event on suggestions list:\n            container.on('click.autocomplete', suggestionSelector, function () {\n                that.select($(this).data('index'));\n            });\n\n            container.on('click.autocomplete', function () {\n                clearTimeout(that.blurTimeoutId);\n            })\n\n            that.fixPositionCapture = function () {\n                if (that.visible) {\n                    that.fixPosition();\n                }\n            };\n\n            $(window).on('resize.autocomplete', that.fixPositionCapture);\n\n            that.el.on('keydown.autocomplete', function (e) { that.onKeyPress(e); });\n            that.el.on('keyup.autocomplete', function (e) { that.onKeyUp(e); });\n            that.el.on('blur.autocomplete', function () { that.onBlur(); });\n            that.el.on('focus.autocomplete', function () { that.onFocus(); });\n            that.el.on('change.autocomplete', function (e) { that.onKeyUp(e); });\n            that.el.on('input.autocomplete', function (e) { that.onKeyUp(e); });\n        },\n\n        onFocus: function () {\n            var that = this;\n\n            if (that.disabled) {\n                return;\n            }\n\n            that.fixPosition();\n\n            if (that.el.val().length >= that.options.minChars) {\n                that.onValueChange();\n            }\n        },\n\n        onBlur: function () {\n            var that = this,\n                options = that.options,\n                value = that.el.val(),\n                query = that.getQuery(value);\n\n            // If user clicked on a suggestion, hide() will\n            // be canceled, otherwise close suggestions\n            that.blurTimeoutId = setTimeout(function () {\n                that.hide();\n\n                if (that.selection && that.currentValue !== query) {\n                    (options.onInvalidateSelection || $.noop).call(that.element);\n                }\n            }, 200);\n        },\n\n        abortAjax: function () {\n            var that = this;\n            if (that.currentRequest) {\n                that.currentRequest.abort();\n                that.currentRequest = null;\n            }\n        },\n\n        setOptions: function (suppliedOptions) {\n            var that = this,\n                options = $.extend({}, that.options, suppliedOptions);\n\n            that.isLocal = Array.isArray(options.lookup);\n\n            if (that.isLocal) {\n                options.lookup = that.verifySuggestionsFormat(options.lookup);\n            }\n\n            options.orientation = that.validateOrientation(options.orientation, 'bottom');\n\n            // Adjust height, width and z-index:\n            $(that.suggestionsContainer).css({\n                'max-height': options.maxHeight + 'px',\n                'width': options.width + 'px',\n                'z-index': options.zIndex\n            });\n\n            this.options = options;\n        },\n\n\n        clearCache: function () {\n            this.cachedResponse = {};\n            this.badQueries = [];\n        },\n\n        clear: function () {\n            this.clearCache();\n            this.currentValue = '';\n            this.suggestions = [];\n        },\n\n        disable: function () {\n            var that = this;\n            that.disabled = true;\n            clearTimeout(that.onChangeTimeout);\n            that.abortAjax();\n        },\n\n        enable: function () {\n            this.disabled = false;\n        },\n\n        fixPosition: function () {\n            // Use only when container has already its content\n\n            var that = this,\n                $container = $(that.suggestionsContainer),\n                containerParent = $container.parent().get(0);\n            // Fix position automatically when appended to body.\n            // In other cases force parameter must be given.\n            if (containerParent !== document.body && !that.options.forceFixPosition) {\n                return;\n            }\n\n            // Choose orientation\n            var orientation = that.options.orientation,\n                containerHeight = $container.outerHeight(),\n                height = that.el.outerHeight(),\n                offset = that.el.offset(),\n                styles = { 'top': offset.top, 'left': offset.left };\n\n            if (orientation === 'auto') {\n                var viewPortHeight = $(window).height(),\n                    scrollTop = $(window).scrollTop(),\n                    topOverflow = -scrollTop + offset.top - containerHeight,\n                    bottomOverflow = scrollTop + viewPortHeight - (offset.top + height + containerHeight);\n\n                orientation = (Math.max(topOverflow, bottomOverflow) === topOverflow) ? 'top' : 'bottom';\n            }\n\n            if (orientation === 'top') {\n                styles.top += -containerHeight;\n            } else {\n                styles.top += height;\n            }\n\n            // If container is not positioned to body,\n            // correct its position using offset parent offset\n            if(containerParent !== document.body) {\n                var opacity = $container.css('opacity'),\n                    parentOffsetDiff;\n\n                    if (!that.visible){\n                        $container.css('opacity', 0).show();\n                    }\n\n                parentOffsetDiff = $container.offsetParent().offset();\n                styles.top -= parentOffsetDiff.top;\n                styles.top += containerParent.scrollTop;\n                styles.left -= parentOffsetDiff.left;\n\n                if (!that.visible){\n                    $container.css('opacity', opacity).hide();\n                }\n            }\n\n            if (that.options.width === 'auto') {\n                styles.width = that.el.outerWidth() + 'px';\n            }\n\n            $container.css(styles);\n        },\n\n        isCursorAtEnd: function () {\n            var that = this,\n                valLength = that.el.val().length,\n                selectionStart = that.element.selectionStart,\n                range;\n\n            if (typeof selectionStart === 'number') {\n                return selectionStart === valLength;\n            }\n            if (document.selection) {\n                range = document.selection.createRange();\n                range.moveStart('character', -valLength);\n                return valLength === range.text.length;\n            }\n            return true;\n        },\n\n        onKeyPress: function (e) {\n            var that = this;\n\n            // If suggestions are hidden and user presses arrow down, display suggestions:\n            if (!that.disabled && !that.visible && e.which === keys.DOWN && that.currentValue) {\n                that.suggest();\n                return;\n            }\n\n            if (that.disabled || !that.visible) {\n                return;\n            }\n\n            switch (e.which) {\n                case keys.ESC:\n                    that.el.val(that.currentValue);\n                    that.hide();\n                    break;\n                case keys.RIGHT:\n                    if (that.hint && that.options.onHint && that.isCursorAtEnd()) {\n                        that.selectHint();\n                        break;\n                    }\n                    return;\n                case keys.TAB:\n                    if (that.hint && that.options.onHint) {\n                        that.selectHint();\n                        return;\n                    }\n                    if (that.selectedIndex === -1) {\n                        that.hide();\n                        return;\n                    }\n                    that.select(that.selectedIndex);\n                    if (that.options.tabDisabled === false) {\n                        return;\n                    }\n                    break;\n                case keys.RETURN:\n                    if (that.selectedIndex === -1) {\n                        that.hide();\n                        return;\n                    }\n                    that.select(that.selectedIndex);\n                    break;\n                case keys.UP:\n                    that.moveUp();\n                    break;\n                case keys.DOWN:\n                    that.moveDown();\n                    break;\n                default:\n                    return;\n            }\n\n            // Cancel event if function did not return:\n            e.stopImmediatePropagation();\n            e.preventDefault();\n        },\n\n        onKeyUp: function (e) {\n            var that = this;\n\n            if (that.disabled) {\n                return;\n            }\n\n            switch (e.which) {\n                case keys.UP:\n                case keys.DOWN:\n                    return;\n            }\n\n            clearTimeout(that.onChangeTimeout);\n\n            if (that.currentValue !== that.el.val()) {\n                that.findBestHint();\n                if (that.options.deferRequestBy > 0) {\n                    // Defer lookup in case when value changes very quickly:\n                    that.onChangeTimeout = setTimeout(function () {\n                        that.onValueChange();\n                    }, that.options.deferRequestBy);\n                } else {\n                    that.onValueChange();\n                }\n            }\n        },\n\n        onValueChange: function () {\n            if (this.ignoreValueChange) {\n                this.ignoreValueChange = false;\n                return;\n            }\n\n            var that = this,\n                options = that.options,\n                value = that.el.val(),\n                query = that.getQuery(value);\n\n            if (that.selection && that.currentValue !== query) {\n                that.selection = null;\n                (options.onInvalidateSelection || $.noop).call(that.element);\n            }\n\n            clearTimeout(that.onChangeTimeout);\n            that.currentValue = value;\n            that.selectedIndex = -1;\n\n            // Check existing suggestion for the match before proceeding:\n            if (options.triggerSelectOnValidInput && that.isExactMatch(query)) {\n                that.select(0);\n                return;\n            }\n\n            if (query.length < options.minChars) {\n                that.hide();\n            } else {\n                that.getSuggestions(query);\n            }\n        },\n\n        isExactMatch: function (query) {\n            var suggestions = this.suggestions;\n\n            return (suggestions.length === 1 && suggestions[0].value.toLowerCase() === query.toLowerCase());\n        },\n\n        getQuery: function (value) {\n            var delimiter = this.options.delimiter,\n                parts;\n\n            if (!delimiter) {\n                return value;\n            }\n            parts = value.split(delimiter);\n            return $.trim(parts[parts.length - 1]);\n        },\n\n        getSuggestionsLocal: function (query) {\n            var that = this,\n                options = that.options,\n                queryLowerCase = query.toLowerCase(),\n                filter = options.lookupFilter,\n                limit = parseInt(options.lookupLimit, 10),\n                data;\n\n            data = {\n                suggestions: $.grep(options.lookup, function (suggestion) {\n                    return filter(suggestion, query, queryLowerCase);\n                })\n            };\n\n            if (limit && data.suggestions.length > limit) {\n                data.suggestions = data.suggestions.slice(0, limit);\n            }\n\n            return data;\n        },\n\n        getSuggestions: function (q) {\n            var response,\n                that = this,\n                options = that.options,\n                serviceUrl = options.serviceUrl,\n                params,\n                cacheKey,\n                ajaxSettings;\n\n            options.params[options.paramName] = q;\n\n            if (options.onSearchStart.call(that.element, options.params) === false) {\n                return;\n            }\n\n            params = options.ignoreParams ? null : options.params;\n\n            if ($.isFunction(options.lookup)){\n                options.lookup(q, function (data) {\n                    that.suggestions = data.suggestions;\n                    that.suggest();\n                    options.onSearchComplete.call(that.element, q, data.suggestions);\n                });\n                return;\n            }\n\n            if (that.isLocal) {\n                response = that.getSuggestionsLocal(q);\n            } else {\n                if ($.isFunction(serviceUrl)) {\n                    serviceUrl = serviceUrl.call(that.element, q);\n                }\n                cacheKey = serviceUrl + '?' + $.param(params || {});\n                response = that.cachedResponse[cacheKey];\n            }\n\n            if (response && Array.isArray(response.suggestions)) {\n                that.suggestions = response.suggestions;\n                that.suggest();\n                options.onSearchComplete.call(that.element, q, response.suggestions);\n            } else if (!that.isBadQuery(q)) {\n                that.abortAjax();\n\n                ajaxSettings = {\n                    url: serviceUrl,\n                    data: params,\n                    type: options.type,\n                    dataType: options.dataType\n                };\n\n                $.extend(ajaxSettings, options.ajaxSettings);\n\n                that.currentRequest = $.ajax(ajaxSettings).done(function (data) {\n                    var result;\n                    that.currentRequest = null;\n                    result = options.transformResult(data, q);\n                    that.processResponse(result, q, cacheKey);\n                    options.onSearchComplete.call(that.element, q, result.suggestions);\n                }).fail(function (jqXHR, textStatus, errorThrown) {\n                    options.onSearchError.call(that.element, q, jqXHR, textStatus, errorThrown);\n                });\n            } else {\n                options.onSearchComplete.call(that.element, q, []);\n            }\n        },\n\n        isBadQuery: function (q) {\n            if (!this.options.preventBadQueries){\n                return false;\n            }\n\n            var badQueries = this.badQueries,\n                i = badQueries.length;\n\n            while (i--) {\n                if (q.indexOf(badQueries[i]) === 0) {\n                    return true;\n                }\n            }\n\n            return false;\n        },\n\n        hide: function () {\n            var that = this,\n                container = $(that.suggestionsContainer);\n\n            if ($.isFunction(that.options.onHide) && that.visible) {\n                that.options.onHide.call(that.element, container);\n            }\n\n            that.visible = false;\n            that.selectedIndex = -1;\n            clearTimeout(that.onChangeTimeout);\n            $(that.suggestionsContainer).hide();\n            that.signalHint(null);\n        },\n\n        suggest: function () {\n            if (!this.suggestions.length) {\n                if (this.options.showNoSuggestionNotice) {\n                    this.noSuggestions();\n                } else {\n                    this.hide();\n                }\n                return;\n            }\n\n            var that = this,\n                options = that.options,\n                groupBy = options.groupBy,\n                formatResult = options.formatResult,\n                value = that.getQuery(that.currentValue),\n                className = that.classes.suggestion,\n                classSelected = that.classes.selected,\n                container = $(that.suggestionsContainer),\n                noSuggestionsContainer = $(that.noSuggestionsContainer),\n                beforeRender = options.beforeRender,\n                html = '',\n                category,\n                formatGroup = function (suggestion, index) {\n                        var currentCategory = suggestion.data[groupBy];\n\n                        if (category === currentCategory){\n                            return '';\n                        }\n\n                        category = currentCategory;\n\n                        return options.formatGroup(suggestion, category);\n                    };\n\n            if (options.triggerSelectOnValidInput && that.isExactMatch(value)) {\n                that.select(0);\n                return;\n            }\n\n            // Build suggestions inner HTML:\n            $.each(that.suggestions, function (i, suggestion) {\n                if (groupBy){\n                    html += formatGroup(suggestion, value, i);\n                }\n\n                html += '<div class=\"' + className + '\" data-index=\"' + i + '\">' + formatResult(suggestion, value, i) + '</div>';\n            });\n\n            this.adjustContainerWidth();\n\n            noSuggestionsContainer.detach();\n            container.html(html);\n\n            if ($.isFunction(beforeRender)) {\n                beforeRender.call(that.element, container, that.suggestions);\n            }\n\n            that.fixPosition();\n            container.show();\n\n            // Select first value by default:\n            if (options.autoSelectFirst) {\n                that.selectedIndex = 0;\n                container.scrollTop(0);\n                container.children('.' + className).first().addClass(classSelected);\n            }\n\n            that.visible = true;\n            that.findBestHint();\n        },\n\n        noSuggestions: function() {\n             var that = this,\n                 beforeRender = that.options.beforeRender,\n                 container = $(that.suggestionsContainer),\n                 noSuggestionsContainer = $(that.noSuggestionsContainer);\n\n            this.adjustContainerWidth();\n\n            // Some explicit steps. Be careful here as it easy to get\n            // noSuggestionsContainer removed from DOM if not detached properly.\n            noSuggestionsContainer.detach();\n\n            // clean suggestions if any\n            container.empty();\n            container.append(noSuggestionsContainer);\n\n            if ($.isFunction(beforeRender)) {\n                beforeRender.call(that.element, container, that.suggestions);\n            }\n\n            that.fixPosition();\n\n            container.show();\n            that.visible = true;\n        },\n\n        adjustContainerWidth: function() {\n            var that = this,\n                options = that.options,\n                width,\n                container = $(that.suggestionsContainer);\n\n            // If width is auto, adjust width before displaying suggestions,\n            // because if instance was created before input had width, it will be zero.\n            // Also it adjusts if input width has changed.\n            if (options.width === 'auto') {\n                width = that.el.outerWidth();\n                container.css('width', width > 0 ? width : 300);\n            } else if(options.width === 'flex') {\n                // Trust the source! Unset the width property so it will be the max length\n                // the containing elements.\n                container.css('width', '');\n            }\n        },\n\n        findBestHint: function () {\n            var that = this,\n                value = that.el.val().toLowerCase(),\n                bestMatch = null;\n\n            if (!value) {\n                return;\n            }\n\n            $.each(that.suggestions, function (i, suggestion) {\n                var foundMatch = suggestion.value.toLowerCase().indexOf(value) === 0;\n                if (foundMatch) {\n                    bestMatch = suggestion;\n                }\n                return !foundMatch;\n            });\n\n            that.signalHint(bestMatch);\n        },\n\n        signalHint: function (suggestion) {\n            var hintValue = '',\n                that = this;\n            if (suggestion) {\n                hintValue = that.currentValue + suggestion.value.substr(that.currentValue.length);\n            }\n            if (that.hintValue !== hintValue) {\n                that.hintValue = hintValue;\n                that.hint = suggestion;\n                (this.options.onHint || $.noop)(hintValue);\n            }\n        },\n\n        verifySuggestionsFormat: function (suggestions) {\n            // If suggestions is string array, convert them to supported format:\n            if (suggestions.length && typeof suggestions[0] === 'string') {\n                return $.map(suggestions, function (value) {\n                    return { value: value, data: null };\n                });\n            }\n\n            return suggestions;\n        },\n\n        validateOrientation: function(orientation, fallback) {\n            orientation = $.trim(orientation || '').toLowerCase();\n\n            if($.inArray(orientation, ['auto', 'bottom', 'top']) === -1){\n                orientation = fallback;\n            }\n\n            return orientation;\n        },\n\n        processResponse: function (result, originalQuery, cacheKey) {\n            var that = this,\n                options = that.options;\n\n            result.suggestions = that.verifySuggestionsFormat(result.suggestions);\n\n            // Cache results if cache is not disabled:\n            if (!options.noCache) {\n                that.cachedResponse[cacheKey] = result;\n                if (options.preventBadQueries && !result.suggestions.length) {\n                    that.badQueries.push(originalQuery);\n                }\n            }\n\n            // Return if originalQuery is not matching current query:\n            if (originalQuery !== that.getQuery(that.currentValue)) {\n                return;\n            }\n\n            that.suggestions = result.suggestions;\n            that.suggest();\n        },\n\n        activate: function (index) {\n            var that = this,\n                activeItem,\n                selected = that.classes.selected,\n                container = $(that.suggestionsContainer),\n                children = container.find('.' + that.classes.suggestion);\n\n            container.find('.' + selected).removeClass(selected);\n\n            that.selectedIndex = index;\n\n            if (that.selectedIndex !== -1 && children.length > that.selectedIndex) {\n                activeItem = children.get(that.selectedIndex);\n                $(activeItem).addClass(selected);\n                return activeItem;\n            }\n\n            return null;\n        },\n\n        selectHint: function () {\n            var that = this,\n                i = $.inArray(that.hint, that.suggestions);\n\n            that.select(i);\n        },\n\n        select: function (i) {\n            var that = this;\n            that.hide();\n            that.onSelect(i);\n        },\n\n        moveUp: function () {\n            var that = this;\n\n            if (that.selectedIndex === -1) {\n                return;\n            }\n\n            if (that.selectedIndex === 0) {\n                $(that.suggestionsContainer).children('.' + that.classes.suggestion).first().removeClass(that.classes.selected);\n                that.selectedIndex = -1;\n                that.ignoreValueChange = false;\n                that.el.val(that.currentValue);\n                that.findBestHint();\n                return;\n            }\n\n            that.adjustScroll(that.selectedIndex - 1);\n        },\n\n        moveDown: function () {\n            var that = this;\n\n            if (that.selectedIndex === (that.suggestions.length - 1)) {\n                return;\n            }\n\n            that.adjustScroll(that.selectedIndex + 1);\n        },\n\n        adjustScroll: function (index) {\n            var that = this,\n                activeItem = that.activate(index);\n\n            if (!activeItem) {\n                return;\n            }\n\n            var offsetTop,\n                upperBound,\n                lowerBound,\n                heightDelta = $(activeItem).outerHeight();\n\n            offsetTop = activeItem.offsetTop;\n            upperBound = $(that.suggestionsContainer).scrollTop();\n            lowerBound = upperBound + that.options.maxHeight - heightDelta;\n\n            if (offsetTop < upperBound) {\n                $(that.suggestionsContainer).scrollTop(offsetTop);\n            } else if (offsetTop > lowerBound) {\n                $(that.suggestionsContainer).scrollTop(offsetTop - that.options.maxHeight + heightDelta);\n            }\n\n            if (!that.options.preserveInput) {\n                // During onBlur event, browser will trigger \"change\" event,\n                // because value has changed, to avoid side effect ignore,\n                // that event, so that correct suggestion can be selected\n                // when clicking on suggestion with a mouse\n                that.ignoreValueChange = true;\n                that.el.val(that.getValue(that.suggestions[index].value));\n            }\n\n            that.signalHint(null);\n        },\n\n        onSelect: function (index) {\n            var that = this,\n                onSelectCallback = that.options.onSelect,\n                suggestion = that.suggestions[index];\n\n            that.currentValue = that.getValue(suggestion.value);\n\n            if (that.currentValue !== that.el.val() && !that.options.preserveInput) {\n                that.el.val(that.currentValue);\n            }\n\n            that.signalHint(null);\n            that.suggestions = [];\n            that.selection = suggestion;\n\n            if ($.isFunction(onSelectCallback)) {\n                onSelectCallback.call(that.element, suggestion);\n            }\n        },\n\n        getValue: function (value) {\n            var that = this,\n                delimiter = that.options.delimiter,\n                currentValue,\n                parts;\n\n            if (!delimiter) {\n                return value;\n            }\n\n            currentValue = that.currentValue;\n            parts = currentValue.split(delimiter);\n\n            if (parts.length === 1) {\n                return value;\n            }\n\n            return currentValue.substr(0, currentValue.length - parts[parts.length - 1].length) + value;\n        },\n\n        dispose: function () {\n            var that = this;\n            that.el.off('.autocomplete').removeData('autocomplete');\n            $(window).off('resize.autocomplete', that.fixPositionCapture);\n            $(that.suggestionsContainer).remove();\n        }\n    };\n\n    // Create chainable jQuery plugin:\n    $.fn.devbridgeAutocomplete = function (options, args) {\n        var dataKey = 'autocomplete';\n        // If function invoked without argument return\n        // instance of the first matched element:\n        if (!arguments.length) {\n            return this.first().data(dataKey);\n        }\n\n        return this.each(function () {\n            var inputElement = $(this),\n                instance = inputElement.data(dataKey);\n\n            if (typeof options === 'string') {\n                if (instance && typeof instance[options] === 'function') {\n                    instance[options](args);\n                }\n            } else {\n                // If instance already exists, destroy it:\n                if (instance && instance.dispose) {\n                    instance.dispose();\n                }\n                instance = new Autocomplete(this, options);\n                inputElement.data(dataKey, instance);\n            }\n        });\n    };\n\n    // Don't overwrite if it already exists\n    if (!$.fn.autocomplete) {\n        $.fn.autocomplete = $.fn.devbridgeAutocomplete;\n    }\n}));\n", "/*!\n * accounting.js v0.4.1\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.1';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '')         // strip out any cruft\n\t\t\t\t.replace(decimal, '.')      // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\t\tvar power = Math.pow(10, precision);\n\n\t\t// Multiply up by precision, round accurately, then divide and use native toFixed():\n\t\treturn (Math.round(lib.unformat(value) * power) / power).toFixed(precision);\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (typeof exports !== 'undefined') {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n", ";(function () {\r\n    var VERSION = '2.2.3',\r\n        pluginName = 'datepicker',\r\n        autoInitSelector = '.datepicker-here',\r\n        $body, $datepickersContainer,\r\n        containerBuilt = false,\r\n        baseTemplate = '' +\r\n            '<div class=\"datepicker\">' +\r\n            '<i class=\"datepicker--pointer\"></i>' +\r\n            '<nav class=\"datepicker--nav\"></nav>' +\r\n            '<div class=\"datepicker--content\"></div>' +\r\n            '</div>',\r\n        defaults = {\r\n            classes: '',\r\n            inline: false,\r\n            language: 'ru',\r\n            startDate: new Date(),\r\n            firstDay: '',\r\n            weekends: [6, 0],\r\n            dateFormat: '',\r\n            altField: '',\r\n            altFieldDateFormat: '@',\r\n            toggleSelected: true,\r\n            keyboardNav: true,\r\n\r\n            position: 'bottom left',\r\n            offset: 12,\r\n\r\n            view: 'days',\r\n            minView: 'days',\r\n\r\n            showOtherMonths: true,\r\n            selectOtherMonths: true,\r\n            moveToOtherMonthsOnSelect: true,\r\n\r\n            showOtherYears: true,\r\n            selectOtherYears: true,\r\n            moveToOtherYearsOnSelect: true,\r\n\r\n            minDate: '',\r\n            maxDate: '',\r\n            disableNavWhenOutOfRange: true,\r\n\r\n            multipleDates: false, // Boolean or Number\r\n            multipleDatesSeparator: ',',\r\n            range: false,\r\n\r\n            todayButton: false,\r\n            clearButton: false,\r\n\r\n            showEvent: 'focus',\r\n            autoClose: false,\r\n\r\n            // navigation\r\n            monthsField: 'monthsShort',\r\n            prevHtml: '<svg><path d=\"M 17,12 l -5,5 l 5,5\"></path></svg>',\r\n            nextHtml: '<svg><path d=\"M 14,12 l 5,5 l -5,5\"></path></svg>',\r\n            navTitles: {\r\n                days: 'MM, <i>yyyy</i>',\r\n                months: 'yyyy',\r\n                years: 'yyyy1 - yyyy2'\r\n            },\r\n\r\n            // timepicker\r\n            timepicker: false,\r\n            onlyTimepicker: false,\r\n            dateTimeSeparator: ' ',\r\n            timeFormat: '',\r\n            minHours: 0,\r\n            maxHours: 24,\r\n            minMinutes: 0,\r\n            maxMinutes: 59,\r\n            hoursStep: 1,\r\n            minutesStep: 1,\r\n\r\n            // events\r\n            onSelect: '',\r\n            onShow: '',\r\n            onHide: '',\r\n            onChangeMonth: '',\r\n            onChangeYear: '',\r\n            onChangeDecade: '',\r\n            onChangeView: '',\r\n            onRenderCell: ''\r\n        },\r\n        hotKeys = {\r\n            'ctrlRight': [17, 39],\r\n            'ctrlUp': [17, 38],\r\n            'ctrlLeft': [17, 37],\r\n            'ctrlDown': [17, 40],\r\n            'shiftRight': [16, 39],\r\n            'shiftUp': [16, 38],\r\n            'shiftLeft': [16, 37],\r\n            'shiftDown': [16, 40],\r\n            'altUp': [18, 38],\r\n            'altRight': [18, 39],\r\n            'altLeft': [18, 37],\r\n            'altDown': [18, 40],\r\n            'ctrlShiftUp': [16, 17, 38]\r\n        },\r\n        datepicker;\r\n\r\n    var Datepicker  = function (el, options) {\r\n        this.el = el;\r\n        this.$el = $(el);\r\n\r\n        this.opts = $.extend(true, {}, defaults, options, this.$el.data());\r\n\r\n        if ($body == undefined) {\r\n            $body = $('body');\r\n        }\r\n\r\n        if (!this.opts.startDate) {\r\n            this.opts.startDate = new Date();\r\n        }\r\n\r\n        if (this.el.nodeName == 'INPUT') {\r\n            this.elIsInput = true;\r\n        }\r\n\r\n        if (this.opts.altField) {\r\n            this.$altField = typeof this.opts.altField == 'string' ? $(this.opts.altField) : this.opts.altField;\r\n        }\r\n\r\n        this.inited = false;\r\n        this.visible = false;\r\n        this.silent = false; // Need to prevent unnecessary rendering\r\n\r\n        this.currentDate = this.opts.startDate;\r\n        this.currentView = this.opts.view;\r\n        this._createShortCuts();\r\n        this.selectedDates = [];\r\n        this.views = {};\r\n        this.keys = [];\r\n        this.minRange = '';\r\n        this.maxRange = '';\r\n        this._prevOnSelectValue = '';\r\n\r\n        this.init()\r\n    };\r\n\r\n    datepicker = Datepicker;\r\n\r\n    datepicker.prototype = {\r\n        VERSION: VERSION,\r\n        viewIndexes: ['days', 'months', 'years'],\r\n\r\n        init: function () {\r\n            if (!containerBuilt && !this.opts.inline && this.elIsInput) {\r\n                this._buildDatepickersContainer();\r\n            }\r\n            this._buildBaseHtml();\r\n            this._defineLocale(this.opts.language);\r\n            this._syncWithMinMaxDates();\r\n\r\n            if (this.elIsInput) {\r\n                if (!this.opts.inline) {\r\n                    // Set extra classes for proper transitions\r\n                    this._setPositionClasses(this.opts.position);\r\n                    this._bindEvents()\r\n                }\r\n                if (this.opts.keyboardNav && !this.opts.onlyTimepicker) {\r\n                    this._bindKeyboardEvents();\r\n                }\r\n                this.$datepicker.on('mousedown', this._onMouseDownDatepicker.bind(this));\r\n                this.$datepicker.on('mouseup', this._onMouseUpDatepicker.bind(this));\r\n            }\r\n\r\n            if (this.opts.classes) {\r\n                this.$datepicker.addClass(this.opts.classes)\r\n            }\r\n\r\n            if (this.opts.timepicker) {\r\n                this.timepicker = new $.fn.datepicker.Timepicker(this, this.opts);\r\n                this._bindTimepickerEvents();\r\n            }\r\n\r\n            if (this.opts.onlyTimepicker) {\r\n                this.$datepicker.addClass('-only-timepicker-');\r\n            }\r\n\r\n            this.views[this.currentView] = new $.fn.datepicker.Body(this, this.currentView, this.opts);\r\n            this.views[this.currentView].show();\r\n            this.nav = new $.fn.datepicker.Navigation(this, this.opts);\r\n            this.view = this.currentView;\r\n\r\n            this.$el.on('clickCell.adp', this._onClickCell.bind(this));\r\n            this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));\r\n            this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));\r\n\r\n            this.inited = true;\r\n        },\r\n\r\n        _createShortCuts: function () {\r\n            this.minDate = this.opts.minDate ? this.opts.minDate : new Date(-8639999913600000);\r\n            this.maxDate = this.opts.maxDate ? this.opts.maxDate : new Date(8639999913600000);\r\n        },\r\n\r\n        _bindEvents : function () {\r\n            this.$el.on(this.opts.showEvent + '.adp', this._onShowEvent.bind(this));\r\n            this.$el.on('mouseup.adp', this._onMouseUpEl.bind(this));\r\n            this.$el.on('blur.adp', this._onBlur.bind(this));\r\n            this.$el.on('keyup.adp', this._onKeyUpGeneral.bind(this));\r\n            $(window).on('resize.adp', this._onResize.bind(this));\r\n            $('body').on('mouseup.adp', this._onMouseUpBody.bind(this));\r\n        },\r\n\r\n        _bindKeyboardEvents: function () {\r\n            this.$el.on('keydown.adp', this._onKeyDown.bind(this));\r\n            this.$el.on('keyup.adp', this._onKeyUp.bind(this));\r\n            this.$el.on('hotKey.adp', this._onHotKey.bind(this));\r\n        },\r\n\r\n        _bindTimepickerEvents: function () {\r\n            this.$el.on('timeChange.adp', this._onTimeChange.bind(this));\r\n        },\r\n\r\n        isWeekend: function (day) {\r\n            return this.opts.weekends.indexOf(day) !== -1;\r\n        },\r\n\r\n        _defineLocale: function (lang) {\r\n            if (typeof lang == 'string') {\r\n                this.loc = $.fn.datepicker.language[lang];\r\n                if (!this.loc) {\r\n                    console.warn('Can\\'t find language \"' + lang + '\" in Datepicker.language, will use \"ru\" instead');\r\n                    this.loc = $.extend(true, {}, $.fn.datepicker.language.ru)\r\n                }\r\n\r\n                this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, $.fn.datepicker.language[lang])\r\n            } else {\r\n                this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, lang)\r\n            }\r\n\r\n            if (this.opts.dateFormat) {\r\n                this.loc.dateFormat = this.opts.dateFormat\r\n            }\r\n\r\n            if (this.opts.timeFormat) {\r\n                this.loc.timeFormat = this.opts.timeFormat\r\n            }\r\n\r\n            if (this.opts.firstDay !== '') {\r\n                this.loc.firstDay = this.opts.firstDay\r\n            }\r\n\r\n            if (this.opts.timepicker) {\r\n                this.loc.dateFormat = [this.loc.dateFormat, this.loc.timeFormat].join(this.opts.dateTimeSeparator);\r\n            }\r\n\r\n            if (this.opts.onlyTimepicker) {\r\n                this.loc.dateFormat = this.loc.timeFormat;\r\n            }\r\n\r\n            var boundary = this._getWordBoundaryRegExp;\r\n            if (this.loc.timeFormat.match(boundary('aa')) ||\r\n                this.loc.timeFormat.match(boundary('AA'))\r\n            ) {\r\n               this.ampm = true;\r\n            }\r\n        },\r\n\r\n        _buildDatepickersContainer: function () {\r\n            containerBuilt = true;\r\n            $body.append('<div class=\"datepickers-container\" id=\"datepickers-container\"></div>');\r\n            $datepickersContainer = $('#datepickers-container');\r\n        },\r\n\r\n        _buildBaseHtml: function () {\r\n            var $appendTarget,\r\n                $inline = $('<div class=\"datepicker-inline\">');\r\n\r\n            if(this.el.nodeName == 'INPUT') {\r\n                if (!this.opts.inline) {\r\n                    $appendTarget = $datepickersContainer;\r\n                } else {\r\n                    $appendTarget = $inline.insertAfter(this.$el)\r\n                }\r\n            } else {\r\n                $appendTarget = $inline.appendTo(this.$el)\r\n            }\r\n\r\n            this.$datepicker = $(baseTemplate).appendTo($appendTarget);\r\n            this.$content = $('.datepicker--content', this.$datepicker);\r\n            this.$nav = $('.datepicker--nav', this.$datepicker);\r\n        },\r\n\r\n        _triggerOnChange: function () {\r\n            if (!this.selectedDates.length) {\r\n                // Prevent from triggering multiple onSelect callback with same argument (empty string) in IE10-11\r\n                if (this._prevOnSelectValue === '') return;\r\n                this._prevOnSelectValue = '';\r\n                return this.opts.onSelect('', '', this);\r\n            }\r\n\r\n            var selectedDates = this.selectedDates,\r\n                parsedSelected = datepicker.getParsedDate(selectedDates[0]),\r\n                formattedDates,\r\n                _this = this,\r\n                dates = new Date(\r\n                    parsedSelected.year,\r\n                    parsedSelected.month,\r\n                    parsedSelected.date,\r\n                    parsedSelected.hours,\r\n                    parsedSelected.minutes\r\n                );\r\n\r\n                formattedDates = selectedDates.map(function (date) {\r\n                    return _this.formatDate(_this.loc.dateFormat, date)\r\n                }).join(this.opts.multipleDatesSeparator);\r\n\r\n            // Create new dates array, to separate it from original selectedDates\r\n            if (this.opts.multipleDates || this.opts.range) {\r\n                dates = selectedDates.map(function(date) {\r\n                    var parsedDate = datepicker.getParsedDate(date);\r\n                    return new Date(\r\n                        parsedDate.year,\r\n                        parsedDate.month,\r\n                        parsedDate.date,\r\n                        parsedDate.hours,\r\n                        parsedDate.minutes\r\n                    );\r\n                })\r\n            }\r\n\r\n            this._prevOnSelectValue = formattedDates;\r\n            this.opts.onSelect(formattedDates, dates, this);\r\n        },\r\n\r\n        next: function () {\r\n            var d = this.parsedDate,\r\n                o = this.opts;\r\n            switch (this.view) {\r\n                case 'days':\r\n                    this.date = new Date(d.year, d.month + 1, 1);\r\n                    if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n                    break;\r\n                case 'months':\r\n                    this.date = new Date(d.year + 1, d.month, 1);\r\n                    if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n                    break;\r\n                case 'years':\r\n                    this.date = new Date(d.year + 10, 0, 1);\r\n                    if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n                    break;\r\n            }\r\n        },\r\n\r\n        prev: function () {\r\n            var d = this.parsedDate,\r\n                o = this.opts;\r\n            switch (this.view) {\r\n                case 'days':\r\n                    this.date = new Date(d.year, d.month - 1, 1);\r\n                    if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n                    break;\r\n                case 'months':\r\n                    this.date = new Date(d.year - 1, d.month, 1);\r\n                    if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n                    break;\r\n                case 'years':\r\n                    this.date = new Date(d.year - 10, 0, 1);\r\n                    if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n                    break;\r\n            }\r\n        },\r\n\r\n        formatDate: function (string, date) {\r\n            date = date || this.date;\r\n            var result = string,\r\n                boundary = this._getWordBoundaryRegExp,\r\n                locale = this.loc,\r\n                leadingZero = datepicker.getLeadingZeroNum,\r\n                decade = datepicker.getDecade(date),\r\n                d = datepicker.getParsedDate(date),\r\n                fullHours = d.fullHours,\r\n                hours = d.hours,\r\n                ampm = string.match(boundary('aa')) || string.match(boundary('AA')),\r\n                dayPeriod = 'am',\r\n                replacer = this._replacer,\r\n                validHours;\r\n\r\n            if (this.opts.timepicker && this.timepicker && ampm) {\r\n                validHours = this.timepicker._getValidHoursFromDate(date, ampm);\r\n                fullHours = leadingZero(validHours.hours);\r\n                hours = validHours.hours;\r\n                dayPeriod = validHours.dayPeriod;\r\n            }\r\n\r\n            switch (true) {\r\n                case /@/.test(result):\r\n                    result = result.replace(/@/, date.getTime());\r\n                case /aa/.test(result):\r\n                    result = replacer(result, boundary('aa'), dayPeriod);\r\n                case /AA/.test(result):\r\n                    result = replacer(result, boundary('AA'), dayPeriod.toUpperCase());\r\n                case /dd/.test(result):\r\n                    result = replacer(result, boundary('dd'), d.fullDate);\r\n                case /d/.test(result):\r\n                    result = replacer(result, boundary('d'), d.date);\r\n                case /DD/.test(result):\r\n                    result = replacer(result, boundary('DD'), locale.days[d.day]);\r\n                case /D/.test(result):\r\n                    result = replacer(result, boundary('D'), locale.daysShort[d.day]);\r\n                case /mm/.test(result):\r\n                    result = replacer(result, boundary('mm'), d.fullMonth);\r\n                case /m/.test(result):\r\n                    result = replacer(result, boundary('m'), d.month + 1);\r\n                case /MM/.test(result):\r\n                    result = replacer(result, boundary('MM'), this.loc.months[d.month]);\r\n                case /M/.test(result):\r\n                    result = replacer(result, boundary('M'), locale.monthsShort[d.month]);\r\n                case /ii/.test(result):\r\n                    result = replacer(result, boundary('ii'), d.fullMinutes);\r\n                case /i/.test(result):\r\n                    result = replacer(result, boundary('i'), d.minutes);\r\n                case /hh/.test(result):\r\n                    result = replacer(result, boundary('hh'), fullHours);\r\n                case /h/.test(result):\r\n                    result = replacer(result, boundary('h'), hours);\r\n                case /yyyy/.test(result):\r\n                    result = replacer(result, boundary('yyyy'), d.year);\r\n                case /yyyy1/.test(result):\r\n                    result = replacer(result, boundary('yyyy1'), decade[0]);\r\n                case /yyyy2/.test(result):\r\n                    result = replacer(result, boundary('yyyy2'), decade[1]);\r\n                case /yy/.test(result):\r\n                    result = replacer(result, boundary('yy'), d.year.toString().slice(-2));\r\n            }\r\n\r\n            return result;\r\n        },\r\n\r\n        _replacer: function (str, reg, data) {\r\n            return str.replace(reg, function (match, p1,p2,p3) {\r\n                return p1 + data + p3;\r\n            })\r\n        },\r\n\r\n        _getWordBoundaryRegExp: function (sign) {\r\n            var symbols = '\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;';\r\n\r\n            return new RegExp('(^|>|' + symbols + ')(' + sign + ')($|<|' + symbols + ')', 'g');\r\n        },\r\n\r\n\r\n        selectDate: function (date) {\r\n            var _this = this,\r\n                opts = _this.opts,\r\n                d = _this.parsedDate,\r\n                selectedDates = _this.selectedDates,\r\n                len = selectedDates.length,\r\n                newDate = '';\r\n\r\n            if (Array.isArray(date)) {\r\n                date.forEach(function (d) {\r\n                    _this.selectDate(d)\r\n                });\r\n                return;\r\n            }\r\n\r\n            if (!(date instanceof Date)) return;\r\n\r\n            this.lastSelectedDate = date;\r\n\r\n            // Set new time values from Date\r\n            if (this.timepicker) {\r\n                this.timepicker._setTime(date);\r\n            }\r\n\r\n            // On this step timepicker will set valid values in it's instance\r\n            _this._trigger('selectDate', date);\r\n\r\n            // Set correct time values after timepicker's validation\r\n            // Prevent from setting hours or minutes which values are lesser then `min` value or\r\n            // greater then `max` value\r\n            if (this.timepicker) {\r\n                date.setHours(this.timepicker.hours);\r\n                date.setMinutes(this.timepicker.minutes)\r\n            }\r\n\r\n            if (_this.view == 'days') {\r\n                if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {\r\n                    newDate = new Date(date.getFullYear(), date.getMonth(), 1);\r\n                }\r\n            }\r\n\r\n            if (_this.view == 'years') {\r\n                if (date.getFullYear() != d.year && opts.moveToOtherYearsOnSelect) {\r\n                    newDate = new Date(date.getFullYear(), 0, 1);\r\n                }\r\n            }\r\n\r\n            if (newDate) {\r\n                _this.silent = true;\r\n                _this.date = newDate;\r\n                _this.silent = false;\r\n                _this.nav._render()\r\n            }\r\n\r\n            if (opts.multipleDates && !opts.range) { // Set priority to range functionality\r\n                if (len === opts.multipleDates) return;\r\n                if (!_this._isSelected(date)) {\r\n                    _this.selectedDates.push(date);\r\n                }\r\n            } else if (opts.range) {\r\n                if (len == 2) {\r\n                    _this.selectedDates = [date];\r\n                    _this.minRange = date;\r\n                    _this.maxRange = '';\r\n                } else if (len == 1) {\r\n                    _this.selectedDates.push(date);\r\n                    if (!_this.maxRange){\r\n                        _this.maxRange = date;\r\n                    } else {\r\n                        _this.minRange = date;\r\n                    }\r\n                    // Swap dates if they were selected via dp.selectDate() and second date was smaller then first\r\n                    if (datepicker.bigger(_this.maxRange, _this.minRange)) {\r\n                        _this.maxRange = _this.minRange;\r\n                        _this.minRange = date;\r\n                    }\r\n                    _this.selectedDates = [_this.minRange, _this.maxRange]\r\n\r\n                } else {\r\n                    _this.selectedDates = [date];\r\n                    _this.minRange = date;\r\n                }\r\n            } else {\r\n                _this.selectedDates = [date];\r\n            }\r\n\r\n            _this._setInputValue();\r\n\r\n            if (opts.onSelect) {\r\n                _this._triggerOnChange();\r\n            }\r\n\r\n            if (opts.autoClose && !this.timepickerIsActive) {\r\n                if (!opts.multipleDates && !opts.range) {\r\n                    _this.hide();\r\n                } else if (opts.range && _this.selectedDates.length == 2) {\r\n                    _this.hide();\r\n                }\r\n            }\r\n\r\n            _this.views[this.currentView]._render()\r\n        },\r\n\r\n        removeDate: function (date) {\r\n            var selected = this.selectedDates,\r\n                _this = this;\r\n\r\n            if (!(date instanceof Date)) return;\r\n\r\n            return selected.some(function (curDate, i) {\r\n                if (datepicker.isSame(curDate, date)) {\r\n                    selected.splice(i, 1);\r\n\r\n                    if (!_this.selectedDates.length) {\r\n                        _this.minRange = '';\r\n                        _this.maxRange = '';\r\n                        _this.lastSelectedDate = '';\r\n                    } else {\r\n                        _this.lastSelectedDate = _this.selectedDates[_this.selectedDates.length - 1];\r\n                    }\r\n\r\n                    _this.views[_this.currentView]._render();\r\n                    _this._setInputValue();\r\n\r\n                    if (_this.opts.onSelect) {\r\n                        _this._triggerOnChange();\r\n                    }\r\n\r\n                    return true\r\n                }\r\n            })\r\n        },\r\n\r\n        today: function () {\r\n            this.silent = true;\r\n            this.view = this.opts.minView;\r\n            this.silent = false;\r\n            this.date = new Date();\r\n\r\n            if (this.opts.todayButton instanceof Date) {\r\n                this.selectDate(this.opts.todayButton)\r\n            }\r\n        },\r\n\r\n        clear: function () {\r\n            this.selectedDates = [];\r\n            this.minRange = '';\r\n            this.maxRange = '';\r\n            this.views[this.currentView]._render();\r\n            this._setInputValue();\r\n            if (this.opts.onSelect) {\r\n                this._triggerOnChange()\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Updates datepicker options\r\n         * @param {String|Object} param - parameter's name to update. If object then it will extend current options\r\n         * @param {String|Number|Object} [value] - new param value\r\n         */\r\n        update: function (param, value) {\r\n            var len = arguments.length,\r\n                lastSelectedDate = this.lastSelectedDate;\r\n\r\n            if (len == 2) {\r\n                this.opts[param] = value;\r\n            } else if (len == 1 && typeof param == 'object') {\r\n                this.opts = $.extend(true, this.opts, param)\r\n            }\r\n\r\n            this._createShortCuts();\r\n            this._syncWithMinMaxDates();\r\n            this._defineLocale(this.opts.language);\r\n            this.nav._addButtonsIfNeed();\r\n            if (!this.opts.onlyTimepicker) this.nav._render();\r\n            this.views[this.currentView]._render();\r\n\r\n            if (this.elIsInput && !this.opts.inline) {\r\n                this._setPositionClasses(this.opts.position);\r\n                if (this.visible) {\r\n                    this.setPosition(this.opts.position)\r\n                }\r\n            }\r\n\r\n            if (this.opts.classes) {\r\n                this.$datepicker.addClass(this.opts.classes)\r\n            }\r\n\r\n            if (this.opts.onlyTimepicker) {\r\n                this.$datepicker.addClass('-only-timepicker-');\r\n            }\r\n\r\n            if (this.opts.timepicker) {\r\n                if (lastSelectedDate) this.timepicker._handleDate(lastSelectedDate);\r\n                this.timepicker._updateRanges();\r\n                this.timepicker._updateCurrentTime();\r\n                // Change hours and minutes if it's values have been changed through min/max hours/minutes\r\n                if (lastSelectedDate) {\r\n                    lastSelectedDate.setHours(this.timepicker.hours);\r\n                    lastSelectedDate.setMinutes(this.timepicker.minutes);\r\n                }\r\n            }\r\n\r\n            this._setInputValue();\r\n\r\n            return this;\r\n        },\r\n\r\n        _syncWithMinMaxDates: function () {\r\n            var curTime = this.date.getTime();\r\n            this.silent = true;\r\n            if (this.minTime > curTime) {\r\n                this.date = this.minDate;\r\n            }\r\n\r\n            if (this.maxTime < curTime) {\r\n                this.date = this.maxDate;\r\n            }\r\n            this.silent = false;\r\n        },\r\n\r\n        _isSelected: function (checkDate, cellType) {\r\n            var res = false;\r\n            this.selectedDates.some(function (date) {\r\n                if (datepicker.isSame(date, checkDate, cellType)) {\r\n                    res = date;\r\n                    return true;\r\n                }\r\n            });\r\n            return res;\r\n        },\r\n\r\n        _setInputValue: function () {\r\n            var _this = this,\r\n                opts = _this.opts,\r\n                format = _this.loc.dateFormat,\r\n                altFormat = opts.altFieldDateFormat,\r\n                value = _this.selectedDates.map(function (date) {\r\n                    return _this.formatDate(format, date)\r\n                }),\r\n                altValues;\r\n\r\n            if (opts.altField && _this.$altField.length) {\r\n                altValues = this.selectedDates.map(function (date) {\r\n                    return _this.formatDate(altFormat, date)\r\n                });\r\n                altValues = altValues.join(this.opts.multipleDatesSeparator);\r\n                this.$altField.val(altValues);\r\n            }\r\n\r\n            value = value.join(this.opts.multipleDatesSeparator);\r\n\r\n            this.$el.val(value)\r\n        },\r\n\r\n        /**\r\n         * Check if date is between minDate and maxDate\r\n         * @param date {object} - date object\r\n         * @param type {string} - cell type\r\n         * @returns {boolean}\r\n         * @private\r\n         */\r\n        _isInRange: function (date, type) {\r\n            var time = date.getTime(),\r\n                d = datepicker.getParsedDate(date),\r\n                min = datepicker.getParsedDate(this.minDate),\r\n                max = datepicker.getParsedDate(this.maxDate),\r\n                dMinTime = new Date(d.year, d.month, min.date).getTime(),\r\n                dMaxTime = new Date(d.year, d.month, max.date).getTime(),\r\n                types = {\r\n                    day: time >= this.minTime && time <= this.maxTime,\r\n                    month: dMinTime >= this.minTime && dMaxTime <= this.maxTime,\r\n                    year: d.year >= min.year && d.year <= max.year\r\n                };\r\n            return type ? types[type] : types.day\r\n        },\r\n\r\n        _getDimensions: function ($el) {\r\n            var offset = $el.offset();\r\n\r\n            return {\r\n                width: $el.outerWidth(),\r\n                height: $el.outerHeight(),\r\n                left: offset.left,\r\n                top: offset.top\r\n            }\r\n        },\r\n\r\n        _getDateFromCell: function (cell) {\r\n            var curDate = this.parsedDate,\r\n                year = cell.data('year') || curDate.year,\r\n                month = cell.data('month') == undefined ? curDate.month : cell.data('month'),\r\n                date = cell.data('date') || 1;\r\n\r\n            return new Date(year, month, date);\r\n        },\r\n\r\n        _setPositionClasses: function (pos) {\r\n            pos = pos.split(' ');\r\n            var main = pos[0],\r\n                sec = pos[1],\r\n                classes = 'datepicker -' + main + '-' + sec + '- -from-' + main + '-';\r\n\r\n            if (this.visible) classes += ' active';\r\n\r\n            this.$datepicker\r\n                .removeAttr('class')\r\n                .addClass(classes);\r\n        },\r\n\r\n        setPosition: function (position) {\r\n            position = position || this.opts.position;\r\n\r\n            var dims = this._getDimensions(this.$el),\r\n                selfDims = this._getDimensions(this.$datepicker),\r\n                pos = position.split(' '),\r\n                top, left,\r\n                offset = this.opts.offset,\r\n                main = pos[0],\r\n                secondary = pos[1];\r\n\r\n            switch (main) {\r\n                case 'top':\r\n                    top = dims.top - selfDims.height - offset;\r\n                    break;\r\n                case 'right':\r\n                    left = dims.left + dims.width + offset;\r\n                    break;\r\n                case 'bottom':\r\n                    top = dims.top + dims.height + offset;\r\n                    break;\r\n                case 'left':\r\n                    left = dims.left - selfDims.width - offset;\r\n                    break;\r\n            }\r\n\r\n            switch(secondary) {\r\n                case 'top':\r\n                    top = dims.top;\r\n                    break;\r\n                case 'right':\r\n                    left = dims.left + dims.width - selfDims.width;\r\n                    break;\r\n                case 'bottom':\r\n                    top = dims.top + dims.height - selfDims.height;\r\n                    break;\r\n                case 'left':\r\n                    left = dims.left;\r\n                    break;\r\n                case 'center':\r\n                    if (/left|right/.test(main)) {\r\n                        top = dims.top + dims.height/2 - selfDims.height/2;\r\n                    } else {\r\n                        left = dims.left + dims.width/2 - selfDims.width/2;\r\n                    }\r\n            }\r\n\r\n            this.$datepicker\r\n                .css({\r\n                    left: left,\r\n                    top: top\r\n                })\r\n        },\r\n\r\n        show: function () {\r\n            var onShow = this.opts.onShow;\r\n\r\n            this.setPosition(this.opts.position);\r\n            this.$datepicker.addClass('active');\r\n            this.visible = true;\r\n\r\n            if (onShow) {\r\n                this._bindVisionEvents(onShow)\r\n            }\r\n        },\r\n\r\n        hide: function () {\r\n            var onHide = this.opts.onHide;\r\n\r\n            this.$datepicker\r\n                .removeClass('active')\r\n                .css({\r\n                    left: '-100000px'\r\n                });\r\n\r\n            this.focused = '';\r\n            this.keys = [];\r\n\r\n            this.inFocus = false;\r\n            this.visible = false;\r\n            this.$el.blur();\r\n\r\n            if (onHide) {\r\n                this._bindVisionEvents(onHide)\r\n            }\r\n        },\r\n\r\n        down: function (date) {\r\n            this._changeView(date, 'down');\r\n        },\r\n\r\n        up: function (date) {\r\n            this._changeView(date, 'up');\r\n        },\r\n\r\n        _bindVisionEvents: function (event) {\r\n            this.$datepicker.off('transitionend.dp');\r\n            event(this, false);\r\n            this.$datepicker.one('transitionend.dp', event.bind(this, this, true))\r\n        },\r\n\r\n        _changeView: function (date, dir) {\r\n            date = date || this.focused || this.date;\r\n\r\n            var nextView = dir == 'up' ? this.viewIndex + 1 : this.viewIndex - 1;\r\n            if (nextView > 2) nextView = 2;\r\n            if (nextView < 0) nextView = 0;\r\n\r\n            this.silent = true;\r\n            this.date = new Date(date.getFullYear(), date.getMonth(), 1);\r\n            this.silent = false;\r\n            this.view = this.viewIndexes[nextView];\r\n\r\n        },\r\n\r\n        _handleHotKey: function (key) {\r\n            var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n                focusedParsed,\r\n                o = this.opts,\r\n                newDate,\r\n                totalDaysInNextMonth,\r\n                monthChanged = false,\r\n                yearChanged = false,\r\n                decadeChanged = false,\r\n                y = date.year,\r\n                m = date.month,\r\n                d = date.date;\r\n\r\n            switch (key) {\r\n                case 'ctrlRight':\r\n                case 'ctrlUp':\r\n                    m += 1;\r\n                    monthChanged = true;\r\n                    break;\r\n                case 'ctrlLeft':\r\n                case 'ctrlDown':\r\n                    m -= 1;\r\n                    monthChanged = true;\r\n                    break;\r\n                case 'shiftRight':\r\n                case 'shiftUp':\r\n                    yearChanged = true;\r\n                    y += 1;\r\n                    break;\r\n                case 'shiftLeft':\r\n                case 'shiftDown':\r\n                    yearChanged = true;\r\n                    y -= 1;\r\n                    break;\r\n                case 'altRight':\r\n                case 'altUp':\r\n                    decadeChanged = true;\r\n                    y += 10;\r\n                    break;\r\n                case 'altLeft':\r\n                case 'altDown':\r\n                    decadeChanged = true;\r\n                    y -= 10;\r\n                    break;\r\n                case 'ctrlShiftUp':\r\n                    this.up();\r\n                    break;\r\n            }\r\n\r\n            totalDaysInNextMonth = datepicker.getDaysCount(new Date(y,m));\r\n            newDate = new Date(y,m,d);\r\n\r\n            // If next month has less days than current, set date to total days in that month\r\n            if (totalDaysInNextMonth < d) d = totalDaysInNextMonth;\r\n\r\n            // Check if newDate is in valid range\r\n            if (newDate.getTime() < this.minTime) {\r\n                newDate = this.minDate;\r\n            } else if (newDate.getTime() > this.maxTime) {\r\n                newDate = this.maxDate;\r\n            }\r\n\r\n            this.focused = newDate;\r\n\r\n            focusedParsed = datepicker.getParsedDate(newDate);\r\n            if (monthChanged && o.onChangeMonth) {\r\n                o.onChangeMonth(focusedParsed.month, focusedParsed.year)\r\n            }\r\n            if (yearChanged && o.onChangeYear) {\r\n                o.onChangeYear(focusedParsed.year)\r\n            }\r\n            if (decadeChanged && o.onChangeDecade) {\r\n                o.onChangeDecade(this.curDecade)\r\n            }\r\n        },\r\n\r\n        _registerKey: function (key) {\r\n            var exists = this.keys.some(function (curKey) {\r\n                return curKey == key;\r\n            });\r\n\r\n            if (!exists) {\r\n                this.keys.push(key)\r\n            }\r\n        },\r\n\r\n        _unRegisterKey: function (key) {\r\n            var index = this.keys.indexOf(key);\r\n\r\n            this.keys.splice(index, 1);\r\n        },\r\n\r\n        _isHotKeyPressed: function () {\r\n            var currentHotKey,\r\n                found = false,\r\n                _this = this,\r\n                pressedKeys = this.keys.sort();\r\n\r\n            for (var hotKey in hotKeys) {\r\n                currentHotKey = hotKeys[hotKey];\r\n                if (pressedKeys.length != currentHotKey.length) continue;\r\n\r\n                if (currentHotKey.every(function (key, i) { return key == pressedKeys[i]})) {\r\n                    _this._trigger('hotKey', hotKey);\r\n                    found = true;\r\n                }\r\n            }\r\n\r\n            return found;\r\n        },\r\n\r\n        _trigger: function (event, args) {\r\n            this.$el.trigger(event, args)\r\n        },\r\n\r\n        _focusNextCell: function (keyCode, type) {\r\n            type = type || this.cellType;\r\n\r\n            var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n                y = date.year,\r\n                m = date.month,\r\n                d = date.date;\r\n\r\n            if (this._isHotKeyPressed()){\r\n                return;\r\n            }\r\n\r\n            switch(keyCode) {\r\n                case 37: // left\r\n                    type == 'day' ? (d -= 1) : '';\r\n                    type == 'month' ? (m -= 1) : '';\r\n                    type == 'year' ? (y -= 1) : '';\r\n                    break;\r\n                case 38: // up\r\n                    type == 'day' ? (d -= 7) : '';\r\n                    type == 'month' ? (m -= 3) : '';\r\n                    type == 'year' ? (y -= 4) : '';\r\n                    break;\r\n                case 39: // right\r\n                    type == 'day' ? (d += 1) : '';\r\n                    type == 'month' ? (m += 1) : '';\r\n                    type == 'year' ? (y += 1) : '';\r\n                    break;\r\n                case 40: // down\r\n                    type == 'day' ? (d += 7) : '';\r\n                    type == 'month' ? (m += 3) : '';\r\n                    type == 'year' ? (y += 4) : '';\r\n                    break;\r\n            }\r\n\r\n            var nd = new Date(y,m,d);\r\n            if (nd.getTime() < this.minTime) {\r\n                nd = this.minDate;\r\n            } else if (nd.getTime() > this.maxTime) {\r\n                nd = this.maxDate;\r\n            }\r\n\r\n            this.focused = nd;\r\n\r\n        },\r\n\r\n        _getFocusedDate: function () {\r\n            var focused  = this.focused || this.selectedDates[this.selectedDates.length - 1],\r\n                d = this.parsedDate;\r\n\r\n            if (!focused) {\r\n                switch (this.view) {\r\n                    case 'days':\r\n                        focused = new Date(d.year, d.month, new Date().getDate());\r\n                        break;\r\n                    case 'months':\r\n                        focused = new Date(d.year, d.month, 1);\r\n                        break;\r\n                    case 'years':\r\n                        focused = new Date(d.year, 0, 1);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            return focused;\r\n        },\r\n\r\n        _getCell: function (date, type) {\r\n            type = type || this.cellType;\r\n\r\n            var d = datepicker.getParsedDate(date),\r\n                selector = '.datepicker--cell[data-year=\"' + d.year + '\"]',\r\n                $cell;\r\n\r\n            switch (type) {\r\n                case 'month':\r\n                    selector = '[data-month=\"' + d.month + '\"]';\r\n                    break;\r\n                case 'day':\r\n                    selector += '[data-month=\"' + d.month + '\"][data-date=\"' + d.date + '\"]';\r\n                    break;\r\n            }\r\n            $cell = this.views[this.currentView].$el.find(selector);\r\n\r\n            return $cell.length ? $cell : $('');\r\n        },\r\n\r\n        destroy: function () {\r\n            var _this = this;\r\n            _this.$el\r\n                .off('.adp')\r\n                .data('datepicker', '');\r\n\r\n            _this.selectedDates = [];\r\n            _this.focused = '';\r\n            _this.views = {};\r\n            _this.keys = [];\r\n            _this.minRange = '';\r\n            _this.maxRange = '';\r\n\r\n            if (_this.opts.inline || !_this.elIsInput) {\r\n                _this.$datepicker.closest('.datepicker-inline').remove();\r\n            } else {\r\n                _this.$datepicker.remove();\r\n            }\r\n        },\r\n\r\n        _handleAlreadySelectedDates: function (alreadySelected, selectedDate) {\r\n            if (this.opts.range) {\r\n                if (!this.opts.toggleSelected) {\r\n                    // Add possibility to select same date when range is true\r\n                    if (this.selectedDates.length != 2) {\r\n                        this._trigger('clickCell', selectedDate);\r\n                    }\r\n                } else {\r\n                    this.removeDate(selectedDate);\r\n                }\r\n            } else if (this.opts.toggleSelected){\r\n                this.removeDate(selectedDate);\r\n            }\r\n\r\n            // Change last selected date to be able to change time when clicking on this cell\r\n            if (!this.opts.toggleSelected) {\r\n                this.lastSelectedDate = alreadySelected;\r\n                if (this.opts.timepicker) {\r\n                    this.timepicker._setTime(alreadySelected);\r\n                    this.timepicker.update();\r\n                }\r\n            }\r\n        },\r\n\r\n        _onShowEvent: function (e) {\r\n            if (!this.visible) {\r\n                this.show();\r\n            }\r\n        },\r\n\r\n        _onBlur: function () {\r\n            if (!this.inFocus && this.visible) {\r\n                this.hide();\r\n            }\r\n        },\r\n\r\n        _onMouseDownDatepicker: function (e) {\r\n            this.inFocus = true;\r\n        },\r\n\r\n        _onMouseUpDatepicker: function (e) {\r\n            this.inFocus = false;\r\n            e.originalEvent.inFocus = true;\r\n            if (!e.originalEvent.timepickerFocus) this.$el.focus();\r\n        },\r\n\r\n        _onKeyUpGeneral: function (e) {\r\n            var val = this.$el.val();\r\n\r\n            if (!val) {\r\n                this.clear();\r\n            }\r\n        },\r\n\r\n        _onResize: function () {\r\n            if (this.visible) {\r\n                this.setPosition();\r\n            }\r\n        },\r\n\r\n        _onMouseUpBody: function (e) {\r\n            if (e.originalEvent.inFocus) return;\r\n\r\n            if (this.visible && !this.inFocus) {\r\n                this.hide();\r\n            }\r\n        },\r\n\r\n        _onMouseUpEl: function (e) {\r\n            e.originalEvent.inFocus = true;\r\n            setTimeout(this._onKeyUpGeneral.bind(this),4);\r\n        },\r\n\r\n        _onKeyDown: function (e) {\r\n            var code = e.which;\r\n            this._registerKey(code);\r\n\r\n            // Arrows\r\n            if (code >= 37 && code <= 40) {\r\n                e.preventDefault();\r\n                this._focusNextCell(code);\r\n            }\r\n\r\n            // Enter\r\n            if (code == 13) {\r\n                if (this.focused) {\r\n                    if (this._getCell(this.focused).hasClass('-disabled-')) return;\r\n                    if (this.view != this.opts.minView) {\r\n                        this.down()\r\n                    } else {\r\n                        var alreadySelected = this._isSelected(this.focused, this.cellType);\r\n\r\n                        if (!alreadySelected) {\r\n                            if (this.timepicker) {\r\n                                this.focused.setHours(this.timepicker.hours);\r\n                                this.focused.setMinutes(this.timepicker.minutes);\r\n                            }\r\n                            this.selectDate(this.focused);\r\n                            return;\r\n                        }\r\n                        this._handleAlreadySelectedDates(alreadySelected, this.focused)\r\n                    }\r\n                }\r\n            }\r\n\r\n            // Esc\r\n            if (code == 27) {\r\n                this.hide();\r\n            }\r\n        },\r\n\r\n        _onKeyUp: function (e) {\r\n            var code = e.which;\r\n            this._unRegisterKey(code);\r\n        },\r\n\r\n        _onHotKey: function (e, hotKey) {\r\n            this._handleHotKey(hotKey);\r\n        },\r\n\r\n        _onMouseEnterCell: function (e) {\r\n            var $cell = $(e.target).closest('.datepicker--cell'),\r\n                date = this._getDateFromCell($cell);\r\n\r\n            // Prevent from unnecessary rendering and setting new currentDate\r\n            this.silent = true;\r\n\r\n            if (this.focused) {\r\n                this.focused = ''\r\n            }\r\n\r\n            $cell.addClass('-focus-');\r\n\r\n            this.focused = date;\r\n            this.silent = false;\r\n\r\n            if (this.opts.range && this.selectedDates.length == 1) {\r\n                this.minRange = this.selectedDates[0];\r\n                this.maxRange = '';\r\n                if (datepicker.less(this.minRange, this.focused)) {\r\n                    this.maxRange = this.minRange;\r\n                    this.minRange = '';\r\n                }\r\n                this.views[this.currentView]._update();\r\n            }\r\n        },\r\n\r\n        _onMouseLeaveCell: function (e) {\r\n            var $cell = $(e.target).closest('.datepicker--cell');\r\n\r\n            $cell.removeClass('-focus-');\r\n\r\n            this.silent = true;\r\n            this.focused = '';\r\n            this.silent = false;\r\n        },\r\n\r\n        _onTimeChange: function (e, h, m) {\r\n            var date = new Date(),\r\n                selectedDates = this.selectedDates,\r\n                selected = false;\r\n\r\n            if (selectedDates.length) {\r\n                selected = true;\r\n                date = this.lastSelectedDate;\r\n            }\r\n\r\n            date.setHours(h);\r\n            date.setMinutes(m);\r\n\r\n            if (!selected && !this._getCell(date).hasClass('-disabled-')) {\r\n                this.selectDate(date);\r\n            } else {\r\n                this._setInputValue();\r\n                if (this.opts.onSelect) {\r\n                    this._triggerOnChange();\r\n                }\r\n            }\r\n        },\r\n\r\n        _onClickCell: function (e, date) {\r\n            if (this.timepicker) {\r\n                date.setHours(this.timepicker.hours);\r\n                date.setMinutes(this.timepicker.minutes);\r\n            }\r\n            this.selectDate(date);\r\n        },\r\n\r\n        set focused(val) {\r\n            if (!val && this.focused) {\r\n                var $cell = this._getCell(this.focused);\r\n\r\n                if ($cell.length) {\r\n                    $cell.removeClass('-focus-')\r\n                }\r\n            }\r\n            this._focused = val;\r\n            if (this.opts.range && this.selectedDates.length == 1) {\r\n                this.minRange = this.selectedDates[0];\r\n                this.maxRange = '';\r\n                if (datepicker.less(this.minRange, this._focused)) {\r\n                    this.maxRange = this.minRange;\r\n                    this.minRange = '';\r\n                }\r\n            }\r\n            if (this.silent) return;\r\n            this.date = val;\r\n        },\r\n\r\n        get focused() {\r\n            return this._focused;\r\n        },\r\n\r\n        get parsedDate() {\r\n            return datepicker.getParsedDate(this.date);\r\n        },\r\n\r\n        set date (val) {\r\n            if (!(val instanceof Date)) return;\r\n\r\n            this.currentDate = val;\r\n\r\n            if (this.inited && !this.silent) {\r\n                this.views[this.view]._render();\r\n                this.nav._render();\r\n                if (this.visible && this.elIsInput) {\r\n                    this.setPosition();\r\n                }\r\n            }\r\n            return val;\r\n        },\r\n\r\n        get date () {\r\n            return this.currentDate\r\n        },\r\n\r\n        set view (val) {\r\n            this.viewIndex = this.viewIndexes.indexOf(val);\r\n\r\n            if (this.viewIndex < 0) {\r\n                return;\r\n            }\r\n\r\n            this.prevView = this.currentView;\r\n            this.currentView = val;\r\n\r\n            if (this.inited) {\r\n                if (!this.views[val]) {\r\n                    this.views[val] = new  $.fn.datepicker.Body(this, val, this.opts)\r\n                } else {\r\n                    this.views[val]._render();\r\n                }\r\n\r\n                this.views[this.prevView].hide();\r\n                this.views[val].show();\r\n                this.nav._render();\r\n\r\n                if (this.opts.onChangeView) {\r\n                    this.opts.onChangeView(val)\r\n                }\r\n                if (this.elIsInput && this.visible) this.setPosition();\r\n            }\r\n\r\n            return val\r\n        },\r\n\r\n        get view() {\r\n            return this.currentView;\r\n        },\r\n\r\n        get cellType() {\r\n            return this.view.substring(0, this.view.length - 1)\r\n        },\r\n\r\n        get minTime() {\r\n            var min = datepicker.getParsedDate(this.minDate);\r\n            return new Date(min.year, min.month, min.date).getTime()\r\n        },\r\n\r\n        get maxTime() {\r\n            var max = datepicker.getParsedDate(this.maxDate);\r\n            return new Date(max.year, max.month, max.date).getTime()\r\n        },\r\n\r\n        get curDecade() {\r\n            return datepicker.getDecade(this.date)\r\n        }\r\n    };\r\n\r\n    //  Utils\r\n    // -------------------------------------------------\r\n\r\n    datepicker.getDaysCount = function (date) {\r\n        return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n    };\r\n\r\n    datepicker.getParsedDate = function (date) {\r\n        return {\r\n            year: date.getFullYear(),\r\n            month: date.getMonth(),\r\n            fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based\r\n            date: date.getDate(),\r\n            fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),\r\n            day: date.getDay(),\r\n            hours: date.getHours(),\r\n            fullHours:  date.getHours() < 10 ? '0' + date.getHours() :  date.getHours() ,\r\n            minutes: date.getMinutes(),\r\n            fullMinutes:  date.getMinutes() < 10 ? '0' + date.getMinutes() :  date.getMinutes()\r\n        }\r\n    };\r\n\r\n    datepicker.getDecade = function (date) {\r\n        var firstYear = Math.floor(date.getFullYear() / 10) * 10;\r\n\r\n        return [firstYear, firstYear + 9];\r\n    };\r\n\r\n    datepicker.template = function (str, data) {\r\n        return str.replace(/#\\{([\\w]+)\\}/g, function (source, match) {\r\n            if (data[match] || data[match] === 0) {\r\n                return data[match]\r\n            }\r\n        });\r\n    };\r\n\r\n    datepicker.isSame = function (date1, date2, type) {\r\n        if (!date1 || !date2) return false;\r\n        var d1 = datepicker.getParsedDate(date1),\r\n            d2 = datepicker.getParsedDate(date2),\r\n            _type = type ? type : 'day',\r\n\r\n            conditions = {\r\n                day: d1.date == d2.date && d1.month == d2.month && d1.year == d2.year,\r\n                month: d1.month == d2.month && d1.year == d2.year,\r\n                year: d1.year == d2.year\r\n            };\r\n\r\n        return conditions[_type];\r\n    };\r\n\r\n    datepicker.less = function (dateCompareTo, date, type) {\r\n        if (!dateCompareTo || !date) return false;\r\n        return date.getTime() < dateCompareTo.getTime();\r\n    };\r\n\r\n    datepicker.bigger = function (dateCompareTo, date, type) {\r\n        if (!dateCompareTo || !date) return false;\r\n        return date.getTime() > dateCompareTo.getTime();\r\n    };\r\n\r\n    datepicker.getLeadingZeroNum = function (num) {\r\n        return parseInt(num) < 10 ? '0' + num : num;\r\n    };\r\n\r\n    /**\r\n     * Returns copy of date with hours and minutes equals to 0\r\n     * @param date {Date}\r\n     */\r\n    datepicker.resetTime = function (date) {\r\n        if (typeof date != 'object') return;\r\n        date = datepicker.getParsedDate(date);\r\n        return new Date(date.year, date.month, date.date)\r\n    };\r\n\r\n    $.fn.datepicker = function ( options ) {\r\n        return this.each(function () {\r\n            if (!$.data(this, pluginName)) {\r\n                $.data(this,  pluginName,\r\n                    new Datepicker( this, options ));\r\n            } else {\r\n                var _this = $.data(this, pluginName);\r\n\r\n                _this.opts = $.extend(true, _this.opts, options);\r\n                _this.update();\r\n            }\r\n        });\r\n    };\r\n\r\n    $.fn.datepicker.Constructor = Datepicker;\r\n\r\n    $.fn.datepicker.language = {\r\n        ru: {\r\n            days: ['\u0412\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435', '\u041F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A', '\u0412\u0442\u043E\u0440\u043D\u0438\u043A', '\u0421\u0440\u0435\u0434\u0430', '\u0427\u0435\u0442\u0432\u0435\u0440\u0433', '\u041F\u044F\u0442\u043D\u0438\u0446\u0430', '\u0421\u0443\u0431\u0431\u043E\u0442\u0430'],\r\n            daysShort: ['\u0412\u043E\u0441','\u041F\u043E\u043D','\u0412\u0442\u043E','\u0421\u0440\u0435','\u0427\u0435\u0442','\u041F\u044F\u0442','\u0421\u0443\u0431'],\r\n            daysMin: ['\u0412\u0441','\u041F\u043D','\u0412\u0442','\u0421\u0440','\u0427\u0442','\u041F\u0442','\u0421\u0431'],\r\n            months: ['\u042F\u043D\u0432\u0430\u0440\u044C', '\u0424\u0435\u0432\u0440\u0430\u043B\u044C', '\u041C\u0430\u0440\u0442', '\u0410\u043F\u0440\u0435\u043B\u044C', '\u041C\u0430\u0439', '\u0418\u044E\u043D\u044C', '\u0418\u044E\u043B\u044C', '\u0410\u0432\u0433\u0443\u0441\u0442', '\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C', '\u041E\u043A\u0442\u044F\u0431\u0440\u044C', '\u041D\u043E\u044F\u0431\u0440\u044C', '\u0414\u0435\u043A\u0430\u0431\u0440\u044C'],\r\n            monthsShort: ['\u042F\u043D\u0432', '\u0424\u0435\u0432', '\u041C\u0430\u0440', '\u0410\u043F\u0440', '\u041C\u0430\u0439', '\u0418\u044E\u043D', '\u0418\u044E\u043B', '\u0410\u0432\u0433', '\u0421\u0435\u043D', '\u041E\u043A\u0442', '\u041D\u043E\u044F', '\u0414\u0435\u043A'],\r\n            today: '\u0421\u0435\u0433\u043E\u0434\u043D\u044F',\r\n            clear: '\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C',\r\n            dateFormat: 'dd.mm.yyyy',\r\n            timeFormat: 'hh:ii',\r\n            firstDay: 1\r\n        }\r\n    };\r\n\r\n    $(function () {\r\n        $(autoInitSelector).datepicker();\r\n    })\r\n\r\n})();\r\n", ";(function () {\r\n    var templates = {\r\n        days:'' +\r\n        '<div class=\"datepicker--days datepicker--body\">' +\r\n        '<div class=\"datepicker--days-names\"></div>' +\r\n        '<div class=\"datepicker--cells datepicker--cells-days\"></div>' +\r\n        '</div>',\r\n        months: '' +\r\n        '<div class=\"datepicker--months datepicker--body\">' +\r\n        '<div class=\"datepicker--cells datepicker--cells-months\"></div>' +\r\n        '</div>',\r\n        years: '' +\r\n        '<div class=\"datepicker--years datepicker--body\">' +\r\n        '<div class=\"datepicker--cells datepicker--cells-years\"></div>' +\r\n        '</div>'\r\n        },\r\n        datepicker = $.fn.datepicker,\r\n        dp = datepicker.Constructor;\r\n\r\n    datepicker.Body = function (d, type, opts) {\r\n        this.d = d;\r\n        this.type = type;\r\n        this.opts = opts;\r\n        this.$el = $('');\r\n\r\n        if (this.opts.onlyTimepicker) return;\r\n        this.init();\r\n    };\r\n\r\n    datepicker.Body.prototype = {\r\n        init: function () {\r\n            this._buildBaseHtml();\r\n            this._render();\r\n\r\n            this._bindEvents();\r\n        },\r\n\r\n        _bindEvents: function () {\r\n            this.$el.on('click', '.datepicker--cell', $.proxy(this._onClickCell, this));\r\n        },\r\n\r\n        _buildBaseHtml: function () {\r\n            this.$el = $(templates[this.type]).appendTo(this.d.$content);\r\n            this.$names = $('.datepicker--days-names', this.$el);\r\n            this.$cells = $('.datepicker--cells', this.$el);\r\n        },\r\n\r\n        _getDayNamesHtml: function (firstDay, curDay, html, i) {\r\n            curDay = curDay != undefined ? curDay : firstDay;\r\n            html = html ? html : '';\r\n            i = i != undefined ? i : 0;\r\n\r\n            if (i > 7) return html;\r\n            if (curDay == 7) return this._getDayNamesHtml(firstDay, 0, html, ++i);\r\n\r\n            html += '<div class=\"datepicker--day-name' + (this.d.isWeekend(curDay) ? \" -weekend-\" : \"\") + '\">' + this.d.loc.daysMin[curDay] + '</div>';\r\n\r\n            return this._getDayNamesHtml(firstDay, ++curDay, html, ++i);\r\n        },\r\n\r\n        _getCellContents: function (date, type) {\r\n            var classes = \"datepicker--cell datepicker--cell-\" + type,\r\n                currentDate = new Date(),\r\n                parent = this.d,\r\n                minRange = dp.resetTime(parent.minRange),\r\n                maxRange = dp.resetTime(parent.maxRange),\r\n                opts = parent.opts,\r\n                d = dp.getParsedDate(date),\r\n                render = {},\r\n                html = d.date;\r\n\r\n            switch (type) {\r\n                case 'day':\r\n                    if (parent.isWeekend(d.day)) classes += \" -weekend-\";\r\n                    if (d.month != this.d.parsedDate.month) {\r\n                        classes += \" -other-month-\";\r\n                        if (!opts.selectOtherMonths) {\r\n                            classes += \" -disabled-\";\r\n                        }\r\n                        if (!opts.showOtherMonths) html = '';\r\n                    }\r\n                    break;\r\n                case 'month':\r\n                    html = parent.loc[parent.opts.monthsField][d.month];\r\n                    break;\r\n                case 'year':\r\n                    var decade = parent.curDecade;\r\n                    html = d.year;\r\n                    if (d.year < decade[0] || d.year > decade[1]) {\r\n                        classes += ' -other-decade-';\r\n                        if (!opts.selectOtherYears) {\r\n                            classes += \" -disabled-\";\r\n                        }\r\n                        if (!opts.showOtherYears) html = '';\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            if (opts.onRenderCell) {\r\n                render = opts.onRenderCell(date, type) || {};\r\n                html = render.html ? render.html : html;\r\n                classes += render.classes ? ' ' + render.classes : '';\r\n            }\r\n\r\n            if (opts.range) {\r\n                if (dp.isSame(minRange, date, type)) classes += ' -range-from-';\r\n                if (dp.isSame(maxRange, date, type)) classes += ' -range-to-';\r\n\r\n                if (parent.selectedDates.length == 1 && parent.focused) {\r\n                    if (\r\n                        (dp.bigger(minRange, date) && dp.less(parent.focused, date)) ||\r\n                        (dp.less(maxRange, date) && dp.bigger(parent.focused, date)))\r\n                    {\r\n                        classes += ' -in-range-'\r\n                    }\r\n\r\n                    if (dp.less(maxRange, date) && dp.isSame(parent.focused, date)) {\r\n                        classes += ' -range-from-'\r\n                    }\r\n                    if (dp.bigger(minRange, date) && dp.isSame(parent.focused, date)) {\r\n                        classes += ' -range-to-'\r\n                    }\r\n\r\n                } else if (parent.selectedDates.length == 2) {\r\n                    if (dp.bigger(minRange, date) && dp.less(maxRange, date)) {\r\n                        classes += ' -in-range-'\r\n                    }\r\n                }\r\n            }\r\n\r\n\r\n            if (dp.isSame(currentDate, date, type)) classes += ' -current-';\r\n            if (parent.focused && dp.isSame(date, parent.focused, type)) classes += ' -focus-';\r\n            if (parent._isSelected(date, type)) classes += ' -selected-';\r\n            if (!parent._isInRange(date, type) || render.disabled) classes += ' -disabled-';\r\n\r\n            return {\r\n                html: html,\r\n                classes: classes\r\n            }\r\n        },\r\n\r\n        /**\r\n         * Calculates days number to render. Generates days html and returns it.\r\n         * @param {object} date - Date object\r\n         * @returns {string}\r\n         * @private\r\n         */\r\n        _getDaysHtml: function (date) {\r\n            var totalMonthDays = dp.getDaysCount(date),\r\n                firstMonthDay = new Date(date.getFullYear(), date.getMonth(), 1).getDay(),\r\n                lastMonthDay = new Date(date.getFullYear(), date.getMonth(), totalMonthDays).getDay(),\r\n                daysFromPevMonth = firstMonthDay - this.d.loc.firstDay,\r\n                daysFromNextMonth = 6 - lastMonthDay + this.d.loc.firstDay;\r\n\r\n            daysFromPevMonth = daysFromPevMonth < 0 ? daysFromPevMonth + 7 : daysFromPevMonth;\r\n            daysFromNextMonth = daysFromNextMonth > 6 ? daysFromNextMonth - 7 : daysFromNextMonth;\r\n\r\n            var startDayIndex = -daysFromPevMonth + 1,\r\n                m, y,\r\n                html = '';\r\n\r\n            for (var i = startDayIndex, max = totalMonthDays + daysFromNextMonth; i <= max; i++) {\r\n                y = date.getFullYear();\r\n                m = date.getMonth();\r\n\r\n                html += this._getDayHtml(new Date(y, m, i))\r\n            }\r\n\r\n            return html;\r\n        },\r\n\r\n        _getDayHtml: function (date) {\r\n           var content = this._getCellContents(date, 'day');\r\n\r\n            return '<div class=\"' + content.classes + '\" ' +\r\n                'data-date=\"' + date.getDate() + '\" ' +\r\n                'data-month=\"' + date.getMonth() + '\" ' +\r\n                'data-year=\"' + date.getFullYear() + '\">' + content.html + '</div>';\r\n        },\r\n\r\n        /**\r\n         * Generates months html\r\n         * @param {object} date - date instance\r\n         * @returns {string}\r\n         * @private\r\n         */\r\n        _getMonthsHtml: function (date) {\r\n            var html = '',\r\n                d = dp.getParsedDate(date),\r\n                i = 0;\r\n\r\n            while(i < 12) {\r\n                html += this._getMonthHtml(new Date(d.year, i));\r\n                i++\r\n            }\r\n\r\n            return html;\r\n        },\r\n\r\n        _getMonthHtml: function (date) {\r\n            var content = this._getCellContents(date, 'month');\r\n\r\n            return '<div class=\"' + content.classes + '\" data-month=\"' + date.getMonth() + '\">' + content.html + '</div>'\r\n        },\r\n\r\n        _getYearsHtml: function (date) {\r\n            var d = dp.getParsedDate(date),\r\n                decade = dp.getDecade(date),\r\n                firstYear = decade[0] - 1,\r\n                html = '',\r\n                i = firstYear;\r\n\r\n            for (i; i <= decade[1] + 1; i++) {\r\n                html += this._getYearHtml(new Date(i , 0));\r\n            }\r\n\r\n            return html;\r\n        },\r\n\r\n        _getYearHtml: function (date) {\r\n            var content = this._getCellContents(date, 'year');\r\n\r\n            return '<div class=\"' + content.classes + '\" data-year=\"' + date.getFullYear() + '\">' + content.html + '</div>'\r\n        },\r\n\r\n        _renderTypes: {\r\n            days: function () {\r\n                var dayNames = this._getDayNamesHtml(this.d.loc.firstDay),\r\n                    days = this._getDaysHtml(this.d.currentDate);\r\n\r\n                this.$cells.html(days);\r\n                this.$names.html(dayNames)\r\n            },\r\n            months: function () {\r\n                var html = this._getMonthsHtml(this.d.currentDate);\r\n\r\n                this.$cells.html(html)\r\n            },\r\n            years: function () {\r\n                var html = this._getYearsHtml(this.d.currentDate);\r\n\r\n                this.$cells.html(html)\r\n            }\r\n        },\r\n\r\n        _render: function () {\r\n            if (this.opts.onlyTimepicker) return;\r\n            this._renderTypes[this.type].bind(this)();\r\n        },\r\n\r\n        _update: function () {\r\n            var $cells = $('.datepicker--cell', this.$cells),\r\n                _this = this,\r\n                classes,\r\n                $cell,\r\n                date;\r\n            $cells.each(function (cell, i) {\r\n                $cell = $(this);\r\n                date = _this.d._getDateFromCell($(this));\r\n                classes = _this._getCellContents(date, _this.d.cellType);\r\n                $cell.attr('class',classes.classes)\r\n            });\r\n        },\r\n\r\n        show: function () {\r\n            if (this.opts.onlyTimepicker) return;\r\n            this.$el.addClass('active');\r\n            this.acitve = true;\r\n        },\r\n\r\n        hide: function () {\r\n            this.$el.removeClass('active');\r\n            this.active = false;\r\n        },\r\n\r\n        //  Events\r\n        // -------------------------------------------------\r\n\r\n        _handleClick: function (el) {\r\n            var date = el.data('date') || 1,\r\n                month = el.data('month') || 0,\r\n                year = el.data('year') || this.d.parsedDate.year,\r\n                dp = this.d;\r\n            // Change view if min view does not reach yet\r\n            if (dp.view != this.opts.minView) {\r\n                dp.down(new Date(year, month, date));\r\n                return;\r\n            }\r\n            // Select date if min view is reached\r\n            var selectedDate = new Date(year, month, date),\r\n                alreadySelected = this.d._isSelected(selectedDate, this.d.cellType);\r\n\r\n            if (!alreadySelected) {\r\n                dp._trigger('clickCell', selectedDate);\r\n                return;\r\n            }\r\n\r\n            dp._handleAlreadySelectedDates.bind(dp, alreadySelected, selectedDate)();\r\n\r\n        },\r\n\r\n        _onClickCell: function (e) {\r\n            var $el = $(e.target).closest('.datepicker--cell');\r\n\r\n            if ($el.hasClass('-disabled-')) return;\r\n\r\n            this._handleClick.bind(this)($el);\r\n        }\r\n    };\r\n})();\r\n", ";(function () {\r\n    var template = '' +\r\n        '<div class=\"datepicker--nav-action\" data-action=\"prev\">#{prevHtml}</div>' +\r\n        '<div class=\"datepicker--nav-title\">#{title}</div>' +\r\n        '<div class=\"datepicker--nav-action\" data-action=\"next\">#{nextHtml}</div>',\r\n        buttonsContainerTemplate = '<div class=\"datepicker--buttons\"></div>',\r\n        button = '<span class=\"datepicker--button\" data-action=\"#{action}\">#{label}</span>',\r\n        datepicker = $.fn.datepicker,\r\n        dp = datepicker.Constructor;\r\n\r\n    datepicker.Navigation = function (d, opts) {\r\n        this.d = d;\r\n        this.opts = opts;\r\n\r\n        this.$buttonsContainer = '';\r\n\r\n        this.init();\r\n    };\r\n\r\n    datepicker.Navigation.prototype = {\r\n        init: function () {\r\n            this._buildBaseHtml();\r\n            this._bindEvents();\r\n        },\r\n\r\n        _bindEvents: function () {\r\n            this.d.$nav.on('click', '.datepicker--nav-action', $.proxy(this._onClickNavButton, this));\r\n            this.d.$nav.on('click', '.datepicker--nav-title', $.proxy(this._onClickNavTitle, this));\r\n            this.d.$datepicker.on('click', '.datepicker--button', $.proxy(this._onClickNavButton, this));\r\n        },\r\n\r\n        _buildBaseHtml: function () {\r\n            if (!this.opts.onlyTimepicker) {\r\n                this._render();\r\n            }\r\n            this._addButtonsIfNeed();\r\n        },\r\n\r\n        _addButtonsIfNeed: function () {\r\n            if (this.opts.todayButton) {\r\n                this._addButton('today')\r\n            }\r\n            if (this.opts.clearButton) {\r\n                this._addButton('clear')\r\n            }\r\n        },\r\n\r\n        _render: function () {\r\n            var title = this._getTitle(this.d.currentDate),\r\n                html = dp.template(template, $.extend({title: title}, this.opts));\r\n            this.d.$nav.html(html);\r\n            if (this.d.view == 'years') {\r\n                $('.datepicker--nav-title', this.d.$nav).addClass('-disabled-');\r\n            }\r\n            this.setNavStatus();\r\n        },\r\n\r\n        _getTitle: function (date) {\r\n            return this.d.formatDate(this.opts.navTitles[this.d.view], date)\r\n        },\r\n\r\n        _addButton: function (type) {\r\n            if (!this.$buttonsContainer.length) {\r\n                this._addButtonsContainer();\r\n            }\r\n\r\n            var data = {\r\n                    action: type,\r\n                    label: this.d.loc[type]\r\n                },\r\n                html = dp.template(button, data);\r\n\r\n            if ($('[data-action=' + type + ']', this.$buttonsContainer).length) return;\r\n            this.$buttonsContainer.append(html);\r\n        },\r\n\r\n        _addButtonsContainer: function () {\r\n            this.d.$datepicker.append(buttonsContainerTemplate);\r\n            this.$buttonsContainer = $('.datepicker--buttons', this.d.$datepicker);\r\n        },\r\n\r\n        setNavStatus: function () {\r\n            if (!(this.opts.minDate || this.opts.maxDate) || !this.opts.disableNavWhenOutOfRange) return;\r\n\r\n            var date = this.d.parsedDate,\r\n                m = date.month,\r\n                y = date.year,\r\n                d = date.date;\r\n\r\n            switch (this.d.view) {\r\n                case 'days':\r\n                    if (!this.d._isInRange(new Date(y, m-1, 1), 'month')) {\r\n                        this._disableNav('prev')\r\n                    }\r\n                    if (!this.d._isInRange(new Date(y, m+1, 1), 'month')) {\r\n                        this._disableNav('next')\r\n                    }\r\n                    break;\r\n                case 'months':\r\n                    if (!this.d._isInRange(new Date(y-1, m, d), 'year')) {\r\n                        this._disableNav('prev')\r\n                    }\r\n                    if (!this.d._isInRange(new Date(y+1, m, d), 'year')) {\r\n                        this._disableNav('next')\r\n                    }\r\n                    break;\r\n                case 'years':\r\n                    var decade = dp.getDecade(this.d.date);\r\n                    if (!this.d._isInRange(new Date(decade[0] - 1, 0, 1), 'year')) {\r\n                        this._disableNav('prev')\r\n                    }\r\n                    if (!this.d._isInRange(new Date(decade[1] + 1, 0, 1), 'year')) {\r\n                        this._disableNav('next')\r\n                    }\r\n                    break;\r\n            }\r\n        },\r\n\r\n        _disableNav: function (nav) {\r\n            $('[data-action=\"' + nav + '\"]', this.d.$nav).addClass('-disabled-')\r\n        },\r\n\r\n        _activateNav: function (nav) {\r\n            $('[data-action=\"' + nav + '\"]', this.d.$nav).removeClass('-disabled-')\r\n        },\r\n\r\n        _onClickNavButton: function (e) {\r\n            var $el = $(e.target).closest('[data-action]'),\r\n                action = $el.data('action');\r\n\r\n            this.d[action]();\r\n        },\r\n\r\n        _onClickNavTitle: function (e) {\r\n            if ($(e.target).hasClass('-disabled-')) return;\r\n\r\n            if (this.d.view == 'days') {\r\n                return this.d.view = 'months'\r\n            }\r\n\r\n            this.d.view = 'years';\r\n        }\r\n    }\r\n\r\n})();\r\n", ";(function () {\r\n    var template = '<div class=\"datepicker--time\">' +\r\n        '<div class=\"datepicker--time-current\">' +\r\n        '   <span class=\"datepicker--time-current-hours\">#{hourVisible}</span>' +\r\n        '   <span class=\"datepicker--time-current-colon\">:</span>' +\r\n        '   <span class=\"datepicker--time-current-minutes\">#{minValue}</span>' +\r\n        '</div>' +\r\n        '<div class=\"datepicker--time-sliders\">' +\r\n        '   <div class=\"datepicker--time-row\">' +\r\n        '      <input type=\"range\" name=\"hours\" value=\"#{hourValue}\" min=\"#{hourMin}\" max=\"#{hourMax}\" step=\"#{hourStep}\"/>' +\r\n        '   </div>' +\r\n        '   <div class=\"datepicker--time-row\">' +\r\n        '      <input type=\"range\" name=\"minutes\" value=\"#{minValue}\" min=\"#{minMin}\" max=\"#{minMax}\" step=\"#{minStep}\"/>' +\r\n        '   </div>' +\r\n        '</div>' +\r\n        '</div>',\r\n        datepicker = $.fn.datepicker,\r\n        dp = datepicker.Constructor;\r\n\r\n    datepicker.Timepicker = function (inst, opts) {\r\n        this.d = inst;\r\n        this.opts = opts;\r\n\r\n        this.init();\r\n    };\r\n\r\n    datepicker.Timepicker.prototype = {\r\n        init: function () {\r\n            var input = 'input';\r\n            this._setTime(this.d.date);\r\n            this._buildHTML();\r\n\r\n            if (navigator.userAgent.match(/trident/gi)) {\r\n                input = 'change';\r\n            }\r\n\r\n            this.d.$el.on('selectDate', this._onSelectDate.bind(this));\r\n            this.$ranges.on(input, this._onChangeRange.bind(this));\r\n            this.$ranges.on('mouseup', this._onMouseUpRange.bind(this));\r\n            this.$ranges.on('mousemove focus ', this._onMouseEnterRange.bind(this));\r\n            this.$ranges.on('mouseout blur', this._onMouseOutRange.bind(this));\r\n        },\r\n\r\n        _setTime: function (date) {\r\n            var _date = dp.getParsedDate(date);\r\n\r\n            this._handleDate(date);\r\n            this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;\r\n            this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;\r\n        },\r\n\r\n        /**\r\n         * Sets minHours and minMinutes from date (usually it's a minDate)\r\n         * Also changes minMinutes if current hours are bigger then @date hours\r\n         * @param date {Date}\r\n         * @private\r\n         */\r\n        _setMinTimeFromDate: function (date) {\r\n            this.minHours = date.getHours();\r\n            this.minMinutes = date.getMinutes();\r\n\r\n            // If, for example, min hours are 10, and current hours are 12,\r\n            // update minMinutes to default value, to be able to choose whole range of values\r\n            if (this.d.lastSelectedDate) {\r\n                if (this.d.lastSelectedDate.getHours() > date.getHours()) {\r\n                    this.minMinutes = this.opts.minMinutes;\r\n                }\r\n            }\r\n        },\r\n\r\n        _setMaxTimeFromDate: function (date) {\r\n            this.maxHours = date.getHours();\r\n            this.maxMinutes = date.getMinutes();\r\n\r\n            if (this.d.lastSelectedDate) {\r\n                if (this.d.lastSelectedDate.getHours() < date.getHours()) {\r\n                    this.maxMinutes = this.opts.maxMinutes;\r\n                }\r\n            }\r\n        },\r\n\r\n        _setDefaultMinMaxTime: function () {\r\n            var maxHours = 23,\r\n                maxMinutes = 59,\r\n                opts = this.opts;\r\n\r\n            this.minHours = opts.minHours < 0 || opts.minHours > maxHours ? 0 : opts.minHours;\r\n            this.minMinutes = opts.minMinutes < 0 || opts.minMinutes > maxMinutes ? 0 : opts.minMinutes;\r\n            this.maxHours = opts.maxHours < 0 || opts.maxHours > maxHours ? maxHours : opts.maxHours;\r\n            this.maxMinutes = opts.maxMinutes < 0 || opts.maxMinutes > maxMinutes ? maxMinutes : opts.maxMinutes;\r\n        },\r\n\r\n        /**\r\n         * Looks for min/max hours/minutes and if current values\r\n         * are out of range sets valid values.\r\n         * @private\r\n         */\r\n        _validateHoursMinutes: function (date) {\r\n            if (this.hours < this.minHours) {\r\n                this.hours = this.minHours;\r\n            } else if (this.hours > this.maxHours) {\r\n                this.hours = this.maxHours;\r\n            }\r\n\r\n            if (this.minutes < this.minMinutes) {\r\n                this.minutes = this.minMinutes;\r\n            } else if (this.minutes > this.maxMinutes) {\r\n                this.minutes = this.maxMinutes;\r\n            }\r\n        },\r\n\r\n        _buildHTML: function () {\r\n            var lz = dp.getLeadingZeroNum,\r\n                data = {\r\n                    hourMin: this.minHours,\r\n                    hourMax: lz(this.maxHours),\r\n                    hourStep: this.opts.hoursStep,\r\n                    hourValue: this.hours,\r\n                    hourVisible: lz(this.displayHours),\r\n                    minMin: this.minMinutes,\r\n                    minMax: lz(this.maxMinutes),\r\n                    minStep: this.opts.minutesStep,\r\n                    minValue: lz(this.minutes)\r\n                },\r\n                _template = dp.template(template, data);\r\n\r\n            this.$timepicker = $(_template).appendTo(this.d.$datepicker);\r\n            this.$ranges = $('[type=\"range\"]', this.$timepicker);\r\n            this.$hours = $('[name=\"hours\"]', this.$timepicker);\r\n            this.$minutes = $('[name=\"minutes\"]', this.$timepicker);\r\n            this.$hoursText = $('.datepicker--time-current-hours', this.$timepicker);\r\n            this.$minutesText = $('.datepicker--time-current-minutes', this.$timepicker);\r\n\r\n            if (this.d.ampm) {\r\n                this.$ampm = $('<span class=\"datepicker--time-current-ampm\">')\r\n                    .appendTo($('.datepicker--time-current', this.$timepicker))\r\n                    .html(this.dayPeriod);\r\n\r\n                this.$timepicker.addClass('-am-pm-');\r\n            }\r\n        },\r\n\r\n        _updateCurrentTime: function () {\r\n            var h =  dp.getLeadingZeroNum(this.displayHours),\r\n                m = dp.getLeadingZeroNum(this.minutes);\r\n\r\n            this.$hoursText.html(h);\r\n            this.$minutesText.html(m);\r\n\r\n            if (this.d.ampm) {\r\n                this.$ampm.html(this.dayPeriod);\r\n            }\r\n        },\r\n\r\n        _updateRanges: function () {\r\n            this.$hours.attr({\r\n                min: this.minHours,\r\n                max: this.maxHours\r\n            }).val(this.hours);\r\n\r\n            this.$minutes.attr({\r\n                min: this.minMinutes,\r\n                max: this.maxMinutes\r\n            }).val(this.minutes)\r\n        },\r\n\r\n        /**\r\n         * Sets minHours, minMinutes etc. from date. If date is not passed, than sets\r\n         * values from options\r\n         * @param [date] {object} - Date object, to get values from\r\n         * @private\r\n         */\r\n        _handleDate: function (date) {\r\n            this._setDefaultMinMaxTime();\r\n            if (date) {\r\n                if (dp.isSame(date, this.d.opts.minDate)) {\r\n                    this._setMinTimeFromDate(this.d.opts.minDate);\r\n                } else if (dp.isSame(date, this.d.opts.maxDate)) {\r\n                    this._setMaxTimeFromDate(this.d.opts.maxDate);\r\n                }\r\n            }\r\n\r\n            this._validateHoursMinutes(date);\r\n        },\r\n\r\n        update: function () {\r\n            this._updateRanges();\r\n            this._updateCurrentTime();\r\n        },\r\n\r\n        /**\r\n         * Calculates valid hour value to display in text input and datepicker's body.\r\n         * @param date {Date|Number} - date or hours\r\n         * @param [ampm] {Boolean} - 12 hours mode\r\n         * @returns {{hours: *, dayPeriod: string}}\r\n         * @private\r\n         */\r\n        _getValidHoursFromDate: function (date, ampm) {\r\n            var d = date,\r\n                hours = date;\r\n\r\n            if (date instanceof Date) {\r\n                d = dp.getParsedDate(date);\r\n                hours = d.hours;\r\n            }\r\n\r\n            var _ampm = ampm || this.d.ampm,\r\n                dayPeriod = 'am';\r\n\r\n            if (_ampm) {\r\n                switch(true) {\r\n                    case hours == 0:\r\n                        hours = 12;\r\n                        break;\r\n                    case hours == 12:\r\n                        dayPeriod = 'pm';\r\n                        break;\r\n                    case hours > 11:\r\n                        hours = hours - 12;\r\n                        dayPeriod = 'pm';\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n\r\n            return {\r\n                hours: hours,\r\n                dayPeriod: dayPeriod\r\n            }\r\n        },\r\n\r\n        set hours (val) {\r\n            this._hours = val;\r\n\r\n            var displayHours = this._getValidHoursFromDate(val);\r\n\r\n            this.displayHours = displayHours.hours;\r\n            this.dayPeriod = displayHours.dayPeriod;\r\n        },\r\n\r\n        get hours() {\r\n            return this._hours;\r\n        },\r\n\r\n        //  Events\r\n        // -------------------------------------------------\r\n\r\n        _onChangeRange: function (e) {\r\n            var $target = $(e.target),\r\n                name = $target.attr('name');\r\n            \r\n            this.d.timepickerIsActive = true;\r\n\r\n            this[name] = $target.val();\r\n            this._updateCurrentTime();\r\n            this.d._trigger('timeChange', [this.hours, this.minutes]);\r\n\r\n            this._handleDate(this.d.lastSelectedDate);\r\n            this.update()\r\n        },\r\n\r\n        _onSelectDate: function (e, data) {\r\n            this._handleDate(data);\r\n            this.update();\r\n        },\r\n\r\n        _onMouseEnterRange: function (e) {\r\n            var name = $(e.target).attr('name');\r\n            $('.datepicker--time-current-' + name, this.$timepicker).addClass('-focus-');\r\n        },\r\n\r\n        _onMouseOutRange: function (e) {\r\n            var name = $(e.target).attr('name');\r\n            if (this.d.inFocus) return; // Prevent removing focus when mouse out of range slider\r\n            $('.datepicker--time-current-' + name, this.$timepicker).removeClass('-focus-');\r\n        },\r\n\r\n        _onMouseUpRange: function (e) {\r\n            this.d.timepickerIsActive = false;\r\n        }\r\n    };\r\n})();\r\n", "/*! axe v4.2.1\n * Copyright (c) 2021 Deque Systems, Inc.\n *\n * Your use of this Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at http://mozilla.org/MPL/2.0/.\n *\n * This entire copyright notice must appear in every copy of this file you\n * distribute or in any file that contains substantial portions of this source\n * code.\n */\n(function axeFunction(window) {\n  var global = window;\n  var document = window.document;\n  'use strict';\n  function _typeof(obj) {\n    '@babel/helpers - typeof';\n    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n      _typeof = function _typeof(obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function _typeof(obj) {\n        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n      };\n    }\n    return _typeof(obj);\n  }\n  var axe = axe || {};\n  axe.version = '4.2.1';\n  if (typeof define === 'function' && define.amd) {\n    define('axe-core', [], function() {\n      return axe;\n    });\n  }\n  if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && module.exports && typeof axeFunction.toString === 'function') {\n    axe.source = '(' + axeFunction.toString() + ')(typeof window === \"object\" ? window : this);';\n    module.exports = axe;\n  }\n  if (typeof window.getComputedStyle === 'function') {\n    window.axe = axe;\n  }\n  var commons;\n  function SupportError(error) {\n    this.name = 'SupportError';\n    this.cause = error.cause;\n    this.message = '`'.concat(error.cause, '` - feature unsupported in your environment.');\n    if (error.ruleId) {\n      this.ruleId = error.ruleId;\n      this.message += ' Skipping '.concat(this.ruleId, ' rule.');\n    }\n    this.stack = new Error().stack;\n  }\n  SupportError.prototype = Object.create(Error.prototype);\n  SupportError.prototype.constructor = SupportError;\n  'use strict';\n  function _objectWithoutProperties(source, excluded) {\n    if (source == null) {\n      return {};\n    }\n    var target = _objectWithoutPropertiesLoose(source, excluded);\n    var key, i;\n    if (Object.getOwnPropertySymbols) {\n      var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n      for (i = 0; i < sourceSymbolKeys.length; i++) {\n        key = sourceSymbolKeys[i];\n        if (excluded.indexOf(key) >= 0) {\n          continue;\n        }\n        if (!Object.prototype.propertyIsEnumerable.call(source, key)) {\n          continue;\n        }\n        target[key] = source[key];\n      }\n    }\n    return target;\n  }\n  function _objectWithoutPropertiesLoose(source, excluded) {\n    if (source == null) {\n      return {};\n    }\n    var target = {};\n    var sourceKeys = Object.keys(source);\n    var key, i;\n    for (i = 0; i < sourceKeys.length; i++) {\n      key = sourceKeys[i];\n      if (excluded.indexOf(key) >= 0) {\n        continue;\n      }\n      target[key] = source[key];\n    }\n    return target;\n  }\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n    return obj;\n  }\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function');\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) {\n      _setPrototypeOf(subClass, superClass);\n    }\n  }\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n    return _setPrototypeOf(o, p);\n  }\n  function _createSuper(Derived) {\n    var hasNativeReflectConstruct = _isNativeReflectConstruct();\n    return function _createSuperInternal() {\n      var Super = _getPrototypeOf(Derived), result;\n      if (hasNativeReflectConstruct) {\n        var NewTarget = _getPrototypeOf(this).constructor;\n        result = Reflect.construct(Super, arguments, NewTarget);\n      } else {\n        result = Super.apply(this, arguments);\n      }\n      return _possibleConstructorReturn(this, result);\n    };\n  }\n  function _possibleConstructorReturn(self, call) {\n    if (call && (_typeof(call) === 'object' || typeof call === 'function')) {\n      return call;\n    }\n    return _assertThisInitialized(self);\n  }\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError('this hasn\\'t been initialised - super() hasn\\'t been called');\n    }\n    return self;\n  }\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === 'undefined' || !Reflect.construct) {\n      return false;\n    }\n    if (Reflect.construct.sham) {\n      return false;\n    }\n    if (typeof Proxy === 'function') {\n      return true;\n    }\n    try {\n      Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n  function _nonIterableSpread() {\n    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  }\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== 'undefined' && Symbol.iterator in Object(iter)) {\n      return Array.from(iter);\n    }\n  }\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) {\n      return _arrayLikeToArray(arr);\n    }\n  }\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n  }\n  function _nonIterableRest() {\n    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  }\n  function _iterableToArrayLimit(arr, i) {\n    if (typeof Symbol === 'undefined' || !(Symbol.iterator in Object(arr))) {\n      return;\n    }\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n        if (i && _arr.length === i) {\n          break;\n        }\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i['return'] != null) {\n          _i['return']();\n        }\n      } finally {\n        if (_d) {\n          throw _e;\n        }\n      }\n    }\n    return _arr;\n  }\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) {\n      return arr;\n    }\n  }\n  function _extends() {\n    _extends = Object.assign || function(target) {\n      for (var i = 1; i < arguments.length; i++) {\n        var source = arguments[i];\n        for (var key in source) {\n          if (Object.prototype.hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n          }\n        }\n      }\n      return target;\n    };\n    return _extends.apply(this, arguments);\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) {\n        descriptor.writable = true;\n      }\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) {\n      _defineProperties(Constructor.prototype, protoProps);\n    }\n    if (staticProps) {\n      _defineProperties(Constructor, staticProps);\n    }\n    return Constructor;\n  }\n  function _createForOfIteratorHelper(o, allowArrayLike) {\n    var it;\n    if (typeof Symbol === 'undefined' || o[Symbol.iterator] == null) {\n      if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === 'number') {\n        if (it) {\n          o = it;\n        }\n        var i = 0;\n        var F = function F() {};\n        return {\n          s: F,\n          n: function n() {\n            if (i >= o.length) {\n              return {\n                done: true\n              };\n            }\n            return {\n              done: false,\n              value: o[i++]\n            };\n          },\n          e: function e(_e2) {\n            throw _e2;\n          },\n          f: F\n        };\n      }\n      throw new TypeError('Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n    }\n    var normalCompletion = true, didErr = false, err;\n    return {\n      s: function s() {\n        it = o[Symbol.iterator]();\n      },\n      n: function n() {\n        var step = it.next();\n        normalCompletion = step.done;\n        return step;\n      },\n      e: function e(_e3) {\n        didErr = true;\n        err = _e3;\n      },\n      f: function f() {\n        try {\n          if (!normalCompletion && it['return'] != null) {\n            it['return']();\n          }\n        } finally {\n          if (didErr) {\n            throw err;\n          }\n        }\n      }\n    };\n  }\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) {\n      return;\n    }\n    if (typeof o === 'string') {\n      return _arrayLikeToArray(o, minLen);\n    }\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === 'Object' && o.constructor) {\n      n = o.constructor.name;\n    }\n    if (n === 'Map' || n === 'Set') {\n      return Array.from(o);\n    }\n    if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {\n      return _arrayLikeToArray(o, minLen);\n    }\n  }\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) {\n      len = arr.length;\n    }\n    for (var i = 0, arr2 = new Array(len); i < len; i++) {\n      arr2[i] = arr[i];\n    }\n    return arr2;\n  }\n  function _typeof(obj) {\n    '@babel/helpers - typeof';\n    if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n      _typeof = function _typeof(obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function _typeof(obj) {\n        return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n      };\n    }\n    return _typeof(obj);\n  }\n  (function() {\n    var __create = Object.create;\n    var __defProp = Object.defineProperty;\n    var __getProtoOf = Object.getPrototypeOf;\n    var __hasOwnProp = Object.prototype.hasOwnProperty;\n    var __getOwnPropNames = Object.getOwnPropertyNames;\n    var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n    var __markAsModule = function __markAsModule(target) {\n      return __defProp(target, '__esModule', {\n        value: true\n      });\n    };\n    var __commonJS = function __commonJS(callback, module) {\n      return function() {\n        if (!module) {\n          module = {\n            exports: {}\n          };\n          callback(module.exports, module);\n        }\n        return module.exports;\n      };\n    };\n    var __export = function __export(target, all) {\n      __markAsModule(target);\n      for (var name in all) {\n        __defProp(target, name, {\n          get: all[name],\n          enumerable: true\n        });\n      }\n    };\n    var __exportStar = function __exportStar(target, module) {\n      __markAsModule(target);\n      if (_typeof(module) === 'object' || typeof module === 'function') {\n        var _iterator = _createForOfIteratorHelper(__getOwnPropNames(module)), _step;\n        try {\n          var _loop = function _loop() {\n            var key = _step.value;\n            if (!__hasOwnProp.call(target, key) && key !== 'default') {\n              __defProp(target, key, {\n                get: function get() {\n                  return module[key];\n                },\n                enumerable: __getOwnPropDesc(module, key).enumerable\n              });\n            }\n          };\n          for (_iterator.s(); !(_step = _iterator.n()).done; ) {\n            _loop();\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      }\n      return target;\n    };\n    var __toModule = function __toModule(module) {\n      if (module && module.__esModule) {\n        return module;\n      }\n      return __exportStar(__defProp(__create(__getProtoOf(module)), 'default', {\n        value: module,\n        enumerable: true\n      }), module);\n    };\n    var require_utils = __commonJS(function(exports) {\n      'use strict';\n      Object.defineProperty(exports, '__esModule', {\n        value: true\n      });\n      function isIdentStart(c) {\n        return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c === '-' || c === '_';\n      }\n      exports.isIdentStart = isIdentStart;\n      function isIdent(c) {\n        return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c === '-' || c === '_';\n      }\n      exports.isIdent = isIdent;\n      function isHex(c) {\n        return c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= '0' && c <= '9';\n      }\n      exports.isHex = isHex;\n      function escapeIdentifier(s) {\n        var len = s.length;\n        var result = '';\n        var i = 0;\n        while (i < len) {\n          var chr = s.charAt(i);\n          if (exports.identSpecialChars[chr]) {\n            result += '\\\\' + chr;\n          } else {\n            if (!(chr === '_' || chr === '-' || chr >= 'A' && chr <= 'Z' || chr >= 'a' && chr <= 'z' || i !== 0 && chr >= '0' && chr <= '9')) {\n              var charCode = chr.charCodeAt(0);\n              if ((charCode & 63488) === 55296) {\n                var extraCharCode = s.charCodeAt(i++);\n                if ((charCode & 64512) !== 55296 || (extraCharCode & 64512) !== 56320) {\n                  throw Error('UCS-2(decode): illegal sequence');\n                }\n                charCode = ((charCode & 1023) << 10) + (extraCharCode & 1023) + 65536;\n              }\n              result += '\\\\' + charCode.toString(16) + ' ';\n            } else {\n              result += chr;\n            }\n          }\n          i++;\n        }\n        return result;\n      }\n      exports.escapeIdentifier = escapeIdentifier;\n      function escapeStr(s) {\n        var len = s.length;\n        var result = '';\n        var i = 0;\n        var replacement;\n        while (i < len) {\n          var chr = s.charAt(i);\n          if (chr === '\"') {\n            chr = '\\\\\"';\n          } else if (chr === '\\\\') {\n            chr = '\\\\\\\\';\n          } else if ((replacement = exports.strReplacementsRev[chr]) !== void 0) {\n            chr = replacement;\n          }\n          result += chr;\n          i++;\n        }\n        return '\"' + result + '\"';\n      }\n      exports.escapeStr = escapeStr;\n      exports.identSpecialChars = {\n        '!': true,\n        '\"': true,\n        '#': true,\n        $: true,\n        '%': true,\n        '&': true,\n        '\\'': true,\n        '(': true,\n        ')': true,\n        '*': true,\n        '+': true,\n        ',': true,\n        '.': true,\n        '/': true,\n        ';': true,\n        '<': true,\n        '=': true,\n        '>': true,\n        '?': true,\n        '@': true,\n        '[': true,\n        '\\\\': true,\n        ']': true,\n        '^': true,\n        '`': true,\n        '{': true,\n        '|': true,\n        '}': true,\n        '~': true\n      };\n      exports.strReplacementsRev = {\n        '\\n': '\\\\n',\n        '\\r': '\\\\r',\n        '\\t': '\\\\t',\n        '\\f': '\\\\f',\n        '\\v': '\\\\v'\n      };\n      exports.singleQuoteEscapeChars = {\n        n: '\\n',\n        r: '\\r',\n        t: '\\t',\n        f: '\\f',\n        '\\\\': '\\\\',\n        '\\'': '\\''\n      };\n      exports.doubleQuotesEscapeChars = {\n        n: '\\n',\n        r: '\\r',\n        t: '\\t',\n        f: '\\f',\n        '\\\\': '\\\\',\n        '\"': '\"'\n      };\n    });\n    var require_parser_context = __commonJS(function(exports) {\n      'use strict';\n      Object.defineProperty(exports, '__esModule', {\n        value: true\n      });\n      var utils_1 = require_utils();\n      function parseCssSelector(str, pos, pseudos, attrEqualityMods, ruleNestingOperators, substitutesEnabled) {\n        var l = str.length;\n        var chr = '';\n        function getStr(quote, escapeTable) {\n          var result = '';\n          pos++;\n          chr = str.charAt(pos);\n          while (pos < l) {\n            if (chr === quote) {\n              pos++;\n              return result;\n            } else if (chr === '\\\\') {\n              pos++;\n              chr = str.charAt(pos);\n              var esc = void 0;\n              if (chr === quote) {\n                result += quote;\n              } else if ((esc = escapeTable[chr]) !== void 0) {\n                result += esc;\n              } else if (utils_1.isHex(chr)) {\n                var hex = chr;\n                pos++;\n                chr = str.charAt(pos);\n                while (utils_1.isHex(chr)) {\n                  hex += chr;\n                  pos++;\n                  chr = str.charAt(pos);\n                }\n                if (chr === ' ') {\n                  pos++;\n                  chr = str.charAt(pos);\n                }\n                result += String.fromCharCode(parseInt(hex, 16));\n                continue;\n              } else {\n                result += chr;\n              }\n            } else {\n              result += chr;\n            }\n            pos++;\n            chr = str.charAt(pos);\n          }\n          return result;\n        }\n        function getIdent() {\n          var result = '';\n          chr = str.charAt(pos);\n          while (pos < l) {\n            if (utils_1.isIdent(chr)) {\n              result += chr;\n            } else if (chr === '\\\\') {\n              pos++;\n              if (pos >= l) {\n                throw Error('Expected symbol but end of file reached.');\n              }\n              chr = str.charAt(pos);\n              if (utils_1.identSpecialChars[chr]) {\n                result += chr;\n              } else if (utils_1.isHex(chr)) {\n                var hex = chr;\n                pos++;\n                chr = str.charAt(pos);\n                while (utils_1.isHex(chr)) {\n                  hex += chr;\n                  pos++;\n                  chr = str.charAt(pos);\n                }\n                if (chr === ' ') {\n                  pos++;\n                  chr = str.charAt(pos);\n                }\n                result += String.fromCharCode(parseInt(hex, 16));\n                continue;\n              } else {\n                result += chr;\n              }\n            } else {\n              return result;\n            }\n            pos++;\n            chr = str.charAt(pos);\n          }\n          return result;\n        }\n        function skipWhitespace() {\n          chr = str.charAt(pos);\n          var result = false;\n          while (chr === ' ' || chr === '\\t' || chr === '\\n' || chr === '\\r' || chr === '\\f') {\n            result = true;\n            pos++;\n            chr = str.charAt(pos);\n          }\n          return result;\n        }\n        function parse2() {\n          var res = parseSelector();\n          if (pos < l) {\n            throw Error('Rule expected but \"' + str.charAt(pos) + '\" found.');\n          }\n          return res;\n        }\n        function parseSelector() {\n          var selector = parseSingleSelector();\n          if (!selector) {\n            return null;\n          }\n          var res = selector;\n          chr = str.charAt(pos);\n          while (chr === ',') {\n            pos++;\n            skipWhitespace();\n            if (res.type !== 'selectors') {\n              res = {\n                type: 'selectors',\n                selectors: [ selector ]\n              };\n            }\n            selector = parseSingleSelector();\n            if (!selector) {\n              throw Error('Rule expected after \",\".');\n            }\n            res.selectors.push(selector);\n          }\n          return res;\n        }\n        function parseSingleSelector() {\n          skipWhitespace();\n          var selector = {\n            type: 'ruleSet'\n          };\n          var rule3 = parseRule();\n          if (!rule3) {\n            return null;\n          }\n          var currentRule = selector;\n          while (rule3) {\n            rule3.type = 'rule';\n            currentRule.rule = rule3;\n            currentRule = rule3;\n            skipWhitespace();\n            chr = str.charAt(pos);\n            if (pos >= l || chr === ',' || chr === ')') {\n              break;\n            }\n            if (ruleNestingOperators[chr]) {\n              var op = chr;\n              pos++;\n              skipWhitespace();\n              rule3 = parseRule();\n              if (!rule3) {\n                throw Error('Rule expected after \"' + op + '\".');\n              }\n              rule3.nestingOperator = op;\n            } else {\n              rule3 = parseRule();\n              if (rule3) {\n                rule3.nestingOperator = null;\n              }\n            }\n          }\n          return selector;\n        }\n        function parseRule() {\n          var rule3 = null;\n          while (pos < l) {\n            chr = str.charAt(pos);\n            if (chr === '*') {\n              pos++;\n              (rule3 = rule3 || {}).tagName = '*';\n            } else if (utils_1.isIdentStart(chr) || chr === '\\\\') {\n              (rule3 = rule3 || {}).tagName = getIdent();\n            } else if (chr === '.') {\n              pos++;\n              rule3 = rule3 || {};\n              (rule3.classNames = rule3.classNames || []).push(getIdent());\n            } else if (chr === '#') {\n              pos++;\n              (rule3 = rule3 || {}).id = getIdent();\n            } else if (chr === '[') {\n              pos++;\n              skipWhitespace();\n              var attr = {\n                name: getIdent()\n              };\n              skipWhitespace();\n              if (chr === ']') {\n                pos++;\n              } else {\n                var operator = '';\n                if (attrEqualityMods[chr]) {\n                  operator = chr;\n                  pos++;\n                  chr = str.charAt(pos);\n                }\n                if (pos >= l) {\n                  throw Error('Expected \"=\" but end of file reached.');\n                }\n                if (chr !== '=') {\n                  throw Error('Expected \"=\" but \"' + chr + '\" found.');\n                }\n                attr.operator = operator + '=';\n                pos++;\n                skipWhitespace();\n                var attrValue = '';\n                attr.valueType = 'string';\n                if (chr === '\"') {\n                  attrValue = getStr('\"', utils_1.doubleQuotesEscapeChars);\n                } else if (chr === '\\'') {\n                  attrValue = getStr('\\'', utils_1.singleQuoteEscapeChars);\n                } else if (substitutesEnabled && chr === '$') {\n                  pos++;\n                  attrValue = getIdent();\n                  attr.valueType = 'substitute';\n                } else {\n                  while (pos < l) {\n                    if (chr === ']') {\n                      break;\n                    }\n                    attrValue += chr;\n                    pos++;\n                    chr = str.charAt(pos);\n                  }\n                  attrValue = attrValue.trim();\n                }\n                skipWhitespace();\n                if (pos >= l) {\n                  throw Error('Expected \"]\" but end of file reached.');\n                }\n                if (chr !== ']') {\n                  throw Error('Expected \"]\" but \"' + chr + '\" found.');\n                }\n                pos++;\n                attr.value = attrValue;\n              }\n              rule3 = rule3 || {};\n              (rule3.attrs = rule3.attrs || []).push(attr);\n            } else if (chr === ':') {\n              pos++;\n              var pseudoName = getIdent();\n              var pseudo = {\n                name: pseudoName\n              };\n              if (chr === '(') {\n                pos++;\n                var value = '';\n                skipWhitespace();\n                if (pseudos[pseudoName] === 'selector') {\n                  pseudo.valueType = 'selector';\n                  value = parseSelector();\n                } else {\n                  pseudo.valueType = pseudos[pseudoName] || 'string';\n                  if (chr === '\"') {\n                    value = getStr('\"', utils_1.doubleQuotesEscapeChars);\n                  } else if (chr === '\\'') {\n                    value = getStr('\\'', utils_1.singleQuoteEscapeChars);\n                  } else if (substitutesEnabled && chr === '$') {\n                    pos++;\n                    value = getIdent();\n                    pseudo.valueType = 'substitute';\n                  } else {\n                    while (pos < l) {\n                      if (chr === ')') {\n                        break;\n                      }\n                      value += chr;\n                      pos++;\n                      chr = str.charAt(pos);\n                    }\n                    value = value.trim();\n                  }\n                  skipWhitespace();\n                }\n                if (pos >= l) {\n                  throw Error('Expected \")\" but end of file reached.');\n                }\n                if (chr !== ')') {\n                  throw Error('Expected \")\" but \"' + chr + '\" found.');\n                }\n                pos++;\n                pseudo.value = value;\n              }\n              rule3 = rule3 || {};\n              (rule3.pseudos = rule3.pseudos || []).push(pseudo);\n            } else {\n              break;\n            }\n          }\n          return rule3;\n        }\n        return parse2();\n      }\n      exports.parseCssSelector = parseCssSelector;\n    });\n    var require_render = __commonJS(function(exports) {\n      'use strict';\n      Object.defineProperty(exports, '__esModule', {\n        value: true\n      });\n      var utils_1 = require_utils();\n      function renderEntity(entity) {\n        var res = '';\n        switch (entity.type) {\n         case 'ruleSet':\n          var currentEntity = entity.rule;\n          var parts = [];\n          while (currentEntity) {\n            if (currentEntity.nestingOperator) {\n              parts.push(currentEntity.nestingOperator);\n            }\n            parts.push(renderEntity(currentEntity));\n            currentEntity = currentEntity.rule;\n          }\n          res = parts.join(' ');\n          break;\n\n         case 'selectors':\n          res = entity.selectors.map(renderEntity).join(', ');\n          break;\n\n         case 'rule':\n          if (entity.tagName) {\n            if (entity.tagName === '*') {\n              res = '*';\n            } else {\n              res = utils_1.escapeIdentifier(entity.tagName);\n            }\n          }\n          if (entity.id) {\n            res += '#' + utils_1.escapeIdentifier(entity.id);\n          }\n          if (entity.classNames) {\n            res += entity.classNames.map(function(cn) {\n              return '.' + utils_1.escapeIdentifier(cn);\n            }).join('');\n          }\n          if (entity.attrs) {\n            res += entity.attrs.map(function(attr) {\n              if ('operator' in attr) {\n                if (attr.valueType === 'substitute') {\n                  return '[' + utils_1.escapeIdentifier(attr.name) + attr.operator + '$' + attr.value + ']';\n                } else {\n                  return '[' + utils_1.escapeIdentifier(attr.name) + attr.operator + utils_1.escapeStr(attr.value) + ']';\n                }\n              } else {\n                return '[' + utils_1.escapeIdentifier(attr.name) + ']';\n              }\n            }).join('');\n          }\n          if (entity.pseudos) {\n            res += entity.pseudos.map(function(pseudo) {\n              if (pseudo.valueType) {\n                if (pseudo.valueType === 'selector') {\n                  return ':' + utils_1.escapeIdentifier(pseudo.name) + '(' + renderEntity(pseudo.value) + ')';\n                } else if (pseudo.valueType === 'substitute') {\n                  return ':' + utils_1.escapeIdentifier(pseudo.name) + '($' + pseudo.value + ')';\n                } else if (pseudo.valueType === 'numeric') {\n                  return ':' + utils_1.escapeIdentifier(pseudo.name) + '(' + pseudo.value + ')';\n                } else {\n                  return ':' + utils_1.escapeIdentifier(pseudo.name) + '(' + utils_1.escapeIdentifier(pseudo.value) + ')';\n                }\n              } else {\n                return ':' + utils_1.escapeIdentifier(pseudo.name);\n              }\n            }).join('');\n          }\n          break;\n\n         default:\n          throw Error('Unknown entity type: \"' + entity.type + '\".');\n        }\n        return res;\n      }\n      exports.renderEntity = renderEntity;\n    });\n    var require_lib = __commonJS(function(exports) {\n      'use strict';\n      Object.defineProperty(exports, '__esModule', {\n        value: true\n      });\n      var parser_context_1 = require_parser_context();\n      var render_1 = require_render();\n      var CssSelectorParser3 = function() {\n        function CssSelectorParser4() {\n          this.pseudos = {};\n          this.attrEqualityMods = {};\n          this.ruleNestingOperators = {};\n          this.substitutesEnabled = false;\n        }\n        CssSelectorParser4.prototype.registerSelectorPseudos = function() {\n          var pseudos = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            pseudos[_i] = arguments[_i];\n          }\n          for (var _a = 0, pseudos_1 = pseudos; _a < pseudos_1.length; _a++) {\n            var pseudo = pseudos_1[_a];\n            this.pseudos[pseudo] = 'selector';\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.unregisterSelectorPseudos = function() {\n          var pseudos = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            pseudos[_i] = arguments[_i];\n          }\n          for (var _a = 0, pseudos_2 = pseudos; _a < pseudos_2.length; _a++) {\n            var pseudo = pseudos_2[_a];\n            delete this.pseudos[pseudo];\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.registerNumericPseudos = function() {\n          var pseudos = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            pseudos[_i] = arguments[_i];\n          }\n          for (var _a = 0, pseudos_3 = pseudos; _a < pseudos_3.length; _a++) {\n            var pseudo = pseudos_3[_a];\n            this.pseudos[pseudo] = 'numeric';\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.unregisterNumericPseudos = function() {\n          var pseudos = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            pseudos[_i] = arguments[_i];\n          }\n          for (var _a = 0, pseudos_4 = pseudos; _a < pseudos_4.length; _a++) {\n            var pseudo = pseudos_4[_a];\n            delete this.pseudos[pseudo];\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.registerNestingOperators = function() {\n          var operators = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            operators[_i] = arguments[_i];\n          }\n          for (var _a = 0, operators_1 = operators; _a < operators_1.length; _a++) {\n            var operator = operators_1[_a];\n            this.ruleNestingOperators[operator] = true;\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.unregisterNestingOperators = function() {\n          var operators = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            operators[_i] = arguments[_i];\n          }\n          for (var _a = 0, operators_2 = operators; _a < operators_2.length; _a++) {\n            var operator = operators_2[_a];\n            delete this.ruleNestingOperators[operator];\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.registerAttrEqualityMods = function() {\n          var mods = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            mods[_i] = arguments[_i];\n          }\n          for (var _a = 0, mods_1 = mods; _a < mods_1.length; _a++) {\n            var mod = mods_1[_a];\n            this.attrEqualityMods[mod] = true;\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.unregisterAttrEqualityMods = function() {\n          var mods = [];\n          for (var _i = 0; _i < arguments.length; _i++) {\n            mods[_i] = arguments[_i];\n          }\n          for (var _a = 0, mods_2 = mods; _a < mods_2.length; _a++) {\n            var mod = mods_2[_a];\n            delete this.attrEqualityMods[mod];\n          }\n          return this;\n        };\n        CssSelectorParser4.prototype.enableSubstitutes = function() {\n          this.substitutesEnabled = true;\n          return this;\n        };\n        CssSelectorParser4.prototype.disableSubstitutes = function() {\n          this.substitutesEnabled = false;\n          return this;\n        };\n        CssSelectorParser4.prototype.parse = function(str) {\n          return parser_context_1.parseCssSelector(str, 0, this.pseudos, this.attrEqualityMods, this.ruleNestingOperators, this.substitutesEnabled);\n        };\n        CssSelectorParser4.prototype.render = function(path) {\n          return render_1.renderEntity(path).trim();\n        };\n        return CssSelectorParser4;\n      }();\n      exports.CssSelectorParser = CssSelectorParser3;\n    });\n    var require_noop = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {};\n    });\n    var require_is_value = __commonJS(function(exports, module) {\n      'use strict';\n      var _undefined = require_noop()();\n      module.exports = function(val) {\n        return val !== _undefined && val !== null;\n      };\n    });\n    var require_normalize_options = __commonJS(function(exports, module) {\n      'use strict';\n      var isValue = require_is_value();\n      var forEach = Array.prototype.forEach;\n      var create = Object.create;\n      var process2 = function process2(src, obj) {\n        var key;\n        for (key in src) {\n          obj[key] = src[key];\n        }\n      };\n      module.exports = function(opts1) {\n        var result = create(null);\n        forEach.call(arguments, function(options) {\n          if (!isValue(options)) {\n            return;\n          }\n          process2(Object(options), result);\n        });\n        return result;\n      };\n    });\n    var require_is_implemented = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {\n        var sign = Math.sign;\n        if (typeof sign !== 'function') {\n          return false;\n        }\n        return sign(10) === 1 && sign(-20) === -1;\n      };\n    });\n    var require_shim = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function(value) {\n        value = Number(value);\n        if (isNaN(value) || value === 0) {\n          return value;\n        }\n        return value > 0 ? 1 : -1;\n      };\n    });\n    var require_sign = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented()() ? Math.sign : require_shim();\n    });\n    var require_to_integer = __commonJS(function(exports, module) {\n      'use strict';\n      var sign = require_sign();\n      var abs = Math.abs;\n      var floor = Math.floor;\n      module.exports = function(value) {\n        if (isNaN(value)) {\n          return 0;\n        }\n        value = Number(value);\n        if (value === 0 || !isFinite(value)) {\n          return value;\n        }\n        return sign(value) * floor(abs(value));\n      };\n    });\n    var require_to_pos_integer = __commonJS(function(exports, module) {\n      'use strict';\n      var toInteger = require_to_integer();\n      var max = Math.max;\n      module.exports = function(value) {\n        return max(0, toInteger(value));\n      };\n    });\n    var require_resolve_length = __commonJS(function(exports, module) {\n      'use strict';\n      var toPosInt = require_to_pos_integer();\n      module.exports = function(optsLength, fnLength, isAsync) {\n        var length;\n        if (isNaN(optsLength)) {\n          length = fnLength;\n          if (!(length >= 0)) {\n            return 1;\n          }\n          if (isAsync && length) {\n            return length - 1;\n          }\n          return length;\n        }\n        if (optsLength === false) {\n          return false;\n        }\n        return toPosInt(optsLength);\n      };\n    });\n    var require_valid_callable = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function(fn) {\n        if (typeof fn !== 'function') {\n          throw new TypeError(fn + ' is not a function');\n        }\n        return fn;\n      };\n    });\n    var require_valid_value = __commonJS(function(exports, module) {\n      'use strict';\n      var isValue = require_is_value();\n      module.exports = function(value) {\n        if (!isValue(value)) {\n          throw new TypeError('Cannot use null or undefined');\n        }\n        return value;\n      };\n    });\n    var require_iterate = __commonJS(function(exports, module) {\n      'use strict';\n      var callable = require_valid_callable();\n      var value = require_valid_value();\n      var bind = Function.prototype.bind;\n      var call = Function.prototype.call;\n      var keys = Object.keys;\n      var objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;\n      module.exports = function(method, defVal) {\n        return function(obj, cb) {\n          var list, thisArg = arguments[2], compareFn = arguments[3];\n          obj = Object(value(obj));\n          callable(cb);\n          list = keys(obj);\n          if (compareFn) {\n            list.sort(typeof compareFn === 'function' ? bind.call(compareFn, obj) : void 0);\n          }\n          if (typeof method !== 'function') {\n            method = list[method];\n          }\n          return call.call(method, list, function(key, index) {\n            if (!objPropertyIsEnumerable.call(obj, key)) {\n              return defVal;\n            }\n            return call.call(cb, thisArg, obj[key], key, obj, index);\n          });\n        };\n      };\n    });\n    var require_for_each = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_iterate()('forEach');\n    });\n    var require_registered_extensions = __commonJS(function() {\n      'use strict';\n    });\n    var require_is_implemented2 = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {\n        var assign = Object.assign, obj;\n        if (typeof assign !== 'function') {\n          return false;\n        }\n        obj = {\n          foo: 'raz'\n        };\n        assign(obj, {\n          bar: 'dwa'\n        }, {\n          trzy: 'trzy'\n        });\n        return obj.foo + obj.bar + obj.trzy === 'razdwatrzy';\n      };\n    });\n    var require_is_implemented3 = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {\n        try {\n          Object.keys('primitive');\n          return true;\n        } catch (e) {\n          return false;\n        }\n      };\n    });\n    var require_shim2 = __commonJS(function(exports, module) {\n      'use strict';\n      var isValue = require_is_value();\n      var keys = Object.keys;\n      module.exports = function(object) {\n        return keys(isValue(object) ? Object(object) : object);\n      };\n    });\n    var require_keys = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented3()() ? Object.keys : require_shim2();\n    });\n    var require_shim3 = __commonJS(function(exports, module) {\n      'use strict';\n      var keys = require_keys();\n      var value = require_valid_value();\n      var max = Math.max;\n      module.exports = function(dest, src) {\n        var error, i, length = max(arguments.length, 2), assign;\n        dest = Object(value(dest));\n        assign = function assign(key) {\n          try {\n            dest[key] = src[key];\n          } catch (e) {\n            if (!error) {\n              error = e;\n            }\n          }\n        };\n        for (i = 1; i < length; ++i) {\n          src = arguments[i];\n          keys(src).forEach(assign);\n        }\n        if (error !== void 0) {\n          throw error;\n        }\n        return dest;\n      };\n    });\n    var require_assign = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented2()() ? Object.assign : require_shim3();\n    });\n    var require_is_object = __commonJS(function(exports, module) {\n      'use strict';\n      var isValue = require_is_value();\n      var map = {\n        function: true,\n        object: true\n      };\n      module.exports = function(value) {\n        return isValue(value) && map[_typeof(value)] || false;\n      };\n    });\n    var require_custom = __commonJS(function(exports, module) {\n      'use strict';\n      var assign = require_assign();\n      var isObject = require_is_object();\n      var isValue = require_is_value();\n      var captureStackTrace = Error.captureStackTrace;\n      module.exports = function(message) {\n        var err2 = new Error(message), code = arguments[1], ext = arguments[2];\n        if (!isValue(ext)) {\n          if (isObject(code)) {\n            ext = code;\n            code = null;\n          }\n        }\n        if (isValue(ext)) {\n          assign(err2, ext);\n        }\n        if (isValue(code)) {\n          err2.code = code;\n        }\n        if (captureStackTrace) {\n          captureStackTrace(err2, module.exports);\n        }\n        return err2;\n      };\n    });\n    var require_mixin = __commonJS(function(exports, module) {\n      'use strict';\n      var value = require_valid_value();\n      var defineProperty = Object.defineProperty;\n      var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n      var getOwnPropertyNames = Object.getOwnPropertyNames;\n      var getOwnPropertySymbols = Object.getOwnPropertySymbols;\n      module.exports = function(target, source) {\n        var error, sourceObject = Object(value(source));\n        target = Object(value(target));\n        getOwnPropertyNames(sourceObject).forEach(function(name) {\n          try {\n            defineProperty(target, name, getOwnPropertyDescriptor(source, name));\n          } catch (e) {\n            error = e;\n          }\n        });\n        if (typeof getOwnPropertySymbols === 'function') {\n          getOwnPropertySymbols(sourceObject).forEach(function(symbol) {\n            try {\n              defineProperty(target, symbol, getOwnPropertyDescriptor(source, symbol));\n            } catch (e) {\n              error = e;\n            }\n          });\n        }\n        if (error !== void 0) {\n          throw error;\n        }\n        return target;\n      };\n    });\n    var require_define_length = __commonJS(function(exports, module) {\n      'use strict';\n      var toPosInt = require_to_pos_integer();\n      var test = function test(arg1, arg2) {\n        return arg2;\n      };\n      var desc;\n      var defineProperty;\n      var generate;\n      var mixin;\n      try {\n        Object.defineProperty(test, 'length', {\n          configurable: true,\n          writable: false,\n          enumerable: false,\n          value: 1\n        });\n      } catch (ignore) {}\n      if (test.length === 1) {\n        desc = {\n          configurable: true,\n          writable: false,\n          enumerable: false\n        };\n        defineProperty = Object.defineProperty;\n        module.exports = function(fn, length) {\n          length = toPosInt(length);\n          if (fn.length === length) {\n            return fn;\n          }\n          desc.value = length;\n          return defineProperty(fn, 'length', desc);\n        };\n      } else {\n        mixin = require_mixin();\n        generate = function() {\n          var cache20 = [];\n          return function(length) {\n            var args, i = 0;\n            if (cache20[length]) {\n              return cache20[length];\n            }\n            args = [];\n            while (length--) {\n              args.push('a' + (++i).toString(36));\n            }\n            return new Function('fn', 'return function (' + args.join(', ') + ') { return fn.apply(this, arguments); };');\n          };\n        }();\n        module.exports = function(src, length) {\n          var target;\n          length = toPosInt(length);\n          if (src.length === length) {\n            return src;\n          }\n          target = generate(length)(src);\n          try {\n            mixin(target, src);\n          } catch (ignore) {}\n          return target;\n        };\n      }\n    });\n    var require_is = __commonJS(function(exports, module) {\n      'use strict';\n      var _undefined = void 0;\n      module.exports = function(value) {\n        return value !== _undefined && value !== null;\n      };\n    });\n    var require_is2 = __commonJS(function(exports, module) {\n      'use strict';\n      var isValue = require_is();\n      var possibleTypes = {\n        object: true,\n        function: true,\n        undefined: true\n      };\n      module.exports = function(value) {\n        if (!isValue(value)) {\n          return false;\n        }\n        return hasOwnProperty.call(possibleTypes, _typeof(value));\n      };\n    });\n    var require_is3 = __commonJS(function(exports, module) {\n      'use strict';\n      var isObject = require_is2();\n      module.exports = function(value) {\n        if (!isObject(value)) {\n          return false;\n        }\n        try {\n          if (!value.constructor) {\n            return false;\n          }\n          return value.constructor.prototype === value;\n        } catch (error) {\n          return false;\n        }\n      };\n    });\n    var require_is4 = __commonJS(function(exports, module) {\n      'use strict';\n      var isPrototype = require_is3();\n      module.exports = function(value) {\n        if (typeof value !== 'function') {\n          return false;\n        }\n        if (!hasOwnProperty.call(value, 'length')) {\n          return false;\n        }\n        try {\n          if (typeof value.length !== 'number') {\n            return false;\n          }\n          if (typeof value.call !== 'function') {\n            return false;\n          }\n          if (typeof value.apply !== 'function') {\n            return false;\n          }\n        } catch (error) {\n          return false;\n        }\n        return !isPrototype(value);\n      };\n    });\n    var require_is5 = __commonJS(function(exports, module) {\n      'use strict';\n      var isFunction = require_is4();\n      var classRe = /^\\s*class[\\s{/}]/;\n      var functionToString = Function.prototype.toString;\n      module.exports = function(value) {\n        if (!isFunction(value)) {\n          return false;\n        }\n        if (classRe.test(functionToString.call(value))) {\n          return false;\n        }\n        return true;\n      };\n    });\n    var require_is_implemented4 = __commonJS(function(exports, module) {\n      'use strict';\n      var str = 'razdwatrzy';\n      module.exports = function() {\n        if (typeof str.contains !== 'function') {\n          return false;\n        }\n        return str.contains('dwa') === true && str.contains('foo') === false;\n      };\n    });\n    var require_shim4 = __commonJS(function(exports, module) {\n      'use strict';\n      var indexOf = String.prototype.indexOf;\n      module.exports = function(searchString) {\n        return indexOf.call(this, searchString, arguments[1]) > -1;\n      };\n    });\n    var require_contains = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented4()() ? String.prototype.contains : require_shim4();\n    });\n    var require_d = __commonJS(function(exports, module) {\n      'use strict';\n      var isValue = require_is();\n      var isPlainFunction = require_is5();\n      var assign = require_assign();\n      var normalizeOpts = require_normalize_options();\n      var contains6 = require_contains();\n      var d = module.exports = function(dscr, value) {\n        var c, e, w, options, desc;\n        if (arguments.length < 2 || typeof dscr !== 'string') {\n          options = value;\n          value = dscr;\n          dscr = null;\n        } else {\n          options = arguments[2];\n        }\n        if (isValue(dscr)) {\n          c = contains6.call(dscr, 'c');\n          e = contains6.call(dscr, 'e');\n          w = contains6.call(dscr, 'w');\n        } else {\n          c = w = true;\n          e = false;\n        }\n        desc = {\n          value: value,\n          configurable: c,\n          enumerable: e,\n          writable: w\n        };\n        return !options ? desc : assign(normalizeOpts(options), desc);\n      };\n      d.gs = function(dscr, get, set) {\n        var c, e, options, desc;\n        if (typeof dscr !== 'string') {\n          options = set;\n          set = get;\n          get = dscr;\n          dscr = null;\n        } else {\n          options = arguments[3];\n        }\n        if (!isValue(get)) {\n          get = void 0;\n        } else if (!isPlainFunction(get)) {\n          options = get;\n          get = set = void 0;\n        } else if (!isValue(set)) {\n          set = void 0;\n        } else if (!isPlainFunction(set)) {\n          options = set;\n          set = void 0;\n        }\n        if (isValue(dscr)) {\n          c = contains6.call(dscr, 'c');\n          e = contains6.call(dscr, 'e');\n        } else {\n          c = true;\n          e = false;\n        }\n        desc = {\n          get: get,\n          set: set,\n          configurable: c,\n          enumerable: e\n        };\n        return !options ? desc : assign(normalizeOpts(options), desc);\n      };\n    });\n    var require_event_emitter = __commonJS(function(exports, module) {\n      'use strict';\n      var d = require_d();\n      var callable = require_valid_callable();\n      var apply = Function.prototype.apply;\n      var call = Function.prototype.call;\n      var create = Object.create;\n      var defineProperty = Object.defineProperty;\n      var defineProperties = Object.defineProperties;\n      var hasOwnProperty2 = Object.prototype.hasOwnProperty;\n      var descriptor = {\n        configurable: true,\n        enumerable: false,\n        writable: true\n      };\n      var on;\n      var once;\n      var off;\n      var emit;\n      var methods;\n      var descriptors;\n      var base;\n      on = function on(type, listener) {\n        var data2;\n        callable(listener);\n        if (!hasOwnProperty2.call(this, '__ee__')) {\n          data2 = descriptor.value = create(null);\n          defineProperty(this, '__ee__', descriptor);\n          descriptor.value = null;\n        } else {\n          data2 = this.__ee__;\n        }\n        if (!data2[type]) {\n          data2[type] = listener;\n        } else if (_typeof(data2[type]) === 'object') {\n          data2[type].push(listener);\n        } else {\n          data2[type] = [ data2[type], listener ];\n        }\n        return this;\n      };\n      once = function once(type, listener) {\n        var _once, self2;\n        callable(listener);\n        self2 = this;\n        on.call(this, type, _once = function once2() {\n          off.call(self2, type, _once);\n          apply.call(listener, this, arguments);\n        });\n        _once.__eeOnceListener__ = listener;\n        return this;\n      };\n      off = function off(type, listener) {\n        var data2, listeners, candidate, i;\n        callable(listener);\n        if (!hasOwnProperty2.call(this, '__ee__')) {\n          return this;\n        }\n        data2 = this.__ee__;\n        if (!data2[type]) {\n          return this;\n        }\n        listeners = data2[type];\n        if (_typeof(listeners) === 'object') {\n          for (i = 0; candidate = listeners[i]; ++i) {\n            if (candidate === listener || candidate.__eeOnceListener__ === listener) {\n              if (listeners.length === 2) {\n                data2[type] = listeners[i ? 0 : 1];\n              } else {\n                listeners.splice(i, 1);\n              }\n            }\n          }\n        } else {\n          if (listeners === listener || listeners.__eeOnceListener__ === listener) {\n            delete data2[type];\n          }\n        }\n        return this;\n      };\n      emit = function emit(type) {\n        var i, l, listener, listeners, args;\n        if (!hasOwnProperty2.call(this, '__ee__')) {\n          return;\n        }\n        listeners = this.__ee__[type];\n        if (!listeners) {\n          return;\n        }\n        if (_typeof(listeners) === 'object') {\n          l = arguments.length;\n          args = new Array(l - 1);\n          for (i = 1; i < l; ++i) {\n            args[i - 1] = arguments[i];\n          }\n          listeners = listeners.slice();\n          for (i = 0; listener = listeners[i]; ++i) {\n            apply.call(listener, this, args);\n          }\n        } else {\n          switch (arguments.length) {\n           case 1:\n            call.call(listeners, this);\n            break;\n\n           case 2:\n            call.call(listeners, this, arguments[1]);\n            break;\n\n           case 3:\n            call.call(listeners, this, arguments[1], arguments[2]);\n            break;\n\n           default:\n            l = arguments.length;\n            args = new Array(l - 1);\n            for (i = 1; i < l; ++i) {\n              args[i - 1] = arguments[i];\n            }\n            apply.call(listeners, this, args);\n          }\n        }\n      };\n      methods = {\n        on: on,\n        once: once,\n        off: off,\n        emit: emit\n      };\n      descriptors = {\n        on: d(on),\n        once: d(once),\n        off: d(off),\n        emit: d(emit)\n      };\n      base = defineProperties({}, descriptors);\n      module.exports = exports = function exports(o) {\n        return o == null ? create(base) : defineProperties(Object(o), descriptors);\n      };\n      exports.methods = methods;\n    });\n    var require_is_implemented5 = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {\n        var from = Array.from, arr, result;\n        if (typeof from !== 'function') {\n          return false;\n        }\n        arr = [ 'raz', 'dwa' ];\n        result = from(arr);\n        return Boolean(result && result !== arr && result[1] === 'dwa');\n      };\n    });\n    var require_is_implemented6 = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {\n        if ((typeof globalThis === 'undefined' ? 'undefined' : _typeof(globalThis)) !== 'object') {\n          return false;\n        }\n        if (!globalThis) {\n          return false;\n        }\n        return globalThis.Array === Array;\n      };\n    });\n    var require_implementation = __commonJS(function(exports, module) {\n      var naiveFallback = function naiveFallback() {\n        if ((typeof self === 'undefined' ? 'undefined' : _typeof(self)) === 'object' && self) {\n          return self;\n        }\n        if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window) {\n          return window;\n        }\n        throw new Error('Unable to resolve global `this`');\n      };\n      module.exports = function() {\n        if (this) {\n          return this;\n        }\n        try {\n          Object.defineProperty(Object.prototype, '__global__', {\n            get: function get() {\n              return this;\n            },\n            configurable: true\n          });\n        } catch (error) {\n          return naiveFallback();\n        }\n        try {\n          if (!__global__) {\n            return naiveFallback();\n          }\n          return __global__;\n        } finally {\n          delete Object.prototype.__global__;\n        }\n      }();\n    });\n    var require_global_this = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented6()() ? globalThis : require_implementation();\n    });\n    var require_is_implemented7 = __commonJS(function(exports, module) {\n      'use strict';\n      var global2 = require_global_this();\n      var validTypes = {\n        object: true,\n        symbol: true\n      };\n      module.exports = function() {\n        var _Symbol = global2.Symbol;\n        var symbol;\n        if (typeof _Symbol !== 'function') {\n          return false;\n        }\n        symbol = _Symbol('test symbol');\n        try {\n          String(symbol);\n        } catch (e) {\n          return false;\n        }\n        if (!validTypes[_typeof(_Symbol.iterator)]) {\n          return false;\n        }\n        if (!validTypes[_typeof(_Symbol.toPrimitive)]) {\n          return false;\n        }\n        if (!validTypes[_typeof(_Symbol.toStringTag)]) {\n          return false;\n        }\n        return true;\n      };\n    });\n    var require_is_symbol = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function(value) {\n        if (!value) {\n          return false;\n        }\n        if (_typeof(value) === 'symbol') {\n          return true;\n        }\n        if (!value.constructor) {\n          return false;\n        }\n        if (value.constructor.name !== 'Symbol') {\n          return false;\n        }\n        return value[value.constructor.toStringTag] === 'Symbol';\n      };\n    });\n    var require_validate_symbol = __commonJS(function(exports, module) {\n      'use strict';\n      var isSymbol = require_is_symbol();\n      module.exports = function(value) {\n        if (!isSymbol(value)) {\n          throw new TypeError(value + ' is not a symbol');\n        }\n        return value;\n      };\n    });\n    var require_generate_name = __commonJS(function(exports, module) {\n      'use strict';\n      var d = require_d();\n      var create = Object.create;\n      var defineProperty = Object.defineProperty;\n      var objPrototype = Object.prototype;\n      var created = create(null);\n      module.exports = function(desc) {\n        var postfix = 0, name, ie11BugWorkaround;\n        while (created[desc + (postfix || '')]) {\n          ++postfix;\n        }\n        desc += postfix || '';\n        created[desc] = true;\n        name = '@@' + desc;\n        defineProperty(objPrototype, name, d.gs(null, function(value) {\n          if (ie11BugWorkaround) {\n            return;\n          }\n          ie11BugWorkaround = true;\n          defineProperty(this, name, d(value));\n          ie11BugWorkaround = false;\n        }));\n        return name;\n      };\n    });\n    var require_standard_symbols = __commonJS(function(exports, module) {\n      'use strict';\n      var d = require_d();\n      var NativeSymbol = require_global_this().Symbol;\n      module.exports = function(SymbolPolyfill) {\n        return Object.defineProperties(SymbolPolyfill, {\n          hasInstance: d('', NativeSymbol && NativeSymbol.hasInstance || SymbolPolyfill('hasInstance')),\n          isConcatSpreadable: d('', NativeSymbol && NativeSymbol.isConcatSpreadable || SymbolPolyfill('isConcatSpreadable')),\n          iterator: d('', NativeSymbol && NativeSymbol.iterator || SymbolPolyfill('iterator')),\n          match: d('', NativeSymbol && NativeSymbol.match || SymbolPolyfill('match')),\n          replace: d('', NativeSymbol && NativeSymbol.replace || SymbolPolyfill('replace')),\n          search: d('', NativeSymbol && NativeSymbol.search || SymbolPolyfill('search')),\n          species: d('', NativeSymbol && NativeSymbol.species || SymbolPolyfill('species')),\n          split: d('', NativeSymbol && NativeSymbol.split || SymbolPolyfill('split')),\n          toPrimitive: d('', NativeSymbol && NativeSymbol.toPrimitive || SymbolPolyfill('toPrimitive')),\n          toStringTag: d('', NativeSymbol && NativeSymbol.toStringTag || SymbolPolyfill('toStringTag')),\n          unscopables: d('', NativeSymbol && NativeSymbol.unscopables || SymbolPolyfill('unscopables'))\n        });\n      };\n    });\n    var require_symbol_registry = __commonJS(function(exports, module) {\n      'use strict';\n      var d = require_d();\n      var validateSymbol = require_validate_symbol();\n      var registry = Object.create(null);\n      module.exports = function(SymbolPolyfill) {\n        return Object.defineProperties(SymbolPolyfill, {\n          for: d(function(key) {\n            if (registry[key]) {\n              return registry[key];\n            }\n            return registry[key] = SymbolPolyfill(String(key));\n          }),\n          keyFor: d(function(symbol) {\n            var key;\n            validateSymbol(symbol);\n            for (key in registry) {\n              if (registry[key] === symbol) {\n                return key;\n              }\n            }\n            return void 0;\n          })\n        });\n      };\n    });\n    var require_polyfill = __commonJS(function(exports, module) {\n      'use strict';\n      var d = require_d();\n      var validateSymbol = require_validate_symbol();\n      var NativeSymbol = require_global_this().Symbol;\n      var generateName = require_generate_name();\n      var setupStandardSymbols = require_standard_symbols();\n      var setupSymbolRegistry = require_symbol_registry();\n      var create = Object.create;\n      var defineProperties = Object.defineProperties;\n      var defineProperty = Object.defineProperty;\n      var SymbolPolyfill;\n      var HiddenSymbol;\n      var isNativeSafe;\n      if (typeof NativeSymbol === 'function') {\n        try {\n          String(NativeSymbol());\n          isNativeSafe = true;\n        } catch (ignore) {}\n      } else {\n        NativeSymbol = null;\n      }\n      HiddenSymbol = function _Symbol2(description) {\n        if (this instanceof HiddenSymbol) {\n          throw new TypeError('Symbol is not a constructor');\n        }\n        return SymbolPolyfill(description);\n      };\n      module.exports = SymbolPolyfill = function _Symbol3(description) {\n        var symbol;\n        if (this instanceof _Symbol3) {\n          throw new TypeError('Symbol is not a constructor');\n        }\n        if (isNativeSafe) {\n          return NativeSymbol(description);\n        }\n        symbol = create(HiddenSymbol.prototype);\n        description = description === void 0 ? '' : String(description);\n        return defineProperties(symbol, {\n          __description__: d('', description),\n          __name__: d('', generateName(description))\n        });\n      };\n      setupStandardSymbols(SymbolPolyfill);\n      setupSymbolRegistry(SymbolPolyfill);\n      defineProperties(HiddenSymbol.prototype, {\n        constructor: d(SymbolPolyfill),\n        toString: d('', function() {\n          return this.__name__;\n        })\n      });\n      defineProperties(SymbolPolyfill.prototype, {\n        toString: d(function() {\n          return 'Symbol (' + validateSymbol(this).__description__ + ')';\n        }),\n        valueOf: d(function() {\n          return validateSymbol(this);\n        })\n      });\n      defineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toPrimitive, d('', function() {\n        var symbol = validateSymbol(this);\n        if (_typeof(symbol) === 'symbol') {\n          return symbol;\n        }\n        return symbol.toString();\n      }));\n      defineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d('c', 'Symbol'));\n      defineProperty(HiddenSymbol.prototype, SymbolPolyfill.toStringTag, d('c', SymbolPolyfill.prototype[SymbolPolyfill.toStringTag]));\n      defineProperty(HiddenSymbol.prototype, SymbolPolyfill.toPrimitive, d('c', SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive]));\n    });\n    var require_es6_symbol = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented7()() ? require_global_this().Symbol : require_polyfill();\n    });\n    var require_is_arguments = __commonJS(function(exports, module) {\n      'use strict';\n      var objToString = Object.prototype.toString;\n      var id = objToString.call(function() {\n        return arguments;\n      }());\n      module.exports = function(value) {\n        return objToString.call(value) === id;\n      };\n    });\n    var require_is_function = __commonJS(function(exports, module) {\n      'use strict';\n      var objToString = Object.prototype.toString;\n      var isFunctionStringTag = RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);\n      module.exports = function(value) {\n        return typeof value === 'function' && isFunctionStringTag(objToString.call(value));\n      };\n    });\n    var require_is_string = __commonJS(function(exports, module) {\n      'use strict';\n      var objToString = Object.prototype.toString;\n      var id = objToString.call('');\n      module.exports = function(value) {\n        return typeof value === 'string' || value && _typeof(value) === 'object' && (value instanceof String || objToString.call(value) === id) || false;\n      };\n    });\n    var require_shim5 = __commonJS(function(exports, module) {\n      'use strict';\n      var iteratorSymbol = require_es6_symbol().iterator;\n      var isArguments = require_is_arguments();\n      var isFunction = require_is_function();\n      var toPosInt = require_to_pos_integer();\n      var callable = require_valid_callable();\n      var validValue = require_valid_value();\n      var isValue = require_is_value();\n      var isString = require_is_string();\n      var isArray = Array.isArray;\n      var call = Function.prototype.call;\n      var desc = {\n        configurable: true,\n        enumerable: true,\n        writable: true,\n        value: null\n      };\n      var defineProperty = Object.defineProperty;\n      module.exports = function(arrayLike) {\n        var mapFn = arguments[1], thisArg = arguments[2], Context2, i, j, arr, length, code, iterator, result, getIterator, value;\n        arrayLike = Object(validValue(arrayLike));\n        if (isValue(mapFn)) {\n          callable(mapFn);\n        }\n        if (!this || this === Array || !isFunction(this)) {\n          if (!mapFn) {\n            if (isArguments(arrayLike)) {\n              length = arrayLike.length;\n              if (length !== 1) {\n                return Array.apply(null, arrayLike);\n              }\n              arr = new Array(1);\n              arr[0] = arrayLike[0];\n              return arr;\n            }\n            if (isArray(arrayLike)) {\n              arr = new Array(length = arrayLike.length);\n              for (i = 0; i < length; ++i) {\n                arr[i] = arrayLike[i];\n              }\n              return arr;\n            }\n          }\n          arr = [];\n        } else {\n          Context2 = this;\n        }\n        if (!isArray(arrayLike)) {\n          if ((getIterator = arrayLike[iteratorSymbol]) !== void 0) {\n            iterator = callable(getIterator).call(arrayLike);\n            if (Context2) {\n              arr = new Context2();\n            }\n            result = iterator.next();\n            i = 0;\n            while (!result.done) {\n              value = mapFn ? call.call(mapFn, thisArg, result.value, i) : result.value;\n              if (Context2) {\n                desc.value = value;\n                defineProperty(arr, i, desc);\n              } else {\n                arr[i] = value;\n              }\n              result = iterator.next();\n              ++i;\n            }\n            length = i;\n          } else if (isString(arrayLike)) {\n            length = arrayLike.length;\n            if (Context2) {\n              arr = new Context2();\n            }\n            for (i = 0, j = 0; i < length; ++i) {\n              value = arrayLike[i];\n              if (i + 1 < length) {\n                code = value.charCodeAt(0);\n                if (code >= 55296 && code <= 56319) {\n                  value += arrayLike[++i];\n                }\n              }\n              value = mapFn ? call.call(mapFn, thisArg, value, j) : value;\n              if (Context2) {\n                desc.value = value;\n                defineProperty(arr, j, desc);\n              } else {\n                arr[j] = value;\n              }\n              ++j;\n            }\n            length = j;\n          }\n        }\n        if (length === void 0) {\n          length = toPosInt(arrayLike.length);\n          if (Context2) {\n            arr = new Context2(length);\n          }\n          for (i = 0; i < length; ++i) {\n            value = mapFn ? call.call(mapFn, thisArg, arrayLike[i], i) : arrayLike[i];\n            if (Context2) {\n              desc.value = value;\n              defineProperty(arr, i, desc);\n            } else {\n              arr[i] = value;\n            }\n          }\n        }\n        if (Context2) {\n          desc.value = null;\n          arr.length = length;\n        }\n        return arr;\n      };\n    });\n    var require_from = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented5()() ? Array.from : require_shim5();\n    });\n    var require_to_array = __commonJS(function(exports, module) {\n      'use strict';\n      var from = require_from();\n      var isArray = Array.isArray;\n      module.exports = function(arrayLike) {\n        return isArray(arrayLike) ? arrayLike : from(arrayLike);\n      };\n    });\n    var require_resolve_resolve = __commonJS(function(exports, module) {\n      'use strict';\n      var toArray2 = require_to_array();\n      var isValue = require_is_value();\n      var callable = require_valid_callable();\n      var slice = Array.prototype.slice;\n      var resolveArgs;\n      resolveArgs = function resolveArgs(args) {\n        return this.map(function(resolve, i) {\n          return resolve ? resolve(args[i]) : args[i];\n        }).concat(slice.call(args, this.length));\n      };\n      module.exports = function(resolvers) {\n        resolvers = toArray2(resolvers);\n        resolvers.forEach(function(resolve) {\n          if (isValue(resolve)) {\n            callable(resolve);\n          }\n        });\n        return resolveArgs.bind(resolvers);\n      };\n    });\n    var require_resolve_normalize = __commonJS(function(exports, module) {\n      'use strict';\n      var callable = require_valid_callable();\n      module.exports = function(userNormalizer) {\n        var normalizer;\n        if (typeof userNormalizer === 'function') {\n          return {\n            set: userNormalizer,\n            get: userNormalizer\n          };\n        }\n        normalizer = {\n          get: callable(userNormalizer.get)\n        };\n        if (userNormalizer.set !== void 0) {\n          normalizer.set = callable(userNormalizer.set);\n          if (userNormalizer['delete']) {\n            normalizer['delete'] = callable(userNormalizer['delete']);\n          }\n          if (userNormalizer.clear) {\n            normalizer.clear = callable(userNormalizer.clear);\n          }\n          return normalizer;\n        }\n        normalizer.set = normalizer.get;\n        return normalizer;\n      };\n    });\n    var require_configure_map = __commonJS(function(exports, module) {\n      'use strict';\n      var customError = require_custom();\n      var defineLength = require_define_length();\n      var d = require_d();\n      var ee = require_event_emitter().methods;\n      var resolveResolve = require_resolve_resolve();\n      var resolveNormalize = require_resolve_normalize();\n      var apply = Function.prototype.apply;\n      var call = Function.prototype.call;\n      var create = Object.create;\n      var defineProperties = Object.defineProperties;\n      var _on = ee.on;\n      var emit = ee.emit;\n      module.exports = function(original, length, options) {\n        var cache20 = create(null), conf, memLength, _get, set, del, _clear, extDel, extGet, extHas, normalizer, getListeners, setListeners, deleteListeners, memoized, resolve;\n        if (length !== false) {\n          memLength = length;\n        } else if (isNaN(original.length)) {\n          memLength = 1;\n        } else {\n          memLength = original.length;\n        }\n        if (options.normalizer) {\n          normalizer = resolveNormalize(options.normalizer);\n          _get = normalizer.get;\n          set = normalizer.set;\n          del = normalizer['delete'];\n          _clear = normalizer.clear;\n        }\n        if (options.resolvers != null) {\n          resolve = resolveResolve(options.resolvers);\n        }\n        if (_get) {\n          memoized = defineLength(function(arg) {\n            var id, result, args = arguments;\n            if (resolve) {\n              args = resolve(args);\n            }\n            id = _get(args);\n            if (id !== null) {\n              if (hasOwnProperty.call(cache20, id)) {\n                if (getListeners) {\n                  conf.emit('get', id, args, this);\n                }\n                return cache20[id];\n              }\n            }\n            if (args.length === 1) {\n              result = call.call(original, this, args[0]);\n            } else {\n              result = apply.call(original, this, args);\n            }\n            if (id === null) {\n              id = _get(args);\n              if (id !== null) {\n                throw customError('Circular invocation', 'CIRCULAR_INVOCATION');\n              }\n              id = set(args);\n            } else if (hasOwnProperty.call(cache20, id)) {\n              throw customError('Circular invocation', 'CIRCULAR_INVOCATION');\n            }\n            cache20[id] = result;\n            if (setListeners) {\n              conf.emit('set', id, null, result);\n            }\n            return result;\n          }, memLength);\n        } else if (length === 0) {\n          memoized = function memoized() {\n            var result;\n            if (hasOwnProperty.call(cache20, 'data')) {\n              if (getListeners) {\n                conf.emit('get', 'data', arguments, this);\n              }\n              return cache20.data;\n            }\n            if (arguments.length) {\n              result = apply.call(original, this, arguments);\n            } else {\n              result = call.call(original, this);\n            }\n            if (hasOwnProperty.call(cache20, 'data')) {\n              throw customError('Circular invocation', 'CIRCULAR_INVOCATION');\n            }\n            cache20.data = result;\n            if (setListeners) {\n              conf.emit('set', 'data', null, result);\n            }\n            return result;\n          };\n        } else {\n          memoized = function memoized(arg) {\n            var result, args = arguments, id;\n            if (resolve) {\n              args = resolve(arguments);\n            }\n            id = String(args[0]);\n            if (hasOwnProperty.call(cache20, id)) {\n              if (getListeners) {\n                conf.emit('get', id, args, this);\n              }\n              return cache20[id];\n            }\n            if (args.length === 1) {\n              result = call.call(original, this, args[0]);\n            } else {\n              result = apply.call(original, this, args);\n            }\n            if (hasOwnProperty.call(cache20, id)) {\n              throw customError('Circular invocation', 'CIRCULAR_INVOCATION');\n            }\n            cache20[id] = result;\n            if (setListeners) {\n              conf.emit('set', id, null, result);\n            }\n            return result;\n          };\n        }\n        conf = {\n          original: original,\n          memoized: memoized,\n          profileName: options.profileName,\n          get: function get(args) {\n            if (resolve) {\n              args = resolve(args);\n            }\n            if (_get) {\n              return _get(args);\n            }\n            return String(args[0]);\n          },\n          has: function has(id) {\n            return hasOwnProperty.call(cache20, id);\n          },\n          delete: function _delete(id) {\n            var result;\n            if (!hasOwnProperty.call(cache20, id)) {\n              return;\n            }\n            if (del) {\n              del(id);\n            }\n            result = cache20[id];\n            delete cache20[id];\n            if (deleteListeners) {\n              conf.emit('delete', id, result);\n            }\n          },\n          clear: function clear() {\n            var oldCache = cache20;\n            if (_clear) {\n              _clear();\n            }\n            cache20 = create(null);\n            conf.emit('clear', oldCache);\n          },\n          on: function on(type, listener) {\n            if (type === 'get') {\n              getListeners = true;\n            } else if (type === 'set') {\n              setListeners = true;\n            } else if (type === 'delete') {\n              deleteListeners = true;\n            }\n            return _on.call(this, type, listener);\n          },\n          emit: emit,\n          updateEnv: function updateEnv() {\n            original = conf.original;\n          }\n        };\n        if (_get) {\n          extDel = defineLength(function(arg) {\n            var id, args = arguments;\n            if (resolve) {\n              args = resolve(args);\n            }\n            id = _get(args);\n            if (id === null) {\n              return;\n            }\n            conf['delete'](id);\n          }, memLength);\n        } else if (length === 0) {\n          extDel = function extDel() {\n            return conf['delete']('data');\n          };\n        } else {\n          extDel = function extDel(arg) {\n            if (resolve) {\n              arg = resolve(arguments)[0];\n            }\n            return conf['delete'](arg);\n          };\n        }\n        extGet = defineLength(function() {\n          var id, args = arguments;\n          if (length === 0) {\n            return cache20.data;\n          }\n          if (resolve) {\n            args = resolve(args);\n          }\n          if (_get) {\n            id = _get(args);\n          } else {\n            id = String(args[0]);\n          }\n          return cache20[id];\n        });\n        extHas = defineLength(function() {\n          var id, args = arguments;\n          if (length === 0) {\n            return conf.has('data');\n          }\n          if (resolve) {\n            args = resolve(args);\n          }\n          if (_get) {\n            id = _get(args);\n          } else {\n            id = String(args[0]);\n          }\n          if (id === null) {\n            return false;\n          }\n          return conf.has(id);\n        });\n        defineProperties(memoized, {\n          __memoized__: d(true),\n          delete: d(extDel),\n          clear: d(conf.clear),\n          _get: d(extGet),\n          _has: d(extHas)\n        });\n        return conf;\n      };\n    });\n    var require_plain = __commonJS(function(exports, module) {\n      'use strict';\n      var callable = require_valid_callable();\n      var forEach = require_for_each();\n      var extensions = require_registered_extensions();\n      var configure5 = require_configure_map();\n      var resolveLength = require_resolve_length();\n      module.exports = function self2(fn) {\n        var options, length, conf;\n        callable(fn);\n        options = Object(arguments[1]);\n        if (options.async && options.promise) {\n          throw new Error('Options \\'async\\' and \\'promise\\' cannot be used together');\n        }\n        if (hasOwnProperty.call(fn, '__memoized__') && !options.force) {\n          return fn;\n        }\n        length = resolveLength(options.length, fn.length, options.async && extensions.async);\n        conf = configure5(fn, length, options);\n        forEach(extensions, function(extFn, name) {\n          if (options[name]) {\n            extFn(options[name], conf, options);\n          }\n        });\n        if (self2.__profiler__) {\n          self2.__profiler__(conf);\n        }\n        conf.updateEnv();\n        return conf.memoized;\n      };\n    });\n    var require_primitive = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function(args) {\n        var id, i, length = args.length;\n        if (!length) {\n          return '\\x02';\n        }\n        id = String(args[i = 0]);\n        while (--length) {\n          id += '\\x01' + args[++i];\n        }\n        return id;\n      };\n    });\n    var require_get_primitive_fixed = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function(length) {\n        if (!length) {\n          return function() {\n            return '';\n          };\n        }\n        return function(args) {\n          var id = String(args[0]), i = 0, currentLength = length;\n          while (--currentLength) {\n            id += '\\x01' + args[++i];\n          }\n          return id;\n        };\n      };\n    });\n    var require_is_implemented8 = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {\n        var numberIsNaN = Number.isNaN;\n        if (typeof numberIsNaN !== 'function') {\n          return false;\n        }\n        return !numberIsNaN({}) && numberIsNaN(NaN) && !numberIsNaN(34);\n      };\n    });\n    var require_shim6 = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function(value) {\n        return value !== value;\n      };\n    });\n    var require_is_nan = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = require_is_implemented8()() ? Number.isNaN : require_shim6();\n    });\n    var require_e_index_of = __commonJS(function(exports, module) {\n      'use strict';\n      var numberIsNaN = require_is_nan();\n      var toPosInt = require_to_pos_integer();\n      var value = require_valid_value();\n      var indexOf = Array.prototype.indexOf;\n      var objHasOwnProperty = Object.prototype.hasOwnProperty;\n      var abs = Math.abs;\n      var floor = Math.floor;\n      module.exports = function(searchElement) {\n        var i, length, fromIndex, val;\n        if (!numberIsNaN(searchElement)) {\n          return indexOf.apply(this, arguments);\n        }\n        length = toPosInt(value(this).length);\n        fromIndex = arguments[1];\n        if (isNaN(fromIndex)) {\n          fromIndex = 0;\n        } else if (fromIndex >= 0) {\n          fromIndex = floor(fromIndex);\n        } else {\n          fromIndex = toPosInt(this.length) - floor(abs(fromIndex));\n        }\n        for (i = fromIndex; i < length; ++i) {\n          if (objHasOwnProperty.call(this, i)) {\n            val = this[i];\n            if (numberIsNaN(val)) {\n              return i;\n            }\n          }\n        }\n        return -1;\n      };\n    });\n    var require_get = __commonJS(function(exports, module) {\n      'use strict';\n      var indexOf = require_e_index_of();\n      var create = Object.create;\n      module.exports = function() {\n        var lastId = 0, map = [], cache20 = create(null);\n        return {\n          get: function get(args) {\n            var index = 0, set = map, i, length = args.length;\n            if (length === 0) {\n              return set[length] || null;\n            }\n            if (set = set[length]) {\n              while (index < length - 1) {\n                i = indexOf.call(set[0], args[index]);\n                if (i === -1) {\n                  return null;\n                }\n                set = set[1][i];\n                ++index;\n              }\n              i = indexOf.call(set[0], args[index]);\n              if (i === -1) {\n                return null;\n              }\n              return set[1][i] || null;\n            }\n            return null;\n          },\n          set: function set(args) {\n            var index = 0, set = map, i, length = args.length;\n            if (length === 0) {\n              set[length] = ++lastId;\n            } else {\n              if (!set[length]) {\n                set[length] = [ [], [] ];\n              }\n              set = set[length];\n              while (index < length - 1) {\n                i = indexOf.call(set[0], args[index]);\n                if (i === -1) {\n                  i = set[0].push(args[index]) - 1;\n                  set[1].push([ [], [] ]);\n                }\n                set = set[1][i];\n                ++index;\n              }\n              i = indexOf.call(set[0], args[index]);\n              if (i === -1) {\n                i = set[0].push(args[index]) - 1;\n              }\n              set[1][i] = ++lastId;\n            }\n            cache20[lastId] = args;\n            return lastId;\n          },\n          delete: function _delete(id) {\n            var index = 0, set = map, i, args = cache20[id], length = args.length, path = [];\n            if (length === 0) {\n              delete set[length];\n            } else if (set = set[length]) {\n              while (index < length - 1) {\n                i = indexOf.call(set[0], args[index]);\n                if (i === -1) {\n                  return;\n                }\n                path.push(set, i);\n                set = set[1][i];\n                ++index;\n              }\n              i = indexOf.call(set[0], args[index]);\n              if (i === -1) {\n                return;\n              }\n              id = set[1][i];\n              set[0].splice(i, 1);\n              set[1].splice(i, 1);\n              while (!set[0].length && path.length) {\n                i = path.pop();\n                set = path.pop();\n                set[0].splice(i, 1);\n                set[1].splice(i, 1);\n              }\n            }\n            delete cache20[id];\n          },\n          clear: function clear() {\n            map = [];\n            cache20 = create(null);\n          }\n        };\n      };\n    });\n    var require_get_1 = __commonJS(function(exports, module) {\n      'use strict';\n      var indexOf = require_e_index_of();\n      module.exports = function() {\n        var lastId = 0, argsMap = [], cache20 = [];\n        return {\n          get: function get(args) {\n            var index = indexOf.call(argsMap, args[0]);\n            return index === -1 ? null : cache20[index];\n          },\n          set: function set(args) {\n            argsMap.push(args[0]);\n            cache20.push(++lastId);\n            return lastId;\n          },\n          delete: function _delete(id) {\n            var index = indexOf.call(cache20, id);\n            if (index !== -1) {\n              argsMap.splice(index, 1);\n              cache20.splice(index, 1);\n            }\n          },\n          clear: function clear() {\n            argsMap = [];\n            cache20 = [];\n          }\n        };\n      };\n    });\n    var require_get_fixed = __commonJS(function(exports, module) {\n      'use strict';\n      var indexOf = require_e_index_of();\n      var create = Object.create;\n      module.exports = function(length) {\n        var lastId = 0, map = [ [], [] ], cache20 = create(null);\n        return {\n          get: function get(args) {\n            var index = 0, set = map, i;\n            while (index < length - 1) {\n              i = indexOf.call(set[0], args[index]);\n              if (i === -1) {\n                return null;\n              }\n              set = set[1][i];\n              ++index;\n            }\n            i = indexOf.call(set[0], args[index]);\n            if (i === -1) {\n              return null;\n            }\n            return set[1][i] || null;\n          },\n          set: function set(args) {\n            var index = 0, set = map, i;\n            while (index < length - 1) {\n              i = indexOf.call(set[0], args[index]);\n              if (i === -1) {\n                i = set[0].push(args[index]) - 1;\n                set[1].push([ [], [] ]);\n              }\n              set = set[1][i];\n              ++index;\n            }\n            i = indexOf.call(set[0], args[index]);\n            if (i === -1) {\n              i = set[0].push(args[index]) - 1;\n            }\n            set[1][i] = ++lastId;\n            cache20[lastId] = args;\n            return lastId;\n          },\n          delete: function _delete(id) {\n            var index = 0, set = map, i, path = [], args = cache20[id];\n            while (index < length - 1) {\n              i = indexOf.call(set[0], args[index]);\n              if (i === -1) {\n                return;\n              }\n              path.push(set, i);\n              set = set[1][i];\n              ++index;\n            }\n            i = indexOf.call(set[0], args[index]);\n            if (i === -1) {\n              return;\n            }\n            id = set[1][i];\n            set[0].splice(i, 1);\n            set[1].splice(i, 1);\n            while (!set[0].length && path.length) {\n              i = path.pop();\n              set = path.pop();\n              set[0].splice(i, 1);\n              set[1].splice(i, 1);\n            }\n            delete cache20[id];\n          },\n          clear: function clear() {\n            map = [ [], [] ];\n            cache20 = create(null);\n          }\n        };\n      };\n    });\n    var require_map = __commonJS(function(exports, module) {\n      'use strict';\n      var callable = require_valid_callable();\n      var forEach = require_for_each();\n      var call = Function.prototype.call;\n      module.exports = function(obj, cb) {\n        var result = {}, thisArg = arguments[2];\n        callable(cb);\n        forEach(obj, function(value, key, targetObj, index) {\n          result[key] = call.call(cb, thisArg, value, key, targetObj, index);\n        });\n        return result;\n      };\n    });\n    var require_next_tick = __commonJS(function(exports, module) {\n      'use strict';\n      var callable;\n      var byObserver;\n      callable = function callable(fn) {\n        if (typeof fn !== 'function') {\n          throw new TypeError(fn + ' is not a function');\n        }\n        return fn;\n      };\n      byObserver = function byObserver(Observer) {\n        var node = document.createTextNode(''), queue4, currentQueue, i = 0;\n        new Observer(function() {\n          var callback;\n          if (!queue4) {\n            if (!currentQueue) {\n              return;\n            }\n            queue4 = currentQueue;\n          } else if (currentQueue) {\n            queue4 = currentQueue.concat(queue4);\n          }\n          currentQueue = queue4;\n          queue4 = null;\n          if (typeof currentQueue === 'function') {\n            callback = currentQueue;\n            currentQueue = null;\n            callback();\n            return;\n          }\n          node.data = i = ++i % 2;\n          while (currentQueue) {\n            callback = currentQueue.shift();\n            if (!currentQueue.length) {\n              currentQueue = null;\n            }\n            callback();\n          }\n        }).observe(node, {\n          characterData: true\n        });\n        return function(fn) {\n          callable(fn);\n          if (queue4) {\n            if (typeof queue4 === 'function') {\n              queue4 = [ queue4, fn ];\n            } else {\n              queue4.push(fn);\n            }\n            return;\n          }\n          queue4 = fn;\n          node.data = i = ++i % 2;\n        };\n      };\n      module.exports = function() {\n        if ((typeof process === 'undefined' ? 'undefined' : _typeof(process)) === 'object' && process && typeof process.nextTick === 'function') {\n          return process.nextTick;\n        }\n        if ((typeof document === 'undefined' ? 'undefined' : _typeof(document)) === 'object' && document) {\n          if (typeof MutationObserver === 'function') {\n            return byObserver(MutationObserver);\n          }\n          if (typeof WebKitMutationObserver === 'function') {\n            return byObserver(WebKitMutationObserver);\n          }\n        }\n        if (typeof setImmediate === 'function') {\n          return function(cb) {\n            setImmediate(callable(cb));\n          };\n        }\n        if (typeof setTimeout === 'function' || (typeof setTimeout === 'undefined' ? 'undefined' : _typeof(setTimeout)) === 'object') {\n          return function(cb) {\n            setTimeout(callable(cb), 0);\n          };\n        }\n        return null;\n      }();\n    });\n    var require_async = __commonJS(function() {\n      'use strict';\n      var aFrom = require_from();\n      var objectMap = require_map();\n      var mixin = require_mixin();\n      var defineLength = require_define_length();\n      var nextTick = require_next_tick();\n      var slice = Array.prototype.slice;\n      var apply = Function.prototype.apply;\n      var create = Object.create;\n      require_registered_extensions().async = function(tbi, conf) {\n        var waiting = create(null), cache20 = create(null), base = conf.memoized, original = conf.original, currentCallback, currentContext, currentArgs;\n        conf.memoized = defineLength(function(arg) {\n          var args = arguments, last = args[args.length - 1];\n          if (typeof last === 'function') {\n            currentCallback = last;\n            args = slice.call(args, 0, -1);\n          }\n          return base.apply(currentContext = this, currentArgs = args);\n        }, base);\n        try {\n          mixin(conf.memoized, base);\n        } catch (ignore) {}\n        conf.on('get', function(id) {\n          var cb, context3, args;\n          if (!currentCallback) {\n            return;\n          }\n          if (waiting[id]) {\n            if (typeof waiting[id] === 'function') {\n              waiting[id] = [ waiting[id], currentCallback ];\n            } else {\n              waiting[id].push(currentCallback);\n            }\n            currentCallback = null;\n            return;\n          }\n          cb = currentCallback;\n          context3 = currentContext;\n          args = currentArgs;\n          currentCallback = currentContext = currentArgs = null;\n          nextTick(function() {\n            var data2;\n            if (hasOwnProperty.call(cache20, id)) {\n              data2 = cache20[id];\n              conf.emit('getasync', id, args, context3);\n              apply.call(cb, data2.context, data2.args);\n            } else {\n              currentCallback = cb;\n              currentContext = context3;\n              currentArgs = args;\n              base.apply(context3, args);\n            }\n          });\n        });\n        conf.original = function() {\n          var args, cb, origCb, result;\n          if (!currentCallback) {\n            return apply.call(original, this, arguments);\n          }\n          args = aFrom(arguments);\n          cb = function self2(err2) {\n            var cb2, args2, id = self2.id;\n            if (id == null) {\n              nextTick(apply.bind(self2, this, arguments));\n              return void 0;\n            }\n            delete self2.id;\n            cb2 = waiting[id];\n            delete waiting[id];\n            if (!cb2) {\n              return void 0;\n            }\n            args2 = aFrom(arguments);\n            if (conf.has(id)) {\n              if (err2) {\n                conf['delete'](id);\n              } else {\n                cache20[id] = {\n                  context: this,\n                  args: args2\n                };\n                conf.emit('setasync', id, typeof cb2 === 'function' ? 1 : cb2.length);\n              }\n            }\n            if (typeof cb2 === 'function') {\n              result = apply.call(cb2, this, args2);\n            } else {\n              cb2.forEach(function(cb3) {\n                result = apply.call(cb3, this, args2);\n              }, this);\n            }\n            return result;\n          };\n          origCb = currentCallback;\n          currentCallback = currentContext = currentArgs = null;\n          args.push(cb);\n          result = apply.call(original, this, args);\n          cb.cb = origCb;\n          currentCallback = cb;\n          return result;\n        };\n        conf.on('set', function(id) {\n          if (!currentCallback) {\n            conf['delete'](id);\n            return;\n          }\n          if (waiting[id]) {\n            if (typeof waiting[id] === 'function') {\n              waiting[id] = [ waiting[id], currentCallback.cb ];\n            } else {\n              waiting[id].push(currentCallback.cb);\n            }\n          } else {\n            waiting[id] = currentCallback.cb;\n          }\n          delete currentCallback.cb;\n          currentCallback.id = id;\n          currentCallback = null;\n        });\n        conf.on('delete', function(id) {\n          var result;\n          if (hasOwnProperty.call(waiting, id)) {\n            return;\n          }\n          if (!cache20[id]) {\n            return;\n          }\n          result = cache20[id];\n          delete cache20[id];\n          conf.emit('deleteasync', id, slice.call(result.args, 1));\n        });\n        conf.on('clear', function() {\n          var oldCache = cache20;\n          cache20 = create(null);\n          conf.emit('clearasync', objectMap(oldCache, function(data2) {\n            return slice.call(data2.args, 1);\n          }));\n        });\n      };\n    });\n    var require_primitive_set = __commonJS(function(exports, module) {\n      'use strict';\n      var forEach = Array.prototype.forEach;\n      var create = Object.create;\n      module.exports = function(arg) {\n        var set = create(null);\n        forEach.call(arguments, function(name) {\n          set[name] = true;\n        });\n        return set;\n      };\n    });\n    var require_is_callable = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function(obj) {\n        return typeof obj === 'function';\n      };\n    });\n    var require_validate_stringifiable = __commonJS(function(exports, module) {\n      'use strict';\n      var isCallable = require_is_callable();\n      module.exports = function(stringifiable) {\n        try {\n          if (stringifiable && isCallable(stringifiable.toString)) {\n            return stringifiable.toString();\n          }\n          return String(stringifiable);\n        } catch (e) {\n          throw new TypeError('Passed argument cannot be stringifed');\n        }\n      };\n    });\n    var require_validate_stringifiable_value = __commonJS(function(exports, module) {\n      'use strict';\n      var ensureValue = require_valid_value();\n      var stringifiable = require_validate_stringifiable();\n      module.exports = function(value) {\n        return stringifiable(ensureValue(value));\n      };\n    });\n    var require_safe_to_string = __commonJS(function(exports, module) {\n      'use strict';\n      var isCallable = require_is_callable();\n      module.exports = function(value) {\n        try {\n          if (value && isCallable(value.toString)) {\n            return value.toString();\n          }\n          return String(value);\n        } catch (e) {\n          return '<Non-coercible to string value>';\n        }\n      };\n    });\n    var require_to_short_string_representation = __commonJS(function(exports, module) {\n      'use strict';\n      var safeToString = require_safe_to_string();\n      var reNewLine = /[\\n\\r\\u2028\\u2029]/g;\n      module.exports = function(value) {\n        var string = safeToString(value);\n        if (string.length > 100) {\n          string = string.slice(0, 99) + '\\u2026';\n        }\n        string = string.replace(reNewLine, function(_char) {\n          return JSON.stringify(_char).slice(1, -1);\n        });\n        return string;\n      };\n    });\n    var require_is_promise = __commonJS(function(exports, module) {\n      module.exports = isPromise;\n      module.exports['default'] = isPromise;\n      function isPromise(obj) {\n        return !!obj && (_typeof(obj) === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n      }\n    });\n    var require_promise = __commonJS(function() {\n      'use strict';\n      var objectMap = require_map();\n      var primitiveSet = require_primitive_set();\n      var ensureString = require_validate_stringifiable_value();\n      var toShortString = require_to_short_string_representation();\n      var isPromise = require_is_promise();\n      var nextTick = require_next_tick();\n      var create = Object.create;\n      var supportedModes = primitiveSet('then', 'then:finally', 'done', 'done:finally');\n      require_registered_extensions().promise = function(mode, conf) {\n        var waiting = create(null), cache20 = create(null), promises = create(null);\n        if (mode === true) {\n          mode = null;\n        } else {\n          mode = ensureString(mode);\n          if (!supportedModes[mode]) {\n            throw new TypeError('\\'' + toShortString(mode) + '\\' is not valid promise mode');\n          }\n        }\n        conf.on('set', function(id, ignore, promise) {\n          var isFailed = false;\n          if (!isPromise(promise)) {\n            cache20[id] = promise;\n            conf.emit('setasync', id, 1);\n            return;\n          }\n          waiting[id] = 1;\n          promises[id] = promise;\n          var onSuccess = function onSuccess(result) {\n            var count = waiting[id];\n            if (isFailed) {\n              throw new Error('Memoizee error: Detected unordered then|done & finally resolution, which in turn makes proper detection of success/failure impossible (when in \\'done:finally\\' mode)\\nConsider to rely on \\'then\\' or \\'done\\' mode instead.');\n            }\n            if (!count) {\n              return;\n            }\n            delete waiting[id];\n            cache20[id] = result;\n            conf.emit('setasync', id, count);\n          };\n          var onFailure = function onFailure() {\n            isFailed = true;\n            if (!waiting[id]) {\n              return;\n            }\n            delete waiting[id];\n            delete promises[id];\n            conf['delete'](id);\n          };\n          var resolvedMode = mode;\n          if (!resolvedMode) {\n            resolvedMode = 'then';\n          }\n          if (resolvedMode === 'then') {\n            var nextTickFailure = function nextTickFailure() {\n              nextTick(onFailure);\n            };\n            promise = promise.then(function(result) {\n              nextTick(onSuccess.bind(this, result));\n            }, nextTickFailure);\n            if (typeof promise['finally'] === 'function') {\n              promise['finally'](nextTickFailure);\n            }\n          } else if (resolvedMode === 'done') {\n            if (typeof promise.done !== 'function') {\n              throw new Error('Memoizee error: Retrieved promise does not implement \\'done\\' in \\'done\\' mode');\n            }\n            promise.done(onSuccess, onFailure);\n          } else if (resolvedMode === 'done:finally') {\n            if (typeof promise.done !== 'function') {\n              throw new Error('Memoizee error: Retrieved promise does not implement \\'done\\' in \\'done:finally\\' mode');\n            }\n            if (typeof promise['finally'] !== 'function') {\n              throw new Error('Memoizee error: Retrieved promise does not implement \\'finally\\' in \\'done:finally\\' mode');\n            }\n            promise.done(onSuccess);\n            promise['finally'](onFailure);\n          }\n        });\n        conf.on('get', function(id, args, context3) {\n          var promise;\n          if (waiting[id]) {\n            ++waiting[id];\n            return;\n          }\n          promise = promises[id];\n          var emit = function emit() {\n            conf.emit('getasync', id, args, context3);\n          };\n          if (isPromise(promise)) {\n            if (typeof promise.done === 'function') {\n              promise.done(emit);\n            } else {\n              promise.then(function() {\n                nextTick(emit);\n              });\n            }\n          } else {\n            emit();\n          }\n        });\n        conf.on('delete', function(id) {\n          delete promises[id];\n          if (waiting[id]) {\n            delete waiting[id];\n            return;\n          }\n          if (!hasOwnProperty.call(cache20, id)) {\n            return;\n          }\n          var result = cache20[id];\n          delete cache20[id];\n          conf.emit('deleteasync', id, [ result ]);\n        });\n        conf.on('clear', function() {\n          var oldCache = cache20;\n          cache20 = create(null);\n          waiting = create(null);\n          promises = create(null);\n          conf.emit('clearasync', objectMap(oldCache, function(data2) {\n            return [ data2 ];\n          }));\n        });\n      };\n    });\n    var require_dispose = __commonJS(function() {\n      'use strict';\n      var callable = require_valid_callable();\n      var forEach = require_for_each();\n      var extensions = require_registered_extensions();\n      var apply = Function.prototype.apply;\n      extensions.dispose = function(dispose, conf, options) {\n        var del;\n        callable(dispose);\n        if (options.async && extensions.async || options.promise && extensions.promise) {\n          conf.on('deleteasync', del = function del(id, resultArray) {\n            apply.call(dispose, null, resultArray);\n          });\n          conf.on('clearasync', function(cache20) {\n            forEach(cache20, function(result, id) {\n              del(id, result);\n            });\n          });\n          return;\n        }\n        conf.on('delete', del = function del(id, result) {\n          dispose(result);\n        });\n        conf.on('clear', function(cache20) {\n          forEach(cache20, function(result, id) {\n            del(id, result);\n          });\n        });\n      };\n    });\n    var require_max_timeout = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = 2147483647;\n    });\n    var require_valid_timeout = __commonJS(function(exports, module) {\n      'use strict';\n      var toPosInt = require_to_pos_integer();\n      var maxTimeout = require_max_timeout();\n      module.exports = function(value) {\n        value = toPosInt(value);\n        if (value > maxTimeout) {\n          throw new TypeError(value + ' exceeds maximum possible timeout');\n        }\n        return value;\n      };\n    });\n    var require_max_age = __commonJS(function() {\n      'use strict';\n      var aFrom = require_from();\n      var forEach = require_for_each();\n      var nextTick = require_next_tick();\n      var isPromise = require_is_promise();\n      var timeout = require_valid_timeout();\n      var extensions = require_registered_extensions();\n      var noop4 = Function.prototype;\n      var max = Math.max;\n      var min = Math.min;\n      var create = Object.create;\n      extensions.maxAge = function(maxAge, conf, options) {\n        var timeouts, postfix, preFetchAge, preFetchTimeouts;\n        maxAge = timeout(maxAge);\n        if (!maxAge) {\n          return;\n        }\n        timeouts = create(null);\n        postfix = options.async && extensions.async || options.promise && extensions.promise ? 'async' : '';\n        conf.on('set' + postfix, function(id) {\n          timeouts[id] = setTimeout(function() {\n            conf['delete'](id);\n          }, maxAge);\n          if (typeof timeouts[id].unref === 'function') {\n            timeouts[id].unref();\n          }\n          if (!preFetchTimeouts) {\n            return;\n          }\n          if (preFetchTimeouts[id]) {\n            if (preFetchTimeouts[id] !== 'nextTick') {\n              clearTimeout(preFetchTimeouts[id]);\n            }\n          }\n          preFetchTimeouts[id] = setTimeout(function() {\n            delete preFetchTimeouts[id];\n          }, preFetchAge);\n          if (typeof preFetchTimeouts[id].unref === 'function') {\n            preFetchTimeouts[id].unref();\n          }\n        });\n        conf.on('delete' + postfix, function(id) {\n          clearTimeout(timeouts[id]);\n          delete timeouts[id];\n          if (!preFetchTimeouts) {\n            return;\n          }\n          if (preFetchTimeouts[id] !== 'nextTick') {\n            clearTimeout(preFetchTimeouts[id]);\n          }\n          delete preFetchTimeouts[id];\n        });\n        if (options.preFetch) {\n          if (options.preFetch === true || isNaN(options.preFetch)) {\n            preFetchAge = .333;\n          } else {\n            preFetchAge = max(min(Number(options.preFetch), 1), 0);\n          }\n          if (preFetchAge) {\n            preFetchTimeouts = {};\n            preFetchAge = (1 - preFetchAge) * maxAge;\n            conf.on('get' + postfix, function(id, args, context3) {\n              if (!preFetchTimeouts[id]) {\n                preFetchTimeouts[id] = 'nextTick';\n                nextTick(function() {\n                  var result;\n                  if (preFetchTimeouts[id] !== 'nextTick') {\n                    return;\n                  }\n                  delete preFetchTimeouts[id];\n                  conf['delete'](id);\n                  if (options.async) {\n                    args = aFrom(args);\n                    args.push(noop4);\n                  }\n                  result = conf.memoized.apply(context3, args);\n                  if (options.promise) {\n                    if (isPromise(result)) {\n                      if (typeof result.done === 'function') {\n                        result.done(noop4, noop4);\n                      } else {\n                        result.then(noop4, noop4);\n                      }\n                    }\n                  }\n                });\n              }\n            });\n          }\n        }\n        conf.on('clear' + postfix, function() {\n          forEach(timeouts, function(id) {\n            clearTimeout(id);\n          });\n          timeouts = {};\n          if (preFetchTimeouts) {\n            forEach(preFetchTimeouts, function(id) {\n              if (id !== 'nextTick') {\n                clearTimeout(id);\n              }\n            });\n            preFetchTimeouts = {};\n          }\n        });\n      };\n    });\n    var require_lru_queue = __commonJS(function(exports, module) {\n      'use strict';\n      var toPosInt = require_to_pos_integer();\n      var create = Object.create;\n      var hasOwnProperty2 = Object.prototype.hasOwnProperty;\n      module.exports = function(limit) {\n        var size = 0, base = 1, queue4 = create(null), map = create(null), index = 0, del;\n        limit = toPosInt(limit);\n        return {\n          hit: function hit(id) {\n            var oldIndex = map[id], nuIndex = ++index;\n            queue4[nuIndex] = id;\n            map[id] = nuIndex;\n            if (!oldIndex) {\n              ++size;\n              if (size <= limit) {\n                return;\n              }\n              id = queue4[base];\n              del(id);\n              return id;\n            }\n            delete queue4[oldIndex];\n            if (base !== oldIndex) {\n              return;\n            }\n            while (!hasOwnProperty2.call(queue4, ++base)) {\n              continue;\n            }\n          },\n          delete: del = function del(id) {\n            var oldIndex = map[id];\n            if (!oldIndex) {\n              return;\n            }\n            delete queue4[oldIndex];\n            delete map[id];\n            --size;\n            if (base !== oldIndex) {\n              return;\n            }\n            if (!size) {\n              index = 0;\n              base = 1;\n              return;\n            }\n            while (!hasOwnProperty2.call(queue4, ++base)) {\n              continue;\n            }\n          },\n          clear: function clear() {\n            size = 0;\n            base = 1;\n            queue4 = create(null);\n            map = create(null);\n            index = 0;\n          }\n        };\n      };\n    });\n    var require_max = __commonJS(function() {\n      'use strict';\n      var toPosInteger = require_to_pos_integer();\n      var lruQueue = require_lru_queue();\n      var extensions = require_registered_extensions();\n      extensions.max = function(max, conf, options) {\n        var postfix, queue4, hit;\n        max = toPosInteger(max);\n        if (!max) {\n          return;\n        }\n        queue4 = lruQueue(max);\n        postfix = options.async && extensions.async || options.promise && extensions.promise ? 'async' : '';\n        conf.on('set' + postfix, hit = function hit(id) {\n          id = queue4.hit(id);\n          if (id === void 0) {\n            return;\n          }\n          conf['delete'](id);\n        });\n        conf.on('get' + postfix, hit);\n        conf.on('delete' + postfix, queue4['delete']);\n        conf.on('clear' + postfix, queue4.clear);\n      };\n    });\n    var require_ref_counter = __commonJS(function() {\n      'use strict';\n      var d = require_d();\n      var extensions = require_registered_extensions();\n      var create = Object.create;\n      var defineProperties = Object.defineProperties;\n      extensions.refCounter = function(ignore, conf, options) {\n        var cache20, postfix;\n        cache20 = create(null);\n        postfix = options.async && extensions.async || options.promise && extensions.promise ? 'async' : '';\n        conf.on('set' + postfix, function(id, length) {\n          cache20[id] = length || 1;\n        });\n        conf.on('get' + postfix, function(id) {\n          ++cache20[id];\n        });\n        conf.on('delete' + postfix, function(id) {\n          delete cache20[id];\n        });\n        conf.on('clear' + postfix, function() {\n          cache20 = {};\n        });\n        defineProperties(conf.memoized, {\n          deleteRef: d(function() {\n            var id = conf.get(arguments);\n            if (id === null) {\n              return null;\n            }\n            if (!cache20[id]) {\n              return null;\n            }\n            if (!--cache20[id]) {\n              conf['delete'](id);\n              return true;\n            }\n            return false;\n          }),\n          getRefCount: d(function() {\n            var id = conf.get(arguments);\n            if (id === null) {\n              return 0;\n            }\n            if (!cache20[id]) {\n              return 0;\n            }\n            return cache20[id];\n          })\n        });\n      };\n    });\n    var require_memoizee = __commonJS(function(exports, module) {\n      'use strict';\n      var normalizeOpts = require_normalize_options();\n      var resolveLength = require_resolve_length();\n      var plain = require_plain();\n      module.exports = function(fn) {\n        var options = normalizeOpts(arguments[1]), length;\n        if (!options.normalizer) {\n          length = options.length = resolveLength(options.length, fn.length, options.async);\n          if (length !== 0) {\n            if (options.primitive) {\n              if (length === false) {\n                options.normalizer = require_primitive();\n              } else if (length > 1) {\n                options.normalizer = require_get_primitive_fixed()(length);\n              }\n            } else if (length === false) {\n              options.normalizer = require_get()();\n            } else if (length === 1) {\n              options.normalizer = require_get_1()();\n            } else {\n              options.normalizer = require_get_fixed()(length);\n            }\n          }\n        }\n        if (options.async) {\n          require_async();\n        }\n        if (options.promise) {\n          require_promise();\n        }\n        if (options.dispose) {\n          require_dispose();\n        }\n        if (options.maxAge) {\n          require_max_age();\n        }\n        if (options.max) {\n          require_max();\n        }\n        if (options.refCounter) {\n          require_ref_counter();\n        }\n        return plain(fn, options);\n      };\n    });\n    var require_emoji_regex = __commonJS(function(exports, module) {\n      'use strict';\n      module.exports = function() {\n        return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n      };\n    });\n    var require_doT = __commonJS(function(exports, module) {\n      (function() {\n        'use strict';\n        var doT3 = {\n          name: 'doT',\n          version: '1.1.1',\n          templateSettings: {\n            evaluate: /\\{\\{([\\s\\S]+?(\\}?)+)\\}\\}/g,\n            interpolate: /\\{\\{=([\\s\\S]+?)\\}\\}/g,\n            encode: /\\{\\{!([\\s\\S]+?)\\}\\}/g,\n            use: /\\{\\{#([\\s\\S]+?)\\}\\}/g,\n            useParams: /(^|[^\\w$])def(?:\\.|\\[[\\'\\\"])([\\w$\\.]+)(?:[\\'\\\"]\\])?\\s*\\:\\s*([\\w$\\.]+|\\\"[^\\\"]+\\\"|\\'[^\\']+\\'|\\{[^\\}]+\\})/g,\n            define: /\\{\\{##\\s*([\\w\\.$]+)\\s*(\\:|=)([\\s\\S]+?)#\\}\\}/g,\n            defineParams: /^\\s*([\\w$]+):([\\s\\S]+)/,\n            conditional: /\\{\\{\\?(\\?)?\\s*([\\s\\S]*?)\\s*\\}\\}/g,\n            iterate: /\\{\\{~\\s*(?:\\}\\}|([\\s\\S]+?)\\s*\\:\\s*([\\w$]+)\\s*(?:\\:\\s*([\\w$]+))?\\s*\\}\\})/g,\n            varname: 'it',\n            strip: true,\n            append: true,\n            selfcontained: false,\n            doNotSkipEncoded: false\n          },\n          template: void 0,\n          compile: void 0,\n          log: true\n        };\n        (function() {\n          if ((typeof globalThis === 'undefined' ? 'undefined' : _typeof(globalThis)) === 'object') {\n            return;\n          }\n          try {\n            Object.defineProperty(Object.prototype, '__magic__', {\n              get: function get() {\n                return this;\n              },\n              configurable: true\n            });\n            __magic__.globalThis = __magic__;\n            delete Object.prototype.__magic__;\n          } catch (e) {\n            window.globalThis = function() {\n              if (typeof self !== 'undefined') {\n                return self;\n              }\n              if (typeof window !== 'undefined') {\n                return window;\n              }\n              if (typeof global !== 'undefined') {\n                return global;\n              }\n              if (typeof this !== 'undefined') {\n                return this;\n              }\n              throw new Error('Unable to locate global `this`');\n            }();\n          }\n        })();\n        doT3.encodeHTMLSource = function(doNotSkipEncoded) {\n          var encodeHTMLRules = {\n            '&': '&#38;',\n            '<': '&#60;',\n            '>': '&#62;',\n            '\"': '&#34;',\n            '\\'': '&#39;',\n            '/': '&#47;'\n          }, matchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n          return function(code) {\n            return code ? code.toString().replace(matchHTML, function(m) {\n              return encodeHTMLRules[m] || m;\n            }) : '';\n          };\n        };\n        if (typeof module !== 'undefined' && module.exports) {\n          module.exports = doT3;\n        } else if (typeof define === 'function' && define.amd) {\n          define(function() {\n            return doT3;\n          });\n        } else {\n          globalThis.doT = doT3;\n        }\n        var startend = {\n          append: {\n            start: '\\'+(',\n            end: ')+\\'',\n            startencode: '\\'+encodeHTML('\n          },\n          split: {\n            start: '\\';out+=(',\n            end: ');out+=\\'',\n            startencode: '\\';out+=encodeHTML('\n          }\n        }, skip = /$^/;\n        function resolveDefs(c, block, def) {\n          return (typeof block === 'string' ? block : block.toString()).replace(c.define || skip, function(m, code, assign, value) {\n            if (code.indexOf('def.') === 0) {\n              code = code.substring(4);\n            }\n            if (!(code in def)) {\n              if (assign === ':') {\n                if (c.defineParams) {\n                  value.replace(c.defineParams, function(m2, param, v) {\n                    def[code] = {\n                      arg: param,\n                      text: v\n                    };\n                  });\n                }\n                if (!(code in def)) {\n                  def[code] = value;\n                }\n              } else {\n                new Function('def', 'def[\\'' + code + '\\']=' + value)(def);\n              }\n            }\n            return '';\n          }).replace(c.use || skip, function(m, code) {\n            if (c.useParams) {\n              code = code.replace(c.useParams, function(m2, s, d, param) {\n                if (def[d] && def[d].arg && param) {\n                  var rw = (d + ':' + param).replace(/'|\\\\/g, '_');\n                  def.__exp = def.__exp || {};\n                  def.__exp[rw] = def[d].text.replace(new RegExp('(^|[^\\\\w$])' + def[d].arg + '([^\\\\w$])', 'g'), '$1' + param + '$2');\n                  return s + 'def.__exp[\\'' + rw + '\\']';\n                }\n              });\n            }\n            var v = new Function('def', 'return ' + code)(def);\n            return v ? resolveDefs(c, v, def) : v;\n          });\n        }\n        function unescape(code) {\n          return code.replace(/\\\\('|\\\\)/g, '$1').replace(/[\\r\\t\\n]/g, ' ');\n        }\n        doT3.template = function(tmpl, c, def) {\n          c = c || doT3.templateSettings;\n          var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv, str = c.use || c.define ? resolveDefs(c, tmpl, def || {}) : tmpl;\n          str = ('var out=\\'' + (c.strip ? str.replace(/(^|\\r|\\n)\\t* +| +\\t*(\\r|\\n|$)/g, ' ').replace(/\\r|\\n|\\t|\\/\\*[\\s\\S]*?\\*\\//g, '') : str).replace(/'|\\\\/g, '\\\\$&').replace(c.interpolate || skip, function(m, code) {\n            return cse.start + unescape(code) + cse.end;\n          }).replace(c.encode || skip, function(m, code) {\n            needhtmlencode = true;\n            return cse.startencode + unescape(code) + cse.end;\n          }).replace(c.conditional || skip, function(m, elsecase, code) {\n            return elsecase ? code ? '\\';}else if(' + unescape(code) + '){out+=\\'' : '\\';}else{out+=\\'' : code ? '\\';if(' + unescape(code) + '){out+=\\'' : '\\';}out+=\\'';\n          }).replace(c.iterate || skip, function(m, iterate, vname, iname) {\n            if (!iterate) {\n              return '\\';} } out+=\\'';\n            }\n            sid += 1;\n            indv = iname || 'i' + sid;\n            iterate = unescape(iterate);\n            return '\\';var arr' + sid + '=' + iterate + ';if(arr' + sid + '){var ' + vname + ',' + indv + '=-1,l' + sid + '=arr' + sid + '.length-1;while(' + indv + '<l' + sid + '){' + vname + '=arr' + sid + '[' + indv + '+=1];out+=\\'';\n          }).replace(c.evaluate || skip, function(m, code) {\n            return '\\';' + unescape(code) + 'out+=\\'';\n          }) + '\\';return out;').replace(/\\n/g, '\\\\n').replace(/\\t/g, '\\\\t').replace(/\\r/g, '\\\\r').replace(/(\\s|;|\\}|^|\\{)out\\+='';/g, '$1').replace(/\\+''/g, '');\n          if (needhtmlencode) {\n            if (!c.selfcontained && globalThis && !globalThis._encodeHTML) {\n              globalThis._encodeHTML = doT3.encodeHTMLSource(c.doNotSkipEncoded);\n            }\n            str = 'var encodeHTML = typeof _encodeHTML !== \\'undefined\\' ? _encodeHTML : (' + doT3.encodeHTMLSource.toString() + '(' + (c.doNotSkipEncoded || '') + '));' + str;\n          }\n          try {\n            return new Function(c.varname, str);\n          } catch (e) {\n            if (typeof console !== 'undefined') {\n              console.log('Could not create a template function: ' + str);\n            }\n            throw e;\n          }\n        };\n        doT3.compile = function(tmpl, def) {\n          return doT3.template(tmpl, null, def);\n        };\n      })();\n    });\n    var require_es6_promise = __commonJS(function(exports, module) {\n      (function(global2, factory) {\n        _typeof(exports) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global2.ES6Promise = factory();\n      })(exports, function() {\n        'use strict';\n        function objectOrFunction(x) {\n          var type = _typeof(x);\n          return x !== null && (type === 'object' || type === 'function');\n        }\n        function isFunction(x) {\n          return typeof x === 'function';\n        }\n        var _isArray = void 0;\n        if (Array.isArray) {\n          _isArray = Array.isArray;\n        } else {\n          _isArray = function _isArray(x) {\n            return Object.prototype.toString.call(x) === '[object Array]';\n          };\n        }\n        var isArray = _isArray;\n        var len = 0;\n        var vertxNext = void 0;\n        var customSchedulerFn = void 0;\n        var asap = function asap2(callback, arg) {\n          queue4[len] = callback;\n          queue4[len + 1] = arg;\n          len += 2;\n          if (len === 2) {\n            if (customSchedulerFn) {\n              customSchedulerFn(flush);\n            } else {\n              scheduleFlush();\n            }\n          }\n        };\n        function setScheduler(scheduleFn) {\n          customSchedulerFn = scheduleFn;\n        }\n        function setAsap(asapFn) {\n          asap = asapFn;\n        }\n        var browserWindow = typeof window !== 'undefined' ? window : void 0;\n        var browserGlobal = browserWindow || {};\n        var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\n        var isNode2 = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n        var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n        function useNextTick() {\n          return function() {\n            return process.nextTick(flush);\n          };\n        }\n        function useVertxTimer() {\n          if (typeof vertxNext !== 'undefined') {\n            return function() {\n              vertxNext(flush);\n            };\n          }\n          return useSetTimeout();\n        }\n        function useMutationObserver() {\n          var iterations = 0;\n          var observer = new BrowserMutationObserver(flush);\n          var node = document.createTextNode('');\n          observer.observe(node, {\n            characterData: true\n          });\n          return function() {\n            node.data = iterations = ++iterations % 2;\n          };\n        }\n        function useMessageChannel() {\n          var channel = new MessageChannel();\n          channel.port1.onmessage = flush;\n          return function() {\n            return channel.port2.postMessage(0);\n          };\n        }\n        function useSetTimeout() {\n          var globalSetTimeout = setTimeout;\n          return function() {\n            return globalSetTimeout(flush, 1);\n          };\n        }\n        var queue4 = new Array(1e3);\n        function flush() {\n          for (var i = 0; i < len; i += 2) {\n            var callback = queue4[i];\n            var arg = queue4[i + 1];\n            callback(arg);\n            queue4[i] = void 0;\n            queue4[i + 1] = void 0;\n          }\n          len = 0;\n        }\n        function attemptVertx() {\n          try {\n            var vertx = Function('return this')().require('vertx');\n            vertxNext = vertx.runOnLoop || vertx.runOnContext;\n            return useVertxTimer();\n          } catch (e) {\n            return useSetTimeout();\n          }\n        }\n        var scheduleFlush = void 0;\n        if (isNode2) {\n          scheduleFlush = useNextTick();\n        } else if (BrowserMutationObserver) {\n          scheduleFlush = useMutationObserver();\n        } else if (isWorker) {\n          scheduleFlush = useMessageChannel();\n        } else if (browserWindow === void 0 && true) {\n          scheduleFlush = attemptVertx();\n        } else {\n          scheduleFlush = useSetTimeout();\n        }\n        function then(onFulfillment, onRejection) {\n          var parent = this;\n          var child = new this.constructor(noop4);\n          if (child[PROMISE_ID] === void 0) {\n            makePromise(child);\n          }\n          var _state = parent._state;\n          if (_state) {\n            var callback = arguments[_state - 1];\n            asap(function() {\n              return invokeCallback(_state, child, callback, parent._result);\n            });\n          } else {\n            subscribe2(parent, child, onFulfillment, onRejection);\n          }\n          return child;\n        }\n        function resolve$1(object) {\n          var Constructor = this;\n          if (object && _typeof(object) === 'object' && object.constructor === Constructor) {\n            return object;\n          }\n          var promise = new Constructor(noop4);\n          resolve(promise, object);\n          return promise;\n        }\n        var PROMISE_ID = Math.random().toString(36).substring(2);\n        function noop4() {}\n        var PENDING = void 0;\n        var FULFILLED = 1;\n        var REJECTED = 2;\n        function selfFulfillment() {\n          return new TypeError('You cannot resolve a promise with itself');\n        }\n        function cannotReturnOwn() {\n          return new TypeError('A promises callback cannot return that same promise.');\n        }\n        function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n          try {\n            then$$1.call(value, fulfillmentHandler, rejectionHandler);\n          } catch (e) {\n            return e;\n          }\n        }\n        function handleForeignThenable(promise, thenable, then$$1) {\n          asap(function(promise2) {\n            var sealed = false;\n            var error = tryThen(then$$1, thenable, function(value) {\n              if (sealed) {\n                return;\n              }\n              sealed = true;\n              if (thenable !== value) {\n                resolve(promise2, value);\n              } else {\n                fulfill(promise2, value);\n              }\n            }, function(reason) {\n              if (sealed) {\n                return;\n              }\n              sealed = true;\n              reject(promise2, reason);\n            }, 'Settle: ' + (promise2._label || ' unknown promise'));\n            if (!sealed && error) {\n              sealed = true;\n              reject(promise2, error);\n            }\n          }, promise);\n        }\n        function handleOwnThenable(promise, thenable) {\n          if (thenable._state === FULFILLED) {\n            fulfill(promise, thenable._result);\n          } else if (thenable._state === REJECTED) {\n            reject(promise, thenable._result);\n          } else {\n            subscribe2(thenable, void 0, function(value) {\n              return resolve(promise, value);\n            }, function(reason) {\n              return reject(promise, reason);\n            });\n          }\n        }\n        function handleMaybeThenable(promise, maybeThenable, then$$1) {\n          if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n            handleOwnThenable(promise, maybeThenable);\n          } else {\n            if (then$$1 === void 0) {\n              fulfill(promise, maybeThenable);\n            } else if (isFunction(then$$1)) {\n              handleForeignThenable(promise, maybeThenable, then$$1);\n            } else {\n              fulfill(promise, maybeThenable);\n            }\n          }\n        }\n        function resolve(promise, value) {\n          if (promise === value) {\n            reject(promise, selfFulfillment());\n          } else if (objectOrFunction(value)) {\n            var then$$1 = void 0;\n            try {\n              then$$1 = value.then;\n            } catch (error) {\n              reject(promise, error);\n              return;\n            }\n            handleMaybeThenable(promise, value, then$$1);\n          } else {\n            fulfill(promise, value);\n          }\n        }\n        function publishRejection(promise) {\n          if (promise._onerror) {\n            promise._onerror(promise._result);\n          }\n          publish(promise);\n        }\n        function fulfill(promise, value) {\n          if (promise._state !== PENDING) {\n            return;\n          }\n          promise._result = value;\n          promise._state = FULFILLED;\n          if (promise._subscribers.length !== 0) {\n            asap(publish, promise);\n          }\n        }\n        function reject(promise, reason) {\n          if (promise._state !== PENDING) {\n            return;\n          }\n          promise._state = REJECTED;\n          promise._result = reason;\n          asap(publishRejection, promise);\n        }\n        function subscribe2(parent, child, onFulfillment, onRejection) {\n          var _subscribers = parent._subscribers;\n          var length = _subscribers.length;\n          parent._onerror = null;\n          _subscribers[length] = child;\n          _subscribers[length + FULFILLED] = onFulfillment;\n          _subscribers[length + REJECTED] = onRejection;\n          if (length === 0 && parent._state) {\n            asap(publish, parent);\n          }\n        }\n        function publish(promise) {\n          var subscribers = promise._subscribers;\n          var settled = promise._state;\n          if (subscribers.length === 0) {\n            return;\n          }\n          var child = void 0, callback = void 0, detail = promise._result;\n          for (var i = 0; i < subscribers.length; i += 3) {\n            child = subscribers[i];\n            callback = subscribers[i + settled];\n            if (child) {\n              invokeCallback(settled, child, callback, detail);\n            } else {\n              callback(detail);\n            }\n          }\n          promise._subscribers.length = 0;\n        }\n        function invokeCallback(settled, promise, callback, detail) {\n          var hasCallback = isFunction(callback), value = void 0, error = void 0, succeeded = true;\n          if (hasCallback) {\n            try {\n              value = callback(detail);\n            } catch (e) {\n              succeeded = false;\n              error = e;\n            }\n            if (promise === value) {\n              reject(promise, cannotReturnOwn());\n              return;\n            }\n          } else {\n            value = detail;\n          }\n          if (promise._state !== PENDING) {} else if (hasCallback && succeeded) {\n            resolve(promise, value);\n          } else if (succeeded === false) {\n            reject(promise, error);\n          } else if (settled === FULFILLED) {\n            fulfill(promise, value);\n          } else if (settled === REJECTED) {\n            reject(promise, value);\n          }\n        }\n        function initializePromise(promise, resolver) {\n          try {\n            resolver(function resolvePromise(value) {\n              resolve(promise, value);\n            }, function rejectPromise(reason) {\n              reject(promise, reason);\n            });\n          } catch (e) {\n            reject(promise, e);\n          }\n        }\n        var id = 0;\n        function nextId() {\n          return id++;\n        }\n        function makePromise(promise) {\n          promise[PROMISE_ID] = id++;\n          promise._state = void 0;\n          promise._result = void 0;\n          promise._subscribers = [];\n        }\n        function validationError() {\n          return new Error('Array Methods must be provided an Array');\n        }\n        var Enumerator = function() {\n          function Enumerator2(Constructor, input) {\n            this._instanceConstructor = Constructor;\n            this.promise = new Constructor(noop4);\n            if (!this.promise[PROMISE_ID]) {\n              makePromise(this.promise);\n            }\n            if (isArray(input)) {\n              this.length = input.length;\n              this._remaining = input.length;\n              this._result = new Array(this.length);\n              if (this.length === 0) {\n                fulfill(this.promise, this._result);\n              } else {\n                this.length = this.length || 0;\n                this._enumerate(input);\n                if (this._remaining === 0) {\n                  fulfill(this.promise, this._result);\n                }\n              }\n            } else {\n              reject(this.promise, validationError());\n            }\n          }\n          Enumerator2.prototype._enumerate = function _enumerate(input) {\n            for (var i = 0; this._state === PENDING && i < input.length; i++) {\n              this._eachEntry(input[i], i);\n            }\n          };\n          Enumerator2.prototype._eachEntry = function _eachEntry(entry, i) {\n            var c = this._instanceConstructor;\n            var resolve$$1 = c.resolve;\n            if (resolve$$1 === resolve$1) {\n              var _then = void 0;\n              var error = void 0;\n              var didError = false;\n              try {\n                _then = entry.then;\n              } catch (e) {\n                didError = true;\n                error = e;\n              }\n              if (_then === then && entry._state !== PENDING) {\n                this._settledAt(entry._state, i, entry._result);\n              } else if (typeof _then !== 'function') {\n                this._remaining--;\n                this._result[i] = entry;\n              } else if (c === Promise$1) {\n                var promise = new c(noop4);\n                if (didError) {\n                  reject(promise, error);\n                } else {\n                  handleMaybeThenable(promise, entry, _then);\n                }\n                this._willSettleAt(promise, i);\n              } else {\n                this._willSettleAt(new c(function(resolve$$12) {\n                  return resolve$$12(entry);\n                }), i);\n              }\n            } else {\n              this._willSettleAt(resolve$$1(entry), i);\n            }\n          };\n          Enumerator2.prototype._settledAt = function _settledAt(state, i, value) {\n            var promise = this.promise;\n            if (promise._state === PENDING) {\n              this._remaining--;\n              if (state === REJECTED) {\n                reject(promise, value);\n              } else {\n                this._result[i] = value;\n              }\n            }\n            if (this._remaining === 0) {\n              fulfill(promise, this._result);\n            }\n          };\n          Enumerator2.prototype._willSettleAt = function _willSettleAt(promise, i) {\n            var enumerator = this;\n            subscribe2(promise, void 0, function(value) {\n              return enumerator._settledAt(FULFILLED, i, value);\n            }, function(reason) {\n              return enumerator._settledAt(REJECTED, i, reason);\n            });\n          };\n          return Enumerator2;\n        }();\n        function all(entries) {\n          return new Enumerator(this, entries).promise;\n        }\n        function race(entries) {\n          var Constructor = this;\n          if (!isArray(entries)) {\n            return new Constructor(function(_, reject2) {\n              return reject2(new TypeError('You must pass an array to race.'));\n            });\n          } else {\n            return new Constructor(function(resolve2, reject2) {\n              var length = entries.length;\n              for (var i = 0; i < length; i++) {\n                Constructor.resolve(entries[i]).then(resolve2, reject2);\n              }\n            });\n          }\n        }\n        function reject$1(reason) {\n          var Constructor = this;\n          var promise = new Constructor(noop4);\n          reject(promise, reason);\n          return promise;\n        }\n        function needsResolver() {\n          throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n        }\n        function needsNew() {\n          throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n        }\n        var Promise$1 = function() {\n          function Promise2(resolver) {\n            this[PROMISE_ID] = nextId();\n            this._result = this._state = void 0;\n            this._subscribers = [];\n            if (noop4 !== resolver) {\n              typeof resolver !== 'function' && needsResolver();\n              this instanceof Promise2 ? initializePromise(this, resolver) : needsNew();\n            }\n          }\n          Promise2.prototype['catch'] = function _catch(onRejection) {\n            return this.then(null, onRejection);\n          };\n          Promise2.prototype['finally'] = function _finally(callback) {\n            var promise = this;\n            var constructor = promise.constructor;\n            if (isFunction(callback)) {\n              return promise.then(function(value) {\n                return constructor.resolve(callback()).then(function() {\n                  return value;\n                });\n              }, function(reason) {\n                return constructor.resolve(callback()).then(function() {\n                  throw reason;\n                });\n              });\n            }\n            return promise.then(callback, callback);\n          };\n          return Promise2;\n        }();\n        Promise$1.prototype.then = then;\n        Promise$1.all = all;\n        Promise$1.race = race;\n        Promise$1.resolve = resolve$1;\n        Promise$1.reject = reject$1;\n        Promise$1._setScheduler = setScheduler;\n        Promise$1._setAsap = setAsap;\n        Promise$1._asap = asap;\n        function polyfill() {\n          var local = void 0;\n          if (typeof global !== 'undefined') {\n            local = global;\n          } else if (typeof self !== 'undefined') {\n            local = self;\n          } else {\n            try {\n              local = Function('return this')();\n            } catch (e) {\n              throw new Error('polyfill failed because global object is unavailable in this environment');\n            }\n          }\n          var P = local.Promise;\n          if (P) {\n            var promiseToString = null;\n            try {\n              promiseToString = Object.prototype.toString.call(P.resolve());\n            } catch (e) {}\n            if (promiseToString === '[object Promise]' && !P.cast) {\n              return;\n            }\n          }\n          local.Promise = Promise$1;\n        }\n        Promise$1.polyfill = polyfill;\n        Promise$1.Promise = Promise$1;\n        return Promise$1;\n      });\n    });\n    var require_typedarray = __commonJS(function(exports) {\n      var undefined2 = void 0;\n      var MAX_ARRAY_LENGTH = 1e5;\n      var ECMAScript = function() {\n        var opts = Object.prototype.toString, ophop = Object.prototype.hasOwnProperty;\n        return {\n          Class: function Class(v) {\n            return opts.call(v).replace(/^\\[object *|\\]$/g, '');\n          },\n          HasProperty: function HasProperty(o, p) {\n            return p in o;\n          },\n          HasOwnProperty: function HasOwnProperty(o, p) {\n            return ophop.call(o, p);\n          },\n          IsCallable: function IsCallable(o) {\n            return typeof o === 'function';\n          },\n          ToInt32: function ToInt32(v) {\n            return v >> 0;\n          },\n          ToUint32: function ToUint32(v) {\n            return v >>> 0;\n          }\n        };\n      }();\n      var LN2 = Math.LN2;\n      var abs = Math.abs;\n      var floor = Math.floor;\n      var log10 = Math.log;\n      var min = Math.min;\n      var pow = Math.pow;\n      var round = Math.round;\n      function configureProperties(obj) {\n        if (getOwnPropNames && defineProp) {\n          var props = getOwnPropNames(obj), i;\n          for (i = 0; i < props.length; i += 1) {\n            defineProp(obj, props[i], {\n              value: obj[props[i]],\n              writable: false,\n              enumerable: false,\n              configurable: false\n            });\n          }\n        }\n      }\n      var defineProp;\n      if (Object.defineProperty && function() {\n        try {\n          Object.defineProperty({}, 'x', {});\n          return true;\n        } catch (e) {\n          return false;\n        }\n      }()) {\n        defineProp = Object.defineProperty;\n      } else {\n        defineProp = function defineProp(o, p, desc) {\n          if (!o === Object(o)) {\n            throw new TypeError('Object.defineProperty called on non-object');\n          }\n          if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) {\n            Object.prototype.__defineGetter__.call(o, p, desc.get);\n          }\n          if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) {\n            Object.prototype.__defineSetter__.call(o, p, desc.set);\n          }\n          if (ECMAScript.HasProperty(desc, 'value')) {\n            o[p] = desc.value;\n          }\n          return o;\n        };\n      }\n      var getOwnPropNames = Object.getOwnPropertyNames || function(o) {\n        if (o !== Object(o)) {\n          throw new TypeError('Object.getOwnPropertyNames called on non-object');\n        }\n        var props = [], p;\n        for (p in o) {\n          if (ECMAScript.HasOwnProperty(o, p)) {\n            props.push(p);\n          }\n        }\n        return props;\n      };\n      function makeArrayAccessors(obj) {\n        if (!defineProp) {\n          return;\n        }\n        if (obj.length > MAX_ARRAY_LENGTH) {\n          throw new RangeError('Array too large for polyfill');\n        }\n        function makeArrayAccessor(index) {\n          defineProp(obj, index, {\n            get: function get() {\n              return obj._getter(index);\n            },\n            set: function set(v) {\n              obj._setter(index, v);\n            },\n            enumerable: true,\n            configurable: false\n          });\n        }\n        var i;\n        for (i = 0; i < obj.length; i += 1) {\n          makeArrayAccessor(i);\n        }\n      }\n      function as_signed(value, bits) {\n        var s = 32 - bits;\n        return value << s >> s;\n      }\n      function as_unsigned(value, bits) {\n        var s = 32 - bits;\n        return value << s >>> s;\n      }\n      function packI8(n) {\n        return [ n & 255 ];\n      }\n      function unpackI8(bytes) {\n        return as_signed(bytes[0], 8);\n      }\n      function packU8(n) {\n        return [ n & 255 ];\n      }\n      function unpackU8(bytes) {\n        return as_unsigned(bytes[0], 8);\n      }\n      function packU8Clamped(n) {\n        n = round(Number(n));\n        return [ n < 0 ? 0 : n > 255 ? 255 : n & 255 ];\n      }\n      function packI16(n) {\n        return [ n >> 8 & 255, n & 255 ];\n      }\n      function unpackI16(bytes) {\n        return as_signed(bytes[0] << 8 | bytes[1], 16);\n      }\n      function packU16(n) {\n        return [ n >> 8 & 255, n & 255 ];\n      }\n      function unpackU16(bytes) {\n        return as_unsigned(bytes[0] << 8 | bytes[1], 16);\n      }\n      function packI32(n) {\n        return [ n >> 24 & 255, n >> 16 & 255, n >> 8 & 255, n & 255 ];\n      }\n      function unpackI32(bytes) {\n        return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32);\n      }\n      function packU32(n) {\n        return [ n >> 24 & 255, n >> 16 & 255, n >> 8 & 255, n & 255 ];\n      }\n      function unpackU32(bytes) {\n        return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32);\n      }\n      function packIEEE754(v, ebits, fbits) {\n        var bias = (1 << ebits - 1) - 1, s, e, f, ln, i, bits, str, bytes;\n        function roundToEven(n) {\n          var w = floor(n), f2 = n - w;\n          if (f2 < .5) {\n            return w;\n          }\n          if (f2 > .5) {\n            return w + 1;\n          }\n          return w % 2 ? w + 1 : w;\n        }\n        if (v !== v) {\n          e = (1 << ebits) - 1;\n          f = pow(2, fbits - 1);\n          s = 0;\n        } else if (v === Infinity || v === -Infinity) {\n          e = (1 << ebits) - 1;\n          f = 0;\n          s = v < 0 ? 1 : 0;\n        } else if (v === 0) {\n          e = 0;\n          f = 0;\n          s = 1 / v === -Infinity ? 1 : 0;\n        } else {\n          s = v < 0;\n          v = abs(v);\n          if (v >= pow(2, 1 - bias)) {\n            e = min(floor(log10(v) / LN2), 1023);\n            f = roundToEven(v / pow(2, e) * pow(2, fbits));\n            if (f / pow(2, fbits) >= 2) {\n              e = e + 1;\n              f = 1;\n            }\n            if (e > bias) {\n              e = (1 << ebits) - 1;\n              f = 0;\n            } else {\n              e = e + bias;\n              f = f - pow(2, fbits);\n            }\n          } else {\n            e = 0;\n            f = roundToEven(v / pow(2, 1 - bias - fbits));\n          }\n        }\n        bits = [];\n        for (i = fbits; i; i -= 1) {\n          bits.push(f % 2 ? 1 : 0);\n          f = floor(f / 2);\n        }\n        for (i = ebits; i; i -= 1) {\n          bits.push(e % 2 ? 1 : 0);\n          e = floor(e / 2);\n        }\n        bits.push(s ? 1 : 0);\n        bits.reverse();\n        str = bits.join('');\n        bytes = [];\n        while (str.length) {\n          bytes.push(parseInt(str.substring(0, 8), 2));\n          str = str.substring(8);\n        }\n        return bytes;\n      }\n      function unpackIEEE754(bytes, ebits, fbits) {\n        var bits = [], i, j, b, str, bias, s, e, f;\n        for (i = bytes.length; i; i -= 1) {\n          b = bytes[i - 1];\n          for (j = 8; j; j -= 1) {\n            bits.push(b % 2 ? 1 : 0);\n            b = b >> 1;\n          }\n        }\n        bits.reverse();\n        str = bits.join('');\n        bias = (1 << ebits - 1) - 1;\n        s = parseInt(str.substring(0, 1), 2) ? -1 : 1;\n        e = parseInt(str.substring(1, 1 + ebits), 2);\n        f = parseInt(str.substring(1 + ebits), 2);\n        if (e === (1 << ebits) - 1) {\n          return f !== 0 ? NaN : s * Infinity;\n        } else if (e > 0) {\n          return s * pow(2, e - bias) * (1 + f / pow(2, fbits));\n        } else if (f !== 0) {\n          return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));\n        } else {\n          return s < 0 ? -0 : 0;\n        }\n      }\n      function unpackF64(b) {\n        return unpackIEEE754(b, 11, 52);\n      }\n      function packF64(v) {\n        return packIEEE754(v, 11, 52);\n      }\n      function unpackF32(b) {\n        return unpackIEEE754(b, 8, 23);\n      }\n      function packF32(v) {\n        return packIEEE754(v, 8, 23);\n      }\n      (function() {\n        var ArrayBuffer = function ArrayBuffer2(length) {\n          length = ECMAScript.ToInt32(length);\n          if (length < 0) {\n            throw new RangeError('ArrayBuffer size is not a small enough positive integer');\n          }\n          this.byteLength = length;\n          this._bytes = [];\n          this._bytes.length = length;\n          var i;\n          for (i = 0; i < this.byteLength; i += 1) {\n            this._bytes[i] = 0;\n          }\n          configureProperties(this);\n        };\n        exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer;\n        var ArrayBufferView = function ArrayBufferView2() {};\n        function makeConstructor(bytesPerElement, pack, unpack) {\n          var _ctor;\n          _ctor = function ctor(buffer, byteOffset, length) {\n            var array, sequence, i, s;\n            if (!arguments.length || typeof arguments[0] === 'number') {\n              this.length = ECMAScript.ToInt32(arguments[0]);\n              if (length < 0) {\n                throw new RangeError('ArrayBufferView size is not a small enough positive integer');\n              }\n              this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n              this.buffer = new ArrayBuffer(this.byteLength);\n              this.byteOffset = 0;\n            } else if (_typeof(arguments[0]) === 'object' && arguments[0].constructor === _ctor) {\n              array = arguments[0];\n              this.length = array.length;\n              this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n              this.buffer = new ArrayBuffer(this.byteLength);\n              this.byteOffset = 0;\n              for (i = 0; i < this.length; i += 1) {\n                this._setter(i, array._getter(i));\n              }\n            } else if (_typeof(arguments[0]) === 'object' && !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n              sequence = arguments[0];\n              this.length = ECMAScript.ToUint32(sequence.length);\n              this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n              this.buffer = new ArrayBuffer(this.byteLength);\n              this.byteOffset = 0;\n              for (i = 0; i < this.length; i += 1) {\n                s = sequence[i];\n                this._setter(i, Number(s));\n              }\n            } else if (_typeof(arguments[0]) === 'object' && (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n              this.buffer = buffer;\n              this.byteOffset = ECMAScript.ToUint32(byteOffset);\n              if (this.byteOffset > this.buffer.byteLength) {\n                throw new RangeError('byteOffset out of range');\n              }\n              if (this.byteOffset % this.BYTES_PER_ELEMENT) {\n                throw new RangeError('ArrayBuffer length minus the byteOffset is not a multiple of the element size.');\n              }\n              if (arguments.length < 3) {\n                this.byteLength = this.buffer.byteLength - this.byteOffset;\n                if (this.byteLength % this.BYTES_PER_ELEMENT) {\n                  throw new RangeError('length of buffer minus byteOffset not a multiple of the element size');\n                }\n                this.length = this.byteLength / this.BYTES_PER_ELEMENT;\n              } else {\n                this.length = ECMAScript.ToUint32(length);\n                this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n              }\n              if (this.byteOffset + this.byteLength > this.buffer.byteLength) {\n                throw new RangeError('byteOffset and length reference an area beyond the end of the buffer');\n              }\n            } else {\n              throw new TypeError('Unexpected argument type(s)');\n            }\n            this.constructor = _ctor;\n            configureProperties(this);\n            makeArrayAccessors(this);\n          };\n          _ctor.prototype = new ArrayBufferView();\n          _ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement;\n          _ctor.prototype._pack = pack;\n          _ctor.prototype._unpack = unpack;\n          _ctor.BYTES_PER_ELEMENT = bytesPerElement;\n          _ctor.prototype._getter = function(index) {\n            if (arguments.length < 1) {\n              throw new SyntaxError('Not enough arguments');\n            }\n            index = ECMAScript.ToUint32(index);\n            if (index >= this.length) {\n              return undefined2;\n            }\n            var bytes = [], i, o;\n            for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; i < this.BYTES_PER_ELEMENT; i += 1, \n            o += 1) {\n              bytes.push(this.buffer._bytes[o]);\n            }\n            return this._unpack(bytes);\n          };\n          _ctor.prototype.get = _ctor.prototype._getter;\n          _ctor.prototype._setter = function(index, value) {\n            if (arguments.length < 2) {\n              throw new SyntaxError('Not enough arguments');\n            }\n            index = ECMAScript.ToUint32(index);\n            if (index >= this.length) {\n              return undefined2;\n            }\n            var bytes = this._pack(value), i, o;\n            for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; i < this.BYTES_PER_ELEMENT; i += 1, \n            o += 1) {\n              this.buffer._bytes[o] = bytes[i];\n            }\n          };\n          _ctor.prototype.set = function(index, value) {\n            if (arguments.length < 1) {\n              throw new SyntaxError('Not enough arguments');\n            }\n            var array, sequence, offset, len, i, s, d, byteOffset, byteLength, tmp;\n            if (_typeof(arguments[0]) === 'object' && arguments[0].constructor === this.constructor) {\n              array = arguments[0];\n              offset = ECMAScript.ToUint32(arguments[1]);\n              if (offset + array.length > this.length) {\n                throw new RangeError('Offset plus length of array is out of range');\n              }\n              byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;\n              byteLength = array.length * this.BYTES_PER_ELEMENT;\n              if (array.buffer === this.buffer) {\n                tmp = [];\n                for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {\n                  tmp[i] = array.buffer._bytes[s];\n                }\n                for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {\n                  this.buffer._bytes[d] = tmp[i];\n                }\n              } else {\n                for (i = 0, s = array.byteOffset, d = byteOffset; i < byteLength; i += 1, s += 1, \n                d += 1) {\n                  this.buffer._bytes[d] = array.buffer._bytes[s];\n                }\n              }\n            } else if (_typeof(arguments[0]) === 'object' && typeof arguments[0].length !== 'undefined') {\n              sequence = arguments[0];\n              len = ECMAScript.ToUint32(sequence.length);\n              offset = ECMAScript.ToUint32(arguments[1]);\n              if (offset + len > this.length) {\n                throw new RangeError('Offset plus length of array is out of range');\n              }\n              for (i = 0; i < len; i += 1) {\n                s = sequence[i];\n                this._setter(offset + i, Number(s));\n              }\n            } else {\n              throw new TypeError('Unexpected argument type(s)');\n            }\n          };\n          _ctor.prototype.subarray = function(start, end) {\n            function clamp(v, min2, max) {\n              return v < min2 ? min2 : v > max ? max : v;\n            }\n            start = ECMAScript.ToInt32(start);\n            end = ECMAScript.ToInt32(end);\n            if (arguments.length < 1) {\n              start = 0;\n            }\n            if (arguments.length < 2) {\n              end = this.length;\n            }\n            if (start < 0) {\n              start = this.length + start;\n            }\n            if (end < 0) {\n              end = this.length + end;\n            }\n            start = clamp(start, 0, this.length);\n            end = clamp(end, 0, this.length);\n            var len = end - start;\n            if (len < 0) {\n              len = 0;\n            }\n            return new this.constructor(this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);\n          };\n          return _ctor;\n        }\n        var Int8Array = makeConstructor(1, packI8, unpackI8);\n        var Uint8Array2 = makeConstructor(1, packU8, unpackU8);\n        var Uint8ClampedArray2 = makeConstructor(1, packU8Clamped, unpackU8);\n        var Int16Array = makeConstructor(2, packI16, unpackI16);\n        var Uint16Array = makeConstructor(2, packU16, unpackU16);\n        var Int32Array = makeConstructor(4, packI32, unpackI32);\n        var Uint32Array3 = makeConstructor(4, packU32, unpackU32);\n        var Float32Array = makeConstructor(4, packF32, unpackF32);\n        var Float64Array = makeConstructor(8, packF64, unpackF64);\n        exports.Int8Array = exports.Int8Array || Int8Array;\n        exports.Uint8Array = exports.Uint8Array || Uint8Array2;\n        exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray2;\n        exports.Int16Array = exports.Int16Array || Int16Array;\n        exports.Uint16Array = exports.Uint16Array || Uint16Array;\n        exports.Int32Array = exports.Int32Array || Int32Array;\n        exports.Uint32Array = exports.Uint32Array || Uint32Array3;\n        exports.Float32Array = exports.Float32Array || Float32Array;\n        exports.Float64Array = exports.Float64Array || Float64Array;\n      })();\n      (function() {\n        function r(array, index) {\n          return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index];\n        }\n        var IS_BIG_ENDIAN = function() {\n          var u16array = new exports.Uint16Array([ 4660 ]), u8array = new exports.Uint8Array(u16array.buffer);\n          return r(u8array, 0) === 18;\n        }();\n        var DataView = function DataView2(buffer, byteOffset, byteLength) {\n          if (arguments.length === 0) {\n            buffer = new exports.ArrayBuffer(0);\n          } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) {\n            throw new TypeError('TypeError');\n          }\n          this.buffer = buffer || new exports.ArrayBuffer(0);\n          this.byteOffset = ECMAScript.ToUint32(byteOffset);\n          if (this.byteOffset > this.buffer.byteLength) {\n            throw new RangeError('byteOffset out of range');\n          }\n          if (arguments.length < 3) {\n            this.byteLength = this.buffer.byteLength - this.byteOffset;\n          } else {\n            this.byteLength = ECMAScript.ToUint32(byteLength);\n          }\n          if (this.byteOffset + this.byteLength > this.buffer.byteLength) {\n            throw new RangeError('byteOffset and length reference an area beyond the end of the buffer');\n          }\n          configureProperties(this);\n        };\n        function makeGetter(arrayType) {\n          return function(byteOffset, littleEndian) {\n            byteOffset = ECMAScript.ToUint32(byteOffset);\n            if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n              throw new RangeError('Array index out of range');\n            }\n            byteOffset += this.byteOffset;\n            var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT), bytes = [], i;\n            for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n              bytes.push(r(uint8Array, i));\n            }\n            if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n              bytes.reverse();\n            }\n            return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0);\n          };\n        }\n        DataView.prototype.getUint8 = makeGetter(exports.Uint8Array);\n        DataView.prototype.getInt8 = makeGetter(exports.Int8Array);\n        DataView.prototype.getUint16 = makeGetter(exports.Uint16Array);\n        DataView.prototype.getInt16 = makeGetter(exports.Int16Array);\n        DataView.prototype.getUint32 = makeGetter(exports.Uint32Array);\n        DataView.prototype.getInt32 = makeGetter(exports.Int32Array);\n        DataView.prototype.getFloat32 = makeGetter(exports.Float32Array);\n        DataView.prototype.getFloat64 = makeGetter(exports.Float64Array);\n        function makeSetter(arrayType) {\n          return function(byteOffset, value, littleEndian) {\n            byteOffset = ECMAScript.ToUint32(byteOffset);\n            if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n              throw new RangeError('Array index out of range');\n            }\n            var typeArray = new arrayType([ value ]), byteArray = new exports.Uint8Array(typeArray.buffer), bytes = [], i, byteView;\n            for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n              bytes.push(r(byteArray, i));\n            }\n            if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n              bytes.reverse();\n            }\n            byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);\n            byteView.set(bytes);\n          };\n        }\n        DataView.prototype.setUint8 = makeSetter(exports.Uint8Array);\n        DataView.prototype.setInt8 = makeSetter(exports.Int8Array);\n        DataView.prototype.setUint16 = makeSetter(exports.Uint16Array);\n        DataView.prototype.setInt16 = makeSetter(exports.Int16Array);\n        DataView.prototype.setUint32 = makeSetter(exports.Uint32Array);\n        DataView.prototype.setInt32 = makeSetter(exports.Int32Array);\n        DataView.prototype.setFloat32 = makeSetter(exports.Float32Array);\n        DataView.prototype.setFloat64 = makeSetter(exports.Float64Array);\n        exports.DataView = exports.DataView || DataView;\n      })();\n    });\n    var require_weakmap_polyfill = __commonJS(function(exports) {\n      (function(self2) {\n        'use strict';\n        if (self2.WeakMap) {\n          return;\n        }\n        var hasOwnProperty2 = Object.prototype.hasOwnProperty;\n        var defineProperty = function defineProperty(object, name, value) {\n          if (Object.defineProperty) {\n            Object.defineProperty(object, name, {\n              configurable: true,\n              writable: true,\n              value: value\n            });\n          } else {\n            object[name] = value;\n          }\n        };\n        self2.WeakMap = function() {\n          function WeakMap2() {\n            if (this === void 0) {\n              throw new TypeError('Constructor WeakMap requires \\'new\\'');\n            }\n            defineProperty(this, '_id', genId('_WeakMap'));\n            if (arguments.length > 0) {\n              throw new TypeError('WeakMap iterable is not supported');\n            }\n          }\n          defineProperty(WeakMap2.prototype, 'delete', function(key) {\n            checkInstance(this, 'delete');\n            if (!isObject(key)) {\n              return false;\n            }\n            var entry = key[this._id];\n            if (entry && entry[0] === key) {\n              delete key[this._id];\n              return true;\n            }\n            return false;\n          });\n          defineProperty(WeakMap2.prototype, 'get', function(key) {\n            checkInstance(this, 'get');\n            if (!isObject(key)) {\n              return void 0;\n            }\n            var entry = key[this._id];\n            if (entry && entry[0] === key) {\n              return entry[1];\n            }\n            return void 0;\n          });\n          defineProperty(WeakMap2.prototype, 'has', function(key) {\n            checkInstance(this, 'has');\n            if (!isObject(key)) {\n              return false;\n            }\n            var entry = key[this._id];\n            if (entry && entry[0] === key) {\n              return true;\n            }\n            return false;\n          });\n          defineProperty(WeakMap2.prototype, 'set', function(key, value) {\n            checkInstance(this, 'set');\n            if (!isObject(key)) {\n              throw new TypeError('Invalid value used as weak map key');\n            }\n            var entry = key[this._id];\n            if (entry && entry[0] === key) {\n              entry[1] = value;\n              return this;\n            }\n            defineProperty(key, this._id, [ key, value ]);\n            return this;\n          });\n          function checkInstance(x, methodName) {\n            if (!isObject(x) || !hasOwnProperty2.call(x, '_id')) {\n              throw new TypeError(methodName + ' method called on incompatible receiver ' + _typeof(x));\n            }\n          }\n          function genId(prefix) {\n            return prefix + '_' + rand() + '.' + rand();\n          }\n          function rand() {\n            return Math.random().toString().substring(2);\n          }\n          defineProperty(WeakMap2, '_polyfill', true);\n          return WeakMap2;\n        }();\n        function isObject(x) {\n          return Object(x) === x;\n        }\n      })(typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : exports);\n    });\n    var definitions = [ {\n      name: 'NA',\n      value: 'inapplicable',\n      priority: 0,\n      group: 'inapplicable'\n    }, {\n      name: 'PASS',\n      value: 'passed',\n      priority: 1,\n      group: 'passes'\n    }, {\n      name: 'CANTTELL',\n      value: 'cantTell',\n      priority: 2,\n      group: 'incomplete'\n    }, {\n      name: 'FAIL',\n      value: 'failed',\n      priority: 3,\n      group: 'violations'\n    } ];\n    var constants = {\n      helpUrlBase: 'https://dequeuniversity.com/rules/',\n      results: [],\n      resultGroups: [],\n      resultGroupMap: {},\n      impact: Object.freeze([ 'minor', 'moderate', 'serious', 'critical' ]),\n      preload: Object.freeze({\n        assets: [ 'cssom', 'media' ],\n        timeout: 1e4\n      }),\n      allOrigins: '<unsafe_all_origins>',\n      sameOrigin: '<same_origin>'\n    };\n    definitions.forEach(function(definition) {\n      var name = definition.name;\n      var value = definition.value;\n      var priority = definition.priority;\n      var group = definition.group;\n      constants[name] = value;\n      constants[name + '_PRIO'] = priority;\n      constants[name + '_GROUP'] = group;\n      constants.results[priority] = value;\n      constants.resultGroups[priority] = group;\n      constants.resultGroupMap[value] = group;\n    });\n    Object.freeze(constants.results);\n    Object.freeze(constants.resultGroups);\n    Object.freeze(constants.resultGroupMap);\n    Object.freeze(constants);\n    var constants_default = constants;\n    function log() {\n      if ((typeof console === 'undefined' ? 'undefined' : _typeof(console)) === 'object' && console.log) {\n        Function.prototype.apply.call(console.log, console, arguments);\n      }\n    }\n    var log_default = log;\n    var whitespaceRegex = /[\\t\\r\\n\\f]/g;\n    var AbstractVirtualNode = function() {\n      function AbstractVirtualNode() {\n        _classCallCheck(this, AbstractVirtualNode);\n        this.parent = void 0;\n      }\n      _createClass(AbstractVirtualNode, [ {\n        key: 'attr',\n        value: function attr() {\n          throw new Error('VirtualNode class must have an \"attr\" function');\n        }\n      }, {\n        key: 'hasAttr',\n        value: function hasAttr() {\n          throw new Error('VirtualNode class must have a \"hasAttr\" function');\n        }\n      }, {\n        key: 'hasClass',\n        value: function hasClass(className) {\n          var classAttr = this.attr('class');\n          if (!classAttr) {\n            return false;\n          }\n          var selector = ' ' + className + ' ';\n          return (' ' + classAttr + ' ').replace(whitespaceRegex, ' ').indexOf(selector) >= 0;\n        }\n      }, {\n        key: 'props',\n        get: function get() {\n          throw new Error('VirtualNode class must have a \"props\" object consisting of \"nodeType\" and \"nodeName\" properties');\n        }\n      }, {\n        key: 'attrNames',\n        get: function get() {\n          throw new Error('VirtualNode class must have an \"attrNames\" property');\n        }\n      } ]);\n      return AbstractVirtualNode;\n    }();\n    var abstract_virtual_node_default = AbstractVirtualNode;\n    var utils_exports = {};\n    __export(utils_exports, {\n      DqElement: function DqElement() {\n        return dq_element_default;\n      },\n      aggregate: function aggregate() {\n        return aggregate_default;\n      },\n      aggregateChecks: function aggregateChecks() {\n        return aggregate_checks_default;\n      },\n      aggregateNodeResults: function aggregateNodeResults() {\n        return aggregate_node_results_default;\n      },\n      aggregateResult: function aggregateResult() {\n        return aggregate_result_default;\n      },\n      areStylesSet: function areStylesSet() {\n        return are_styles_set_default;\n      },\n      assert: function assert() {\n        return assert_default;\n      },\n      checkHelper: function checkHelper() {\n        return check_helper_default;\n      },\n      clone: function clone() {\n        return clone_default;\n      },\n      closest: function closest() {\n        return closest_default;\n      },\n      collectResultsFromFrames: function collectResultsFromFrames() {\n        return collect_results_from_frames_default;\n      },\n      contains: function contains() {\n        return contains_default;\n      },\n      convertSelector: function convertSelector() {\n        return _convertSelector;\n      },\n      cssParser: function cssParser() {\n        return css_parser_default;\n      },\n      deepMerge: function deepMerge() {\n        return deep_merge_default;\n      },\n      escapeSelector: function escapeSelector() {\n        return escape_selector_default;\n      },\n      extendMetaData: function extendMetaData() {\n        return extend_meta_data_default;\n      },\n      filterHtmlAttrs: function filterHtmlAttrs() {\n        return filter_html_attrs_default;\n      },\n      finalizeRuleResult: function finalizeRuleResult() {\n        return finalize_result_default;\n      },\n      findBy: function findBy() {\n        return find_by_default;\n      },\n      getAllChecks: function getAllChecks() {\n        return get_all_checks_default;\n      },\n      getAncestry: function getAncestry() {\n        return _getAncestry;\n      },\n      getBaseLang: function getBaseLang() {\n        return get_base_lang_default;\n      },\n      getCheckMessage: function getCheckMessage() {\n        return get_check_message_default;\n      },\n      getCheckOption: function getCheckOption() {\n        return get_check_option_default;\n      },\n      getFlattenedTree: function getFlattenedTree() {\n        return get_flattened_tree_default;\n      },\n      getFriendlyUriEnd: function getFriendlyUriEnd() {\n        return get_friendly_uri_end_default;\n      },\n      getNodeAttributes: function getNodeAttributes() {\n        return get_node_attributes_default;\n      },\n      getNodeFromTree: function getNodeFromTree() {\n        return get_node_from_tree_default;\n      },\n      getPreloadConfig: function getPreloadConfig() {\n        return _getPreloadConfig;\n      },\n      getRootNode: function getRootNode() {\n        return get_root_node_default;\n      },\n      getRule: function getRule() {\n        return get_rule_default;\n      },\n      getScroll: function getScroll() {\n        return get_scroll_default;\n      },\n      getScrollState: function getScrollState() {\n        return get_scroll_state_default;\n      },\n      getSelector: function getSelector() {\n        return _getSelector;\n      },\n      getSelectorData: function getSelectorData() {\n        return _getSelectorData;\n      },\n      getShadowSelector: function getShadowSelector() {\n        return get_shadow_selector_default;\n      },\n      getStandards: function getStandards() {\n        return _getStandards;\n      },\n      getStyleSheetFactory: function getStyleSheetFactory() {\n        return get_stylesheet_factory_default;\n      },\n      getXpath: function getXpath() {\n        return get_xpath_default;\n      },\n      injectStyle: function injectStyle() {\n        return inject_style_default;\n      },\n      isHidden: function isHidden() {\n        return is_hidden_default;\n      },\n      isHtmlElement: function isHtmlElement() {\n        return is_html_element_default;\n      },\n      isNodeInContext: function isNodeInContext() {\n        return is_node_in_context_default;\n      },\n      isShadowRoot: function isShadowRoot() {\n        return is_shadow_root_default;\n      },\n      isValidLang: function isValidLang() {\n        return valid_langs_default;\n      },\n      isXHTML: function isXHTML() {\n        return is_xhtml_default;\n      },\n      matches: function matches() {\n        return matches_default;\n      },\n      matchesExpression: function matchesExpression() {\n        return _matchesExpression;\n      },\n      matchesSelector: function matchesSelector() {\n        return element_matches_default;\n      },\n      memoize: function memoize() {\n        return memoize_default;\n      },\n      mergeResults: function mergeResults() {\n        return merge_results_default;\n      },\n      nodeSorter: function nodeSorter() {\n        return node_sorter_default;\n      },\n      parseCrossOriginStylesheet: function parseCrossOriginStylesheet() {\n        return parse_crossorigin_stylesheet_default;\n      },\n      parseSameOriginStylesheet: function parseSameOriginStylesheet() {\n        return parse_sameorigin_stylesheet_default;\n      },\n      parseStylesheet: function parseStylesheet() {\n        return parse_stylesheet_default;\n      },\n      performanceTimer: function performanceTimer() {\n        return performance_timer_default;\n      },\n      pollyfillElementsFromPoint: function pollyfillElementsFromPoint() {\n        return _pollyfillElementsFromPoint;\n      },\n      preload: function preload() {\n        return preload_default;\n      },\n      preloadCssom: function preloadCssom() {\n        return preload_cssom_default;\n      },\n      preloadMedia: function preloadMedia() {\n        return preload_media_default;\n      },\n      processMessage: function processMessage() {\n        return process_message_default;\n      },\n      publishMetaData: function publishMetaData() {\n        return publish_metadata_default;\n      },\n      querySelectorAll: function querySelectorAll() {\n        return query_selector_all_default;\n      },\n      querySelectorAllFilter: function querySelectorAllFilter() {\n        return query_selector_all_filter_default;\n      },\n      queue: function queue() {\n        return queue_default;\n      },\n      respondable: function respondable() {\n        return _respondable;\n      },\n      ruleShouldRun: function ruleShouldRun() {\n        return rule_should_run_default;\n      },\n      select: function select() {\n        return select_default;\n      },\n      sendCommandToFrame: function sendCommandToFrame() {\n        return send_command_to_frame_default;\n      },\n      setScrollState: function setScrollState() {\n        return set_scroll_state_default;\n      },\n      shouldPreload: function shouldPreload() {\n        return _shouldPreload;\n      },\n      toArray: function toArray() {\n        return to_array_default;\n      },\n      tokenList: function tokenList() {\n        return token_list_default;\n      },\n      uniqueArray: function uniqueArray() {\n        return unique_array_default;\n      },\n      uuid: function uuid() {\n        return uuid_default;\n      },\n      validInputTypes: function validInputTypes() {\n        return valid_input_type_default;\n      },\n      validLangs: function validLangs() {\n        return _validLangs;\n      }\n    });\n    var errorTypes = Object.freeze([ 'EvalError', 'RangeError', 'ReferenceError', 'SyntaxError', 'TypeError', 'URIError' ]);\n    function stringifyMessage(_ref) {\n      var topic = _ref.topic, channelId = _ref.channelId, message = _ref.message, messageId = _ref.messageId, keepalive = _ref.keepalive;\n      var data2 = {\n        channelId: channelId,\n        topic: topic,\n        messageId: messageId,\n        keepalive: !!keepalive,\n        source: getSource()\n      };\n      if (message instanceof Error) {\n        data2.error = {\n          name: message.name,\n          message: message.message,\n          stack: message.stack\n        };\n      } else {\n        data2.payload = message;\n      }\n      return JSON.stringify(data2);\n    }\n    function parseMessage(dataString) {\n      var data2;\n      try {\n        data2 = JSON.parse(dataString);\n      } catch (e) {\n        return;\n      }\n      if (!isRespondableMessage(data2)) {\n        return;\n      }\n      var _data = data2, topic = _data.topic, channelId = _data.channelId, messageId = _data.messageId, keepalive = _data.keepalive;\n      var message = _typeof(data2.error) === 'object' ? buildErrorObject(data2.error) : data2.payload;\n      return {\n        topic: topic,\n        message: message,\n        messageId: messageId,\n        channelId: channelId,\n        keepalive: !!keepalive\n      };\n    }\n    function isRespondableMessage(postedMessage) {\n      return _typeof(postedMessage) === 'object' && typeof postedMessage.channelId === 'string' && postedMessage.source === getSource();\n    }\n    function buildErrorObject(error) {\n      var msg = error.message || 'Unknown error occurred';\n      var errorName = errorTypes.includes(error.name) ? error.name : 'Error';\n      var ErrConstructor = window[errorName] || Error;\n      if (error.stack) {\n        msg += '\\n' + error.stack.replace(error.message, '');\n      }\n      return new ErrConstructor(msg);\n    }\n    function getSource() {\n      var application = 'axeAPI';\n      var version = '';\n      if (typeof axe !== 'undefined' && axe._audit && axe._audit.application) {\n        application = axe._audit.application;\n      }\n      if (typeof axe !== 'undefined') {\n        version = axe.version;\n      }\n      return application + '.' + version;\n    }\n    function assert(bool, message) {\n      if (!bool) {\n        throw new Error(message);\n      }\n    }\n    var assert_default = assert;\n    function assertIsParentWindow(win) {\n      assetNotGlobalWindow(win);\n      assert_default(window.parent === win, 'Source of the response must be the parent window.');\n    }\n    function assertIsFrameWindow(win) {\n      assetNotGlobalWindow(win);\n      assert_default(win.parent === window, 'Respondable target must be a frame in the current window');\n    }\n    function assetNotGlobalWindow(win) {\n      assert_default(window !== win, 'Messages can not be sent to the same window.');\n    }\n    var channels = {};\n    function storeReplyHandler(channelId, replyHandler) {\n      var sendToParent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      assert_default(!channels[channelId], 'A replyHandler already exists for this message channel.');\n      channels[channelId] = {\n        replyHandler: replyHandler,\n        sendToParent: sendToParent\n      };\n    }\n    function getReplyHandler(topic) {\n      return channels[topic];\n    }\n    function deleteReplyHandler(channelId) {\n      delete channels[channelId];\n    }\n    var uuid;\n    var _rng;\n    var _crypto = window.crypto || window.msCrypto;\n    if (!_rng && _crypto && _crypto.getRandomValues) {\n      var _rnds8 = new Uint8Array(16);\n      _rng = function whatwgRNG() {\n        _crypto.getRandomValues(_rnds8);\n        return _rnds8;\n      };\n    }\n    try {\n      if (!_rng) {\n        var nodeCrypto = require('crypto');\n        _rng = function _rng() {\n          return nodeCrypto.randomBytes(16);\n        };\n      }\n    } catch (e) {}\n    if (!_rng) {\n      var _rnds = new Array(16);\n      _rng = function _rng() {\n        for (var i = 0, r; i < 16; i++) {\n          if ((i & 3) === 0) {\n            r = Math.random() * 4294967296;\n          }\n          _rnds[i] = r >>> ((i & 3) << 3) & 255;\n        }\n        return _rnds;\n      };\n    }\n    var BufferClass = typeof window.Buffer == 'function' ? window.Buffer : Array;\n    var _byteToHex = [];\n    var _hexToByte = {};\n    for (var i = 0; i < 256; i++) {\n      _byteToHex[i] = (i + 256).toString(16).substr(1);\n      _hexToByte[_byteToHex[i]] = i;\n    }\n    function parse(s, buf, offset) {\n      var i = buf && offset || 0, ii = 0;\n      buf = buf || [];\n      s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n        if (ii < 16) {\n          buf[i + ii++] = _hexToByte[oct];\n        }\n      });\n      while (ii < 16) {\n        buf[i + ii++] = 0;\n      }\n      return buf;\n    }\n    function unparse(buf, offset) {\n      var i = offset || 0, bth = _byteToHex;\n      return bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]];\n    }\n    var _seedBytes = _rng();\n    var _nodeId = [ _seedBytes[0] | 1, _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5] ];\n    var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 16383;\n    var _lastMSecs = 0;\n    var _lastNSecs = 0;\n    function v1(options, buf, offset) {\n      var i = buf && offset || 0;\n      var b = buf || [];\n      options = options || {};\n      var clockseq = options.clockseq != null ? options.clockseq : _clockseq;\n      var msecs = options.msecs != null ? options.msecs : new Date().getTime();\n      var nsecs = options.nsecs != null ? options.nsecs : _lastNSecs + 1;\n      var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 1e4;\n      if (dt < 0 && options.clockseq == null) {\n        clockseq = clockseq + 1 & 16383;\n      }\n      if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {\n        nsecs = 0;\n      }\n      if (nsecs >= 1e4) {\n        throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n      }\n      _lastMSecs = msecs;\n      _lastNSecs = nsecs;\n      _clockseq = clockseq;\n      msecs += 122192928e5;\n      var tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296;\n      b[i++] = tl >>> 24 & 255;\n      b[i++] = tl >>> 16 & 255;\n      b[i++] = tl >>> 8 & 255;\n      b[i++] = tl & 255;\n      var tmh = msecs / 4294967296 * 1e4 & 268435455;\n      b[i++] = tmh >>> 8 & 255;\n      b[i++] = tmh & 255;\n      b[i++] = tmh >>> 24 & 15 | 16;\n      b[i++] = tmh >>> 16 & 255;\n      b[i++] = clockseq >>> 8 | 128;\n      b[i++] = clockseq & 255;\n      var node = options.node || _nodeId;\n      for (var n = 0; n < 6; n++) {\n        b[i + n] = node[n];\n      }\n      return buf ? buf : unparse(b);\n    }\n    function v4(options, buf, offset) {\n      var i = buf && offset || 0;\n      if (typeof options == 'string') {\n        buf = options == 'binary' ? new BufferClass(16) : null;\n        options = null;\n      }\n      options = options || {};\n      var rnds = options.random || (options.rng || _rng)();\n      rnds[6] = rnds[6] & 15 | 64;\n      rnds[8] = rnds[8] & 63 | 128;\n      if (buf) {\n        for (var ii = 0; ii < 16; ii++) {\n          buf[i + ii] = rnds[ii];\n        }\n      }\n      return buf || unparse(rnds);\n    }\n    uuid = v4;\n    uuid.v1 = v1;\n    uuid.v4 = v4;\n    uuid.parse = parse;\n    uuid.unparse = unparse;\n    uuid.BufferClass = BufferClass;\n    axe._uuid = v1();\n    var uuid_default = v4;\n    var messageIds = [];\n    function createMessageId() {\n      var uuid5 = ''.concat(v4(), ':').concat(v4());\n      if (messageIds.includes(uuid5)) {\n        return createMessageId();\n      }\n      messageIds.push(uuid5);\n      return uuid5;\n    }\n    function isNewMessage(uuid5) {\n      if (messageIds.includes(uuid5)) {\n        return false;\n      }\n      messageIds.push(uuid5);\n      return true;\n    }\n    function postMessage(win, data2, sendToParent, replyHandler) {\n      if (typeof replyHandler === 'function') {\n        storeReplyHandler(data2.channelId, replyHandler, sendToParent);\n      }\n      sendToParent ? assertIsParentWindow(win) : assertIsFrameWindow(win);\n      if (data2.message instanceof Error && !sendToParent) {\n        axe.log(data2.message);\n        return false;\n      }\n      var dataString = stringifyMessage(_extends({\n        messageId: createMessageId()\n      }, data2));\n      var allowedOrigins = axe._audit.allowedOrigins;\n      if (!allowedOrigins || !allowedOrigins.length) {\n        return false;\n      }\n      allowedOrigins.forEach(function(origin) {\n        try {\n          win.postMessage(dataString, origin);\n        } catch (err2) {\n          if (err2 instanceof win.DOMException) {\n            throw new Error('allowedOrigins value \"'.concat(origin, '\" is not a valid origin'));\n          }\n          throw err2;\n        }\n      });\n      return true;\n    }\n    function processError(win, error, channelId) {\n      if (!win.parent !== window) {\n        return axe.log(error);\n      }\n      try {\n        postMessage(win, {\n          topic: null,\n          channelId: channelId,\n          message: error,\n          messageId: createMessageId(),\n          keepalive: true\n        }, true);\n      } catch (err2) {\n        return axe.log(err2);\n      }\n    }\n    function createResponder(win, channelId) {\n      var sendToParent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      return function respond(message, keepalive, replyHandler) {\n        var data2 = {\n          channelId: channelId,\n          message: message,\n          keepalive: keepalive\n        };\n        postMessage(win, data2, sendToParent, replyHandler);\n      };\n    }\n    function originIsAllowed(origin) {\n      var allowedOrigins = axe._audit.allowedOrigins;\n      return allowedOrigins && allowedOrigins.includes('*') || allowedOrigins.includes(origin);\n    }\n    function messageHandler(_ref2, topicHandler) {\n      var origin = _ref2.origin, dataString = _ref2.data, win = _ref2.source;\n      var data2 = parseMessage(dataString) || {};\n      var channelId = data2.channelId, message = data2.message, messageId = data2.messageId;\n      if (!originIsAllowed(origin) || !isNewMessage(messageId)) {\n        return;\n      }\n      if (message instanceof Error && win.parent !== window) {\n        axe.log(message);\n        return false;\n      }\n      try {\n        if (data2.topic) {\n          var responder = createResponder(win, channelId);\n          assertIsParentWindow(win);\n          topicHandler(data2, responder);\n        } else {\n          callReplyHandler(win, data2);\n        }\n      } catch (error) {\n        processError(win, error, channelId);\n      }\n    }\n    function callReplyHandler(win, data2) {\n      var channelId = data2.channelId, message = data2.message, keepalive = data2.keepalive;\n      var _ref3 = getReplyHandler(channelId) || {}, replyHandler = _ref3.replyHandler, sendToParent = _ref3.sendToParent;\n      if (!replyHandler) {\n        return;\n      }\n      sendToParent ? assertIsParentWindow(win) : assertIsFrameWindow(win);\n      var responder = createResponder(win, channelId, sendToParent);\n      if (!keepalive && channelId) {\n        deleteReplyHandler(channelId);\n      }\n      try {\n        replyHandler(message, keepalive, responder);\n      } catch (error) {\n        axe.log(error);\n        responder(error, keepalive);\n      }\n    }\n    var frameMessenger = {\n      open: function open(topicHandler) {\n        if (typeof window.addEventListener !== 'function') {\n          return;\n        }\n        var handler = function handler(messageEvent) {\n          messageHandler(messageEvent, topicHandler);\n        };\n        window.addEventListener('message', handler, false);\n        return function() {\n          window.removeEventListener('message', handler, false);\n        };\n      },\n      post: function post(win, data2, replyHandler) {\n        if (typeof window.addEventListener !== 'function') {\n          return false;\n        }\n        return postMessage(win, data2, false, replyHandler);\n      }\n    };\n    function setDefaultFrameMessenger(respondable5) {\n      respondable5.updateMessenger(frameMessenger);\n    }\n    function aggregate(map, values, initial) {\n      values = values.slice();\n      if (initial) {\n        values.push(initial);\n      }\n      var sorting = values.map(function(val) {\n        return map.indexOf(val);\n      }).sort();\n      return map[sorting.pop()];\n    }\n    var aggregate_default = aggregate;\n    var CANTTELL_PRIO = constants_default.CANTTELL_PRIO, FAIL_PRIO = constants_default.FAIL_PRIO;\n    var checkMap = [];\n    checkMap[constants_default.PASS_PRIO] = true;\n    checkMap[constants_default.CANTTELL_PRIO] = null;\n    checkMap[constants_default.FAIL_PRIO] = false;\n    var checkTypes = [ 'any', 'all', 'none' ];\n    function anyAllNone(obj, functor) {\n      return checkTypes.reduce(function(out, type) {\n        out[type] = (obj[type] || []).map(function(val) {\n          return functor(val, type);\n        });\n        return out;\n      }, {});\n    }\n    function aggregateChecks(nodeResOriginal) {\n      var nodeResult = Object.assign({}, nodeResOriginal);\n      anyAllNone(nodeResult, function(check4, type) {\n        var i = typeof check4.result === 'undefined' ? -1 : checkMap.indexOf(check4.result);\n        check4.priority = i !== -1 ? i : constants_default.CANTTELL_PRIO;\n        if (type === 'none') {\n          if (check4.priority === constants_default.PASS_PRIO) {\n            check4.priority = constants_default.FAIL_PRIO;\n          } else if (check4.priority === constants_default.FAIL_PRIO) {\n            check4.priority = constants_default.PASS_PRIO;\n          }\n        }\n      });\n      var priorities = {\n        all: nodeResult.all.reduce(function(a, b) {\n          return Math.max(a, b.priority);\n        }, 0),\n        none: nodeResult.none.reduce(function(a, b) {\n          return Math.max(a, b.priority);\n        }, 0),\n        any: nodeResult.any.reduce(function(a, b) {\n          return Math.min(a, b.priority);\n        }, 4) % 4\n      };\n      nodeResult.priority = Math.max(priorities.all, priorities.none, priorities.any);\n      var impacts = [];\n      checkTypes.forEach(function(type) {\n        nodeResult[type] = nodeResult[type].filter(function(check4) {\n          return check4.priority === nodeResult.priority && check4.priority === priorities[type];\n        });\n        nodeResult[type].forEach(function(check4) {\n          return impacts.push(check4.impact);\n        });\n      });\n      if ([ CANTTELL_PRIO, FAIL_PRIO ].includes(nodeResult.priority)) {\n        nodeResult.impact = aggregate_default(constants_default.impact, impacts);\n      } else {\n        nodeResult.impact = null;\n      }\n      anyAllNone(nodeResult, function(c) {\n        delete c.result;\n        delete c.priority;\n      });\n      nodeResult.result = constants_default.results[nodeResult.priority];\n      delete nodeResult.priority;\n      return nodeResult;\n    }\n    var aggregate_checks_default = aggregateChecks;\n    function finalizeRuleResult(ruleResult) {\n      var rule3 = axe._audit.rules.find(function(rule4) {\n        return rule4.id === ruleResult.id;\n      });\n      if (rule3 && rule3.impact) {\n        ruleResult.nodes.forEach(function(node) {\n          [ 'any', 'all', 'none' ].forEach(function(checkType) {\n            (node[checkType] || []).forEach(function(checkResult) {\n              checkResult.impact = rule3.impact;\n            });\n          });\n        });\n      }\n      Object.assign(ruleResult, aggregate_node_results_default(ruleResult.nodes));\n      delete ruleResult.nodes;\n      return ruleResult;\n    }\n    var finalize_result_default = finalizeRuleResult;\n    function aggregateNodeResults(nodeResults) {\n      var ruleResult = {};\n      nodeResults = nodeResults.map(function(nodeResult) {\n        if (nodeResult.any && nodeResult.all && nodeResult.none) {\n          return aggregate_checks_default(nodeResult);\n        } else if (Array.isArray(nodeResult.node)) {\n          return finalize_result_default(nodeResult);\n        } else {\n          throw new TypeError('Invalid Result type');\n        }\n      });\n      if (nodeResults && nodeResults.length) {\n        var resultList = nodeResults.map(function(node) {\n          return node.result;\n        });\n        ruleResult.result = aggregate_default(constants_default.results, resultList, ruleResult.result);\n      } else {\n        ruleResult.result = 'inapplicable';\n      }\n      constants_default.resultGroups.forEach(function(group) {\n        return ruleResult[group] = [];\n      });\n      nodeResults.forEach(function(nodeResult) {\n        var groupName = constants_default.resultGroupMap[nodeResult.result];\n        ruleResult[groupName].push(nodeResult);\n      });\n      var impactGroup = constants_default.FAIL_GROUP;\n      if (ruleResult[impactGroup].length === 0) {\n        impactGroup = constants_default.CANTTELL_GROUP;\n      }\n      if (ruleResult[impactGroup].length > 0) {\n        var impactList = ruleResult[impactGroup].map(function(failure) {\n          return failure.impact;\n        });\n        ruleResult.impact = aggregate_default(constants_default.impact, impactList) || null;\n      } else {\n        ruleResult.impact = null;\n      }\n      return ruleResult;\n    }\n    var aggregate_node_results_default = aggregateNodeResults;\n    function copyToGroup(resultObject, subResult, group) {\n      var resultCopy = Object.assign({}, subResult);\n      resultCopy.nodes = (resultCopy[group] || []).concat();\n      constants_default.resultGroups.forEach(function(group2) {\n        delete resultCopy[group2];\n      });\n      resultObject[group].push(resultCopy);\n    }\n    function aggregateResult(results) {\n      var resultObject = {};\n      constants_default.resultGroups.forEach(function(groupName) {\n        return resultObject[groupName] = [];\n      });\n      results.forEach(function(subResult) {\n        if (subResult.error) {\n          copyToGroup(resultObject, subResult, constants_default.CANTTELL_GROUP);\n        } else if (subResult.result === constants_default.NA) {\n          copyToGroup(resultObject, subResult, constants_default.NA_GROUP);\n        } else {\n          constants_default.resultGroups.forEach(function(group) {\n            if (Array.isArray(subResult[group]) && subResult[group].length > 0) {\n              copyToGroup(resultObject, subResult, group);\n            }\n          });\n        }\n      });\n      return resultObject;\n    }\n    var aggregate_result_default = aggregateResult;\n    function areStylesSet(el, styles, stopAt) {\n      var styl = window.getComputedStyle(el, null);\n      if (!styl) {\n        return false;\n      }\n      for (var i = 0; i < styles.length; ++i) {\n        var att = styles[i];\n        if (styl.getPropertyValue(att.property) === att.value) {\n          return true;\n        }\n      }\n      if (!el.parentNode || el.nodeName.toUpperCase() === stopAt.toUpperCase()) {\n        return false;\n      }\n      return areStylesSet(el.parentNode, styles, stopAt);\n    }\n    var are_styles_set_default = areStylesSet;\n    function toArray(thing) {\n      return Array.prototype.slice.call(thing);\n    }\n    var to_array_default = toArray;\n    function escapeSelector(value) {\n      var string = String(value);\n      var length = string.length;\n      var index = -1;\n      var codeUnit;\n      var result = '';\n      var firstCodeUnit = string.charCodeAt(0);\n      while (++index < length) {\n        codeUnit = string.charCodeAt(index);\n        if (codeUnit == 0) {\n          result += '\\ufffd';\n          continue;\n        }\n        if (codeUnit >= 1 && codeUnit <= 31 || codeUnit == 127 || index == 0 && codeUnit >= 48 && codeUnit <= 57 || index == 1 && codeUnit >= 48 && codeUnit <= 57 && firstCodeUnit == 45) {\n          result += '\\\\' + codeUnit.toString(16) + ' ';\n          continue;\n        }\n        if (index == 0 && length == 1 && codeUnit == 45) {\n          result += '\\\\' + string.charAt(index);\n          continue;\n        }\n        if (codeUnit >= 128 || codeUnit == 45 || codeUnit == 95 || codeUnit >= 48 && codeUnit <= 57 || codeUnit >= 65 && codeUnit <= 90 || codeUnit >= 97 && codeUnit <= 122) {\n          result += string.charAt(index);\n          continue;\n        }\n        result += '\\\\' + string.charAt(index);\n      }\n      return result;\n    }\n    var escape_selector_default = escapeSelector;\n    function isMostlyNumbers() {\n      var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      return str.length !== 0 && (str.match(/[0-9]/g) || '').length >= str.length / 2;\n    }\n    function splitString(str, splitIndex) {\n      return [ str.substring(0, splitIndex), str.substring(splitIndex) ];\n    }\n    function trimRight(str) {\n      return str.replace(/\\s+$/, '');\n    }\n    function uriParser(url) {\n      var original = url;\n      var protocol = '', domain = '', port = '', path = '', query = '', hash = '';\n      if (url.includes('#')) {\n        var _splitString = splitString(url, url.indexOf('#'));\n        var _splitString2 = _slicedToArray(_splitString, 2);\n        url = _splitString2[0];\n        hash = _splitString2[1];\n      }\n      if (url.includes('?')) {\n        var _splitString3 = splitString(url, url.indexOf('?'));\n        var _splitString4 = _slicedToArray(_splitString3, 2);\n        url = _splitString4[0];\n        query = _splitString4[1];\n      }\n      if (url.includes('://')) {\n        var _url$split = url.split('://');\n        var _url$split2 = _slicedToArray(_url$split, 2);\n        protocol = _url$split2[0];\n        url = _url$split2[1];\n        var _splitString5 = splitString(url, url.indexOf('/'));\n        var _splitString6 = _slicedToArray(_splitString5, 2);\n        domain = _splitString6[0];\n        url = _splitString6[1];\n      } else if (url.substr(0, 2) === '//') {\n        url = url.substr(2);\n        var _splitString7 = splitString(url, url.indexOf('/'));\n        var _splitString8 = _slicedToArray(_splitString7, 2);\n        domain = _splitString8[0];\n        url = _splitString8[1];\n      }\n      if (domain.substr(0, 4) === 'www.') {\n        domain = domain.substr(4);\n      }\n      if (domain && domain.includes(':')) {\n        var _splitString9 = splitString(domain, domain.indexOf(':'));\n        var _splitString10 = _slicedToArray(_splitString9, 2);\n        domain = _splitString10[0];\n        port = _splitString10[1];\n      }\n      path = url;\n      return {\n        original: original,\n        protocol: protocol,\n        domain: domain,\n        port: port,\n        path: path,\n        query: query,\n        hash: hash\n      };\n    }\n    function getFriendlyUriEnd() {\n      var uri = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (uri.length <= 1 || uri.substr(0, 5) === 'data:' || uri.substr(0, 11) === 'javascript:' || uri.includes('?')) {\n        return;\n      }\n      var currentDomain = options.currentDomain, _options$maxLength = options.maxLength, maxLength = _options$maxLength === void 0 ? 25 : _options$maxLength;\n      var _uriParser = uriParser(uri), path = _uriParser.path, domain = _uriParser.domain, hash = _uriParser.hash;\n      var pathEnd = path.substr(path.substr(0, path.length - 2).lastIndexOf('/') + 1);\n      if (hash) {\n        if (pathEnd && (pathEnd + hash).length <= maxLength) {\n          return trimRight(pathEnd + hash);\n        } else if (pathEnd.length < 2 && hash.length > 2 && hash.length <= maxLength) {\n          return trimRight(hash);\n        } else {\n          return;\n        }\n      } else if (domain && domain.length < maxLength && path.length <= 1) {\n        return trimRight(domain + path);\n      }\n      if (path === '/' + pathEnd && domain && currentDomain && domain !== currentDomain && (domain + path).length <= maxLength) {\n        return trimRight(domain + path);\n      }\n      var lastDotIndex = pathEnd.lastIndexOf('.');\n      if ((lastDotIndex === -1 || lastDotIndex > 1) && (lastDotIndex !== -1 || pathEnd.length > 2) && pathEnd.length <= maxLength && !pathEnd.match(/index(\\.[a-zA-Z]{2-4})?/) && !isMostlyNumbers(pathEnd)) {\n        return trimRight(pathEnd);\n      }\n    }\n    var get_friendly_uri_end_default = getFriendlyUriEnd;\n    function getNodeAttributes(node) {\n      if (node.attributes instanceof window.NamedNodeMap) {\n        return node.attributes;\n      }\n      return node.cloneNode(false).attributes;\n    }\n    var get_node_attributes_default = getNodeAttributes;\n    var matchesSelector = function() {\n      var method;\n      function getMethod(node) {\n        var index, candidate, candidates = [ 'matches', 'matchesSelector', 'mozMatchesSelector', 'webkitMatchesSelector', 'msMatchesSelector' ], length = candidates.length;\n        for (index = 0; index < length; index++) {\n          candidate = candidates[index];\n          if (node[candidate]) {\n            return candidate;\n          }\n        }\n      }\n      return function(node, selector) {\n        if (!method || !node[method]) {\n          method = getMethod(node);\n        }\n        if (node[method]) {\n          return node[method](selector);\n        }\n        return false;\n      };\n    }();\n    var element_matches_default = matchesSelector;\n    function isXHTML(doc) {\n      if (!doc.createElement) {\n        return false;\n      }\n      return doc.createElement('A').localName === 'A';\n    }\n    var is_xhtml_default = isXHTML;\n    function getShadowSelector(generateSelector2, elm) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      if (!elm) {\n        return '';\n      }\n      var doc = elm.getRootNode && elm.getRootNode() || document;\n      if (doc.nodeType !== 11) {\n        return generateSelector2(elm, options, doc);\n      }\n      var stack = [];\n      while (doc.nodeType === 11) {\n        if (!doc.host) {\n          return '';\n        }\n        stack.unshift({\n          elm: elm,\n          doc: doc\n        });\n        elm = doc.host;\n        doc = elm.getRootNode();\n      }\n      stack.unshift({\n        elm: elm,\n        doc: doc\n      });\n      return stack.map(function(_ref4) {\n        var elm2 = _ref4.elm, doc2 = _ref4.doc;\n        return generateSelector2(elm2, options, doc2);\n      });\n    }\n    var get_shadow_selector_default = getShadowSelector;\n    var xhtml;\n    var ignoredAttributes = [ 'class', 'style', 'id', 'selected', 'checked', 'disabled', 'tabindex', 'aria-checked', 'aria-selected', 'aria-invalid', 'aria-activedescendant', 'aria-busy', 'aria-disabled', 'aria-expanded', 'aria-grabbed', 'aria-pressed', 'aria-valuenow' ];\n    var MAXATTRIBUTELENGTH = 31;\n    function getAttributeNameValue(node, at) {\n      var name = at.name;\n      var atnv;\n      if (name.indexOf('href') !== -1 || name.indexOf('src') !== -1) {\n        var friendly = get_friendly_uri_end_default(node.getAttribute(name));\n        if (friendly) {\n          var value = encodeURI(friendly);\n          if (value) {\n            atnv = escape_selector_default(at.name) + '$=\"' + escape_selector_default(value) + '\"';\n          } else {\n            return;\n          }\n        } else {\n          atnv = escape_selector_default(at.name) + '=\"' + escape_selector_default(node.getAttribute(name)) + '\"';\n        }\n      } else {\n        atnv = escape_selector_default(name) + '=\"' + escape_selector_default(at.value) + '\"';\n      }\n      return atnv;\n    }\n    function countSort(a, b) {\n      return a.count < b.count ? -1 : a.count === b.count ? 0 : 1;\n    }\n    function filterAttributes(at) {\n      return !ignoredAttributes.includes(at.name) && at.name.indexOf(':') === -1 && (!at.value || at.value.length < MAXATTRIBUTELENGTH);\n    }\n    function _getSelectorData(domTree) {\n      var data2 = {\n        classes: {},\n        tags: {},\n        attributes: {}\n      };\n      domTree = Array.isArray(domTree) ? domTree : [ domTree ];\n      var currentLevel = domTree.slice();\n      var stack = [];\n      var _loop2 = function _loop2() {\n        var current = currentLevel.pop();\n        var node = current.actualNode;\n        if (!!node.querySelectorAll) {\n          var tag = node.nodeName;\n          if (data2.tags[tag]) {\n            data2.tags[tag]++;\n          } else {\n            data2.tags[tag] = 1;\n          }\n          if (node.classList) {\n            Array.from(node.classList).forEach(function(cl) {\n              var ind = escape_selector_default(cl);\n              if (data2.classes[ind]) {\n                data2.classes[ind]++;\n              } else {\n                data2.classes[ind] = 1;\n              }\n            });\n          }\n          if (node.hasAttributes()) {\n            Array.from(get_node_attributes_default(node)).filter(filterAttributes).forEach(function(at) {\n              var atnv = getAttributeNameValue(node, at);\n              if (atnv) {\n                if (data2.attributes[atnv]) {\n                  data2.attributes[atnv]++;\n                } else {\n                  data2.attributes[atnv] = 1;\n                }\n              }\n            });\n          }\n        }\n        if (current.children.length) {\n          stack.push(currentLevel);\n          currentLevel = current.children.slice();\n        }\n        while (!currentLevel.length && stack.length) {\n          currentLevel = stack.pop();\n        }\n      };\n      while (currentLevel.length) {\n        _loop2();\n      }\n      return data2;\n    }\n    function uncommonClasses(node, selectorData) {\n      var retVal = [];\n      var classData = selectorData.classes;\n      var tagData = selectorData.tags;\n      if (node.classList) {\n        Array.from(node.classList).forEach(function(cl) {\n          var ind = escape_selector_default(cl);\n          if (classData[ind] < tagData[node.nodeName]) {\n            retVal.push({\n              name: ind,\n              count: classData[ind],\n              species: 'class'\n            });\n          }\n        });\n      }\n      return retVal.sort(countSort);\n    }\n    function getNthChildString(elm, selector) {\n      var siblings = elm.parentNode && Array.from(elm.parentNode.children || '') || [];\n      var hasMatchingSiblings = siblings.find(function(sibling) {\n        return sibling !== elm && element_matches_default(sibling, selector);\n      });\n      if (hasMatchingSiblings) {\n        var nthChild = 1 + siblings.indexOf(elm);\n        return ':nth-child(' + nthChild + ')';\n      } else {\n        return '';\n      }\n    }\n    function getElmId(elm) {\n      if (!elm.getAttribute('id')) {\n        return;\n      }\n      var doc = elm.getRootNode && elm.getRootNode() || document;\n      var id = '#' + escape_selector_default(elm.getAttribute('id') || '');\n      if (!id.match(/player_uid_/) && doc.querySelectorAll(id).length === 1) {\n        return id;\n      }\n    }\n    function getBaseSelector(elm) {\n      if (typeof xhtml === 'undefined') {\n        xhtml = is_xhtml_default(document);\n      }\n      return escape_selector_default(xhtml ? elm.localName : elm.nodeName.toLowerCase());\n    }\n    function uncommonAttributes(node, selectorData) {\n      var retVal = [];\n      var attData = selectorData.attributes;\n      var tagData = selectorData.tags;\n      if (node.hasAttributes()) {\n        Array.from(get_node_attributes_default(node)).filter(filterAttributes).forEach(function(at) {\n          var atnv = getAttributeNameValue(node, at);\n          if (atnv && attData[atnv] < tagData[node.nodeName]) {\n            retVal.push({\n              name: atnv,\n              count: attData[atnv],\n              species: 'attribute'\n            });\n          }\n        });\n      }\n      return retVal.sort(countSort);\n    }\n    function getThreeLeastCommonFeatures(elm, selectorData) {\n      var selector = '';\n      var features;\n      var clss = uncommonClasses(elm, selectorData);\n      var atts = uncommonAttributes(elm, selectorData);\n      if (clss.length && clss[0].count === 1) {\n        features = [ clss[0] ];\n      } else if (atts.length && atts[0].count === 1) {\n        features = [ atts[0] ];\n        selector = getBaseSelector(elm);\n      } else {\n        features = clss.concat(atts);\n        features.sort(countSort);\n        features = features.slice(0, 3);\n        if (!features.some(function(feat) {\n          return feat.species === 'class';\n        })) {\n          selector = getBaseSelector(elm);\n        } else {\n          features.sort(function(a, b) {\n            return a.species !== b.species && a.species === 'class' ? -1 : a.species === b.species ? 0 : 1;\n          });\n        }\n      }\n      return selector += features.reduce(function(val, feat) {\n        switch (feat.species) {\n         case 'class':\n          return val + '.' + feat.name;\n\n         case 'attribute':\n          return val + '[' + feat.name + ']';\n        }\n        return val;\n      }, '');\n    }\n    function generateSelector(elm, options, doc) {\n      if (!axe._selectorData) {\n        throw new Error('Expect axe._selectorData to be set up');\n      }\n      var _options$toRoot = options.toRoot, toRoot = _options$toRoot === void 0 ? false : _options$toRoot;\n      var selector;\n      var similar;\n      do {\n        var features = getElmId(elm);\n        if (!features) {\n          features = getThreeLeastCommonFeatures(elm, axe._selectorData);\n          features += getNthChildString(elm, features);\n        }\n        if (selector) {\n          selector = features + ' > ' + selector;\n        } else {\n          selector = features;\n        }\n        if (!similar) {\n          similar = Array.from(doc.querySelectorAll(selector));\n        } else {\n          similar = similar.filter(function(item) {\n            return element_matches_default(item, selector);\n          });\n        }\n        elm = elm.parentElement;\n      } while ((similar.length > 1 || toRoot) && elm && elm.nodeType !== 11);\n      if (similar.length === 1) {\n        return selector;\n      } else if (selector.indexOf(' > ') !== -1) {\n        return ':root' + selector.substring(selector.indexOf(' > '));\n      }\n      return ':root';\n    }\n    function _getSelector(elm, options) {\n      return get_shadow_selector_default(generateSelector, elm, options);\n    }\n    function generateAncestry(node) {\n      var nodeName2 = node.nodeName.toLowerCase();\n      var parent = node.parentElement;\n      if (!parent) {\n        return nodeName2;\n      }\n      var nthChild = '';\n      if (nodeName2 !== 'head' && nodeName2 !== 'body' && parent.children.length > 1) {\n        var index = Array.prototype.indexOf.call(parent.children, node) + 1;\n        nthChild = ':nth-child('.concat(index, ')');\n      }\n      return generateAncestry(parent) + ' > ' + nodeName2 + nthChild;\n    }\n    function _getAncestry(elm, options) {\n      return get_shadow_selector_default(generateAncestry, elm, options);\n    }\n    function getXPathArray(node, path) {\n      var sibling, count;\n      if (!node) {\n        return [];\n      }\n      if (!path && node.nodeType === 9) {\n        path = [ {\n          str: 'html'\n        } ];\n        return path;\n      }\n      path = path || [];\n      if (node.parentNode && node.parentNode !== node) {\n        path = getXPathArray(node.parentNode, path);\n      }\n      if (node.previousSibling) {\n        count = 1;\n        sibling = node.previousSibling;\n        do {\n          if (sibling.nodeType === 1 && sibling.nodeName === node.nodeName) {\n            count++;\n          }\n          sibling = sibling.previousSibling;\n        } while (sibling);\n        if (count === 1) {\n          count = null;\n        }\n      } else if (node.nextSibling) {\n        sibling = node.nextSibling;\n        do {\n          if (sibling.nodeType === 1 && sibling.nodeName === node.nodeName) {\n            count = 1;\n            sibling = null;\n          } else {\n            count = null;\n            sibling = sibling.previousSibling;\n          }\n        } while (sibling);\n      }\n      if (node.nodeType === 1) {\n        var element = {};\n        element.str = node.nodeName.toLowerCase();\n        var id = node.getAttribute && escape_selector_default(node.getAttribute('id'));\n        if (id && node.ownerDocument.querySelectorAll('#' + id).length === 1) {\n          element.id = node.getAttribute('id');\n        }\n        if (count > 1) {\n          element.count = count;\n        }\n        path.push(element);\n      }\n      return path;\n    }\n    function xpathToString(xpathArray) {\n      return xpathArray.reduce(function(str, elm) {\n        if (elm.id) {\n          return '/'.concat(elm.str, '[@id=\\'').concat(elm.id, '\\']');\n        } else {\n          return str + '/'.concat(elm.str) + (elm.count > 0 ? '['.concat(elm.count, ']') : '');\n        }\n      }, '');\n    }\n    function getXpath(node) {\n      var xpathArray = getXPathArray(node);\n      return xpathToString(xpathArray);\n    }\n    var get_xpath_default = getXpath;\n    function truncate(str, maxLength) {\n      maxLength = maxLength || 300;\n      if (str.length > maxLength) {\n        var index = str.indexOf('>');\n        str = str.substring(0, index + 1);\n      }\n      return str;\n    }\n    function getSource2(element) {\n      var source = element.outerHTML;\n      if (!source && typeof XMLSerializer === 'function') {\n        source = new XMLSerializer().serializeToString(element);\n      }\n      return truncate(source || '');\n    }\n    function DqElement(element, options, spec) {\n      this._fromFrame = !!spec;\n      this.spec = spec || {};\n      if (options && options.absolutePaths) {\n        this._options = {\n          toRoot: true\n        };\n      }\n      if (axe._audit.noHtml) {\n        this.source = null;\n      } else if (this.spec.source !== void 0) {\n        this.source = this.spec.source;\n      } else {\n        this.source = getSource2(element);\n      }\n      this._element = element;\n    }\n    DqElement.prototype = {\n      get selector() {\n        return this.spec.selector || [ _getSelector(this.element, this._options) ];\n      },\n      get ancestry() {\n        return this.spec.ancestry || [ _getAncestry(this.element) ];\n      },\n      get xpath() {\n        return this.spec.xpath || [ get_xpath_default(this.element) ];\n      },\n      get element() {\n        return this._element;\n      },\n      get fromFrame() {\n        return this._fromFrame;\n      },\n      toJSON: function toJSON() {\n        return {\n          selector: this.selector,\n          source: this.source,\n          xpath: this.xpath,\n          ancestry: this.ancestry\n        };\n      }\n    };\n    DqElement.fromFrame = function fromFrame(node, options, frame) {\n      var spec = _extends({}, node, {\n        selector: [].concat(_toConsumableArray(frame.selector), _toConsumableArray(node.selector)),\n        ancestry: [].concat(_toConsumableArray(frame.ancestry), _toConsumableArray(node.ancestry)),\n        xpath: [].concat(_toConsumableArray(frame.xpath), _toConsumableArray(node.xpath))\n      });\n      return new DqElement(frame.element, options, spec);\n    };\n    var dq_element_default = DqElement;\n    function checkHelper(checkResult, options, resolve, reject) {\n      return {\n        isAsync: false,\n        async: function async() {\n          this.isAsync = true;\n          return function(result) {\n            if (result instanceof Error === false) {\n              checkResult.result = result;\n              resolve(checkResult);\n            } else {\n              reject(result);\n            }\n          };\n        },\n        data: function data(data2) {\n          checkResult.data = data2;\n        },\n        relatedNodes: function relatedNodes(nodes) {\n          nodes = nodes instanceof window.Node ? [ nodes ] : to_array_default(nodes);\n          checkResult.relatedNodes = nodes.map(function(element) {\n            return new dq_element_default(element, options);\n          });\n        }\n      };\n    }\n    var check_helper_default = checkHelper;\n    function clone(obj) {\n      var index, length, out = obj;\n      if (obj !== null && _typeof(obj) === 'object') {\n        if (Array.isArray(obj)) {\n          out = [];\n          for (index = 0, length = obj.length; index < length; index++) {\n            out[index] = clone(obj[index]);\n          }\n        } else {\n          out = {};\n          for (index in obj) {\n            out[index] = clone(obj[index]);\n          }\n        }\n      }\n      return out;\n    }\n    var clone_default = clone;\n    var css_selector_parser = __toModule(require_lib());\n    var parser = new css_selector_parser.CssSelectorParser();\n    parser.registerSelectorPseudos('not');\n    parser.registerSelectorPseudos('is');\n    parser.registerNestingOperators('>');\n    parser.registerAttrEqualityMods('^', '$', '*', '~');\n    var css_parser_default = parser;\n    function matchesTag(vNode, exp) {\n      return vNode.props.nodeType === 1 && (exp.tag === '*' || vNode.props.nodeName === exp.tag);\n    }\n    function matchesClasses(vNode, exp) {\n      return !exp.classes || exp.classes.every(function(cl) {\n        return vNode.hasClass(cl.value);\n      });\n    }\n    function matchesAttributes(vNode, exp) {\n      return !exp.attributes || exp.attributes.every(function(att) {\n        var nodeAtt = vNode.attr(att.key);\n        return nodeAtt !== null && (!att.value || att.test(nodeAtt));\n      });\n    }\n    function matchesId(vNode, exp) {\n      return !exp.id || vNode.props.id === exp.id;\n    }\n    function matchesPseudos(target, exp) {\n      if (!exp.pseudos || exp.pseudos.every(function(pseudo) {\n        if (pseudo.name === 'not') {\n          return !pseudo.expressions.some(function(expression) {\n            return _matchesExpression(target, expression);\n          });\n        } else if (pseudo.name === 'is') {\n          return pseudo.expressions.some(function(expression) {\n            return _matchesExpression(target, expression);\n          });\n        }\n        throw new Error('the pseudo selector ' + pseudo.name + ' has not yet been implemented');\n      })) {\n        return true;\n      }\n      return false;\n    }\n    function matchExpression(vNode, expression) {\n      return matchesTag(vNode, expression) && matchesClasses(vNode, expression) && matchesAttributes(vNode, expression) && matchesId(vNode, expression) && matchesPseudos(vNode, expression);\n    }\n    var escapeRegExp = function() {\n      var from = /(?=[\\-\\[\\]{}()*+?.\\\\\\^$|,#\\s])/g;\n      var to = '\\\\';\n      return function(string) {\n        return string.replace(from, to);\n      };\n    }();\n    var reUnescape = /\\\\/g;\n    function convertAttributes(atts) {\n      if (!atts) {\n        return;\n      }\n      return atts.map(function(att) {\n        var attributeKey = att.name.replace(reUnescape, '');\n        var attributeValue = (att.value || '').replace(reUnescape, '');\n        var test, regexp;\n        switch (att.operator) {\n         case '^=':\n          regexp = new RegExp('^' + escapeRegExp(attributeValue));\n          break;\n\n         case '$=':\n          regexp = new RegExp(escapeRegExp(attributeValue) + '$');\n          break;\n\n         case '~=':\n          regexp = new RegExp('(^|\\\\s)' + escapeRegExp(attributeValue) + '(\\\\s|$)');\n          break;\n\n         case '|=':\n          regexp = new RegExp('^' + escapeRegExp(attributeValue) + '(-|$)');\n          break;\n\n         case '=':\n          test = function test(value) {\n            return attributeValue === value;\n          };\n          break;\n\n         case '*=':\n          test = function test(value) {\n            return value && value.includes(attributeValue);\n          };\n          break;\n\n         case '!=':\n          test = function test(value) {\n            return attributeValue !== value;\n          };\n          break;\n\n         default:\n          test = function test(value) {\n            return !!value;\n          };\n        }\n        if (attributeValue === '' && /^[*$^]=$/.test(att.operator)) {\n          test = function test() {\n            return false;\n          };\n        }\n        if (!test) {\n          test = function test(value) {\n            return value && regexp.test(value);\n          };\n        }\n        return {\n          key: attributeKey,\n          value: attributeValue,\n          test: test\n        };\n      });\n    }\n    function convertClasses(classes) {\n      if (!classes) {\n        return;\n      }\n      return classes.map(function(className) {\n        className = className.replace(reUnescape, '');\n        return {\n          value: className,\n          regexp: new RegExp('(^|\\\\s)' + escapeRegExp(className) + '(\\\\s|$)')\n        };\n      });\n    }\n    function convertPseudos(pseudos) {\n      if (!pseudos) {\n        return;\n      }\n      return pseudos.map(function(p) {\n        var expressions;\n        if ([ 'is', 'not' ].includes(p.name)) {\n          expressions = p.value;\n          expressions = expressions.selectors ? expressions.selectors : [ expressions ];\n          expressions = convertExpressions(expressions);\n        }\n        return {\n          name: p.name,\n          expressions: expressions,\n          value: p.value\n        };\n      });\n    }\n    function convertExpressions(expressions) {\n      return expressions.map(function(exp) {\n        var newExp = [];\n        var rule3 = exp.rule;\n        while (rule3) {\n          newExp.push({\n            tag: rule3.tagName ? rule3.tagName.toLowerCase() : '*',\n            combinator: rule3.nestingOperator ? rule3.nestingOperator : ' ',\n            id: rule3.id,\n            attributes: convertAttributes(rule3.attrs),\n            classes: convertClasses(rule3.classNames),\n            pseudos: convertPseudos(rule3.pseudos)\n          });\n          rule3 = rule3.rule;\n        }\n        return newExp;\n      });\n    }\n    function _convertSelector(selector) {\n      var expressions = css_parser_default.parse(selector);\n      expressions = expressions.selectors ? expressions.selectors : [ expressions ];\n      return convertExpressions(expressions);\n    }\n    function _matchesExpression(vNode, expressions, matchAnyParent) {\n      var exps = [].concat(expressions);\n      var expression = exps.pop();\n      var matches14 = matchExpression(vNode, expression);\n      while (!matches14 && matchAnyParent && vNode.parent) {\n        vNode = vNode.parent;\n        matches14 = matchExpression(vNode, expression);\n      }\n      if (exps.length) {\n        if ([ ' ', '>' ].includes(expression.combinator) === false) {\n          throw new Error('axe.utils.matchesExpression does not support the combinator: ' + expression.combinator);\n        }\n        matches14 = matches14 && _matchesExpression(vNode.parent, exps, expression.combinator === ' ');\n      }\n      return matches14;\n    }\n    function matches(vNode, selector) {\n      var expressions = _convertSelector(selector);\n      return expressions.some(function(expression) {\n        return _matchesExpression(vNode, expression);\n      });\n    }\n    var matches_default = matches;\n    function closest(vNode, selector) {\n      while (vNode) {\n        if (matches_default(vNode, selector)) {\n          return vNode;\n        }\n        if (typeof vNode.parent === 'undefined') {\n          throw new TypeError('Cannot resolve parent for non-DOM nodes');\n        }\n        vNode = vNode.parent;\n      }\n      return null;\n    }\n    var closest_default = closest;\n    function noop() {}\n    function funcGuard(f) {\n      if (typeof f !== 'function') {\n        throw new TypeError('Queue methods require functions as arguments');\n      }\n    }\n    function queue() {\n      var tasks = [];\n      var started = 0;\n      var remaining = 0;\n      var completeQueue = noop;\n      var complete = false;\n      var err2;\n      var defaultFail = function defaultFail(e) {\n        err2 = e;\n        setTimeout(function() {\n          if (err2 !== void 0 && err2 !== null) {\n            log_default('Uncaught error (of queue)', err2);\n          }\n        }, 1);\n      };\n      var failed = defaultFail;\n      function createResolve(i) {\n        return function(r) {\n          tasks[i] = r;\n          remaining -= 1;\n          if (!remaining && completeQueue !== noop) {\n            complete = true;\n            completeQueue(tasks);\n          }\n        };\n      }\n      function abort(msg) {\n        completeQueue = noop;\n        failed(msg);\n        return tasks;\n      }\n      function pop() {\n        var length = tasks.length;\n        for (;started < length; started++) {\n          var task = tasks[started];\n          try {\n            task.call(null, createResolve(started), abort);\n          } catch (e) {\n            abort(e);\n          }\n        }\n      }\n      var q = {\n        defer: function defer(fn) {\n          if (_typeof(fn) === 'object' && fn.then && fn['catch']) {\n            var defer = fn;\n            fn = function fn(resolve, reject) {\n              defer.then(resolve)['catch'](reject);\n            };\n          }\n          funcGuard(fn);\n          if (err2 !== void 0) {\n            return;\n          } else if (complete) {\n            throw new Error('Queue already completed');\n          }\n          tasks.push(fn);\n          ++remaining;\n          pop();\n          return q;\n        },\n        then: function then(fn) {\n          funcGuard(fn);\n          if (completeQueue !== noop) {\n            throw new Error('queue `then` already set');\n          }\n          if (!err2) {\n            completeQueue = fn;\n            if (!remaining) {\n              complete = true;\n              completeQueue(tasks);\n            }\n          }\n          return q;\n        },\n        catch: function _catch(fn) {\n          funcGuard(fn);\n          if (failed !== defaultFail) {\n            throw new Error('queue `catch` already set');\n          }\n          if (!err2) {\n            failed = fn;\n          } else {\n            fn(err2);\n            err2 = null;\n          }\n          return q;\n        },\n        abort: abort\n      };\n      return q;\n    }\n    var queue_default = queue;\n    var closeHandler;\n    var postMessage2;\n    var topicHandlers = {};\n    function _respondable(win, topic, message, keepalive, replyHandler) {\n      var data2 = {\n        topic: topic,\n        message: message,\n        channelId: ''.concat(v4(), ':').concat(v4()),\n        keepalive: keepalive\n      };\n      return postMessage2(win, data2, replyHandler);\n    }\n    function messageListener(data2, responder) {\n      var topic = data2.topic, message = data2.message, keepalive = data2.keepalive;\n      var topicHandler = topicHandlers[topic];\n      if (!topicHandler) {\n        return;\n      }\n      try {\n        topicHandler(message, keepalive, responder);\n      } catch (error) {\n        axe.log(error);\n        responder(error, keepalive);\n      }\n    }\n    _respondable.updateMessenger = function updateMessenger(_ref5) {\n      var open = _ref5.open, post = _ref5.post;\n      assert_default(typeof open === 'function', 'open callback must be a function');\n      assert_default(typeof post === 'function', 'post callback must be a function');\n      if (closeHandler) {\n        closeHandler();\n      }\n      var close = open(messageListener);\n      if (close) {\n        assert_default(typeof close === 'function', 'open callback must return a cleanup function');\n        closeHandler = close;\n      } else {\n        closeHandler = null;\n      }\n      postMessage2 = post;\n    };\n    _respondable.subscribe = function subscribe(topic, topicHandler) {\n      assert_default(typeof topicHandler === 'function', 'Subscriber callback must be a function');\n      assert_default(!topicHandlers[topic], 'Topic '.concat(topic, ' is already registered to.'));\n      topicHandlers[topic] = topicHandler;\n    };\n    _respondable.isInFrame = function isInFrame() {\n      var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n      return !!win.frameElement;\n    };\n    setDefaultFrameMessenger(_respondable);\n    function err(message, node) {\n      var selector;\n      if (axe._tree) {\n        selector = _getSelector(node);\n      }\n      return new Error(message + ': ' + (selector || node));\n    }\n    function sendCommandToFrame(node, parameters, resolve, reject) {\n      var win = node.contentWindow;\n      if (!win) {\n        log_default('Frame does not have a content window', node);\n        resolve(null);\n        return;\n      }\n      var timeout = setTimeout(function() {\n        timeout = setTimeout(function() {\n          if (!parameters.debug) {\n            resolve(null);\n          } else {\n            reject(err('No response from frame', node));\n          }\n        }, 0);\n      }, 500);\n      _respondable(win, 'axe.ping', null, void 0, function() {\n        clearTimeout(timeout);\n        var frameWaitTime = parameters.options && parameters.options.frameWaitTime || 6e4;\n        timeout = setTimeout(function collectResultFramesTimeout() {\n          reject(err('Axe in frame timed out', node));\n        }, frameWaitTime);\n        _respondable(win, 'axe.start', parameters, void 0, function(data2) {\n          clearTimeout(timeout);\n          if (data2 instanceof Error === false) {\n            resolve(data2);\n          } else {\n            reject(data2);\n          }\n        });\n      });\n    }\n    var send_command_to_frame_default = sendCommandToFrame;\n    function getAllChecks(object) {\n      var result = [];\n      return result.concat(object.any || []).concat(object.all || []).concat(object.none || []);\n    }\n    var get_all_checks_default = getAllChecks;\n    function nodeSorter(nodeA, nodeB) {\n      nodeA = nodeA.actualNode || nodeA;\n      nodeB = nodeB.actualNode || nodeB;\n      if (nodeA === nodeB) {\n        return 0;\n      }\n      if (nodeA.compareDocumentPosition(nodeB) & 4) {\n        return -1;\n      } else {\n        return 1;\n      }\n    }\n    var node_sorter_default = nodeSorter;\n    function findBy(array, key, value) {\n      if (Array.isArray(array)) {\n        return array.find(function(obj) {\n          return _typeof(obj) === 'object' && obj[key] === value;\n        });\n      }\n    }\n    var find_by_default = findBy;\n    function pushFrame(resultSet, dqFrame, options) {\n      resultSet.forEach(function(res) {\n        res.node = dq_element_default.fromFrame(res.node, options, dqFrame);\n        var checks = get_all_checks_default(res);\n        checks.forEach(function(check4) {\n          check4.relatedNodes = check4.relatedNodes.map(function(node) {\n            return dq_element_default.fromFrame(node, options, dqFrame);\n          });\n        });\n      });\n    }\n    function spliceNodes(target, to) {\n      var firstFromFrame = to[0].node;\n      for (var _i2 = 0; _i2 < target.length; _i2++) {\n        var node = target[_i2].node;\n        var sorterResult = node_sorter_default({\n          actualNode: node.element\n        }, {\n          actualNode: firstFromFrame.element\n        });\n        if (sorterResult > 0 || sorterResult === 0 && firstFromFrame.selector.length < node.selector.length) {\n          target.splice.apply(target, [ _i2, 0 ].concat(to));\n          return;\n        }\n      }\n      target.push.apply(target, to);\n    }\n    function normalizeResult(result) {\n      if (!result || !result.results) {\n        return null;\n      }\n      if (!Array.isArray(result.results)) {\n        return [ result.results ];\n      }\n      if (!result.results.length) {\n        return null;\n      }\n      return result.results;\n    }\n    function mergeResults(frameResults, options) {\n      var mergedResult = [];\n      frameResults.forEach(function(frameResult) {\n        var results = normalizeResult(frameResult);\n        if (!results || !results.length) {\n          return;\n        }\n        var dqFrame;\n        if (frameResult.frameElement) {\n          var spec = {\n            selector: [ frameResult.frame ]\n          };\n          dqFrame = new dq_element_default(frameResult.frameElement, options, spec);\n        }\n        results.forEach(function(ruleResult) {\n          if (ruleResult.nodes && dqFrame) {\n            pushFrame(ruleResult.nodes, dqFrame, options);\n          }\n          var res = find_by_default(mergedResult, 'id', ruleResult.id);\n          if (!res) {\n            mergedResult.push(ruleResult);\n          } else {\n            if (ruleResult.nodes.length) {\n              spliceNodes(res.nodes, ruleResult.nodes);\n            }\n          }\n        });\n      });\n      if (frameResults.length > 1 && window && window.Node) {\n        mergedResult.forEach(function(result) {\n          if (result.nodes) {\n            result.nodes.sort(function(a, b) {\n              var aNode = a.node.element;\n              var bNode = b.node.element;\n              if (aNode !== bNode && (a.node._fromFrame || b.node._fromFrame)) {\n                return node_sorter_default(aNode, bNode);\n              }\n              return 0;\n            });\n          }\n        });\n      }\n      return mergedResult;\n    }\n    var merge_results_default = mergeResults;\n    function collectResultsFromFrames(parentContent, options, command, parameter, resolve, reject) {\n      var q = queue_default();\n      var frames = parentContent.frames;\n      frames.forEach(function(frame) {\n        var tabindex = parseInt(frame.node.getAttribute('tabindex'), 10);\n        var focusable = isNaN(tabindex) || tabindex >= 0;\n        var rect = frame.node.getBoundingClientRect();\n        var width = parseInt(frame.node.getAttribute('width'), 10);\n        var height = parseInt(frame.node.getAttribute('height'), 10);\n        width = isNaN(width) ? rect.width : width;\n        height = isNaN(height) ? rect.height : height;\n        var params = {\n          options: options,\n          command: command,\n          parameter: parameter,\n          context: {\n            initiator: false,\n            focusable: parentContent.focusable === false ? false : focusable,\n            boundingClientRect: {\n              width: width,\n              height: height\n            },\n            page: parentContent.page,\n            include: frame.include || [],\n            exclude: frame.exclude || []\n          }\n        };\n        q.defer(function(res, rej) {\n          var node = frame.node;\n          send_command_to_frame_default(node, params, function(data2) {\n            if (data2) {\n              return res({\n                results: data2,\n                frameElement: node,\n                frame: _getSelector(node)\n              });\n            }\n            res(null);\n          }, rej);\n        });\n      });\n      q.then(function(data2) {\n        resolve(merge_results_default(data2, options));\n      })['catch'](reject);\n    }\n    var collect_results_from_frames_default = collectResultsFromFrames;\n    function contains(vNode, otherVNode) {\n      function containsShadowChild(vNode2, otherVNode2) {\n        if (vNode2.shadowId === otherVNode2.shadowId) {\n          return true;\n        }\n        return !!vNode2.children.find(function(child) {\n          return containsShadowChild(child, otherVNode2);\n        });\n      }\n      if (vNode.shadowId || otherVNode.shadowId) {\n        return containsShadowChild(vNode, otherVNode);\n      }\n      if (vNode.actualNode) {\n        if (typeof vNode.actualNode.contains === 'function') {\n          return vNode.actualNode.contains(otherVNode.actualNode);\n        }\n        return !!(vNode.actualNode.compareDocumentPosition(otherVNode.actualNode) & 16);\n      } else {\n        do {\n          if (otherVNode === vNode) {\n            return true;\n          }\n        } while (otherVNode = otherVNode && otherVNode.parent);\n      }\n      return false;\n    }\n    var contains_default = contains;\n    function deepMerge() {\n      var target = {};\n      for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n        sources[_key] = arguments[_key];\n      }\n      sources.forEach(function(source) {\n        if (!source || _typeof(source) !== 'object' || Array.isArray(source)) {\n          return;\n        }\n        for (var _i3 = 0, _Object$keys = Object.keys(source); _i3 < _Object$keys.length; _i3++) {\n          var key = _Object$keys[_i3];\n          if (!target.hasOwnProperty(key) || _typeof(source[key]) !== 'object' || Array.isArray(target[key])) {\n            target[key] = source[key];\n          } else {\n            target[key] = deepMerge(target[key], source[key]);\n          }\n        }\n      });\n      return target;\n    }\n    var deep_merge_default = deepMerge;\n    function extendMetaData(to, from) {\n      Object.assign(to, from);\n      Object.keys(from).filter(function(prop) {\n        return typeof from[prop] === 'function';\n      }).forEach(function(prop) {\n        to[prop] = null;\n        try {\n          to[prop] = from[prop](to);\n        } catch (e) {}\n      });\n    }\n    var extend_meta_data_default = extendMetaData;\n    var possibleShadowRoots = [ 'article', 'aside', 'blockquote', 'body', 'div', 'footer', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'main', 'nav', 'p', 'section', 'span' ];\n    function isShadowRoot(node) {\n      if (node.shadowRoot) {\n        var nodeName2 = node.nodeName.toLowerCase();\n        if (possibleShadowRoots.includes(nodeName2) || /^[a-z][a-z0-9_.-]*-[a-z0-9_.-]*$/.test(nodeName2)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    var is_shadow_root_default = isShadowRoot;\n    var dom_exports = {};\n    __export(dom_exports, {\n      findElmsInContext: function findElmsInContext() {\n        return find_elms_in_context_default;\n      },\n      findUp: function findUp() {\n        return find_up_default;\n      },\n      findUpVirtual: function findUpVirtual() {\n        return find_up_virtual_default;\n      },\n      getComposedParent: function getComposedParent() {\n        return get_composed_parent_default;\n      },\n      getElementByReference: function getElementByReference() {\n        return get_element_by_reference_default;\n      },\n      getElementCoordinates: function getElementCoordinates() {\n        return get_element_coordinates_default;\n      },\n      getElementStack: function getElementStack() {\n        return get_element_stack_default;\n      },\n      getRootNode: function getRootNode() {\n        return get_root_node_default2;\n      },\n      getScrollOffset: function getScrollOffset() {\n        return get_scroll_offset_default;\n      },\n      getTabbableElements: function getTabbableElements() {\n        return get_tabbable_elements_default;\n      },\n      getTextElementStack: function getTextElementStack() {\n        return get_text_element_stack_default;\n      },\n      getViewportSize: function getViewportSize() {\n        return get_viewport_size_default;\n      },\n      hasContent: function hasContent() {\n        return has_content_default;\n      },\n      hasContentVirtual: function hasContentVirtual() {\n        return has_content_virtual_default;\n      },\n      idrefs: function idrefs() {\n        return idrefs_default;\n      },\n      insertedIntoFocusOrder: function insertedIntoFocusOrder() {\n        return inserted_into_focus_order_default;\n      },\n      isFocusable: function isFocusable() {\n        return is_focusable_default;\n      },\n      isHTML5: function isHTML5() {\n        return is_html5_default;\n      },\n      isHiddenWithCSS: function isHiddenWithCSS() {\n        return is_hidden_with_css_default;\n      },\n      isInTextBlock: function isInTextBlock() {\n        return is_in_text_block_default;\n      },\n      isModalOpen: function isModalOpen() {\n        return is_modal_open_default;\n      },\n      isNativelyFocusable: function isNativelyFocusable() {\n        return is_natively_focusable_default;\n      },\n      isNode: function isNode() {\n        return is_node_default;\n      },\n      isOffscreen: function isOffscreen() {\n        return is_offscreen_default;\n      },\n      isOpaque: function isOpaque() {\n        return is_opaque_default;\n      },\n      isSkipLink: function isSkipLink() {\n        return is_skip_link_default;\n      },\n      isVisible: function isVisible() {\n        return is_visible_default;\n      },\n      isVisualContent: function isVisualContent() {\n        return is_visual_content_default;\n      },\n      reduceToElementsBelowFloating: function reduceToElementsBelowFloating() {\n        return reduce_to_elements_below_floating_default;\n      },\n      shadowElementsFromPoint: function shadowElementsFromPoint() {\n        return shadow_elements_from_point_default;\n      },\n      urlPropsFromAttribute: function urlPropsFromAttribute() {\n        return url_props_from_attribute_default;\n      },\n      visuallyContains: function visuallyContains() {\n        return visually_contains_default;\n      },\n      visuallyOverlaps: function visuallyOverlaps() {\n        return visually_overlaps_default;\n      }\n    });\n    function getRootNode(node) {\n      var doc = node.getRootNode && node.getRootNode() || document;\n      if (doc === node) {\n        doc = document;\n      }\n      return doc;\n    }\n    var get_root_node_default = getRootNode;\n    var get_root_node_default2 = get_root_node_default;\n    function findElmsInContext(_ref6) {\n      var context3 = _ref6.context, value = _ref6.value, attr = _ref6.attr, _ref6$elm = _ref6.elm, elm = _ref6$elm === void 0 ? '' : _ref6$elm;\n      var root;\n      var escapedValue = escape_selector_default(value);\n      if (context3.nodeType === 9 || context3.nodeType === 11) {\n        root = context3;\n      } else {\n        root = get_root_node_default2(context3);\n      }\n      return Array.from(root.querySelectorAll(elm + '[' + attr + '=' + escapedValue + ']'));\n    }\n    var find_elms_in_context_default = findElmsInContext;\n    function findUpVirtual(element, target) {\n      var parent;\n      parent = element.actualNode;\n      if (!element.shadowId && typeof element.actualNode.closest === 'function') {\n        var match = element.actualNode.closest(target);\n        if (match) {\n          return match;\n        }\n        return null;\n      }\n      do {\n        parent = parent.assignedSlot ? parent.assignedSlot : parent.parentNode;\n        if (parent && parent.nodeType === 11) {\n          parent = parent.host;\n        }\n      } while (parent && !element_matches_default(parent, target) && parent !== document.documentElement);\n      if (!parent) {\n        return null;\n      }\n      if (!element_matches_default(parent, target)) {\n        return null;\n      }\n      return parent;\n    }\n    var find_up_virtual_default = findUpVirtual;\n    function findUp(element, target) {\n      return find_up_virtual_default(get_node_from_tree_default(element), target);\n    }\n    var find_up_default = findUp;\n    function getComposedParent(element) {\n      if (element.assignedSlot) {\n        return getComposedParent(element.assignedSlot);\n      } else if (element.parentNode) {\n        var parentNode = element.parentNode;\n        if (parentNode.nodeType === 1) {\n          return parentNode;\n        } else if (parentNode.host) {\n          return parentNode.host;\n        }\n      }\n      return null;\n    }\n    var get_composed_parent_default = getComposedParent;\n    function getElementByReference(node, attr) {\n      var fragment = node.getAttribute(attr);\n      if (!fragment) {\n        return null;\n      }\n      if (fragment.charAt(0) === '#') {\n        fragment = decodeURIComponent(fragment.substring(1));\n      } else if (fragment.substr(0, 2) === '/#') {\n        fragment = decodeURIComponent(fragment.substring(2));\n      }\n      var candidate = document.getElementById(fragment);\n      if (candidate) {\n        return candidate;\n      }\n      candidate = document.getElementsByName(fragment);\n      if (candidate.length) {\n        return candidate[0];\n      }\n      return null;\n    }\n    var get_element_by_reference_default = getElementByReference;\n    function getScrollOffset(element) {\n      if (!element.nodeType && element.document) {\n        element = element.document;\n      }\n      if (element.nodeType === 9) {\n        var docElement = element.documentElement, body = element.body;\n        return {\n          left: docElement && docElement.scrollLeft || body && body.scrollLeft || 0,\n          top: docElement && docElement.scrollTop || body && body.scrollTop || 0\n        };\n      }\n      return {\n        left: element.scrollLeft,\n        top: element.scrollTop\n      };\n    }\n    var get_scroll_offset_default = getScrollOffset;\n    function getElementCoordinates(element) {\n      var scrollOffset = get_scroll_offset_default(document), xOffset = scrollOffset.left, yOffset = scrollOffset.top, coords = element.getBoundingClientRect();\n      return {\n        top: coords.top + yOffset,\n        right: coords.right + xOffset,\n        bottom: coords.bottom + yOffset,\n        left: coords.left + xOffset,\n        width: coords.right - coords.left,\n        height: coords.bottom - coords.top\n      };\n    }\n    var get_element_coordinates_default = getElementCoordinates;\n    function getViewportSize(win) {\n      var doc = win.document;\n      var docElement = doc.documentElement;\n      if (win.innerWidth) {\n        return {\n          width: win.innerWidth,\n          height: win.innerHeight\n        };\n      }\n      if (docElement) {\n        return {\n          width: docElement.clientWidth,\n          height: docElement.clientHeight\n        };\n      }\n      var body = doc.body;\n      return {\n        width: body.clientWidth,\n        height: body.clientHeight\n      };\n    }\n    var get_viewport_size_default = getViewportSize;\n    function noParentScrolled(element, offset) {\n      element = get_composed_parent_default(element);\n      while (element && element.nodeName.toLowerCase() !== 'html') {\n        if (element.scrollTop) {\n          offset += element.scrollTop;\n          if (offset >= 0) {\n            return false;\n          }\n        }\n        element = get_composed_parent_default(element);\n      }\n      return true;\n    }\n    function isOffscreen(element) {\n      var leftBoundary;\n      var docElement = document.documentElement;\n      var styl = window.getComputedStyle(element);\n      var dir = window.getComputedStyle(document.body || docElement).getPropertyValue('direction');\n      var coords = get_element_coordinates_default(element);\n      if (coords.bottom < 0 && (noParentScrolled(element, coords.bottom) || styl.position === 'absolute')) {\n        return true;\n      }\n      if (coords.left === 0 && coords.right === 0) {\n        return false;\n      }\n      if (dir === 'ltr') {\n        if (coords.right <= 0) {\n          return true;\n        }\n      } else {\n        leftBoundary = Math.max(docElement.scrollWidth, get_viewport_size_default(window).width);\n        if (coords.left >= leftBoundary) {\n          return true;\n        }\n      }\n      return false;\n    }\n    var is_offscreen_default = isOffscreen;\n    var clipRegex = /rect\\s*\\(([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px,?\\s*([0-9]+)px\\s*\\)/;\n    var clipPathRegex = /(\\w+)\\((\\d+)/;\n    function isClipped(style) {\n      var matchesClip = style.getPropertyValue('clip').match(clipRegex);\n      var matchesClipPath = style.getPropertyValue('clip-path').match(clipPathRegex);\n      if (matchesClip && matchesClip.length === 5) {\n        return matchesClip[3] - matchesClip[1] <= 0 && matchesClip[2] - matchesClip[4] <= 0;\n      }\n      if (matchesClipPath) {\n        var type = matchesClipPath[1];\n        var value = parseInt(matchesClipPath[2], 10);\n        switch (type) {\n         case 'inset':\n          return value >= 50;\n\n         case 'circle':\n          return value === 0;\n\n         default:\n        }\n      }\n      return false;\n    }\n    function isAreaVisible(el, screenReader, recursed) {\n      var mapEl = find_up_default(el, 'map');\n      if (!mapEl) {\n        return false;\n      }\n      var mapElName = mapEl.getAttribute('name');\n      if (!mapElName) {\n        return false;\n      }\n      var mapElRootNode = get_root_node_default2(el);\n      if (!mapElRootNode || mapElRootNode.nodeType !== 9) {\n        return false;\n      }\n      var refs = query_selector_all_default(axe._tree, 'img[usemap=\"#'.concat(escape_selector_default(mapElName), '\"]'));\n      if (!refs || !refs.length) {\n        return false;\n      }\n      return refs.some(function(_ref7) {\n        var actualNode = _ref7.actualNode;\n        return isVisible(actualNode, screenReader, recursed);\n      });\n    }\n    function isVisible(el, screenReader, recursed) {\n      if (!el) {\n        throw new TypeError('Cannot determine if element is visible for non-DOM nodes');\n      }\n      var vNode = get_node_from_tree_default(el);\n      var cacheName = '_isVisible' + (screenReader ? 'ScreenReader' : '');\n      if (el.nodeType === 9) {\n        return true;\n      }\n      if (el.nodeType === 11) {\n        el = el.host;\n      }\n      if (vNode && typeof vNode[cacheName] !== 'undefined') {\n        return vNode[cacheName];\n      }\n      var style = window.getComputedStyle(el, null);\n      if (style === null) {\n        return false;\n      }\n      var nodeName2 = el.nodeName.toUpperCase();\n      if (nodeName2 === 'AREA') {\n        return isAreaVisible(el, screenReader, recursed);\n      }\n      if (style.getPropertyValue('display') === 'none' || [ 'STYLE', 'SCRIPT', 'NOSCRIPT', 'TEMPLATE' ].includes(nodeName2)) {\n        return false;\n      }\n      if (screenReader && el.getAttribute('aria-hidden') === 'true') {\n        return false;\n      }\n      if (!screenReader && (isClipped(style) || style.getPropertyValue('opacity') === '0' || get_scroll_default(el) && parseInt(style.getPropertyValue('height')) === 0)) {\n        return false;\n      }\n      if (!recursed && (style.getPropertyValue('visibility') === 'hidden' || !screenReader && is_offscreen_default(el))) {\n        return false;\n      }\n      var parent = el.assignedSlot ? el.assignedSlot : el.parentNode;\n      var visible4 = false;\n      if (parent) {\n        visible4 = isVisible(parent, screenReader, true);\n      }\n      if (vNode) {\n        vNode[cacheName] = visible4;\n      }\n      return visible4;\n    }\n    var is_visible_default = isVisible;\n    var gridSize = 200;\n    function isStackingContext(vNode, parentVNode) {\n      var position = vNode.getComputedStylePropertyValue('position');\n      var zIndex = vNode.getComputedStylePropertyValue('z-index');\n      if (position === 'fixed' || position === 'sticky') {\n        return true;\n      }\n      if (zIndex !== 'auto' && position !== 'static') {\n        return true;\n      }\n      if (vNode.getComputedStylePropertyValue('opacity') !== '1') {\n        return true;\n      }\n      var transform = vNode.getComputedStylePropertyValue('-webkit-transform') || vNode.getComputedStylePropertyValue('-ms-transform') || vNode.getComputedStylePropertyValue('transform') || 'none';\n      if (transform !== 'none') {\n        return true;\n      }\n      var mixBlendMode = vNode.getComputedStylePropertyValue('mix-blend-mode');\n      if (mixBlendMode && mixBlendMode !== 'normal') {\n        return true;\n      }\n      var filter = vNode.getComputedStylePropertyValue('filter');\n      if (filter && filter !== 'none') {\n        return true;\n      }\n      var perspective = vNode.getComputedStylePropertyValue('perspective');\n      if (perspective && perspective !== 'none') {\n        return true;\n      }\n      var clipPath = vNode.getComputedStylePropertyValue('clip-path');\n      if (clipPath && clipPath !== 'none') {\n        return true;\n      }\n      var mask = vNode.getComputedStylePropertyValue('-webkit-mask') || vNode.getComputedStylePropertyValue('mask') || 'none';\n      if (mask !== 'none') {\n        return true;\n      }\n      var maskImage = vNode.getComputedStylePropertyValue('-webkit-mask-image') || vNode.getComputedStylePropertyValue('mask-image') || 'none';\n      if (maskImage !== 'none') {\n        return true;\n      }\n      var maskBorder = vNode.getComputedStylePropertyValue('-webkit-mask-border') || vNode.getComputedStylePropertyValue('mask-border') || 'none';\n      if (maskBorder !== 'none') {\n        return true;\n      }\n      if (vNode.getComputedStylePropertyValue('isolation') === 'isolate') {\n        return true;\n      }\n      var willChange = vNode.getComputedStylePropertyValue('will-change');\n      if (willChange === 'transform' || willChange === 'opacity') {\n        return true;\n      }\n      if (vNode.getComputedStylePropertyValue('-webkit-overflow-scrolling') === 'touch') {\n        return true;\n      }\n      var contain = vNode.getComputedStylePropertyValue('contain');\n      if ([ 'layout', 'paint', 'strict', 'content' ].includes(contain)) {\n        return true;\n      }\n      if (zIndex !== 'auto' && parentVNode) {\n        var parentDsiplay = parentVNode.getComputedStylePropertyValue('display');\n        if ([ 'flex', 'inline-flex', 'inline flex', 'grid', 'inline-grid', 'inline grid' ].includes(parentDsiplay)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    function isFloated(vNode) {\n      if (!vNode) {\n        return false;\n      }\n      if (vNode._isFloated !== void 0) {\n        return vNode._isFloated;\n      }\n      var floatStyle = vNode.getComputedStylePropertyValue('float');\n      if (floatStyle !== 'none') {\n        vNode._isFloated = true;\n        return true;\n      }\n      var floated = isFloated(vNode.parent);\n      vNode._isFloated = floated;\n      return floated;\n    }\n    function getPositionOrder(vNode) {\n      if (vNode.getComputedStylePropertyValue('position') === 'static') {\n        if (vNode.getComputedStylePropertyValue('display').indexOf('inline') !== -1) {\n          return 2;\n        }\n        if (isFloated(vNode)) {\n          return 1;\n        }\n        return 0;\n      }\n      return 3;\n    }\n    function visuallySort(a, b) {\n      for (var _i4 = 0; _i4 < a._stackingOrder.length; _i4++) {\n        if (typeof b._stackingOrder[_i4] === 'undefined') {\n          return -1;\n        }\n        if (b._stackingOrder[_i4] > a._stackingOrder[_i4]) {\n          return 1;\n        }\n        if (b._stackingOrder[_i4] < a._stackingOrder[_i4]) {\n          return -1;\n        }\n      }\n      var aNode = a.actualNode;\n      var bNode = b.actualNode;\n      if (aNode.getRootNode && aNode.getRootNode() !== bNode.getRootNode()) {\n        var boundaries = [];\n        while (aNode) {\n          boundaries.push({\n            root: aNode.getRootNode(),\n            node: aNode\n          });\n          aNode = aNode.getRootNode().host;\n        }\n        while (bNode && !boundaries.find(function(boundary) {\n          return boundary.root === bNode.getRootNode();\n        })) {\n          bNode = bNode.getRootNode().host;\n        }\n        aNode = boundaries.find(function(boundary) {\n          return boundary.root === bNode.getRootNode();\n        }).node;\n        if (aNode === bNode) {\n          return a.actualNode.getRootNode() !== aNode.getRootNode() ? -1 : 1;\n        }\n      }\n      var _window$Node = window.Node, DOCUMENT_POSITION_FOLLOWING = _window$Node.DOCUMENT_POSITION_FOLLOWING, DOCUMENT_POSITION_CONTAINS = _window$Node.DOCUMENT_POSITION_CONTAINS, DOCUMENT_POSITION_CONTAINED_BY = _window$Node.DOCUMENT_POSITION_CONTAINED_BY;\n      var docPosition = aNode.compareDocumentPosition(bNode);\n      var DOMOrder = docPosition & DOCUMENT_POSITION_FOLLOWING ? 1 : -1;\n      var isDescendant = docPosition & DOCUMENT_POSITION_CONTAINS || docPosition & DOCUMENT_POSITION_CONTAINED_BY;\n      var aPosition = getPositionOrder(a);\n      var bPosition = getPositionOrder(b);\n      if (aPosition === bPosition || isDescendant) {\n        return DOMOrder;\n      }\n      return bPosition - aPosition;\n    }\n    function getStackingOrder(vNode, parentVNode) {\n      var stackingOrder = parentVNode._stackingOrder.slice();\n      var zIndex = vNode.getComputedStylePropertyValue('z-index');\n      if (zIndex !== 'auto') {\n        stackingOrder[stackingOrder.length - 1] = parseInt(zIndex);\n      }\n      if (isStackingContext(vNode, parentVNode)) {\n        stackingOrder.push(0);\n      }\n      return stackingOrder;\n    }\n    function findScrollRegionParent(vNode, parentVNode) {\n      var scrollRegionParent = null;\n      var checkedNodes = [ vNode ];\n      while (parentVNode) {\n        if (parentVNode._scrollRegionParent) {\n          scrollRegionParent = parentVNode._scrollRegionParent;\n          break;\n        }\n        if (get_scroll_default(parentVNode.actualNode)) {\n          scrollRegionParent = parentVNode;\n          break;\n        }\n        checkedNodes.push(parentVNode);\n        parentVNode = get_node_from_tree_default(parentVNode.actualNode.parentElement || parentVNode.actualNode.parentNode);\n      }\n      checkedNodes.forEach(function(vNode2) {\n        return vNode2._scrollRegionParent = scrollRegionParent;\n      });\n      return scrollRegionParent;\n    }\n    function addNodeToGrid(grid, vNode) {\n      vNode._grid = grid;\n      vNode.clientRects.forEach(function(rect) {\n        var x = rect.left;\n        var y = rect.top;\n        var startRow = y / gridSize | 0;\n        var startCol = x / gridSize | 0;\n        var endRow = (y + rect.height) / gridSize | 0;\n        var endCol = (x + rect.width) / gridSize | 0;\n        for (var row = startRow; row <= endRow; row++) {\n          grid.cells[row] = grid.cells[row] || [];\n          for (var col = startCol; col <= endCol; col++) {\n            grid.cells[row][col] = grid.cells[row][col] || [];\n            if (!grid.cells[row][col].includes(vNode)) {\n              grid.cells[row][col].push(vNode);\n            }\n          }\n        }\n      });\n    }\n    function createGrid() {\n      var root = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body;\n      var rootGrid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        container: null,\n        cells: []\n      };\n      var parentVNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n      if (!parentVNode) {\n        var vNode = get_node_from_tree_default(document.documentElement);\n        if (!vNode) {\n          vNode = new virtual_node_default(document.documentElement);\n        }\n        vNode._stackingOrder = [ 0 ];\n        addNodeToGrid(rootGrid, vNode);\n        if (get_scroll_default(vNode.actualNode)) {\n          var subGrid = {\n            container: vNode,\n            cells: []\n          };\n          vNode._subGrid = subGrid;\n        }\n      }\n      var treeWalker = document.createTreeWalker(root, window.NodeFilter.SHOW_ELEMENT, null, false);\n      var node = parentVNode ? treeWalker.nextNode() : treeWalker.currentNode;\n      while (node) {\n        var _vNode = get_node_from_tree_default(node);\n        if (node.parentElement) {\n          parentVNode = get_node_from_tree_default(node.parentElement);\n        } else if (node.parentNode && get_node_from_tree_default(node.parentNode)) {\n          parentVNode = get_node_from_tree_default(node.parentNode);\n        }\n        if (!_vNode) {\n          _vNode = new axe.VirtualNode(node, parentVNode);\n        }\n        _vNode._stackingOrder = getStackingOrder(_vNode, parentVNode);\n        var scrollRegionParent = findScrollRegionParent(_vNode, parentVNode);\n        var grid = scrollRegionParent ? scrollRegionParent._subGrid : rootGrid;\n        if (get_scroll_default(_vNode.actualNode)) {\n          var _subGrid = {\n            container: _vNode,\n            cells: []\n          };\n          _vNode._subGrid = _subGrid;\n        }\n        var rect = _vNode.boundingClientRect;\n        if (rect.width !== 0 && rect.height !== 0 && is_visible_default(node)) {\n          addNodeToGrid(grid, _vNode);\n        }\n        if (is_shadow_root_default(node)) {\n          createGrid(node.shadowRoot, grid, _vNode);\n        }\n        node = treeWalker.nextNode();\n      }\n    }\n    function getRectStack(grid, rect) {\n      var recursed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      var x = rect.left + rect.width / 2;\n      var y = rect.top + rect.height / 2;\n      var row = y / gridSize | 0;\n      var col = x / gridSize | 0;\n      var stack = grid.cells[row][col].filter(function(gridCellNode) {\n        return gridCellNode.clientRects.find(function(clientRect) {\n          var rectX = clientRect.left;\n          var rectY = clientRect.top;\n          return x <= rectX + clientRect.width && x >= rectX && y <= rectY + clientRect.height && y >= rectY;\n        });\n      });\n      var gridContainer = grid.container;\n      if (gridContainer) {\n        stack = getRectStack(gridContainer._grid, gridContainer.boundingClientRect, true).concat(stack);\n      }\n      if (!recursed) {\n        stack = stack.sort(visuallySort).map(function(vNode) {\n          return vNode.actualNode;\n        }).concat(document.documentElement).filter(function(node, index, array) {\n          return array.indexOf(node) === index;\n        });\n      }\n      return stack;\n    }\n    var _cache = {};\n    var cache = {\n      set: function set(key, value) {\n        _cache[key] = value;\n      },\n      get: function get(key) {\n        return _cache[key];\n      },\n      clear: function clear() {\n        _cache = {};\n      }\n    };\n    var cache_default = cache;\n    function getElementStack(node) {\n      if (!cache_default.get('gridCreated')) {\n        createGrid();\n        cache_default.set('gridCreated', true);\n      }\n      var vNode = get_node_from_tree_default(node);\n      var grid = vNode._grid;\n      if (!grid) {\n        return [];\n      }\n      return getRectStack(grid, vNode.boundingClientRect);\n    }\n    var get_element_stack_default = getElementStack;\n    function getTabbableElements(virtualNode) {\n      var nodeAndDescendents = query_selector_all_default(virtualNode, '*');\n      var tabbableElements = nodeAndDescendents.filter(function(vNode) {\n        var isFocusable2 = vNode.isFocusable;\n        var tabIndex = vNode.actualNode.getAttribute('tabindex');\n        tabIndex = tabIndex && !isNaN(parseInt(tabIndex, 10)) ? parseInt(tabIndex) : null;\n        return tabIndex ? isFocusable2 && tabIndex >= 0 : isFocusable2;\n      });\n      return tabbableElements;\n    }\n    var get_tabbable_elements_default = getTabbableElements;\n    function sanitize(str) {\n      if (!str) {\n        return '';\n      }\n      return str.replace(/\\r\\n/g, '\\n').replace(/\\u00A0/g, ' ').replace(/[\\s]{2,}/g, ' ').trim();\n    }\n    var sanitize_default = sanitize;\n    function getTextElementStack(node) {\n      if (!cache_default.get('gridCreated')) {\n        createGrid();\n        cache_default.set('gridCreated', true);\n      }\n      var vNode = get_node_from_tree_default(node);\n      var grid = vNode._grid;\n      if (!grid) {\n        return [];\n      }\n      var nodeRect = vNode.boundingClientRect;\n      var clientRects = [];\n      Array.from(node.childNodes).forEach(function(elm) {\n        if (elm.nodeType === 3 && sanitize_default(elm.textContent) !== '') {\n          var range = document.createRange();\n          range.selectNodeContents(elm);\n          var rects = range.getClientRects();\n          var outsideRectBounds = Array.from(rects).some(function(rect) {\n            var horizontalMidpoint = rect.left + rect.width / 2;\n            var verticalMidpoint = rect.top + rect.height / 2;\n            return horizontalMidpoint < nodeRect.left || horizontalMidpoint > nodeRect.right || verticalMidpoint < nodeRect.top || verticalMidpoint > nodeRect.bottom;\n          });\n          if (outsideRectBounds) {\n            return;\n          }\n          for (var _i5 = 0; _i5 < rects.length; _i5++) {\n            var rect = rects[_i5];\n            if (rect.width >= 1 && rect.height >= 1) {\n              clientRects.push(rect);\n            }\n          }\n        }\n      });\n      if (!clientRects.length) {\n        return [ get_element_stack_default(node) ];\n      }\n      return clientRects.map(function(rect) {\n        return getRectStack(grid, rect);\n      });\n    }\n    var get_text_element_stack_default = getTextElementStack;\n    var visualRoles = [ 'checkbox', 'img', 'radio', 'range', 'slider', 'spinbutton', 'textbox' ];\n    function isVisualContent(element) {\n      var role = element.getAttribute('role');\n      if (role) {\n        return visualRoles.indexOf(role) !== -1;\n      }\n      switch (element.nodeName.toUpperCase()) {\n       case 'IMG':\n       case 'IFRAME':\n       case 'OBJECT':\n       case 'VIDEO':\n       case 'AUDIO':\n       case 'CANVAS':\n       case 'SVG':\n       case 'MATH':\n       case 'BUTTON':\n       case 'SELECT':\n       case 'TEXTAREA':\n       case 'KEYGEN':\n       case 'PROGRESS':\n       case 'METER':\n        return true;\n\n       case 'INPUT':\n        return element.type !== 'hidden';\n\n       default:\n        return false;\n      }\n    }\n    var is_visual_content_default = isVisualContent;\n    function idrefs(node, attr) {\n      node = node.actualNode || node;\n      try {\n        var doc = get_root_node_default2(node);\n        var result = [];\n        var attrValue = node.getAttribute(attr);\n        if (attrValue) {\n          attrValue = token_list_default(attrValue);\n          for (var index = 0; index < attrValue.length; index++) {\n            result.push(doc.getElementById(attrValue[index]));\n          }\n        }\n        return result;\n      } catch (e) {\n        throw new TypeError('Cannot resolve id references for non-DOM nodes');\n      }\n    }\n    var idrefs_default = idrefs;\n    function visibleVirtual(element, screenReader, noRecursing) {\n      var vNode = element instanceof abstract_virtual_node_default ? element : get_node_from_tree_default(element);\n      var visible4 = !element.actualNode || element.actualNode && is_visible_default(element.actualNode, screenReader);\n      var result = vNode.children.map(function(child) {\n        var _child$props = child.props, nodeType = _child$props.nodeType, nodeValue = _child$props.nodeValue;\n        if (nodeType === 3) {\n          if (nodeValue && visible4) {\n            return nodeValue;\n          }\n        } else if (!noRecursing) {\n          return visibleVirtual(child, screenReader);\n        }\n      }).join('');\n      return sanitize_default(result);\n    }\n    var visible_virtual_default = visibleVirtual;\n    function labelVirtual(virtualNode) {\n      var ref, candidate;\n      if (virtualNode.attr('aria-labelledby')) {\n        ref = idrefs_default(virtualNode.actualNode, 'aria-labelledby');\n        candidate = ref.map(function(thing) {\n          var vNode = get_node_from_tree_default(thing);\n          return vNode ? visible_virtual_default(vNode, true) : '';\n        }).join(' ').trim();\n        if (candidate) {\n          return candidate;\n        }\n      }\n      candidate = virtualNode.attr('aria-label');\n      if (candidate) {\n        candidate = sanitize_default(candidate);\n        if (candidate) {\n          return candidate;\n        }\n      }\n      return null;\n    }\n    var label_virtual_default = labelVirtual;\n    var hiddenTextElms = [ 'HEAD', 'TITLE', 'TEMPLATE', 'SCRIPT', 'STYLE', 'IFRAME', 'OBJECT', 'VIDEO', 'AUDIO', 'NOSCRIPT' ];\n    function hasChildTextNodes(elm) {\n      if (!hiddenTextElms.includes(elm.actualNode.nodeName.toUpperCase())) {\n        return elm.children.some(function(_ref8) {\n          var actualNode = _ref8.actualNode;\n          return actualNode.nodeType === 3 && actualNode.nodeValue.trim();\n        });\n      }\n    }\n    function hasContentVirtual(elm, noRecursion, ignoreAria) {\n      return hasChildTextNodes(elm) || is_visual_content_default(elm.actualNode) || !ignoreAria && !!label_virtual_default(elm) || !noRecursion && elm.children.some(function(child) {\n        return child.actualNode.nodeType === 1 && hasContentVirtual(child);\n      });\n    }\n    var has_content_virtual_default = hasContentVirtual;\n    function hasContent(elm, noRecursion, ignoreAria) {\n      elm = get_node_from_tree_default(elm);\n      return has_content_virtual_default(elm, noRecursion, ignoreAria);\n    }\n    var has_content_default = hasContent;\n    function isHiddenWithCSS(el, descendentVisibilityValue) {\n      var vNode = get_node_from_tree_default(el);\n      if (!vNode) {\n        return _isHiddenWithCSS(el, descendentVisibilityValue);\n      }\n      if (vNode._isHiddenWithCSS === void 0) {\n        vNode._isHiddenWithCSS = _isHiddenWithCSS(el, descendentVisibilityValue);\n      }\n      return vNode._isHiddenWithCSS;\n    }\n    function _isHiddenWithCSS(el, descendentVisibilityValue) {\n      if (el.nodeType === 9) {\n        return false;\n      }\n      if (el.nodeType === 11) {\n        el = el.host;\n      }\n      if ([ 'STYLE', 'SCRIPT' ].includes(el.nodeName.toUpperCase())) {\n        return false;\n      }\n      var style = window.getComputedStyle(el, null);\n      if (!style) {\n        throw new Error('Style does not exist for the given element.');\n      }\n      var displayValue = style.getPropertyValue('display');\n      if (displayValue === 'none') {\n        return true;\n      }\n      var HIDDEN_VISIBILITY_VALUES = [ 'hidden', 'collapse' ];\n      var visibilityValue = style.getPropertyValue('visibility');\n      if (HIDDEN_VISIBILITY_VALUES.includes(visibilityValue) && !descendentVisibilityValue) {\n        return true;\n      }\n      if (HIDDEN_VISIBILITY_VALUES.includes(visibilityValue) && descendentVisibilityValue && HIDDEN_VISIBILITY_VALUES.includes(descendentVisibilityValue)) {\n        return true;\n      }\n      var parent = get_composed_parent_default(el);\n      if (parent && !HIDDEN_VISIBILITY_VALUES.includes(visibilityValue)) {\n        return isHiddenWithCSS(parent, visibilityValue);\n      }\n      return false;\n    }\n    var is_hidden_with_css_default = isHiddenWithCSS;\n    function focusDisabled(el) {\n      var vNode = el instanceof abstract_virtual_node_default ? el : get_node_from_tree_default(el);\n      if (vNode.hasAttr('disabled')) {\n        return true;\n      }\n      if (vNode.props.nodeName !== 'area') {\n        if (!vNode.actualNode) {\n          return false;\n        }\n        return is_hidden_with_css_default(vNode.actualNode);\n      }\n      return false;\n    }\n    var focus_disabled_default = focusDisabled;\n    function isNativelyFocusable(el) {\n      var vNode = el instanceof abstract_virtual_node_default ? el : get_node_from_tree_default(el);\n      if (!vNode || focus_disabled_default(vNode)) {\n        return false;\n      }\n      switch (vNode.props.nodeName) {\n       case 'a':\n       case 'area':\n        if (vNode.hasAttr('href')) {\n          return true;\n        }\n        break;\n\n       case 'input':\n        return vNode.props.type !== 'hidden';\n\n       case 'textarea':\n       case 'select':\n       case 'summary':\n       case 'button':\n        return true;\n\n       case 'details':\n        return !query_selector_all_default(vNode, 'summary').length;\n      }\n      return false;\n    }\n    var is_natively_focusable_default = isNativelyFocusable;\n    function isFocusable(el) {\n      var vNode = el instanceof abstract_virtual_node_default ? el : get_node_from_tree_default(el);\n      if (vNode.props.nodeType !== 1) {\n        return false;\n      }\n      if (focus_disabled_default(vNode)) {\n        return false;\n      } else if (is_natively_focusable_default(vNode)) {\n        return true;\n      }\n      var tabindex = vNode.attr('tabindex');\n      if (tabindex && !isNaN(parseInt(tabindex, 10))) {\n        return true;\n      }\n      return false;\n    }\n    var is_focusable_default = isFocusable;\n    function insertedIntoFocusOrder(el) {\n      var tabIndex = parseInt(el.getAttribute('tabindex'), 10);\n      return tabIndex > -1 && is_focusable_default(el) && !is_natively_focusable_default(el);\n    }\n    var inserted_into_focus_order_default = insertedIntoFocusOrder;\n    function isHTML5(doc) {\n      var node = doc.doctype;\n      if (node === null) {\n        return false;\n      }\n      return node.name === 'html' && !node.publicId && !node.systemId;\n    }\n    var is_html5_default = isHTML5;\n    function walkDomNode(node, functor) {\n      if (functor(node.actualNode) !== false) {\n        node.children.forEach(function(child) {\n          return walkDomNode(child, functor);\n        });\n      }\n    }\n    var blockLike = [ 'block', 'list-item', 'table', 'flex', 'grid', 'inline-block' ];\n    function isBlock(elm) {\n      var display = window.getComputedStyle(elm).getPropertyValue('display');\n      return blockLike.includes(display) || display.substr(0, 6) === 'table-';\n    }\n    function getBlockParent(node) {\n      var parentBlock = get_composed_parent_default(node);\n      while (parentBlock && !isBlock(parentBlock)) {\n        parentBlock = get_composed_parent_default(parentBlock);\n      }\n      return get_node_from_tree_default(parentBlock);\n    }\n    function isInTextBlock(node) {\n      if (isBlock(node)) {\n        return false;\n      }\n      var virtualParent = getBlockParent(node);\n      var parentText = '';\n      var linkText = '';\n      var inBrBlock = 0;\n      walkDomNode(virtualParent, function(currNode) {\n        if (inBrBlock === 2) {\n          return false;\n        }\n        if (currNode.nodeType === 3) {\n          parentText += currNode.nodeValue;\n        }\n        if (currNode.nodeType !== 1) {\n          return;\n        }\n        var nodeName2 = (currNode.nodeName || '').toUpperCase();\n        if ([ 'BR', 'HR' ].includes(nodeName2)) {\n          if (inBrBlock === 0) {\n            parentText = '';\n            linkText = '';\n          } else {\n            inBrBlock = 2;\n          }\n        } else if (currNode.style.display === 'none' || currNode.style.overflow === 'hidden' || ![ '', null, 'none' ].includes(currNode.style['float']) || ![ '', null, 'relative' ].includes(currNode.style.position)) {\n          return false;\n        } else if (nodeName2 === 'A' && currNode.href || (currNode.getAttribute('role') || '').toLowerCase() === 'link') {\n          if (currNode === node) {\n            inBrBlock = 1;\n          }\n          linkText += currNode.textContent;\n          return false;\n        }\n      });\n      parentText = sanitize_default(parentText);\n      linkText = sanitize_default(linkText);\n      return parentText.length > linkText.length;\n    }\n    var is_in_text_block_default = isInTextBlock;\n    function isModalOpen(options) {\n      options = options || {};\n      var modalPercent = options.modalPercent || .75;\n      if (cache_default.get('isModalOpen')) {\n        return cache_default.get('isModalOpen');\n      }\n      var definiteModals = query_selector_all_filter_default(axe._tree[0], 'dialog, [role=dialog], [aria-modal=true]', function(vNode) {\n        return is_visible_default(vNode.actualNode);\n      });\n      if (definiteModals.length) {\n        cache_default.set('isModalOpen', true);\n        return true;\n      }\n      var viewport = get_viewport_size_default(window);\n      var percentWidth = viewport.width * modalPercent;\n      var percentHeight = viewport.height * modalPercent;\n      var x = (viewport.width - percentWidth) / 2;\n      var y = (viewport.height - percentHeight) / 2;\n      var points = [ {\n        x: x,\n        y: y\n      }, {\n        x: viewport.width - x,\n        y: y\n      }, {\n        x: viewport.width / 2,\n        y: viewport.height / 2\n      }, {\n        x: x,\n        y: viewport.height - y\n      }, {\n        x: viewport.width - x,\n        y: viewport.height - y\n      } ];\n      var stacks = points.map(function(point) {\n        return Array.from(document.elementsFromPoint(point.x, point.y));\n      });\n      var _loop3 = function _loop3(_i6) {\n        var modalElement = stacks[_i6].find(function(elm) {\n          var style = window.getComputedStyle(elm);\n          return parseInt(style.width, 10) >= percentWidth && parseInt(style.height, 10) >= percentHeight && style.getPropertyValue('pointer-events') !== 'none' && (style.position === 'absolute' || style.position === 'fixed');\n        });\n        if (modalElement && stacks.every(function(stack) {\n          return stack.includes(modalElement);\n        })) {\n          cache_default.set('isModalOpen', true);\n          return {\n            v: true\n          };\n        }\n      };\n      for (var _i6 = 0; _i6 < stacks.length; _i6++) {\n        var _ret = _loop3(_i6);\n        if (_typeof(_ret) === 'object') {\n          return _ret.v;\n        }\n      }\n      cache_default.set('isModalOpen', void 0);\n      return void 0;\n    }\n    var is_modal_open_default = isModalOpen;\n    function isNode(element) {\n      return element instanceof window.Node;\n    }\n    var is_node_default = isNode;\n    var data = {};\n    var incompleteData = {\n      set: function set(key, reason) {\n        if (typeof key !== 'string') {\n          throw new Error('Incomplete data: key must be a string');\n        }\n        if (reason) {\n          data[key] = reason;\n        }\n        return data[key];\n      },\n      get: function get(key) {\n        return data[key];\n      },\n      clear: function clear() {\n        data = {};\n      }\n    };\n    var incomplete_data_default = incompleteData;\n    function elementHasImage(elm, style) {\n      var graphicNodes = [ 'IMG', 'CANVAS', 'OBJECT', 'IFRAME', 'VIDEO', 'SVG' ];\n      var nodeName2 = elm.nodeName.toUpperCase();\n      if (graphicNodes.includes(nodeName2)) {\n        incomplete_data_default.set('bgColor', 'imgNode');\n        return true;\n      }\n      style = style || window.getComputedStyle(elm);\n      var bgImageStyle = style.getPropertyValue('background-image');\n      var hasBgImage = bgImageStyle !== 'none';\n      if (hasBgImage) {\n        var hasGradient = /gradient/.test(bgImageStyle);\n        incomplete_data_default.set('bgColor', hasGradient ? 'bgGradient' : 'bgImage');\n      }\n      return hasBgImage;\n    }\n    var element_has_image_default = elementHasImage;\n    var ariaAttrs = {\n      'aria-activedescendant': {\n        type: 'idref',\n        allowEmpty: true\n      },\n      'aria-atomic': {\n        type: 'boolean',\n        global: true\n      },\n      'aria-autocomplete': {\n        type: 'nmtoken',\n        values: [ 'inline', 'list', 'both', 'none' ]\n      },\n      'aria-busy': {\n        type: 'boolean',\n        global: true\n      },\n      'aria-checked': {\n        type: 'nmtoken',\n        values: [ 'false', 'mixed', 'true', 'undefined' ]\n      },\n      'aria-colcount': {\n        type: 'int',\n        minValue: -1\n      },\n      'aria-colindex': {\n        type: 'int',\n        minValue: 1\n      },\n      'aria-colspan': {\n        type: 'int',\n        minValue: 1\n      },\n      'aria-controls': {\n        type: 'idrefs',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-current': {\n        type: 'nmtoken',\n        allowEmpty: true,\n        values: [ 'page', 'step', 'location', 'date', 'time', 'true', 'false' ],\n        global: true\n      },\n      'aria-describedby': {\n        type: 'idrefs',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-details': {\n        type: 'idref',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-disabled': {\n        type: 'boolean',\n        global: true\n      },\n      'aria-dropeffect': {\n        type: 'nmtokens',\n        values: [ 'copy', 'execute', 'link', 'move', 'none', 'popup' ],\n        global: true\n      },\n      'aria-errormessage': {\n        type: 'idref',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-expanded': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'undefined' ]\n      },\n      'aria-flowto': {\n        type: 'idrefs',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-grabbed': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'undefined' ],\n        global: true\n      },\n      'aria-haspopup': {\n        type: 'nmtoken',\n        allowEmpty: true,\n        values: [ 'true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog' ],\n        global: true\n      },\n      'aria-hidden': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'undefined' ],\n        global: true\n      },\n      'aria-invalid': {\n        type: 'nmtoken',\n        allowEmpty: true,\n        values: [ 'grammar', 'false', 'spelling', 'true' ],\n        global: true\n      },\n      'aria-keyshortcuts': {\n        type: 'string',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-label': {\n        type: 'string',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-labelledby': {\n        type: 'idrefs',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-level': {\n        type: 'int',\n        minValue: 1\n      },\n      'aria-live': {\n        type: 'nmtoken',\n        values: [ 'assertive', 'off', 'polite' ],\n        global: true\n      },\n      'aria-modal': {\n        type: 'boolean'\n      },\n      'aria-multiline': {\n        type: 'boolean'\n      },\n      'aria-multiselectable': {\n        type: 'boolean'\n      },\n      'aria-orientation': {\n        type: 'nmtoken',\n        values: [ 'horizontal', 'undefined', 'vertical' ]\n      },\n      'aria-owns': {\n        type: 'idrefs',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-placeholder': {\n        type: 'string',\n        allowEmpty: true\n      },\n      'aria-posinset': {\n        type: 'int',\n        minValue: 1\n      },\n      'aria-pressed': {\n        type: 'nmtoken',\n        values: [ 'false', 'mixed', 'true', 'undefined' ]\n      },\n      'aria-readonly': {\n        type: 'boolean'\n      },\n      'aria-relevant': {\n        type: 'nmtokens',\n        values: [ 'additions', 'all', 'removals', 'text' ],\n        global: true\n      },\n      'aria-required': {\n        type: 'boolean'\n      },\n      'aria-roledescription': {\n        type: 'string',\n        allowEmpty: true,\n        global: true\n      },\n      'aria-rowcount': {\n        type: 'int',\n        minValue: -1\n      },\n      'aria-rowindex': {\n        type: 'int',\n        minValue: 1\n      },\n      'aria-rowspan': {\n        type: 'int',\n        minValue: 0\n      },\n      'aria-selected': {\n        type: 'nmtoken',\n        values: [ 'false', 'true', 'undefined' ]\n      },\n      'aria-setsize': {\n        type: 'int',\n        minValue: -1\n      },\n      'aria-sort': {\n        type: 'nmtoken',\n        values: [ 'ascending', 'descending', 'none', 'other' ]\n      },\n      'aria-valuemax': {\n        type: 'decimal'\n      },\n      'aria-valuemin': {\n        type: 'decimal'\n      },\n      'aria-valuenow': {\n        type: 'decimal'\n      },\n      'aria-valuetext': {\n        type: 'string'\n      }\n    };\n    var aria_attrs_default = ariaAttrs;\n    var ariaRoles = {\n      alert: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      alertdialog: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded', 'aria-modal' ],\n        superclassRole: [ 'alert', 'dialog' ],\n        accessibleNameRequired: true\n      },\n      application: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-activedescendant', 'aria-expanded' ],\n        superclassRole: [ 'structure' ],\n        accessibleNameRequired: true\n      },\n      article: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-posinset', 'aria-setsize', 'aria-expanded' ],\n        superclassRole: [ 'document' ]\n      },\n      banner: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      blockquote: {\n        type: 'structure',\n        superclassRole: [ 'section' ]\n      },\n      button: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded', 'aria-pressed' ],\n        superclassRole: [ 'command' ],\n        accessibleNameRequired: true,\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      caption: {\n        type: 'structure',\n        requiredContext: [ 'figure', 'table', 'grid', 'treegrid' ],\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      cell: {\n        type: 'structure',\n        requiredContext: [ 'row' ],\n        allowedAttrs: [ 'aria-colindex', 'aria-colspan', 'aria-rowindex', 'aria-rowspan', 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        nameFromContent: true\n      },\n      checkbox: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-checked', 'aria-readonly', 'aria-required' ],\n        superclassRole: [ 'input' ],\n        accessibleNameRequired: true,\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      code: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      columnheader: {\n        type: 'structure',\n        requiredContext: [ 'row' ],\n        allowedAttrs: [ 'aria-sort', 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-readonly', 'aria-required', 'aria-rowindex', 'aria-rowspan', 'aria-selected' ],\n        superclassRole: [ 'cell', 'gridcell', 'sectionhead' ],\n        accessibleNameRequired: false,\n        nameFromContent: true\n      },\n      combobox: {\n        type: 'composite',\n        requiredOwned: [ 'listbox', 'tree', 'grid', 'dialog', 'textbox' ],\n        requiredAttrs: [ 'aria-expanded' ],\n        allowedAttrs: [ 'aria-controls', 'aria-autocomplete', 'aria-readonly', 'aria-required', 'aria-activedescendant', 'aria-orientation' ],\n        superclassRole: [ 'select' ],\n        accessibleNameRequired: true\n      },\n      command: {\n        type: 'abstract',\n        superclassRole: [ 'widget' ]\n      },\n      complementary: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      composite: {\n        type: 'abstract',\n        superclassRole: [ 'widget' ]\n      },\n      contentinfo: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      definition: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      deletion: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      dialog: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded', 'aria-modal' ],\n        superclassRole: [ 'window' ],\n        accessibleNameRequired: true\n      },\n      directory: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'list' ],\n        nameFromContent: true\n      },\n      document: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'structure' ]\n      },\n      emphasis: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      feed: {\n        type: 'structure',\n        requiredOwned: [ 'article' ],\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'list' ]\n      },\n      figure: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        nameFromContent: true\n      },\n      form: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      grid: {\n        type: 'composite',\n        requiredOwned: [ 'rowgroup', 'row' ],\n        allowedAttrs: [ 'aria-level', 'aria-multiselectable', 'aria-readonly', 'aria-activedescendant', 'aria-colcount', 'aria-expanded', 'aria-rowcount' ],\n        superclassRole: [ 'composite', 'table' ],\n        accessibleNameRequired: false\n      },\n      gridcell: {\n        type: 'widget',\n        requiredContext: [ 'row' ],\n        allowedAttrs: [ 'aria-readonly', 'aria-required', 'aria-selected', 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-rowindex', 'aria-rowspan' ],\n        superclassRole: [ 'cell', 'widget' ],\n        nameFromContent: true\n      },\n      group: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-activedescendant', 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      heading: {\n        type: 'structure',\n        requiredAttrs: [ 'aria-level' ],\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'sectionhead' ],\n        accessibleNameRequired: false,\n        nameFromContent: true\n      },\n      img: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        accessibleNameRequired: true,\n        childrenPresentational: true\n      },\n      input: {\n        type: 'abstract',\n        superclassRole: [ 'widget' ]\n      },\n      insertion: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      landmark: {\n        type: 'abstract',\n        superclassRole: [ 'section' ]\n      },\n      link: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'command' ],\n        accessibleNameRequired: true,\n        nameFromContent: true\n      },\n      list: {\n        type: 'structure',\n        requiredOwned: [ 'group', 'listitem' ],\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      listbox: {\n        type: 'composite',\n        requiredOwned: [ 'option' ],\n        allowedAttrs: [ 'aria-multiselectable', 'aria-readonly', 'aria-required', 'aria-activedescendant', 'aria-expanded', 'aria-orientation' ],\n        superclassRole: [ 'select' ],\n        accessibleNameRequired: true\n      },\n      listitem: {\n        type: 'structure',\n        requiredContext: [ 'list', 'group' ],\n        allowedAttrs: [ 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        nameFromContent: true\n      },\n      log: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      main: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      marquee: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      math: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        childrenPresentational: true\n      },\n      menu: {\n        type: 'composite',\n        requiredOwned: [ 'group', 'menuitemradio', 'menuitem', 'menuitemcheckbox' ],\n        allowedAttrs: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation' ],\n        superclassRole: [ 'select' ]\n      },\n      menubar: {\n        type: 'composite',\n        requiredOwned: [ 'group', 'menuitemradio', 'menuitem', 'menuitemcheckbox' ],\n        allowedAttrs: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation' ],\n        superclassRole: [ 'menu' ]\n      },\n      menuitem: {\n        type: 'widget',\n        requiredContext: [ 'menu', 'menubar', 'group' ],\n        allowedAttrs: [ 'aria-posinset', 'aria-setsize', 'aria-expanded' ],\n        superclassRole: [ 'command' ],\n        accessibleNameRequired: true,\n        nameFromContent: true\n      },\n      menuitemcheckbox: {\n        type: 'widget',\n        requiredContext: [ 'menu', 'menubar', 'group' ],\n        allowedAttrs: [ 'aria-checked', 'aria-posinset', 'aria-readonly', 'aria-setsize' ],\n        superclassRole: [ 'checkbox', 'menuitem' ],\n        accessibleNameRequired: true,\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      menuitemradio: {\n        type: 'widget',\n        requiredContext: [ 'menu', 'menubar', 'group' ],\n        allowedAttrs: [ 'aria-checked', 'aria-posinset', 'aria-readonly', 'aria-setsize' ],\n        superclassRole: [ 'menuitemcheckbox', 'radio' ],\n        accessibleNameRequired: true,\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      meter: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-valuetext' ],\n        requiredAttrs: [ 'aria-valuemax', 'aria-valuemin', 'aria-valuenow' ],\n        superclassRole: [ 'range' ],\n        accessibleNameRequired: true,\n        childrenPresentational: true\n      },\n      navigation: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      none: {\n        type: 'structure',\n        superclassRole: [ 'structure' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      note: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      option: {\n        type: 'widget',\n        requiredContext: [ 'listbox' ],\n        allowedAttrs: [ 'aria-selected', 'aria-checked', 'aria-posinset', 'aria-setsize' ],\n        superclassRole: [ 'input' ],\n        accessibleNameRequired: true,\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      paragraph: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      presentation: {\n        type: 'structure',\n        superclassRole: [ 'structure' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      progressbar: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded', 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-valuetext' ],\n        superclassRole: [ 'range' ],\n        accessibleNameRequired: true,\n        childrenPresentational: true\n      },\n      radio: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-checked', 'aria-posinset', 'aria-setsize', 'aria-required' ],\n        superclassRole: [ 'input' ],\n        accessibleNameRequired: true,\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      radiogroup: {\n        type: 'composite',\n        requiredOwned: [ 'radio' ],\n        allowedAttrs: [ 'aria-readonly', 'aria-required', 'aria-activedescendant', 'aria-expanded', 'aria-orientation' ],\n        superclassRole: [ 'select' ],\n        accessibleNameRequired: false\n      },\n      range: {\n        type: 'abstract',\n        superclassRole: [ 'widget' ]\n      },\n      region: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ],\n        accessibleNameRequired: false\n      },\n      roletype: {\n        type: 'abstract',\n        superclassRole: []\n      },\n      row: {\n        type: 'structure',\n        requiredContext: [ 'grid', 'rowgroup', 'table', 'treegrid' ],\n        requiredOwned: [ 'cell', 'columnheader', 'gridcell', 'rowheader' ],\n        allowedAttrs: [ 'aria-colindex', 'aria-level', 'aria-rowindex', 'aria-selected', 'aria-activedescendant', 'aria-expanded' ],\n        superclassRole: [ 'group', 'widget' ],\n        nameFromContent: true\n      },\n      rowgroup: {\n        type: 'structure',\n        requiredContext: [ 'grid', 'table', 'treegrid' ],\n        requiredOwned: [ 'row' ],\n        superclassRole: [ 'structure' ],\n        nameFromContent: true\n      },\n      rowheader: {\n        type: 'structure',\n        requiredContext: [ 'row' ],\n        allowedAttrs: [ 'aria-sort', 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-readonly', 'aria-required', 'aria-rowindex', 'aria-rowspan', 'aria-selected' ],\n        superclassRole: [ 'cell', 'gridcell', 'sectionhead' ],\n        accessibleNameRequired: false,\n        nameFromContent: true\n      },\n      scrollbar: {\n        type: 'widget',\n        requiredAttrs: [ 'aria-valuenow' ],\n        allowedAttrs: [ 'aria-controls', 'aria-orientation', 'aria-valuemax', 'aria-valuemin', 'aria-valuetext' ],\n        superclassRole: [ 'range' ],\n        childrenPresentational: true\n      },\n      search: {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      searchbox: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-placeholder', 'aria-readonly', 'aria-required' ],\n        superclassRole: [ 'textbox' ],\n        accessibleNameRequired: true\n      },\n      section: {\n        type: 'abstract',\n        superclassRole: [ 'structure' ],\n        nameFromContent: true\n      },\n      sectionhead: {\n        type: 'abstract',\n        superclassRole: [ 'structure' ],\n        nameFromContent: true\n      },\n      select: {\n        type: 'abstract',\n        superclassRole: [ 'composite', 'group' ]\n      },\n      separator: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-valuemax', 'aria-valuemin', 'aria-valuenow', 'aria-orientation', 'aria-valuetext' ],\n        superclassRole: [ 'structure', 'widget' ],\n        childrenPresentational: true\n      },\n      slider: {\n        type: 'widget',\n        requiredAttrs: [ 'aria-valuenow' ],\n        allowedAttrs: [ 'aria-valuemax', 'aria-valuemin', 'aria-orientation', 'aria-readonly', 'aria-valuetext' ],\n        superclassRole: [ 'input', 'range' ],\n        accessibleNameRequired: true,\n        childrenPresentational: true\n      },\n      spinbutton: {\n        type: 'widget',\n        requiredAttrs: [ 'aria-valuenow' ],\n        allowedAttrs: [ 'aria-valuemax', 'aria-valuemin', 'aria-readonly', 'aria-required', 'aria-activedescendant', 'aria-valuetext' ],\n        superclassRole: [ 'composite', 'input', 'range' ],\n        accessibleNameRequired: true\n      },\n      status: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      strong: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      structure: {\n        type: 'abstract',\n        superclassRole: [ 'roletype' ]\n      },\n      subscript: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      superscript: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        prohibitedAttrs: [ 'aria-label', 'aria-labelledby' ]\n      },\n      switch: {\n        type: 'widget',\n        requiredAttrs: [ 'aria-checked' ],\n        allowedAttrs: [ 'aria-readonly' ],\n        superclassRole: [ 'checkbox' ],\n        accessibleNameRequired: true,\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      tab: {\n        type: 'widget',\n        requiredContext: [ 'tablist' ],\n        allowedAttrs: [ 'aria-posinset', 'aria-selected', 'aria-setsize', 'aria-expanded' ],\n        superclassRole: [ 'sectionhead', 'widget' ],\n        nameFromContent: true,\n        childrenPresentational: true\n      },\n      table: {\n        type: 'structure',\n        requiredOwned: [ 'rowgroup', 'row' ],\n        allowedAttrs: [ 'aria-colcount', 'aria-rowcount', 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        accessibleNameRequired: false,\n        nameFromContent: true\n      },\n      tablist: {\n        type: 'composite',\n        requiredOwned: [ 'tab' ],\n        allowedAttrs: [ 'aria-level', 'aria-multiselectable', 'aria-orientation', 'aria-activedescendant', 'aria-expanded' ],\n        superclassRole: [ 'composite' ]\n      },\n      tabpanel: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        accessibleNameRequired: false\n      },\n      term: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        nameFromContent: true\n      },\n      text: {\n        type: 'structure',\n        superclassRole: [ 'section' ],\n        nameFromContent: true\n      },\n      textbox: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-placeholder', 'aria-readonly', 'aria-required' ],\n        superclassRole: [ 'input' ],\n        accessibleNameRequired: true\n      },\n      time: {\n        type: 'structure',\n        superclassRole: [ 'section' ]\n      },\n      timer: {\n        type: 'widget',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'status' ]\n      },\n      toolbar: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-orientation', 'aria-activedescendant', 'aria-expanded' ],\n        superclassRole: [ 'group' ],\n        accessibleNameRequired: true\n      },\n      tooltip: {\n        type: 'structure',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ],\n        nameFromContent: true\n      },\n      tree: {\n        type: 'composite',\n        requiredOwned: [ 'group', 'treeitem' ],\n        allowedAttrs: [ 'aria-multiselectable', 'aria-required', 'aria-activedescendant', 'aria-expanded', 'aria-orientation' ],\n        superclassRole: [ 'select' ],\n        accessibleNameRequired: false\n      },\n      treegrid: {\n        type: 'composite',\n        requiredOwned: [ 'rowgroup', 'row' ],\n        allowedAttrs: [ 'aria-activedescendant', 'aria-colcount', 'aria-expanded', 'aria-level', 'aria-multiselectable', 'aria-orientation', 'aria-readonly', 'aria-required', 'aria-rowcount' ],\n        superclassRole: [ 'grid', 'tree' ],\n        accessibleNameRequired: false\n      },\n      treeitem: {\n        type: 'widget',\n        requiredContext: [ 'group', 'tree' ],\n        allowedAttrs: [ 'aria-checked', 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-selected', 'aria-setsize' ],\n        superclassRole: [ 'listitem', 'option' ],\n        accessibleNameRequired: true,\n        nameFromContent: true\n      },\n      widget: {\n        type: 'abstract',\n        superclassRole: [ 'roletype' ]\n      },\n      window: {\n        type: 'abstract',\n        superclassRole: [ 'roletype' ]\n      }\n    };\n    var aria_roles_default = ariaRoles;\n    var dpubRoles = {\n      'doc-abstract': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-acknowledgments': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-afterword': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-appendix': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-backlink': {\n        type: 'link',\n        allowedAttrs: [ 'aria-expanded' ],\n        nameFromContent: true,\n        superclassRole: [ 'link' ]\n      },\n      'doc-biblioentry': {\n        type: 'listitem',\n        requiredContext: [ 'doc-bibliography' ],\n        allowedAttrs: [ 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize' ],\n        superclassRole: [ 'listitem' ]\n      },\n      'doc-bibliography': {\n        type: 'landmark',\n        requiredOwned: [ 'doc-biblioentry' ],\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-biblioref': {\n        type: 'link',\n        allowedAttrs: [ 'aria-expanded' ],\n        nameFromContent: true,\n        superclassRole: [ 'link' ]\n      },\n      'doc-chapter': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-colophon': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-conclusion': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-cover': {\n        type: 'img',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'img' ]\n      },\n      'doc-credit': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-credits': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-dedication': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-endnote': {\n        type: 'listitem',\n        requiredContext: [ 'doc-endnotes' ],\n        allowedAttrs: [ 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize' ],\n        superclassRole: [ 'listitem' ]\n      },\n      'doc-endnotes': {\n        type: 'landmark',\n        requiredOwned: [ 'doc-endnote' ],\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-epigraph': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-epilogue': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-errata': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-example': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-footnote': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-foreword': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-glossary': {\n        type: 'landmark',\n        requiredOwned: [ 'definition', 'term' ],\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-glossref': {\n        type: 'link',\n        allowedAttrs: [ 'aria-expanded' ],\n        nameFromContent: true,\n        superclassRole: [ 'link' ]\n      },\n      'doc-index': {\n        type: 'navigation',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'navigation' ]\n      },\n      'doc-introduction': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-noteref': {\n        type: 'link',\n        allowedAttrs: [ 'aria-expanded' ],\n        nameFromContent: true,\n        superclassRole: [ 'link' ]\n      },\n      'doc-notice': {\n        type: 'note',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'note' ]\n      },\n      'doc-pagebreak': {\n        type: 'separator',\n        allowedAttrs: [ 'aria-expanded', 'aria-orientation' ],\n        superclassRole: [ 'separator' ],\n        childrenPresentational: true\n      },\n      'doc-pagelist': {\n        type: 'navigation',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'navigation' ]\n      },\n      'doc-part': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-preface': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-prologue': {\n        type: 'landmark',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'landmark' ]\n      },\n      'doc-pullquote': {\n        type: 'none',\n        superclassRole: [ 'none' ]\n      },\n      'doc-qna': {\n        type: 'section',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'section' ]\n      },\n      'doc-subtitle': {\n        type: 'sectionhead',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'sectionhead' ]\n      },\n      'doc-tip': {\n        type: 'note',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'note' ]\n      },\n      'doc-toc': {\n        type: 'navigation',\n        allowedAttrs: [ 'aria-expanded' ],\n        superclassRole: [ 'navigation' ]\n      }\n    };\n    var dpub_roles_default = dpubRoles;\n    var graphicsRoles = {\n      'graphics-document': {\n        type: 'structure',\n        superclassRole: [ 'document' ],\n        accessibleNameRequired: true\n      },\n      'graphics-object': {\n        type: 'structure',\n        superclassRole: [ 'group' ],\n        nameFromContent: true\n      },\n      'graphics-symbol': {\n        type: 'structure',\n        superclassRole: [ 'img' ],\n        accessibleNameRequired: true,\n        childrenPresentational: true\n      }\n    };\n    var graphics_roles_default = graphicsRoles;\n    var htmlElms = {\n      a: {\n        variant: {\n          href: {\n            matches: '[href]',\n            contentTypes: [ 'interactive', 'phrasing', 'flow' ],\n            allowedRoles: [ 'button', 'checkbox', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'switch', 'tab', 'treeitem', 'doc-backlink', 'doc-biblioref', 'doc-glossref', 'doc-noteref' ],\n            namingMethods: [ 'subtreeText' ]\n          },\n          default: {\n            contentTypes: [ 'phrasing', 'flow' ],\n            allowedRoles: true\n          }\n        }\n      },\n      abbr: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      addres: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: true\n      },\n      area: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        namingMethods: [ 'altText' ]\n      },\n      article: {\n        contentTypes: [ 'sectioning', 'flow' ],\n        allowedRoles: [ 'feed', 'presentation', 'none', 'document', 'application', 'main', 'region' ],\n        shadowRoot: true\n      },\n      aside: {\n        contentTypes: [ 'sectioning', 'flow' ],\n        allowedRoles: [ 'feed', 'note', 'presentation', 'none', 'region', 'search', 'doc-dedication', 'doc-example', 'doc-footnote', 'doc-pullquote', 'doc-tip' ]\n      },\n      audio: {\n        variant: {\n          controls: {\n            matches: '[controls]',\n            contentTypes: [ 'interactive', 'embedded', 'phrasing', 'flow' ]\n          },\n          default: {\n            contentTypes: [ 'embedded', 'phrasing', 'flow' ]\n          }\n        },\n        allowedRoles: [ 'application' ]\n      },\n      b: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false\n      },\n      base: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      bdi: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      bdo: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      blockquote: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: true,\n        shadowRoot: true\n      },\n      body: {\n        allowedRoles: false,\n        shadowRoot: true\n      },\n      br: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: [ 'presentation', 'none' ],\n        namingMethods: [ 'titleText', 'singleSpace' ]\n      },\n      button: {\n        contentTypes: [ 'interactive', 'phrasing', 'flow' ],\n        allowedRoles: [ 'checkbox', 'link', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'switch', 'tab' ],\n        namingMethods: [ 'subtreeText' ]\n      },\n      canvas: {\n        allowedRoles: true,\n        contentTypes: [ 'embedded', 'phrasing', 'flow' ]\n      },\n      caption: {\n        allowedRoles: false\n      },\n      cite: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      code: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      col: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      colgroup: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      data: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      datalist: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        implicitAttrs: {\n          'aria-multiselectable': 'false'\n        }\n      },\n      dd: {\n        allowedRoles: false\n      },\n      del: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      dfn: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      details: {\n        contentTypes: [ 'interactive', 'flow' ],\n        allowedRoles: false\n      },\n      dialog: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'alertdialog' ]\n      },\n      div: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: true,\n        shadowRoot: true\n      },\n      dl: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'group', 'list', 'presentation', 'none' ]\n      },\n      dt: {\n        allowedRoles: [ 'listitem' ]\n      },\n      em: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      embed: {\n        contentTypes: [ 'interactive', 'embedded', 'phrasing', 'flow' ],\n        allowedRoles: [ 'application', 'document', 'img', 'presentation', 'none' ]\n      },\n      fieldset: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'radiogroup' ],\n        namingMethods: [ 'fieldsetLegendText' ]\n      },\n      figcaption: {\n        allowedRoles: [ 'group', 'none', 'presentation' ]\n      },\n      figure: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: true,\n        namingMethods: [ 'figureText', 'titleText' ]\n      },\n      footer: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'group', 'none', 'presentation', 'doc-footnote' ],\n        shadowRoot: true\n      },\n      form: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'search', 'none', 'presentation' ]\n      },\n      h1: {\n        contentTypes: [ 'heading', 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'tab', 'doc-subtitle' ],\n        shadowRoot: true,\n        implicitAttrs: {\n          'aria-level': '1'\n        }\n      },\n      h2: {\n        contentTypes: [ 'heading', 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'tab', 'doc-subtitle' ],\n        shadowRoot: true,\n        implicitAttrs: {\n          'aria-level': '2'\n        }\n      },\n      h3: {\n        contentTypes: [ 'heading', 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'tab', 'doc-subtitle' ],\n        shadowRoot: true,\n        implicitAttrs: {\n          'aria-level': '3'\n        }\n      },\n      h4: {\n        contentTypes: [ 'heading', 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'tab', 'doc-subtitle' ],\n        shadowRoot: true,\n        implicitAttrs: {\n          'aria-level': '4'\n        }\n      },\n      h5: {\n        contentTypes: [ 'heading', 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'tab', 'doc-subtitle' ],\n        shadowRoot: true,\n        implicitAttrs: {\n          'aria-level': '5'\n        }\n      },\n      h6: {\n        contentTypes: [ 'heading', 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'tab', 'doc-subtitle' ],\n        shadowRoot: true,\n        implicitAttrs: {\n          'aria-level': '6'\n        }\n      },\n      head: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      header: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'group', 'none', 'presentation', 'doc-footnote' ],\n        shadowRoot: true\n      },\n      hgroup: {\n        contentTypes: [ 'heading', 'flow' ],\n        allowedRoles: true\n      },\n      hr: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'none', 'presentation', 'doc-pagebreak' ],\n        namingMethods: [ 'titleText', 'singleSpace' ]\n      },\n      html: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      i: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      iframe: {\n        contentTypes: [ 'interactive', 'embedded', 'phrasing', 'flow' ],\n        allowedRoles: [ 'application', 'document', 'img', 'none', 'presentation' ]\n      },\n      img: {\n        variant: {\n          nonEmptyAlt: {\n            matches: {\n              attributes: {\n                alt: '/.+/'\n              }\n            },\n            allowedRoles: [ 'button', 'checkbox', 'link', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'scrollbar', 'separator', 'slider', 'switch', 'tab', 'treeitem', 'doc-cover' ]\n          },\n          usemap: {\n            matches: '[usemap]',\n            contentTypes: [ 'interactive', 'embedded', 'phrasing', 'flow' ]\n          },\n          default: {\n            allowedRoles: [ 'presentation', 'none' ],\n            contentTypes: [ 'embedded', 'phrasing', 'flow' ]\n          }\n        },\n        namingMethods: [ 'altText' ]\n      },\n      input: {\n        variant: {\n          button: {\n            matches: {\n              properties: {\n                type: 'button'\n              }\n            },\n            allowedRoles: [ 'link', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio', 'switch', 'tab' ]\n          },\n          buttonType: {\n            matches: {\n              properties: {\n                type: [ 'button', 'submit', 'reset' ]\n              }\n            },\n            namingMethods: [ 'valueText', 'titleText', 'buttonDefaultText' ]\n          },\n          checkboxPressed: {\n            matches: {\n              properties: {\n                type: 'checkbox'\n              },\n              attributes: {\n                'aria-pressed': '/.*/'\n              }\n            },\n            allowedRoles: [ 'button', 'menuitemcheckbox', 'option', 'switch' ],\n            implicitAttrs: {\n              'aria-checked': 'false'\n            }\n          },\n          checkbox: {\n            matches: {\n              properties: {\n                type: 'checkbox'\n              },\n              attributes: {\n                'aria-pressed': null\n              }\n            },\n            allowedRoles: [ 'menuitemcheckbox', 'option', 'switch' ],\n            implicitAttrs: {\n              'aria-checked': 'false'\n            }\n          },\n          noRoles: {\n            matches: {\n              properties: {\n                type: [ 'color', 'date', 'datetime-local', 'file', 'month', 'number', 'password', 'range', 'reset', 'submit', 'time', 'week' ]\n              }\n            },\n            allowedRoles: false\n          },\n          hidden: {\n            matches: {\n              properties: {\n                type: 'hidden'\n              }\n            },\n            contentTypes: [ 'flow' ],\n            allowedRoles: false,\n            noAriaAttrs: true\n          },\n          image: {\n            matches: {\n              properties: {\n                type: 'image'\n              }\n            },\n            allowedRoles: [ 'link', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'radio', 'switch' ],\n            namingMethods: [ 'altText', 'valueText', 'labelText', 'titleText', 'buttonDefaultText' ]\n          },\n          radio: {\n            matches: {\n              properties: {\n                type: 'radio'\n              }\n            },\n            allowedRoles: [ 'menuitemradio' ],\n            implicitAttrs: {\n              'aria-checked': 'false'\n            }\n          },\n          textWithList: {\n            matches: {\n              properties: {\n                type: 'text'\n              },\n              attributes: {\n                list: '/.*/'\n              }\n            },\n            allowedRoles: false\n          },\n          default: {\n            contentTypes: [ 'interactive', 'flow' ],\n            allowedRoles: [ 'combobox', 'searchbox', 'spinbutton' ],\n            implicitAttrs: {\n              'aria-valuenow': ''\n            },\n            namingMethods: [ 'labelText', 'placeholderText' ]\n          }\n        }\n      },\n      ins: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      kbd: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      label: {\n        contentTypes: [ 'interactive', 'phrasing', 'flow' ],\n        allowedRoles: false\n      },\n      legend: {\n        allowedRoles: false\n      },\n      li: {\n        allowedRoles: [ 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'none', 'presentation', 'radio', 'separator', 'tab', 'treeitem', 'doc-biblioentry', 'doc-endnote' ],\n        implicitAttrs: {\n          'aria-setsize': '1',\n          'aria-posinset': '1'\n        }\n      },\n      link: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      main: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: false,\n        shadowRoot: true\n      },\n      map: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      math: {\n        contentTypes: [ 'embedded', 'phrasing', 'flow' ],\n        allowedRoles: false\n      },\n      mark: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      menu: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'directory', 'group', 'listbox', 'menu', 'menubar', 'none', 'presentation', 'radiogroup', 'tablist', 'toolbar', 'tree' ]\n      },\n      meta: {\n        variant: {\n          itemprop: {\n            matches: '[itemprop]',\n            contentTypes: [ 'phrasing', 'flow' ]\n          }\n        },\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      meter: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false\n      },\n      nav: {\n        contentTypes: [ 'sectioning', 'flow' ],\n        allowedRoles: [ 'doc-index', 'doc-pagelist', 'doc-toc' ],\n        shadowRoot: true\n      },\n      noscript: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      object: {\n        variant: {\n          usemap: {\n            matches: '[usemap]',\n            contentTypes: [ 'interactive', 'embedded', 'phrasing', 'flow' ]\n          },\n          default: {\n            contentTypes: [ 'embedded', 'phrasing', 'flow' ]\n          }\n        },\n        allowedRoles: [ 'application', 'document', 'img' ]\n      },\n      ol: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'directory', 'group', 'listbox', 'menu', 'menubar', 'none', 'presentation', 'radiogroup', 'tablist', 'toolbar', 'tree' ]\n      },\n      optgroup: {\n        allowedRoles: false\n      },\n      option: {\n        allowedRoles: false,\n        implicitAttrs: {\n          'aria-selected': 'false'\n        }\n      },\n      output: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true,\n        namingMethods: [ 'subtreeText' ]\n      },\n      p: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: true,\n        shadowRoot: true\n      },\n      param: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      picture: {\n        contentTypes: [ 'embedded', 'phrasing', 'flow' ],\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      pre: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: true\n      },\n      progress: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true,\n        implicitAttrs: {\n          'aria-valuemax': '100',\n          'aria-valuemin': '0',\n          'aria-valuenow': '0'\n        }\n      },\n      q: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      rp: {\n        allowedRoles: true\n      },\n      rt: {\n        allowedRoles: true\n      },\n      ruby: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      s: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      samp: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      script: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      section: {\n        contentTypes: [ 'sectioning', 'flow' ],\n        allowedRoles: [ 'alert', 'alertdialog', 'application', 'banner', 'complementary', 'contentinfo', 'dialog', 'document', 'feed', 'log', 'main', 'marquee', 'navigation', 'none', 'note', 'presentation', 'search', 'status', 'tabpanel', 'doc-abstract', 'doc-acknowledgments', 'doc-afterword', 'doc-appendix', 'doc-bibliography', 'doc-chapter', 'doc-colophon', 'doc-conclusion', 'doc-credit', 'doc-credits', 'doc-dedication', 'doc-endnotes', 'doc-epigraph', 'doc-epilogue', 'doc-errata', 'doc-example', 'doc-foreword', 'doc-glossary', 'doc-index', 'doc-introduction', 'doc-notice', 'doc-pagelist', 'doc-part', 'doc-preface', 'doc-prologue', 'doc-pullquote', 'doc-qna', 'doc-toc' ],\n        shadowRoot: true\n      },\n      select: {\n        variant: {\n          combobox: {\n            matches: {\n              attributes: {\n                multiple: null,\n                size: [ null, '1' ]\n              }\n            },\n            allowedRoles: [ 'menu' ]\n          },\n          default: {\n            allowedRoles: false\n          }\n        },\n        contentTypes: [ 'interactive', 'phrasing', 'flow' ],\n        implicitAttrs: {\n          'aria-valuenow': ''\n        },\n        namingMethods: [ 'labelText' ]\n      },\n      slot: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      small: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      source: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      span: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true,\n        shadowRoot: true\n      },\n      strong: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      style: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      svg: {\n        contentTypes: [ 'embedded', 'phrasing', 'flow' ],\n        allowedRoles: [ 'application', 'document', 'img' ],\n        namingMethods: [ 'svgTitleText' ]\n      },\n      sub: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      summary: {\n        allowedRoles: false,\n        namingMethods: [ 'subtreeText' ]\n      },\n      sup: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      table: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: true,\n        namingMethods: [ 'tableCaptionText', 'tableSummaryText' ]\n      },\n      tbody: {\n        allowedRoles: true\n      },\n      template: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      textarea: {\n        contentTypes: [ 'interactive', 'phrasing', 'flow' ],\n        allowedRoles: false,\n        implicitAttrs: {\n          'aria-valuenow': '',\n          'aria-multiline': 'true'\n        },\n        namingMethods: [ 'labelText', 'placeholderText' ]\n      },\n      tfoot: {\n        allowedRoles: true\n      },\n      thead: {\n        allowedRoles: true\n      },\n      time: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      title: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      td: {\n        allowedRoles: true\n      },\n      th: {\n        allowedRoles: true\n      },\n      tr: {\n        allowedRoles: true\n      },\n      track: {\n        allowedRoles: false,\n        noAriaAttrs: true\n      },\n      u: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      ul: {\n        contentTypes: [ 'flow' ],\n        allowedRoles: [ 'directory', 'group', 'listbox', 'menu', 'menubar', 'none', 'presentation', 'radiogroup', 'tablist', 'toolbar', 'tree' ]\n      },\n      var: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      },\n      video: {\n        variant: {\n          controls: {\n            matches: '[controls]',\n            contentTypes: [ 'interactive', 'embedded', 'phrasing', 'flow' ]\n          },\n          default: {\n            contentTypes: [ 'embedded', 'phrasing', 'flow' ]\n          }\n        },\n        allowedRoles: [ 'application' ]\n      },\n      wbr: {\n        contentTypes: [ 'phrasing', 'flow' ],\n        allowedRoles: true\n      }\n    };\n    var html_elms_default = htmlElms;\n    var cssColors = {\n      aliceblue: [ 240, 248, 255 ],\n      antiquewhite: [ 250, 235, 215 ],\n      aqua: [ 0, 255, 255 ],\n      aquamarine: [ 127, 255, 212 ],\n      azure: [ 240, 255, 255 ],\n      beige: [ 245, 245, 220 ],\n      bisque: [ 255, 228, 196 ],\n      black: [ 0, 0, 0 ],\n      blanchedalmond: [ 255, 235, 205 ],\n      blue: [ 0, 0, 255 ],\n      blueviolet: [ 138, 43, 226 ],\n      brown: [ 165, 42, 42 ],\n      burlywood: [ 222, 184, 135 ],\n      cadetblue: [ 95, 158, 160 ],\n      chartreuse: [ 127, 255, 0 ],\n      chocolate: [ 210, 105, 30 ],\n      coral: [ 255, 127, 80 ],\n      cornflowerblue: [ 100, 149, 237 ],\n      cornsilk: [ 255, 248, 220 ],\n      crimson: [ 220, 20, 60 ],\n      cyan: [ 0, 255, 255 ],\n      darkblue: [ 0, 0, 139 ],\n      darkcyan: [ 0, 139, 139 ],\n      darkgoldenrod: [ 184, 134, 11 ],\n      darkgray: [ 169, 169, 169 ],\n      darkgreen: [ 0, 100, 0 ],\n      darkgrey: [ 169, 169, 169 ],\n      darkkhaki: [ 189, 183, 107 ],\n      darkmagenta: [ 139, 0, 139 ],\n      darkolivegreen: [ 85, 107, 47 ],\n      darkorange: [ 255, 140, 0 ],\n      darkorchid: [ 153, 50, 204 ],\n      darkred: [ 139, 0, 0 ],\n      darksalmon: [ 233, 150, 122 ],\n      darkseagreen: [ 143, 188, 143 ],\n      darkslateblue: [ 72, 61, 139 ],\n      darkslategray: [ 47, 79, 79 ],\n      darkslategrey: [ 47, 79, 79 ],\n      darkturquoise: [ 0, 206, 209 ],\n      darkviolet: [ 148, 0, 211 ],\n      deeppink: [ 255, 20, 147 ],\n      deepskyblue: [ 0, 191, 255 ],\n      dimgray: [ 105, 105, 105 ],\n      dimgrey: [ 105, 105, 105 ],\n      dodgerblue: [ 30, 144, 255 ],\n      firebrick: [ 178, 34, 34 ],\n      floralwhite: [ 255, 250, 240 ],\n      forestgreen: [ 34, 139, 34 ],\n      fuchsia: [ 255, 0, 255 ],\n      gainsboro: [ 220, 220, 220 ],\n      ghostwhite: [ 248, 248, 255 ],\n      gold: [ 255, 215, 0 ],\n      goldenrod: [ 218, 165, 32 ],\n      gray: [ 128, 128, 128 ],\n      green: [ 0, 128, 0 ],\n      greenyellow: [ 173, 255, 47 ],\n      grey: [ 128, 128, 128 ],\n      honeydew: [ 240, 255, 240 ],\n      hotpink: [ 255, 105, 180 ],\n      indianred: [ 205, 92, 92 ],\n      indigo: [ 75, 0, 130 ],\n      ivory: [ 255, 255, 240 ],\n      khaki: [ 240, 230, 140 ],\n      lavender: [ 230, 230, 250 ],\n      lavenderblush: [ 255, 240, 245 ],\n      lawngreen: [ 124, 252, 0 ],\n      lemonchiffon: [ 255, 250, 205 ],\n      lightblue: [ 173, 216, 230 ],\n      lightcoral: [ 240, 128, 128 ],\n      lightcyan: [ 224, 255, 255 ],\n      lightgoldenrodyellow: [ 250, 250, 210 ],\n      lightgray: [ 211, 211, 211 ],\n      lightgreen: [ 144, 238, 144 ],\n      lightgrey: [ 211, 211, 211 ],\n      lightpink: [ 255, 182, 193 ],\n      lightsalmon: [ 255, 160, 122 ],\n      lightseagreen: [ 32, 178, 170 ],\n      lightskyblue: [ 135, 206, 250 ],\n      lightslategray: [ 119, 136, 153 ],\n      lightslategrey: [ 119, 136, 153 ],\n      lightsteelblue: [ 176, 196, 222 ],\n      lightyellow: [ 255, 255, 224 ],\n      lime: [ 0, 255, 0 ],\n      limegreen: [ 50, 205, 50 ],\n      linen: [ 250, 240, 230 ],\n      magenta: [ 255, 0, 255 ],\n      maroon: [ 128, 0, 0 ],\n      mediumaquamarine: [ 102, 205, 170 ],\n      mediumblue: [ 0, 0, 205 ],\n      mediumorchid: [ 186, 85, 211 ],\n      mediumpurple: [ 147, 112, 219 ],\n      mediumseagreen: [ 60, 179, 113 ],\n      mediumslateblue: [ 123, 104, 238 ],\n      mediumspringgreen: [ 0, 250, 154 ],\n      mediumturquoise: [ 72, 209, 204 ],\n      mediumvioletred: [ 199, 21, 133 ],\n      midnightblue: [ 25, 25, 112 ],\n      mintcream: [ 245, 255, 250 ],\n      mistyrose: [ 255, 228, 225 ],\n      moccasin: [ 255, 228, 181 ],\n      navajowhite: [ 255, 222, 173 ],\n      navy: [ 0, 0, 128 ],\n      oldlace: [ 253, 245, 230 ],\n      olive: [ 128, 128, 0 ],\n      olivedrab: [ 107, 142, 35 ],\n      orange: [ 255, 165, 0 ],\n      orangered: [ 255, 69, 0 ],\n      orchid: [ 218, 112, 214 ],\n      palegoldenrod: [ 238, 232, 170 ],\n      palegreen: [ 152, 251, 152 ],\n      paleturquoise: [ 175, 238, 238 ],\n      palevioletred: [ 219, 112, 147 ],\n      papayawhip: [ 255, 239, 213 ],\n      peachpuff: [ 255, 218, 185 ],\n      peru: [ 205, 133, 63 ],\n      pink: [ 255, 192, 203 ],\n      plum: [ 221, 160, 221 ],\n      powderblue: [ 176, 224, 230 ],\n      purple: [ 128, 0, 128 ],\n      rebeccapurple: [ 102, 51, 153 ],\n      red: [ 255, 0, 0 ],\n      rosybrown: [ 188, 143, 143 ],\n      royalblue: [ 65, 105, 225 ],\n      saddlebrown: [ 139, 69, 19 ],\n      salmon: [ 250, 128, 114 ],\n      sandybrown: [ 244, 164, 96 ],\n      seagreen: [ 46, 139, 87 ],\n      seashell: [ 255, 245, 238 ],\n      sienna: [ 160, 82, 45 ],\n      silver: [ 192, 192, 192 ],\n      skyblue: [ 135, 206, 235 ],\n      slateblue: [ 106, 90, 205 ],\n      slategray: [ 112, 128, 144 ],\n      slategrey: [ 112, 128, 144 ],\n      snow: [ 255, 250, 250 ],\n      springgreen: [ 0, 255, 127 ],\n      steelblue: [ 70, 130, 180 ],\n      tan: [ 210, 180, 140 ],\n      teal: [ 0, 128, 128 ],\n      thistle: [ 216, 191, 216 ],\n      tomato: [ 255, 99, 71 ],\n      turquoise: [ 64, 224, 208 ],\n      violet: [ 238, 130, 238 ],\n      wheat: [ 245, 222, 179 ],\n      white: [ 255, 255, 255 ],\n      whitesmoke: [ 245, 245, 245 ],\n      yellow: [ 255, 255, 0 ],\n      yellowgreen: [ 154, 205, 50 ]\n    };\n    var css_colors_default = cssColors;\n    var originals = {\n      ariaAttrs: aria_attrs_default,\n      ariaRoles: _extends({}, aria_roles_default, dpub_roles_default, graphics_roles_default),\n      htmlElms: html_elms_default,\n      cssColors: css_colors_default\n    };\n    var standards = _extends({}, originals);\n    function configureStandards(config) {\n      Object.keys(standards).forEach(function(propName) {\n        if (config[propName]) {\n          standards[propName] = deep_merge_default(standards[propName], config[propName]);\n        }\n      });\n    }\n    function resetStandards() {\n      Object.keys(standards).forEach(function(propName) {\n        standards[propName] = originals[propName];\n      });\n    }\n    var standards_default = standards;\n    function convertColorVal(colorFunc, value, index) {\n      if (/%$/.test(value)) {\n        if (index === 3) {\n          return parseFloat(value) / 100;\n        }\n        return parseFloat(value) * 255 / 100;\n      }\n      if (colorFunc[index] === 'h') {\n        if (/turn$/.test(value)) {\n          return parseFloat(value) * 360;\n        }\n        if (/rad$/.test(value)) {\n          return parseFloat(value) * 57.3;\n        }\n      }\n      return parseFloat(value);\n    }\n    function hslToRgb(_ref9) {\n      var _ref10 = _slicedToArray(_ref9, 4), hue = _ref10[0], saturation = _ref10[1], lightness = _ref10[2], alpha = _ref10[3];\n      saturation /= 255;\n      lightness /= 255;\n      var high = (1 - Math.abs(2 * lightness - 1)) * saturation;\n      var low = high * (1 - Math.abs(hue / 60 % 2 - 1));\n      var base = lightness - high / 2;\n      var colors;\n      if (hue < 60) {\n        colors = [ high, low, 0 ];\n      } else if (hue < 120) {\n        colors = [ low, high, 0 ];\n      } else if (hue < 180) {\n        colors = [ 0, high, low ];\n      } else if (hue < 240) {\n        colors = [ 0, low, high ];\n      } else if (hue < 300) {\n        colors = [ low, 0, high ];\n      } else {\n        colors = [ high, 0, low ];\n      }\n      return colors.map(function(color10) {\n        return Math.round((color10 + base) * 255);\n      }).concat(alpha);\n    }\n    function Color(red, green, blue, alpha) {\n      this.red = red;\n      this.green = green;\n      this.blue = blue;\n      this.alpha = alpha;\n      this.toHexString = function toHexString() {\n        var redString = Math.round(this.red).toString(16);\n        var greenString = Math.round(this.green).toString(16);\n        var blueString = Math.round(this.blue).toString(16);\n        return '#' + (this.red > 15.5 ? redString : '0' + redString) + (this.green > 15.5 ? greenString : '0' + greenString) + (this.blue > 15.5 ? blueString : '0' + blueString);\n      };\n      var hexRegex = /^#[0-9a-f]{3,8}$/i;\n      var colorFnRegex = /^((?:rgb|hsl)a?)\\s*\\(([^\\)]*)\\)/i;\n      this.parseString = function parseString(colorString) {\n        if (standards_default.cssColors[colorString] || colorString === 'transparent') {\n          var _ref11 = standards_default.cssColors[colorString] || [ 0, 0, 0 ], _ref12 = _slicedToArray(_ref11, 3), red2 = _ref12[0], green2 = _ref12[1], blue2 = _ref12[2];\n          this.red = red2;\n          this.green = green2;\n          this.blue = blue2;\n          this.alpha = colorString === 'transparent' ? 0 : 1;\n          return;\n        }\n        if (colorString.match(colorFnRegex)) {\n          this.parseColorFnString(colorString);\n          return;\n        }\n        if (colorString.match(hexRegex)) {\n          this.parseHexString(colorString);\n          return;\n        }\n        throw new Error('Unable to parse color \"'.concat(colorString, '\"'));\n      };\n      this.parseRgbString = function parseRgbString(colorString) {\n        if (colorString === 'transparent') {\n          this.red = 0;\n          this.green = 0;\n          this.blue = 0;\n          this.alpha = 0;\n          return;\n        }\n        this.parseColorFnString(colorString);\n      };\n      this.parseHexString = function parseHexString(colorString) {\n        if (!colorString.match(hexRegex) || [ 6, 8 ].includes(colorString.length)) {\n          return;\n        }\n        colorString = colorString.replace('#', '');\n        if (colorString.length < 6) {\n          var _colorString = colorString, _colorString2 = _slicedToArray(_colorString, 4), r = _colorString2[0], g = _colorString2[1], b = _colorString2[2], a = _colorString2[3];\n          colorString = r + r + g + g + b + b;\n          if (a) {\n            colorString += a + a;\n          }\n        }\n        var aRgbHex = colorString.match(/.{1,2}/g);\n        this.red = parseInt(aRgbHex[0], 16);\n        this.green = parseInt(aRgbHex[1], 16);\n        this.blue = parseInt(aRgbHex[2], 16);\n        if (aRgbHex[3]) {\n          this.alpha = parseInt(aRgbHex[3], 16) / 255;\n        } else {\n          this.alpha = 1;\n        }\n      };\n      this.parseColorFnString = function parseColorFnString(colorString) {\n        var _ref13 = colorString.match(colorFnRegex) || [], _ref14 = _slicedToArray(_ref13, 3), colorFunc = _ref14[1], colorValStr = _ref14[2];\n        if (!colorFunc || !colorValStr) {\n          return;\n        }\n        var colorVals = colorValStr.split(/\\s*[,\\/\\s]\\s*/).map(function(str) {\n          return str.replace(',', '').trim();\n        }).filter(function(str) {\n          return str !== '';\n        });\n        var colorNums = colorVals.map(function(val, index) {\n          return convertColorVal(colorFunc, val, index);\n        });\n        if (colorFunc.substr(0, 3) === 'hsl') {\n          colorNums = hslToRgb(colorNums);\n        }\n        this.red = colorNums[0];\n        this.green = colorNums[1];\n        this.blue = colorNums[2];\n        this.alpha = typeof colorNums[3] === 'number' ? colorNums[3] : 1;\n      };\n      this.getRelativeLuminance = function getRelativeLuminance() {\n        var rSRGB = this.red / 255;\n        var gSRGB = this.green / 255;\n        var bSRGB = this.blue / 255;\n        var r = rSRGB <= .03928 ? rSRGB / 12.92 : Math.pow((rSRGB + .055) / 1.055, 2.4);\n        var g = gSRGB <= .03928 ? gSRGB / 12.92 : Math.pow((gSRGB + .055) / 1.055, 2.4);\n        var b = bSRGB <= .03928 ? bSRGB / 12.92 : Math.pow((bSRGB + .055) / 1.055, 2.4);\n        return .2126 * r + .7152 * g + .0722 * b;\n      };\n    }\n    var color_default = Color;\n    function getOwnBackgroundColor(elmStyle) {\n      var bgColor = new color_default();\n      bgColor.parseString(elmStyle.getPropertyValue('background-color'));\n      if (bgColor.alpha !== 0) {\n        var opacity = elmStyle.getPropertyValue('opacity');\n        bgColor.alpha = bgColor.alpha * opacity;\n      }\n      return bgColor;\n    }\n    var get_own_background_color_default = getOwnBackgroundColor;\n    function isOpaque(node) {\n      var style = window.getComputedStyle(node);\n      return element_has_image_default(node, style) || get_own_background_color_default(style).alpha === 1;\n    }\n    var is_opaque_default = isOpaque;\n    var isInternalLinkRegex = /^\\/?#[^/!]/;\n    function isSkipLink(element) {\n      if (!isInternalLinkRegex.test(element.getAttribute('href'))) {\n        return false;\n      }\n      var firstPageLink;\n      if (typeof cache_default.get('firstPageLink') !== 'undefined') {\n        firstPageLink = cache_default.get('firstPageLink');\n      } else {\n        firstPageLink = query_selector_all_default(axe._tree, 'a:not([href^=\"#\"]):not([href^=\"/#\"]):not([href^=\"javascript\"])')[0];\n        cache_default.set('firstPageLink', firstPageLink || null);\n      }\n      if (!firstPageLink) {\n        return true;\n      }\n      return element.compareDocumentPosition(firstPageLink.actualNode) === element.DOCUMENT_POSITION_FOLLOWING;\n    }\n    var is_skip_link_default = isSkipLink;\n    function reduceToElementsBelowFloating(elements, targetNode) {\n      var floatingPositions = [ 'fixed', 'sticky' ];\n      var finalElements = [];\n      var targetFound = false;\n      for (var index = 0; index < elements.length; ++index) {\n        var currentNode = elements[index];\n        if (currentNode === targetNode) {\n          targetFound = true;\n        }\n        var style = window.getComputedStyle(currentNode);\n        if (!targetFound && floatingPositions.indexOf(style.position) !== -1) {\n          finalElements = [];\n          continue;\n        }\n        finalElements.push(currentNode);\n      }\n      return finalElements;\n    }\n    var reduce_to_elements_below_floating_default = reduceToElementsBelowFloating;\n    function getScrollAncestor(node) {\n      var vNode = get_node_from_tree_default(node);\n      var ancestor = vNode.parent;\n      while (ancestor) {\n        if (get_scroll_default(ancestor.actualNode)) {\n          return ancestor.actualNode;\n        }\n        ancestor = ancestor.parent;\n      }\n    }\n    function contains2(node, parent) {\n      var rectBound = node.getBoundingClientRect();\n      var margin = .01;\n      var rect = {\n        top: rectBound.top + margin,\n        bottom: rectBound.bottom - margin,\n        left: rectBound.left + margin,\n        right: rectBound.right - margin\n      };\n      var parentRect = parent.getBoundingClientRect();\n      var parentTop = parentRect.top;\n      var parentLeft = parentRect.left;\n      var parentScrollArea = {\n        top: parentTop - parent.scrollTop,\n        bottom: parentTop - parent.scrollTop + parent.scrollHeight,\n        left: parentLeft - parent.scrollLeft,\n        right: parentLeft - parent.scrollLeft + parent.scrollWidth\n      };\n      var style = window.getComputedStyle(parent);\n      if (style.getPropertyValue('display') === 'inline') {\n        return true;\n      }\n      if (rect.left < parentScrollArea.left && rect.left < parentRect.left || rect.top < parentScrollArea.top && rect.top < parentRect.top || rect.right > parentScrollArea.right && rect.right > parentRect.right || rect.bottom > parentScrollArea.bottom && rect.bottom > parentRect.bottom) {\n        return false;\n      }\n      if (rect.right > parentRect.right || rect.bottom > parentRect.bottom) {\n        return style.overflow === 'scroll' || style.overflow === 'auto' || style.overflow === 'hidden' || parent instanceof window.HTMLBodyElement || parent instanceof window.HTMLHtmlElement;\n      }\n      return true;\n    }\n    function visuallyContains(node, parent) {\n      var parentScrollAncestor = getScrollAncestor(parent);\n      do {\n        var nextScrollAncestor = getScrollAncestor(node);\n        if (nextScrollAncestor === parentScrollAncestor || nextScrollAncestor === parent) {\n          return contains2(node, parent);\n        }\n        node = nextScrollAncestor;\n      } while (node);\n      return false;\n    }\n    var visually_contains_default = visuallyContains;\n    function shadowElementsFromPoint(nodeX, nodeY) {\n      var root = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;\n      var i = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n      if (i > 999) {\n        throw new Error('Infinite loop detected');\n      }\n      return Array.from(root.elementsFromPoint(nodeX, nodeY) || []).filter(function(nodes) {\n        return get_root_node_default2(nodes) === root;\n      }).reduce(function(stack, elm) {\n        if (is_shadow_root_default(elm)) {\n          var shadowStack = shadowElementsFromPoint(nodeX, nodeY, elm.shadowRoot, i + 1);\n          stack = stack.concat(shadowStack);\n          if (stack.length && visually_contains_default(stack[0], elm)) {\n            stack.push(elm);\n          }\n        } else {\n          stack.push(elm);\n        }\n        return stack;\n      }, []);\n    }\n    var shadow_elements_from_point_default = shadowElementsFromPoint;\n    function urlPropsFromAttribute(node, attribute) {\n      if (!node.hasAttribute(attribute)) {\n        return void 0;\n      }\n      var nodeName2 = node.nodeName.toUpperCase();\n      var parser2 = node;\n      if (![ 'A', 'AREA' ].includes(nodeName2) || node.ownerSVGElement) {\n        parser2 = document.createElement('a');\n        parser2.href = node.getAttribute(attribute);\n      }\n      var protocol = [ 'https:', 'ftps:' ].includes(parser2.protocol) ? parser2.protocol.replace(/s:$/, ':') : parser2.protocol;\n      var parserPathname = /^\\//.test(parser2.pathname) ? parser2.pathname : '/'.concat(parser2.pathname);\n      var _getPathnameOrFilenam = getPathnameOrFilename(parserPathname), pathname = _getPathnameOrFilenam.pathname, filename = _getPathnameOrFilenam.filename;\n      return {\n        protocol: protocol,\n        hostname: parser2.hostname,\n        port: getPort(parser2.port),\n        pathname: /\\/$/.test(pathname) ? pathname : ''.concat(pathname, '/'),\n        search: getSearchPairs(parser2.search),\n        hash: getHashRoute(parser2.hash),\n        filename: filename\n      };\n    }\n    function getPort(port) {\n      var excludePorts = [ '443', '80' ];\n      return !excludePorts.includes(port) ? port : '';\n    }\n    function getPathnameOrFilename(pathname) {\n      var filename = pathname.split('/').pop();\n      if (!filename || filename.indexOf('.') === -1) {\n        return {\n          pathname: pathname,\n          filename: ''\n        };\n      }\n      return {\n        pathname: pathname.replace(filename, ''),\n        filename: /index./.test(filename) ? '' : filename\n      };\n    }\n    function getSearchPairs(searchStr) {\n      var query = {};\n      if (!searchStr || !searchStr.length) {\n        return query;\n      }\n      var pairs = searchStr.substring(1).split('&');\n      if (!pairs || !pairs.length) {\n        return query;\n      }\n      for (var index = 0; index < pairs.length; index++) {\n        var pair = pairs[index];\n        var _pair$split = pair.split('='), _pair$split2 = _slicedToArray(_pair$split, 2), key = _pair$split2[0], _pair$split2$ = _pair$split2[1], value = _pair$split2$ === void 0 ? '' : _pair$split2$;\n        query[decodeURIComponent(key)] = decodeURIComponent(value);\n      }\n      return query;\n    }\n    function getHashRoute(hash) {\n      if (!hash) {\n        return '';\n      }\n      var hashRegex = /#!?\\/?/g;\n      var hasMatch = hash.match(hashRegex);\n      if (!hasMatch) {\n        return '';\n      }\n      var _hasMatch = _slicedToArray(hasMatch, 1), matchedStr = _hasMatch[0];\n      if (matchedStr === '#') {\n        return '';\n      }\n      return hash;\n    }\n    var url_props_from_attribute_default = urlPropsFromAttribute;\n    function visuallyOverlaps(rect, parent) {\n      var parentRect = parent.getBoundingClientRect();\n      var parentTop = parentRect.top;\n      var parentLeft = parentRect.left;\n      var parentScrollArea = {\n        top: parentTop - parent.scrollTop,\n        bottom: parentTop - parent.scrollTop + parent.scrollHeight,\n        left: parentLeft - parent.scrollLeft,\n        right: parentLeft - parent.scrollLeft + parent.scrollWidth\n      };\n      if (rect.left > parentScrollArea.right && rect.left > parentRect.right || rect.top > parentScrollArea.bottom && rect.top > parentRect.bottom || rect.right < parentScrollArea.left && rect.right < parentRect.left || rect.bottom < parentScrollArea.top && rect.bottom < parentRect.top) {\n        return false;\n      }\n      var style = window.getComputedStyle(parent);\n      if (rect.left > parentRect.right || rect.top > parentRect.bottom) {\n        return style.overflow === 'scroll' || style.overflow === 'auto' || parent instanceof window.HTMLBodyElement || parent instanceof window.HTMLHtmlElement;\n      }\n      return true;\n    }\n    var visually_overlaps_default = visuallyOverlaps;\n    var isXHTMLGlobal;\n    var VirtualNode = function(_abstract_virtual_nod) {\n      _inherits(VirtualNode, _abstract_virtual_nod);\n      var _super = _createSuper(VirtualNode);\n      function VirtualNode(node, parent, shadowId) {\n        var _this;\n        _classCallCheck(this, VirtualNode);\n        _this = _super.call(this);\n        _this.shadowId = shadowId;\n        _this.children = [];\n        _this.actualNode = node;\n        _this.parent = parent;\n        _this._isHidden = null;\n        _this._cache = {};\n        if (typeof isXHTMLGlobal === 'undefined') {\n          isXHTMLGlobal = is_xhtml_default(node.ownerDocument);\n        }\n        _this._isXHTML = isXHTMLGlobal;\n        if (node.nodeName.toLowerCase() === 'input') {\n          var type = node.getAttribute('type');\n          type = _this._isXHTML ? type : (type || '').toLowerCase();\n          if (!valid_input_type_default().includes(type)) {\n            type = 'text';\n          }\n          _this._type = type;\n        }\n        if (cache_default.get('nodeMap')) {\n          cache_default.get('nodeMap').set(node, _assertThisInitialized(_this));\n        }\n        return _this;\n      }\n      _createClass(VirtualNode, [ {\n        key: 'attr',\n        value: function attr(attrName) {\n          if (typeof this.actualNode.getAttribute !== 'function') {\n            return null;\n          }\n          return this.actualNode.getAttribute(attrName);\n        }\n      }, {\n        key: 'hasAttr',\n        value: function hasAttr(attrName) {\n          if (typeof this.actualNode.hasAttribute !== 'function') {\n            return false;\n          }\n          return this.actualNode.hasAttribute(attrName);\n        }\n      }, {\n        key: 'getComputedStylePropertyValue',\n        value: function getComputedStylePropertyValue(property) {\n          var key = 'computedStyle_' + property;\n          if (!this._cache.hasOwnProperty(key)) {\n            if (!this._cache.hasOwnProperty('computedStyle')) {\n              this._cache.computedStyle = window.getComputedStyle(this.actualNode);\n            }\n            this._cache[key] = this._cache.computedStyle.getPropertyValue(property);\n          }\n          return this._cache[key];\n        }\n      }, {\n        key: 'props',\n        get: function get() {\n          var _this$actualNode = this.actualNode, nodeType = _this$actualNode.nodeType, nodeName2 = _this$actualNode.nodeName, id = _this$actualNode.id, multiple = _this$actualNode.multiple, nodeValue = _this$actualNode.nodeValue, value = _this$actualNode.value;\n          return {\n            nodeType: nodeType,\n            nodeName: this._isXHTML ? nodeName2 : nodeName2.toLowerCase(),\n            id: id,\n            type: this._type,\n            multiple: multiple,\n            nodeValue: nodeValue,\n            value: value\n          };\n        }\n      }, {\n        key: 'attrNames',\n        get: function get() {\n          if (!this._cache.hasOwnProperty('attrNames')) {\n            var attrs;\n            if (this.actualNode.attributes instanceof window.NamedNodeMap) {\n              attrs = this.actualNode.attributes;\n            } else {\n              attrs = this.actualNode.cloneNode(false).attributes;\n            }\n            this._cache.attrNames = Array.from(attrs).map(function(attr) {\n              return attr.name;\n            });\n          }\n          return this._cache.attrNames;\n        }\n      }, {\n        key: 'isFocusable',\n        get: function get() {\n          if (!this._cache.hasOwnProperty('isFocusable')) {\n            this._cache.isFocusable = is_focusable_default(this.actualNode);\n          }\n          return this._cache.isFocusable;\n        }\n      }, {\n        key: 'tabbableElements',\n        get: function get() {\n          if (!this._cache.hasOwnProperty('tabbableElements')) {\n            this._cache.tabbableElements = get_tabbable_elements_default(this);\n          }\n          return this._cache.tabbableElements;\n        }\n      }, {\n        key: 'clientRects',\n        get: function get() {\n          if (!this._cache.hasOwnProperty('clientRects')) {\n            this._cache.clientRects = Array.from(this.actualNode.getClientRects()).filter(function(rect) {\n              return rect.width > 0;\n            });\n          }\n          return this._cache.clientRects;\n        }\n      }, {\n        key: 'boundingClientRect',\n        get: function get() {\n          if (!this._cache.hasOwnProperty('boundingClientRect')) {\n            this._cache.boundingClientRect = this.actualNode.getBoundingClientRect();\n          }\n          return this._cache.boundingClientRect;\n        }\n      } ]);\n      return VirtualNode;\n    }(abstract_virtual_node_default);\n    var virtual_node_default = VirtualNode;\n    function getSlotChildren(node) {\n      var retVal = [];\n      node = node.firstChild;\n      while (node) {\n        retVal.push(node);\n        node = node.nextSibling;\n      }\n      return retVal;\n    }\n    function flattenTree(node, shadowId, parent) {\n      var retVal, realArray, nodeName2;\n      function reduceShadowDOM(res, child, parent2) {\n        var replacements = flattenTree(child, shadowId, parent2);\n        if (replacements) {\n          res = res.concat(replacements);\n        }\n        return res;\n      }\n      if (node.documentElement) {\n        node = node.documentElement;\n      }\n      nodeName2 = node.nodeName.toLowerCase();\n      if (is_shadow_root_default(node)) {\n        retVal = new virtual_node_default(node, parent, shadowId);\n        shadowId = 'a' + Math.random().toString().substring(2);\n        realArray = Array.from(node.shadowRoot.childNodes);\n        retVal.children = realArray.reduce(function(res, child) {\n          return reduceShadowDOM(res, child, retVal);\n        }, []);\n        return [ retVal ];\n      } else {\n        if (nodeName2 === 'content' && typeof node.getDistributedNodes === 'function') {\n          realArray = Array.from(node.getDistributedNodes());\n          return realArray.reduce(function(res, child) {\n            return reduceShadowDOM(res, child, parent);\n          }, []);\n        } else if (nodeName2 === 'slot' && typeof node.assignedNodes === 'function') {\n          realArray = Array.from(node.assignedNodes());\n          if (!realArray.length) {\n            realArray = getSlotChildren(node);\n          }\n          var styl = window.getComputedStyle(node);\n          if (false) {\n            retVal = new virtual_node_default(node, parent, shadowId);\n            retVal.children = realArray.reduce(function(res, child) {\n              return reduceShadowDOM(res, child, retVal);\n            }, []);\n            return [ retVal ];\n          } else {\n            return realArray.reduce(function(res, child) {\n              return reduceShadowDOM(res, child, parent);\n            }, []);\n          }\n        } else {\n          if (node.nodeType === 1) {\n            retVal = new virtual_node_default(node, parent, shadowId);\n            realArray = Array.from(node.childNodes);\n            retVal.children = realArray.reduce(function(res, child) {\n              return reduceShadowDOM(res, child, retVal);\n            }, []);\n            return [ retVal ];\n          } else if (node.nodeType === 3) {\n            return [ new virtual_node_default(node, parent) ];\n          }\n          return void 0;\n        }\n      }\n    }\n    function getFlattenedTree() {\n      var node = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.documentElement;\n      var shadowId = arguments.length > 1 ? arguments[1] : undefined;\n      cache_default.set('nodeMap', new WeakMap());\n      return flattenTree(node, shadowId, null);\n    }\n    var get_flattened_tree_default = getFlattenedTree;\n    function getBaseLang(lang) {\n      if (!lang) {\n        return '';\n      }\n      return lang.trim().split('-')[0].toLowerCase();\n    }\n    var get_base_lang_default = getBaseLang;\n    function failureSummary(nodeData) {\n      var failingChecks = {};\n      failingChecks.none = nodeData.none.concat(nodeData.all);\n      failingChecks.any = nodeData.any;\n      return Object.keys(failingChecks).map(function(key) {\n        if (!failingChecks[key].length) {\n          return;\n        }\n        var sum = axe._audit.data.failureSummaries[key];\n        if (sum && typeof sum.failureMessage === 'function') {\n          return sum.failureMessage(failingChecks[key].map(function(check4) {\n            return check4.message || '';\n          }));\n        }\n      }).filter(function(i) {\n        return i !== void 0;\n      }).join('\\n\\n');\n    }\n    var failure_summary_default = failureSummary;\n    function getEnvironmentData() {\n      var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n      var _win$screen = win.screen, screen = _win$screen === void 0 ? {} : _win$screen, _win$navigator = win.navigator, navigator = _win$navigator === void 0 ? {} : _win$navigator, _win$location = win.location, location = _win$location === void 0 ? {} : _win$location, innerHeight = win.innerHeight, innerWidth = win.innerWidth;\n      var orientation = screen.msOrientation || screen.orientation || screen.mozOrientation || {};\n      return {\n        testEngine: {\n          name: 'axe-core',\n          version: axe.version\n        },\n        testRunner: {\n          name: axe._audit.brand\n        },\n        testEnvironment: {\n          userAgent: navigator.userAgent,\n          windowWidth: innerWidth,\n          windowHeight: innerHeight,\n          orientationAngle: orientation.angle,\n          orientationType: orientation.type\n        },\n        timestamp: new Date().toISOString(),\n        url: location.href\n      };\n    }\n    var get_environment_data_default = getEnvironmentData;\n    function incompleteFallbackMessage() {\n      return typeof axe._audit.data.incompleteFallbackMessage === 'function' ? axe._audit.data.incompleteFallbackMessage() : axe._audit.data.incompleteFallbackMessage;\n    }\n    var incomplete_fallback_msg_default = incompleteFallbackMessage;\n    function normalizeRelatedNodes(node, options) {\n      [ 'any', 'all', 'none' ].forEach(function(type) {\n        if (!Array.isArray(node[type])) {\n          return;\n        }\n        node[type].filter(function(checkRes) {\n          return Array.isArray(checkRes.relatedNodes);\n        }).forEach(function(checkRes) {\n          checkRes.relatedNodes = checkRes.relatedNodes.map(function(relatedNode) {\n            var res = {\n              html: relatedNode.source\n            };\n            if (options.elementRef && !relatedNode.fromFrame) {\n              res.element = relatedNode.element;\n            }\n            if (options.selectors !== false || relatedNode.fromFrame) {\n              res.target = relatedNode.selector;\n            }\n            if (options.ancestry) {\n              res.ancestry = relatedNode.ancestry;\n            }\n            if (options.xpath) {\n              res.xpath = relatedNode.xpath;\n            }\n            return res;\n          });\n        });\n      });\n    }\n    var resultKeys = constants_default.resultGroups;\n    function processAggregate(results, options) {\n      var resultObject = axe.utils.aggregateResult(results);\n      resultKeys.forEach(function(key) {\n        if (options.resultTypes && !options.resultTypes.includes(key)) {\n          (resultObject[key] || []).forEach(function(ruleResult) {\n            if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) {\n              ruleResult.nodes = [ ruleResult.nodes[0] ];\n            }\n          });\n        }\n        resultObject[key] = (resultObject[key] || []).map(function(ruleResult) {\n          ruleResult = Object.assign({}, ruleResult);\n          if (Array.isArray(ruleResult.nodes) && ruleResult.nodes.length > 0) {\n            ruleResult.nodes = ruleResult.nodes.map(function(subResult) {\n              if (_typeof(subResult.node) === 'object') {\n                subResult.html = subResult.node.source;\n                if (options.elementRef && !subResult.node.fromFrame) {\n                  subResult.element = subResult.node.element;\n                }\n                if (options.selectors !== false || subResult.node.fromFrame) {\n                  subResult.target = subResult.node.selector;\n                }\n                if (options.ancestry) {\n                  subResult.ancestry = subResult.node.ancestry;\n                }\n                if (options.xpath) {\n                  subResult.xpath = subResult.node.xpath;\n                }\n              }\n              delete subResult.result;\n              delete subResult.node;\n              normalizeRelatedNodes(subResult, options);\n              return subResult;\n            });\n          }\n          resultKeys.forEach(function(key2) {\n            return delete ruleResult[key2];\n          });\n          delete ruleResult.pageLevel;\n          delete ruleResult.result;\n          return ruleResult;\n        });\n      });\n      return resultObject;\n    }\n    var process_aggregate_default = processAggregate;\n    axe._thisWillBeDeletedDoNotUse = axe._thisWillBeDeletedDoNotUse || {};\n    axe._thisWillBeDeletedDoNotUse.helpers = {\n      failureSummary: failure_summary_default,\n      getEnvironmentData: get_environment_data_default,\n      incompleteFallbackMessage: incomplete_fallback_msg_default,\n      processAggregate: process_aggregate_default\n    };\n    var dataRegex = /\\$\\{\\s?data\\s?\\}/g;\n    function substitute(str, data2) {\n      if (typeof data2 === 'string') {\n        return str.replace(dataRegex, data2);\n      }\n      for (var prop in data2) {\n        if (data2.hasOwnProperty(prop)) {\n          var regex = new RegExp('\\\\${\\\\s?data\\\\.' + prop + '\\\\s?}', 'g');\n          var replace = typeof data2[prop] === 'undefined' ? '' : String(data2[prop]);\n          str = str.replace(regex, replace);\n        }\n      }\n      return str;\n    }\n    function processMessage(message, data2) {\n      if (!message) {\n        return;\n      }\n      if (Array.isArray(data2)) {\n        data2.values = data2.join(', ');\n        if (typeof message.singular === 'string' && typeof message.plural === 'string') {\n          var str2 = data2.length === 1 ? message.singular : message.plural;\n          return substitute(str2, data2);\n        }\n        return substitute(message, data2);\n      }\n      if (typeof message === 'string') {\n        return substitute(message, data2);\n      }\n      if (typeof data2 === 'string') {\n        var _str = message[data2];\n        return substitute(_str, data2);\n      }\n      var str = message['default'] || incomplete_fallback_msg_default();\n      if (data2 && data2.messageKey && message[data2.messageKey]) {\n        str = message[data2.messageKey];\n      }\n      return processMessage(str, data2);\n    }\n    var process_message_default = processMessage;\n    function getCheckMessage(checkId, type, data2) {\n      var check4 = axe._audit.data.checks[checkId];\n      if (!check4) {\n        throw new Error('Cannot get message for unknown check: '.concat(checkId, '.'));\n      }\n      if (!check4.messages[type]) {\n        throw new Error('Check \"'.concat(checkId, '\"\" does not have a \"').concat(type, '\" message.'));\n      }\n      return process_message_default(check4.messages[type], data2);\n    }\n    var get_check_message_default = getCheckMessage;\n    function getCheckOption(check4, ruleID, options) {\n      var ruleCheckOption = ((options.rules && options.rules[ruleID] || {}).checks || {})[check4.id];\n      var checkOption = (options.checks || {})[check4.id];\n      var enabled = check4.enabled;\n      var opts = check4.options;\n      if (checkOption) {\n        if (checkOption.hasOwnProperty('enabled')) {\n          enabled = checkOption.enabled;\n        }\n        if (checkOption.hasOwnProperty('options')) {\n          opts = checkOption.options;\n        }\n      }\n      if (ruleCheckOption) {\n        if (ruleCheckOption.hasOwnProperty('enabled')) {\n          enabled = ruleCheckOption.enabled;\n        }\n        if (ruleCheckOption.hasOwnProperty('options')) {\n          opts = ruleCheckOption.options;\n        }\n      }\n      return {\n        enabled: enabled,\n        options: opts,\n        absolutePaths: options.absolutePaths\n      };\n    }\n    var get_check_option_default = getCheckOption;\n    function getNodeFromTree(vNode, node) {\n      var el = node || vNode;\n      return cache_default.get('nodeMap') ? cache_default.get('nodeMap').get(el) : null;\n    }\n    var get_node_from_tree_default = getNodeFromTree;\n    function getRule(ruleId) {\n      var rule3 = axe._audit.rules.find(function(rule4) {\n        return rule4.id === ruleId;\n      });\n      if (!rule3) {\n        throw new Error('Cannot find rule by id: '.concat(ruleId));\n      }\n      return rule3;\n    }\n    var get_rule_default = getRule;\n    function getScroll(elm) {\n      var buffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      var overflowX = elm.scrollWidth > elm.clientWidth + buffer;\n      var overflowY = elm.scrollHeight > elm.clientHeight + buffer;\n      if (!(overflowX || overflowY)) {\n        return;\n      }\n      var style = window.getComputedStyle(elm);\n      var overflowXStyle = style.getPropertyValue('overflow-x');\n      var overflowYStyle = style.getPropertyValue('overflow-y');\n      var scrollableX = overflowXStyle !== 'visible' && overflowXStyle !== 'hidden';\n      var scrollableY = overflowYStyle !== 'visible' && overflowYStyle !== 'hidden';\n      if (overflowX && scrollableX || overflowY && scrollableY) {\n        return {\n          elm: elm,\n          top: elm.scrollTop,\n          left: elm.scrollLeft\n        };\n      }\n    }\n    var get_scroll_default = getScroll;\n    function getElmScrollRecursive(root) {\n      return Array.from(root.children || root.childNodes || []).reduce(function(scrolls, elm) {\n        var scroll = get_scroll_default(elm);\n        if (scroll) {\n          scrolls.push(scroll);\n        }\n        return scrolls.concat(getElmScrollRecursive(elm));\n      }, []);\n    }\n    function getScrollState() {\n      var win = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;\n      var root = win.document.documentElement;\n      var windowScroll = [ win.pageXOffset !== void 0 ? {\n        elm: win,\n        top: win.pageYOffset,\n        left: win.pageXOffset\n      } : {\n        elm: root,\n        top: root.scrollTop,\n        left: root.scrollLeft\n      } ];\n      return windowScroll.concat(getElmScrollRecursive(document.body));\n    }\n    var get_scroll_state_default = getScrollState;\n    function _getStandards() {\n      return clone_default(standards_default);\n    }\n    function getStyleSheetFactory(dynamicDoc) {\n      if (!dynamicDoc) {\n        throw new Error('axe.utils.getStyleSheetFactory should be invoked with an argument');\n      }\n      return function(options) {\n        var data2 = options.data, _options$isCrossOrigi = options.isCrossOrigin, isCrossOrigin = _options$isCrossOrigi === void 0 ? false : _options$isCrossOrigi, shadowId = options.shadowId, root = options.root, priority = options.priority, _options$isLink = options.isLink, isLink = _options$isLink === void 0 ? false : _options$isLink;\n        var style = dynamicDoc.createElement('style');\n        if (isLink) {\n          var text32 = dynamicDoc.createTextNode('@import \"'.concat(data2.href, '\"'));\n          style.appendChild(text32);\n        } else {\n          style.appendChild(dynamicDoc.createTextNode(data2));\n        }\n        dynamicDoc.head.appendChild(style);\n        return {\n          sheet: style.sheet,\n          isCrossOrigin: isCrossOrigin,\n          shadowId: shadowId,\n          root: root,\n          priority: priority\n        };\n      };\n    }\n    var get_stylesheet_factory_default = getStyleSheetFactory;\n    var styleSheet;\n    function injectStyle(style) {\n      if (styleSheet && styleSheet.parentNode) {\n        if (styleSheet.styleSheet === void 0) {\n          styleSheet.appendChild(document.createTextNode(style));\n        } else {\n          styleSheet.styleSheet.cssText += style;\n        }\n        return styleSheet;\n      }\n      if (!style) {\n        return;\n      }\n      var head = document.head || document.getElementsByTagName('head')[0];\n      styleSheet = document.createElement('style');\n      styleSheet.type = 'text/css';\n      if (styleSheet.styleSheet === void 0) {\n        styleSheet.appendChild(document.createTextNode(style));\n      } else {\n        styleSheet.styleSheet.cssText = style;\n      }\n      head.appendChild(styleSheet);\n      return styleSheet;\n    }\n    var inject_style_default = injectStyle;\n    function isHidden(el, recursed) {\n      var node = get_node_from_tree_default(el);\n      if (el.nodeType === 9) {\n        return false;\n      }\n      if (el.nodeType === 11) {\n        el = el.host;\n      }\n      if (node && node._isHidden !== null) {\n        return node._isHidden;\n      }\n      var style = window.getComputedStyle(el, null);\n      if (!style || !el.parentNode || style.getPropertyValue('display') === 'none' || !recursed && style.getPropertyValue('visibility') === 'hidden' || el.getAttribute('aria-hidden') === 'true') {\n        return true;\n      }\n      var parent = el.assignedSlot ? el.assignedSlot : el.parentNode;\n      var hidden = isHidden(parent, true);\n      if (node) {\n        node._isHidden = hidden;\n      }\n      return hidden;\n    }\n    var is_hidden_default = isHidden;\n    var htmlTags = [ 'a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'math', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'script', 'section', 'select', 'slot', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'svg', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr' ];\n    function isHtmlElement(node) {\n      if (node.namespaceURI === 'http://www.w3.org/2000/svg') {\n        return false;\n      }\n      return htmlTags.includes(node.nodeName.toLowerCase());\n    }\n    var is_html_element_default = isHtmlElement;\n    function getDeepest(collection) {\n      return collection.sort(function(a, b) {\n        if (contains_default(a, b)) {\n          return 1;\n        }\n        return -1;\n      })[0];\n    }\n    function isNodeInContext(node, context3) {\n      var include = context3.include && getDeepest(context3.include.filter(function(candidate) {\n        return contains_default(candidate, node);\n      }));\n      var exclude = context3.exclude && getDeepest(context3.exclude.filter(function(candidate) {\n        return contains_default(candidate, node);\n      }));\n      if (!exclude && include || exclude && contains_default(exclude, include)) {\n        return true;\n      }\n      return false;\n    }\n    var is_node_in_context_default = isNodeInContext;\n    var memoizee = __toModule(require_memoizee());\n    axe._memoizedFns = [];\n    function memoizeImplementation(fn) {\n      var memoized = memoizee['default'](fn);\n      axe._memoizedFns.push(memoized);\n      return memoized;\n    }\n    var memoize_default = memoizeImplementation;\n    function parseSameOriginStylesheet(sheet, options, priority, importedUrls) {\n      var isCrossOrigin = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      var rules = Array.from(sheet.cssRules);\n      if (!rules) {\n        return Promise.resolve();\n      }\n      var cssImportRules = rules.filter(function(r) {\n        return r.type === 3;\n      });\n      if (!cssImportRules.length) {\n        return Promise.resolve({\n          isCrossOrigin: isCrossOrigin,\n          priority: priority,\n          root: options.rootNode,\n          shadowId: options.shadowId,\n          sheet: sheet\n        });\n      }\n      var cssImportUrlsNotAlreadyImported = cssImportRules.filter(function(rule3) {\n        return rule3.href;\n      }).map(function(rule3) {\n        return rule3.href;\n      }).filter(function(url) {\n        return !importedUrls.includes(url);\n      });\n      var promises = cssImportUrlsNotAlreadyImported.map(function(importUrl, cssRuleIndex) {\n        var newPriority = [].concat(_toConsumableArray(priority), [ cssRuleIndex ]);\n        var isCrossOriginRequest = /^https?:\\/\\/|^\\/\\//i.test(importUrl);\n        return parse_crossorigin_stylesheet_default(importUrl, options, newPriority, importedUrls, isCrossOriginRequest);\n      });\n      var nonImportCSSRules = rules.filter(function(r) {\n        return r.type !== 3;\n      });\n      if (!nonImportCSSRules.length) {\n        return Promise.all(promises);\n      }\n      promises.push(Promise.resolve(options.convertDataToStylesheet({\n        data: nonImportCSSRules.map(function(rule3) {\n          return rule3.cssText;\n        }).join(),\n        isCrossOrigin: isCrossOrigin,\n        priority: priority,\n        root: options.rootNode,\n        shadowId: options.shadowId\n      })));\n      return Promise.all(promises);\n    }\n    var parse_sameorigin_stylesheet_default = parseSameOriginStylesheet;\n    function parseStylesheet(sheet, options, priority, importedUrls) {\n      var isCrossOrigin = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n      var isSameOrigin = isSameOriginStylesheet(sheet);\n      if (isSameOrigin) {\n        return parse_sameorigin_stylesheet_default(sheet, options, priority, importedUrls, isCrossOrigin);\n      }\n      return parse_crossorigin_stylesheet_default(sheet.href, options, priority, importedUrls, true);\n    }\n    function isSameOriginStylesheet(sheet) {\n      try {\n        var rules = sheet.cssRules;\n        if (!rules && sheet.href) {\n          return false;\n        }\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }\n    var parse_stylesheet_default = parseStylesheet;\n    function parseCrossOriginStylesheet(url, options, priority, importedUrls, isCrossOrigin) {\n      importedUrls.push(url);\n      return new Promise(function(resolve, reject) {\n        var request = new XMLHttpRequest();\n        request.open('GET', url);\n        request.timeout = constants_default.preload.timeout;\n        request.addEventListener('error', reject);\n        request.addEventListener('timeout', reject);\n        request.addEventListener('loadend', function(event) {\n          if (event.loaded && request.responseText) {\n            return resolve(request.responseText);\n          }\n          reject(request.responseText);\n        });\n        request.send();\n      }).then(function(data2) {\n        var result = options.convertDataToStylesheet({\n          data: data2,\n          isCrossOrigin: isCrossOrigin,\n          priority: priority,\n          root: options.rootNode,\n          shadowId: options.shadowId\n        });\n        return parse_stylesheet_default(result.sheet, options, priority, importedUrls, result.isCrossOrigin);\n      });\n    }\n    var parse_crossorigin_stylesheet_default = parseCrossOriginStylesheet;\n    var performanceTimer = function() {\n      function now() {\n        if (window.performance && window.performance) {\n          return window.performance.now();\n        }\n      }\n      var originalTime = null;\n      var lastRecordedTime = now();\n      return {\n        start: function start() {\n          this.mark('mark_axe_start');\n        },\n        end: function end() {\n          this.mark('mark_axe_end');\n          this.measure('axe', 'mark_axe_start', 'mark_axe_end');\n          this.logMeasures('axe');\n        },\n        auditStart: function auditStart() {\n          this.mark('mark_audit_start');\n        },\n        auditEnd: function auditEnd() {\n          this.mark('mark_audit_end');\n          this.measure('audit_start_to_end', 'mark_audit_start', 'mark_audit_end');\n          this.logMeasures();\n        },\n        mark: function mark(markName) {\n          if (window.performance && window.performance.mark !== void 0) {\n            window.performance.mark(markName);\n          }\n        },\n        measure: function measure(measureName, startMark, endMark) {\n          if (window.performance && window.performance.measure !== void 0) {\n            window.performance.measure(measureName, startMark, endMark);\n          }\n        },\n        logMeasures: function logMeasures(measureName) {\n          function logMeasure(req2) {\n            log_default('Measure ' + req2.name + ' took ' + req2.duration + 'ms');\n          }\n          if (window.performance && window.performance.getEntriesByType !== void 0) {\n            var axeStart = window.performance.getEntriesByName('mark_axe_start')[0];\n            var measures = window.performance.getEntriesByType('measure').filter(function(measure) {\n              return measure.startTime >= axeStart.startTime;\n            });\n            for (var i = 0; i < measures.length; ++i) {\n              var req = measures[i];\n              if (req.name === measureName) {\n                logMeasure(req);\n                return;\n              }\n              logMeasure(req);\n            }\n          }\n        },\n        timeElapsed: function timeElapsed() {\n          return now() - lastRecordedTime;\n        },\n        reset: function reset() {\n          if (!originalTime) {\n            originalTime = now();\n          }\n          lastRecordedTime = now();\n        }\n      };\n    }();\n    var performance_timer_default = performanceTimer;\n    if (typeof Object.assign !== 'function') {\n      (function() {\n        Object.assign = function(target) {\n          if (target === void 0 || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n          }\n          var output = Object(target);\n          for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== void 0 && source !== null) {\n              for (var nextKey in source) {\n                if (source.hasOwnProperty(nextKey)) {\n                  output[nextKey] = source[nextKey];\n                }\n              }\n            }\n          }\n          return output;\n        };\n      })();\n    }\n    if (!Array.prototype.find) {\n      Object.defineProperty(Array.prototype, 'find', {\n        value: function value(predicate) {\n          if (this === null) {\n            throw new TypeError('Array.prototype.find called on null or undefined');\n          }\n          if (typeof predicate !== 'function') {\n            throw new TypeError('predicate must be a function');\n          }\n          var list = Object(this);\n          var length = list.length >>> 0;\n          var thisArg = arguments[1];\n          var value;\n          for (var i = 0; i < length; i++) {\n            value = list[i];\n            if (predicate.call(thisArg, value, i, list)) {\n              return value;\n            }\n          }\n          return void 0;\n        }\n      });\n    }\n    function _pollyfillElementsFromPoint() {\n      if (document.elementsFromPoint) {\n        return document.elementsFromPoint;\n      }\n      if (document.msElementsFromPoint) {\n        return document.msElementsFromPoint;\n      }\n      var usePointer = function() {\n        var element = document.createElement('x');\n        element.style.cssText = 'pointer-events:auto';\n        return element.style.pointerEvents === 'auto';\n      }();\n      var cssProp = usePointer ? 'pointer-events' : 'visibility';\n      var cssDisableVal = usePointer ? 'none' : 'hidden';\n      var style = document.createElement('style');\n      style.innerHTML = usePointer ? '* { pointer-events: all }' : '* { visibility: visible }';\n      return function(x, y) {\n        var current, i, d;\n        var elements = [];\n        var previousPointerEvents = [];\n        document.head.appendChild(style);\n        while ((current = document.elementFromPoint(x, y)) && elements.indexOf(current) === -1) {\n          elements.push(current);\n          previousPointerEvents.push({\n            value: current.style.getPropertyValue(cssProp),\n            priority: current.style.getPropertyPriority(cssProp)\n          });\n          current.style.setProperty(cssProp, cssDisableVal, 'important');\n        }\n        if (elements.indexOf(document.documentElement) < elements.length - 1) {\n          elements.splice(elements.indexOf(document.documentElement), 1);\n          elements.push(document.documentElement);\n        }\n        for (i = previousPointerEvents.length; !!(d = previousPointerEvents[--i]); ) {\n          elements[i].style.setProperty(cssProp, d.value ? d.value : '', d.priority);\n        }\n        document.head.removeChild(style);\n        return elements;\n      };\n    }\n    if (typeof window.addEventListener === 'function') {\n      document.elementsFromPoint = _pollyfillElementsFromPoint();\n    }\n    if (!Array.prototype.includes) {\n      Object.defineProperty(Array.prototype, 'includes', {\n        value: function value(searchElement) {\n          var O = Object(this);\n          var len = parseInt(O.length, 10) || 0;\n          if (len === 0) {\n            return false;\n          }\n          var n = parseInt(arguments[1], 10) || 0;\n          var k;\n          if (n >= 0) {\n            k = n;\n          } else {\n            k = len + n;\n            if (k < 0) {\n              k = 0;\n            }\n          }\n          var currentElement;\n          while (k < len) {\n            currentElement = O[k];\n            if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {\n              return true;\n            }\n            k++;\n          }\n          return false;\n        }\n      });\n    }\n    if (!Array.prototype.some) {\n      Object.defineProperty(Array.prototype, 'some', {\n        value: function value(fun) {\n          if (this == null) {\n            throw new TypeError('Array.prototype.some called on null or undefined');\n          }\n          if (typeof fun !== 'function') {\n            throw new TypeError();\n          }\n          var t = Object(this);\n          var len = t.length >>> 0;\n          var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n          for (var i = 0; i < len; i++) {\n            if (i in t && fun.call(thisArg, t[i], i, t)) {\n              return true;\n            }\n          }\n          return false;\n        }\n      });\n    }\n    if (!Array.from) {\n      Object.defineProperty(Array, 'from', {\n        value: function() {\n          var toStr = Object.prototype.toString;\n          var isCallable = function isCallable(fn) {\n            return typeof fn === 'function' || toStr.call(fn) === '[object Function]';\n          };\n          var toInteger = function toInteger(value) {\n            var number = Number(value);\n            if (isNaN(number)) {\n              return 0;\n            }\n            if (number === 0 || !isFinite(number)) {\n              return number;\n            }\n            return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\n          };\n          var maxSafeInteger = Math.pow(2, 53) - 1;\n          var toLength = function toLength(value) {\n            var len = toInteger(value);\n            return Math.min(Math.max(len, 0), maxSafeInteger);\n          };\n          return function from(arrayLike) {\n            var C = this;\n            var items = Object(arrayLike);\n            if (arrayLike == null) {\n              throw new TypeError('Array.from requires an array-like object - not null or undefined');\n            }\n            var mapFn = arguments.length > 1 ? arguments[1] : void 0;\n            var T;\n            if (typeof mapFn !== 'undefined') {\n              if (!isCallable(mapFn)) {\n                throw new TypeError('Array.from: when provided, the second argument must be a function');\n              }\n              if (arguments.length > 2) {\n                T = arguments[2];\n              }\n            }\n            var len = toLength(items.length);\n            var A = isCallable(C) ? Object(new C(len)) : new Array(len);\n            var k = 0;\n            var kValue;\n            while (k < len) {\n              kValue = items[k];\n              if (mapFn) {\n                A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);\n              } else {\n                A[k] = kValue;\n              }\n              k += 1;\n            }\n            A.length = len;\n            return A;\n          };\n        }()\n      });\n    }\n    if (!String.prototype.includes) {\n      String.prototype.includes = function(search, start) {\n        if (typeof start !== 'number') {\n          start = 0;\n        }\n        if (start + search.length > this.length) {\n          return false;\n        } else {\n          return this.indexOf(search, start) !== -1;\n        }\n      };\n    }\n    function uniqueArray(arr1, arr2) {\n      return arr1.concat(arr2).filter(function(elem, pos, arr) {\n        return arr.indexOf(elem) === pos;\n      });\n    }\n    var unique_array_default = uniqueArray;\n    function createLocalVariables(vNodes, anyLevel, thisLevel, parentShadowId) {\n      var retVal = {\n        vNodes: vNodes.slice(),\n        anyLevel: anyLevel,\n        thisLevel: thisLevel,\n        parentShadowId: parentShadowId\n      };\n      retVal.vNodes.reverse();\n      return retVal;\n    }\n    function matchExpressions(domTree, expressions, filter) {\n      var stack = [];\n      var vNodes = Array.isArray(domTree) ? domTree : [ domTree ];\n      var currentLevel = createLocalVariables(vNodes, expressions, [], domTree[0].shadowId);\n      var result = [];\n      while (currentLevel.vNodes.length) {\n        var vNode = currentLevel.vNodes.pop();\n        var childOnly = [];\n        var childAny = [];\n        var combined = currentLevel.anyLevel.slice().concat(currentLevel.thisLevel);\n        var added = false;\n        for (var _i7 = 0; _i7 < combined.length; _i7++) {\n          var exp = combined[_i7];\n          if ((!exp[0].id || vNode.shadowId === currentLevel.parentShadowId) && _matchesExpression(vNode, exp[0])) {\n            if (exp.length === 1) {\n              if (!added && (!filter || filter(vNode))) {\n                result.push(vNode);\n                added = true;\n              }\n            } else {\n              var rest = exp.slice(1);\n              if ([ ' ', '>' ].includes(rest[0].combinator) === false) {\n                throw new Error('axe.utils.querySelectorAll does not support the combinator: ' + exp[1].combinator);\n              }\n              if (rest[0].combinator === '>') {\n                childOnly.push(rest);\n              } else {\n                childAny.push(rest);\n              }\n            }\n          }\n          if ((!exp[0].id || vNode.shadowId === currentLevel.parentShadowId) && currentLevel.anyLevel.includes(exp)) {\n            childAny.push(exp);\n          }\n        }\n        if (vNode.children && vNode.children.length) {\n          stack.push(currentLevel);\n          currentLevel = createLocalVariables(vNode.children, childAny, childOnly, vNode.shadowId);\n        }\n        while (!currentLevel.vNodes.length && stack.length) {\n          currentLevel = stack.pop();\n        }\n      }\n      return result;\n    }\n    function querySelectorAllFilter(domTree, selector, filter) {\n      domTree = Array.isArray(domTree) ? domTree : [ domTree ];\n      var expressions = _convertSelector(selector);\n      return matchExpressions(domTree, expressions, filter);\n    }\n    var query_selector_all_filter_default = querySelectorAllFilter;\n    function preloadCssom(_ref15) {\n      var _ref15$treeRoot = _ref15.treeRoot, treeRoot = _ref15$treeRoot === void 0 ? axe._tree[0] : _ref15$treeRoot;\n      var rootNodes = getAllRootNodesInTree(treeRoot);\n      if (!rootNodes.length) {\n        return Promise.resolve();\n      }\n      var dynamicDoc = document.implementation.createHTMLDocument('Dynamic document for loading cssom');\n      var convertDataToStylesheet = get_stylesheet_factory_default(dynamicDoc);\n      return getCssomForAllRootNodes(rootNodes, convertDataToStylesheet).then(function(assets) {\n        return flattenAssets(assets);\n      });\n    }\n    var preload_cssom_default = preloadCssom;\n    function getAllRootNodesInTree(tree) {\n      var ids = [];\n      var rootNodes = query_selector_all_filter_default(tree, '*', function(node) {\n        if (ids.includes(node.shadowId)) {\n          return false;\n        }\n        ids.push(node.shadowId);\n        return true;\n      }).map(function(node) {\n        return {\n          shadowId: node.shadowId,\n          rootNode: get_root_node_default(node.actualNode)\n        };\n      });\n      return unique_array_default(rootNodes, []);\n    }\n    function getCssomForAllRootNodes(rootNodes, convertDataToStylesheet) {\n      var promises = [];\n      rootNodes.forEach(function(_ref16, index) {\n        var rootNode = _ref16.rootNode, shadowId = _ref16.shadowId;\n        var sheets = getStylesheetsOfRootNode(rootNode, shadowId, convertDataToStylesheet);\n        if (!sheets) {\n          return Promise.all(promises);\n        }\n        var rootIndex = index + 1;\n        var parseOptions = {\n          rootNode: rootNode,\n          shadowId: shadowId,\n          convertDataToStylesheet: convertDataToStylesheet,\n          rootIndex: rootIndex\n        };\n        var importedUrls = [];\n        var p = Promise.all(sheets.map(function(sheet, sheetIndex) {\n          var priority = [ rootIndex, sheetIndex ];\n          return parse_stylesheet_default(sheet, parseOptions, priority, importedUrls);\n        }));\n        promises.push(p);\n      });\n      return Promise.all(promises);\n    }\n    function flattenAssets(assets) {\n      return assets.reduce(function(acc, val) {\n        return Array.isArray(val) ? acc.concat(flattenAssets(val)) : acc.concat(val);\n      }, []);\n    }\n    function getStylesheetsOfRootNode(rootNode, shadowId, convertDataToStylesheet) {\n      var sheets;\n      if (rootNode.nodeType === 11 && shadowId) {\n        sheets = getStylesheetsFromDocumentFragment(rootNode, convertDataToStylesheet);\n      } else {\n        sheets = getStylesheetsFromDocument(rootNode);\n      }\n      return filterStylesheetsWithSameHref(sheets);\n    }\n    function getStylesheetsFromDocumentFragment(rootNode, convertDataToStylesheet) {\n      return Array.from(rootNode.children).filter(filerStyleAndLinkAttributesInDocumentFragment).reduce(function(out, node) {\n        var nodeName2 = node.nodeName.toUpperCase();\n        var data2 = nodeName2 === 'STYLE' ? node.textContent : node;\n        var isLink = nodeName2 === 'LINK';\n        var stylesheet = convertDataToStylesheet({\n          data: data2,\n          isLink: isLink,\n          root: rootNode\n        });\n        out.push(stylesheet.sheet);\n        return out;\n      }, []);\n    }\n    function getStylesheetsFromDocument(rootNode) {\n      return Array.from(rootNode.styleSheets).filter(function(sheet) {\n        return filterMediaIsPrint(sheet.media.mediaText);\n      });\n    }\n    function filerStyleAndLinkAttributesInDocumentFragment(node) {\n      var nodeName2 = node.nodeName.toUpperCase();\n      var linkHref = node.getAttribute('href');\n      var linkRel = node.getAttribute('rel');\n      var isLink = nodeName2 === 'LINK' && linkHref && linkRel && node.rel.toUpperCase().includes('STYLESHEET');\n      var isStyle = nodeName2 === 'STYLE';\n      return isStyle || isLink && filterMediaIsPrint(node.media);\n    }\n    function filterMediaIsPrint(media) {\n      if (!media) {\n        return true;\n      }\n      return !media.toUpperCase().includes('PRINT');\n    }\n    function filterStylesheetsWithSameHref(sheets) {\n      var hrefs = [];\n      return sheets.filter(function(sheet) {\n        if (!sheet.href) {\n          return true;\n        }\n        if (hrefs.includes(sheet.href)) {\n          return false;\n        }\n        hrefs.push(sheet.href);\n        return true;\n      });\n    }\n    function preloadMedia(_ref17) {\n      var _ref17$treeRoot = _ref17.treeRoot, treeRoot = _ref17$treeRoot === void 0 ? axe._tree[0] : _ref17$treeRoot;\n      var mediaVirtualNodes = query_selector_all_filter_default(treeRoot, 'video, audio', function(_ref18) {\n        var actualNode = _ref18.actualNode;\n        if (actualNode.hasAttribute('src')) {\n          return !!actualNode.getAttribute('src');\n        }\n        var sourceWithSrc = Array.from(actualNode.getElementsByTagName('source')).filter(function(source) {\n          return !!source.getAttribute('src');\n        });\n        if (sourceWithSrc.length <= 0) {\n          return false;\n        }\n        return true;\n      });\n      return Promise.all(mediaVirtualNodes.map(function(_ref19) {\n        var actualNode = _ref19.actualNode;\n        return isMediaElementReady(actualNode);\n      }));\n    }\n    var preload_media_default = preloadMedia;\n    function isMediaElementReady(elm) {\n      return new Promise(function(resolve) {\n        if (elm.readyState > 0) {\n          resolve(elm);\n        }\n        function onMediaReady() {\n          elm.removeEventListener('loadedmetadata', onMediaReady);\n          resolve(elm);\n        }\n        elm.addEventListener('loadedmetadata', onMediaReady);\n      });\n    }\n    function isValidPreloadObject(preload3) {\n      return _typeof(preload3) === 'object' && Array.isArray(preload3.assets);\n    }\n    function _shouldPreload(options) {\n      if (!options || options.preload === void 0 || options.preload === null) {\n        return true;\n      }\n      if (typeof options.preload === 'boolean') {\n        return options.preload;\n      }\n      return isValidPreloadObject(options.preload);\n    }\n    function _getPreloadConfig(options) {\n      var _constants_default$pr = constants_default.preload, assets = _constants_default$pr.assets, timeout = _constants_default$pr.timeout;\n      var config = {\n        assets: assets,\n        timeout: timeout\n      };\n      if (!options.preload) {\n        return config;\n      }\n      if (typeof options.preload === 'boolean') {\n        return config;\n      }\n      var areRequestedAssetsValid = options.preload.assets.every(function(a) {\n        return assets.includes(a.toLowerCase());\n      });\n      if (!areRequestedAssetsValid) {\n        throw new Error('Requested assets, not supported. Supported assets are: '.concat(assets.join(', '), '.'));\n      }\n      config.assets = unique_array_default(options.preload.assets.map(function(a) {\n        return a.toLowerCase();\n      }), []);\n      if (options.preload.timeout && typeof options.preload.timeout === 'number' && !isNaN(options.preload.timeout)) {\n        config.timeout = options.preload.timeout;\n      }\n      return config;\n    }\n    function preload(options) {\n      var preloadFunctionsMap = {\n        cssom: preload_cssom_default,\n        media: preload_media_default\n      };\n      if (!_shouldPreload(options)) {\n        return Promise.resolve();\n      }\n      return new Promise(function(resolve, reject) {\n        var _getPreloadConfig2 = _getPreloadConfig(options), assets = _getPreloadConfig2.assets, timeout = _getPreloadConfig2.timeout;\n        var preloadTimeout = setTimeout(function() {\n          return reject(new Error('Preload assets timed out.'));\n        }, timeout);\n        Promise.all(assets.map(function(asset) {\n          return preloadFunctionsMap[asset](options).then(function(results) {\n            return _defineProperty({}, asset, results);\n          });\n        })).then(function(results) {\n          var preloadAssets = results.reduce(function(out, result) {\n            return _extends({}, out, result);\n          }, {});\n          clearTimeout(preloadTimeout);\n          resolve(preloadAssets);\n        })['catch'](function(err2) {\n          clearTimeout(preloadTimeout);\n          reject(err2);\n        });\n      });\n    }\n    var preload_default = preload;\n    function getIncompleteReason(checkData, messages) {\n      function getDefaultMsg(messages2) {\n        if (messages2.incomplete && messages2.incomplete['default']) {\n          return messages2.incomplete['default'];\n        } else {\n          return incomplete_fallback_msg_default();\n        }\n      }\n      if (checkData && checkData.missingData) {\n        try {\n          var msg = messages.incomplete[checkData.missingData[0].reason];\n          if (!msg) {\n            throw new Error();\n          }\n          return msg;\n        } catch (e) {\n          if (typeof checkData.missingData === 'string') {\n            return messages.incomplete[checkData.missingData];\n          } else {\n            return getDefaultMsg(messages);\n          }\n        }\n      } else if (checkData && checkData.messageKey) {\n        return messages.incomplete[checkData.messageKey];\n      } else {\n        return getDefaultMsg(messages);\n      }\n    }\n    function extender(checksData, shouldBeTrue) {\n      return function(check4) {\n        var sourceData = checksData[check4.id] || {};\n        var messages = sourceData.messages || {};\n        var data2 = Object.assign({}, sourceData);\n        delete data2.messages;\n        if (check4.result === void 0) {\n          if (_typeof(messages.incomplete) === 'object' && !Array.isArray(check4.data)) {\n            data2.message = getIncompleteReason(check4.data, messages);\n          }\n          if (!data2.message) {\n            data2.message = messages.incomplete;\n          }\n        } else {\n          data2.message = check4.result === shouldBeTrue ? messages.pass : messages.fail;\n        }\n        if (typeof data2.message !== 'function') {\n          data2.message = process_message_default(data2.message, check4.data);\n        }\n        extend_meta_data_default(check4, data2);\n      };\n    }\n    function publishMetaData(ruleResult) {\n      var checksData = axe._audit.data.checks || {};\n      var rulesData = axe._audit.data.rules || {};\n      var rule3 = find_by_default(axe._audit.rules, 'id', ruleResult.id) || {};\n      ruleResult.tags = clone_default(rule3.tags || []);\n      var shouldBeTrue = extender(checksData, true);\n      var shouldBeFalse = extender(checksData, false);\n      ruleResult.nodes.forEach(function(detail) {\n        detail.any.forEach(shouldBeTrue);\n        detail.all.forEach(shouldBeTrue);\n        detail.none.forEach(shouldBeFalse);\n      });\n      extend_meta_data_default(ruleResult, clone_default(rulesData[ruleResult.id] || {}));\n    }\n    var publish_metadata_default = publishMetaData;\n    function querySelectorAll(domTree, selector) {\n      return query_selector_all_filter_default(domTree, selector);\n    }\n    var query_selector_all_default = querySelectorAll;\n    function matchTags(rule3, runOnly) {\n      var include, exclude, matching;\n      var defaultExclude = axe._audit && axe._audit.tagExclude ? axe._audit.tagExclude : [];\n      if (runOnly.hasOwnProperty('include') || runOnly.hasOwnProperty('exclude')) {\n        include = runOnly.include || [];\n        include = Array.isArray(include) ? include : [ include ];\n        exclude = runOnly.exclude || [];\n        exclude = Array.isArray(exclude) ? exclude : [ exclude ];\n        exclude = exclude.concat(defaultExclude.filter(function(tag) {\n          return include.indexOf(tag) === -1;\n        }));\n      } else {\n        include = Array.isArray(runOnly) ? runOnly : [ runOnly ];\n        exclude = defaultExclude.filter(function(tag) {\n          return include.indexOf(tag) === -1;\n        });\n      }\n      matching = include.some(function(tag) {\n        return rule3.tags.indexOf(tag) !== -1;\n      });\n      if (matching || include.length === 0 && rule3.enabled !== false) {\n        return exclude.every(function(tag) {\n          return rule3.tags.indexOf(tag) === -1;\n        });\n      } else {\n        return false;\n      }\n    }\n    function ruleShouldRun(rule3, context3, options) {\n      var runOnly = options.runOnly || {};\n      var ruleOptions = (options.rules || {})[rule3.id];\n      if (rule3.pageLevel && !context3.page) {\n        return false;\n      } else if (runOnly.type === 'rule') {\n        return runOnly.values.indexOf(rule3.id) !== -1;\n      } else if (ruleOptions && typeof ruleOptions.enabled === 'boolean') {\n        return ruleOptions.enabled;\n      } else if (runOnly.type === 'tag' && runOnly.values) {\n        return matchTags(rule3, runOnly.values);\n      } else {\n        return matchTags(rule3, []);\n      }\n    }\n    var rule_should_run_default = ruleShouldRun;\n    function attributeMatches(node, attrName, filterAttrs) {\n      if (typeof filterAttrs[attrName] === 'undefined') {\n        return false;\n      }\n      if (filterAttrs[attrName] === true) {\n        return true;\n      }\n      return element_matches_default(node, filterAttrs[attrName]);\n    }\n    function filterHtmlAttrs(element, filterAttrs) {\n      if (!filterAttrs) {\n        return element;\n      }\n      var node = element.cloneNode(false);\n      var outerHTML = node.outerHTML;\n      var attributes4 = get_node_attributes_default(node);\n      if (cache_default.get(outerHTML)) {\n        node = cache_default.get(outerHTML);\n      } else if (attributes4) {\n        node = document.createElement(node.nodeName);\n        Array.from(attributes4).forEach(function(attr) {\n          if (!attributeMatches(element, attr.name, filterAttrs)) {\n            node.setAttribute(attr.name, attr.value);\n          }\n        });\n        cache_default.set(outerHTML, node);\n      }\n      Array.from(element.childNodes).forEach(function(child) {\n        node.appendChild(filterHtmlAttrs(child, filterAttrs));\n      });\n      return node;\n    }\n    var filter_html_attrs_default = filterHtmlAttrs;\n    function pushNode(result, nodes) {\n      var temp;\n      if (result.length === 0) {\n        return nodes;\n      }\n      if (result.length < nodes.length) {\n        temp = result;\n        result = nodes;\n        nodes = temp;\n      }\n      for (var _i8 = 0, l = nodes.length; _i8 < l; _i8++) {\n        if (!result.includes(nodes[_i8])) {\n          result.push(nodes[_i8]);\n        }\n      }\n      return result;\n    }\n    function reduceIncludes(includes) {\n      return includes.reduce(function(res, el) {\n        if (!res.length || !contains_default(res[res.length - 1], el)) {\n          res.push(el);\n        }\n        return res;\n      }, []);\n    }\n    function select(selector, context3) {\n      var result = [];\n      var candidate;\n      if (axe._selectCache) {\n        for (var j = 0, l = axe._selectCache.length; j < l; j++) {\n          var item = axe._selectCache[j];\n          if (item.selector === selector) {\n            return item.result;\n          }\n        }\n      }\n      var curried = function(context4) {\n        return function(node) {\n          return is_node_in_context_default(node, context4);\n        };\n      }(context3);\n      var reducedIncludes = reduceIncludes(context3.include);\n      for (var _i9 = 0; _i9 < reducedIncludes.length; _i9++) {\n        candidate = reducedIncludes[_i9];\n        result = pushNode(result, query_selector_all_filter_default(candidate, selector, curried));\n      }\n      if (axe._selectCache) {\n        axe._selectCache.push({\n          selector: selector,\n          result: result\n        });\n      }\n      return result;\n    }\n    var select_default = select;\n    function setScroll(elm, top, left) {\n      if (elm === window) {\n        return elm.scroll(left, top);\n      } else {\n        elm.scrollTop = top;\n        elm.scrollLeft = left;\n      }\n    }\n    function setScrollState(scrollState) {\n      scrollState.forEach(function(_ref21) {\n        var elm = _ref21.elm, top = _ref21.top, left = _ref21.left;\n        return setScroll(elm, top, left);\n      });\n    }\n    var set_scroll_state_default = setScrollState;\n    function tokenList(str) {\n      return (str || '').trim().replace(/\\s{2,}/g, ' ').split(' ');\n    }\n    var token_list_default = tokenList;\n    function validInputTypes() {\n      return [ 'hidden', 'text', 'search', 'tel', 'url', 'email', 'password', 'date', 'month', 'week', 'time', 'datetime-local', 'number', 'range', 'color', 'checkbox', 'radio', 'file', 'submit', 'image', 'reset', 'button' ];\n    }\n    var valid_input_type_default = validInputTypes;\n    var langs = [ , [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, 1, 1, , 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, , , , , , 1, 1, 1, 1, , , 1, 1, 1, , 1, , 1, , 1, 1 ], [ 1, 1, 1, , 1, 1, , 1, 1, 1, , 1, , , 1, 1, 1, , , 1, 1, 1, , , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , , , , 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1 ], [ , 1, , , , , , 1, , 1, , , , , 1, , 1, , , , 1, 1, , 1, , , 1 ], [ 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , , 1, 1, 1, 1, , , 1, , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , 1, 1, , , 1, , , , , 1, 1, 1, , 1, , 1, , 1, , , , , , 1 ], [ 1, , 1, 1, 1, 1, , , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ 1, , 1, , 1, , , , , 1, , 1, 1, 1, 1, 1, , , , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, , 1, , 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , 1, , , 1, , 1, , , , 1, 1, 1, , , , , , , , , , , 1 ], [ 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1 ], [ 1, 1, 1, 1, 1, , , 1, , , 1, , , 1, 1, 1, , , , , 1, , , , , , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1 ], [ , 1, , 1, 1, 1, , 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, , , 1, 1, , , , , , 1, 1 ], [ 1, 1, 1, , , , , 1, , , , 1, 1, , 1, , , , , , 1, , , , , 1 ], [ , 1, , , 1, , , 1, , , , , , 1 ], [ , 1, , 1, , , , 1, , , , 1 ], [ 1, , 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , , 1, , , 1, , 1, 1, , 1, , 1, , , , , 1, , 1 ], [ , 1, , , , 1, , , 1, 1, , 1, , 1, 1, 1, 1, , 1, 1, , , 1, , , 1 ], [ , 1, 1, , , , , , 1, , , , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1 ], [ , 1, , 1, 1, 1, , , 1, 1, 1, 1, 1, 1, , 1, , , , , 1, 1, , 1, , 1 ], [ , 1, , 1, , 1, , 1, , 1, , 1, 1, 1, 1, 1, , , 1, 1, 1 ], [ , 1, 1, 1, , , , 1, 1, 1, , 1, 1, , , 1, 1, , 1, 1, 1, 1, , 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, , 1, 1, 1, , 1, , , , , 1, 1, 1, , , 1, , 1, , , 1, 1 ], [ , , , , 1, , , , , , , , , , , , , , , , , 1 ], [ 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, , 1, 1, 1, , 1, 1, , , , 1, 1, 1, 1, 1, , , 1, 1, 1, , , , , 1 ], [ 1, 1, 1, 1, , , , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , , , , , , 1, , , , , , , 1 ], [ , 1, 1, , 1, 1, , 1, , , , , , , , , , , , , 1 ], , [ 1, 1, 1, , , , , , , , , , , , , 1 ], [ , , , , , , , , 1, , , 1, , , 1, 1, , , , , 1 ] ], [ , [ 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1 ], [ , , , 1, , , , , , , , , , , , , , , 1 ], [ , 1, , , 1, 1, , 1, , 1, 1, , , , 1, 1, , , 1, 1, , , , 1 ], [ 1, , , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, , , 1, , , , 1 ], , [ , 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, , 1, 1, , , 1, 1, 1, 1, , 1, 1, , 1 ], [ , 1, , , 1, , , 1, , 1, , , 1, 1, 1, 1, , , 1, 1, , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1, , , 1, , , 1, , 1 ], [ , 1, , , , , , , , , , 1, 1, , , , , , 1, 1, , , , , 1 ], [ , , , , , , , 1, , , , 1, , 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, , , , 1, 1, 1, 1, 1, , , 1, 1, , 1, 1, 1, 1, 1 ], [ , 1, , , 1, 1, , 1, , 1, 1, 1, , , 1, 1, , , 1, , 1, 1, 1, 1, , 1 ], [ , 1, 1, 1, , 1, 1, , 1, 1, , 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1 ], [ , , , , , , , , , , , , , , , , 1 ], , [ , 1, 1, 1, 1, 1, , 1, 1, 1, , , 1, , 1, 1, , 1, 1, 1, 1, 1, , 1, , 1 ], [ , , 1, , , 1, , , 1, 1, , , 1, , 1, 1, , 1 ], [ , 1, 1, , 1, , , , 1, 1, , 1, , 1, 1, 1, 1, , 1, 1, 1, 1, , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ 1, 1 ], [ , 1, , , , , , , , , , 1, 1, , , , , , 1, 1, , 1, , 1, , 1, 1 ], , [ , 1, 1, , 1, , , 1, , 1, , , , 1, 1, 1, , , , , , 1, , , , 1 ], [ 1, 1, , , 1, 1, , 1, , , , , 1, , 1 ] ], [ , [ , 1 ], [ , , , 1, , , , 1, , , , 1, , , , 1, , , 1, , , 1 ], [ , , , , , , , , , , , , , , , , , , 1, 1, , , , , , 1 ], , [ 1, , , , , 1 ], [ , 1, , , , 1, , , , 1 ], [ , 1, , , , , , , , , , , 1, , , 1, , , , , , , , , 1, 1 ], [ , , , , , , , , , , , , , , , , , , , , , 1 ], [ , , , , , , , , , , , , , , , , 1, , , , 1, , 1 ], [ , 1 ], [ , 1, , 1, , 1, , 1, , 1, , 1, 1, 1, , 1, 1, , 1, , , , , , , 1 ], [ 1, , , , , 1, , , 1, 1, , 1, , 1, , 1, 1, , , , , 1, , , 1 ], [ , 1, 1, , , 1, , 1, , 1, , 1, , 1, 1, 1, 1, , , 1, , 1, , 1, 1, 1 ], [ 1, 1, 1, 1, 1, , 1, , 1, , , , 1, 1, 1, 1, , 1, 1, , , 1, 1, 1, 1 ], [ 1, , , , , , , , , , , , , , , , , , , , 1 ], [ , , , , , , , , , 1 ], , [ , 1, , , , , , 1, 1, 1, , 1, , , , 1, , , 1, 1, 1, , , 1 ], [ 1, , , , , 1, , 1, 1, 1, , 1, 1, 1, 1, 1, , 1, , 1, , 1, , , 1, 1 ], [ 1, , 1, 1, , , , , 1, , , , , , 1, 1, , , 1, 1, 1, 1, , , 1, , 1 ], [ 1, , , , , , , , , , , , , , , , , 1 ], [ , , , , , 1, , , 1, , , , , , 1 ], [ , , , , , , , , , , , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , , , 1 ], [ , 1, , , , , , , , , , , , , , 1 ], [ , 1, , , , 1 ] ], [ , [ 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, , 1, 1, , , 1, 1, 1 ], [ , , , , , , , , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , , 1 ], , [ , , , , , , , , , , , , , , , , , , 1 ], [ 1, , , , , , , , , 1, , , , 1 ], [ , , , , , , , , , , , , , , , , , , 1 ], , [ 1, 1, , , , 1, 1, , , , , , 1, , , , 1, , 1, , 1, 1, , 1 ], [ 1 ], [ , , , , , , , , , , , 1, , , , , , , , , , , 1 ], [ , 1, , , , , , , 1, 1, , , 1, , 1, , , , 1, , , , , , , 1 ], [ , , , , , , , , , , , , , , , , 1, , , , , 1 ], [ , , 1, , , , , 1, , 1 ], [ 1, , , , 1, , , , , 1, , , , 1, 1, , , , 1, 1, , , , , 1 ], [ , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , , 1 ], [ 1, , , 1, 1, , , , , , , 1, , 1, , 1, 1, 1, 1, 1, 1 ], [ , , , , , 1, , , , , , , 1, , , , , , , 1 ], , [ , , 1, 1, 1, 1, 1, , 1, 1, 1, , , 1, 1, , , 1, 1, , 1, 1, 1, , , 1 ], [ , , , , , , , , , , , , , , , , , , 1 ], [ , 1, , , , 1 ], , [ 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , , , 1, 1, 1, 1, , , , , , 1, , 1, , , , 1, , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , , 1 ], [ , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, , , , 1, , 1, , , 1, 1, 1, 1, 1 ], [ , , , , , , , , , , , 1, , , , , , , , , 1, , , , 1 ], [ , 1, 1, , 1, 1, , 1, , , , 1, 1, , 1, 1, , , 1, , 1, 1, , 1 ], [ , 1, , 1, , 1, , , 1, , , 1, 1, , 1, 1, , , 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, , , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ , , , , , , , , , 1, , 1, , 1, 1, , , , 1, , , 1 ], [ , 1, , , 1, 1, , , , , , , , , 1, 1, 1, , , , , 1 ], [ 1, , , 1, 1, , , , 1, 1, 1, 1, 1, , , 1, , , 1, , , 1, , 1, , 1 ], [ , 1, 1, , 1, 1, , 1, 1, , , , 1, 1, 1, , , 1, 1, , , 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, , 1, 1, , 1, , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ , 1, , , , 1, , , , , , , , , 1 ], [ , 1, , , , , , , , 1, , , , , 1, , , , 1, , , 1 ], [ , 1, 1, 1, 1, , , 1, 1, 1, 1, 1, , 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , , , 1, , 1, , , , , 1, 1, 1, 1, 1, , , 1, , , , 1 ], [ , 1, , , , , , , , 1, , , , , , , , , , , , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1 ], [ 1, 1, , 1, , 1, 1, , , , 1, , 1, 1, 1, 1, 1, , 1, 1, , , , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, , 1, 1, , , 1, 1, , , , 1, , 1, 1, , 1, 1 ], [ , , , , , , , , , , , , , , , , , , , , , , , , 1 ], [ , 1, 1, , 1, 1, 1, 1, , 1, , , 1, 1, 1, 1, , , 1, , , , , , , 1 ], [ , 1, , , , , , , , 1, , , , , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1 ], [ , 1, 1, , , , , , , , , , , , 1, 1, , , , , , 1 ], [ , 1, , , , , , , 1 ], [ , , , , , , , , , , , , , , 1, , , , , 1, , , , , , 1 ], [ 1, 1, , , 1, , , 1, 1, 1, , , , 1 ], , [ , , , , , , , , , , , , , 1, , , , , , , , , , 1 ], [ , , , , , , , , , 1, , , , , , , , , 1, , , , , , , 1 ], [ 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, , 1, , , 1, , 1, , , 1, 1 ], [ , , , , , , , , , 1 ], [ , 1, , , , 1, , , , , , 1, , , 1, , , , , 1 ], [ , 1, 1, , 1, 1, , , , , , , , , , , , , , , 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , 1, 1, , 1, 1, 1, 1, , , , 1, 1, , , , 1, , 1 ], [ 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, , 1, 1, , 1, 1 ], [ , , , , , , , , , , , , , , , 1, , , , 1 ], , [ 1, 1, , 1, , 1, , , , , , 1, , 1, , 1, 1, , 1, , 1, 1, , 1, 1, , 1 ], [ , , 1, , , , , , 1, , , , 1, , 1, , , , , 1 ], [ 1, , , , , , , , , 1, , , , , , 1, , , , 1, , 1, , , 1 ], [ 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , 1, , 1, , , , , , 1, , , 1, , , , , , , , 1 ], [ , 1, , 1, , , , , , , , , , , , 1 ], , [ 1, 1, , , , , , , , , , , , , , , , , , , , , , 1, 1 ], [ 1 ] ], [ , [ 1, , , , , , , , , 1, , , , , 1, , 1, , 1 ], [ , 1, 1, , 1, 1, , 1, 1, 1, , , 1, 1, 1, , , , 1, , , 1, , , , 1 ], [ , 1, , , , , , , 1, , , , 1, , , , , , 1 ], [ 1, 1, 1, 1, 1, 1, , , , 1, , , , , , , , , 1, 1, 1, 1 ], [ 1 ], [ , 1, 1, , , 1, 1, , , , , 1, , 1, , , , , , , , 1, , , , 1 ], [ 1, , 1, , , 1, , 1, , , , , 1, 1, 1, 1, , , , 1, , , , 1 ], [ , , 1, , , , , , , 1, , , , , , , 1, , , , , , , 1 ], [ 1, , , , , , , , , , , , , , 1, , , , 1 ], [ , , , 1, , 1, , , , , 1, , , , 1, 1, , , , 1 ], [ 1, , , , , 1, , , , 1, , 1, 1, , , 1, 1, , 1, 1, 1, , 1, 1, 1, , 1 ], [ , 1, 1, , , , , 1, , 1, , 1, 1, 1, , 1, 1, , , 1, , 1, 1, 1 ], [ , 1, , , , 1, , , , 1, , , 1, , 1, 1, , , 1, 1, , , , , , 1 ], [ 1, , 1, 1, , 1, , 1, 1, , 1, , 1, 1, 1, 1, 1, , , 1, 1, , , , , , 1 ], [ 1, , , , , , , , , , , , , , , , , , 1, , , 1, , 1 ], [ , , , , , , , , , 1, , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , , , , 1, , 1 ], [ , 1, , , , 1, , , 1, 1, , 1, , , 1, 1, , , 1, , , 1, , , 1, 1 ], [ 1, 1, , 1, 1, 1, , 1, 1, 1, , 1, , 1, 1, 1, , , 1, , 1, 1 ], [ 1, , 1, 1, 1, 1, , , , 1, , 1, 1, 1, , 1, , , 1, 1, 1, , 1, 1, 1, 1, 1 ], [ 1, , , , , , , , , , , , , 1 ], [ , , 1, , , , , , , , , , , , , , , , , , , , 1 ], [ 1, , , , , , , , , , , 1, , 1, , 1, , , , 1 ], [ , , , 1, , , , , , , , , 1 ], [ , 1, , , , , , , , , , , , , , 1, , , , , , , , , 1 ], [ , , , , , , , , 1, 1, , , , , , , , , 1, , , , , , , , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , , 1, 1, 1 ], [ , , , , , 1, , , , 1, 1, 1, , , 1, 1, , , 1, , 1, 1, , 1 ], [ , , , , , , , , , , , , , , , , , , , 1, 1 ], [ , 1, , , , , , 1, , , , , , , , , , , , , 1 ], [ , , 1, , , 1, , 1, 1, 1, , 1, 1, , 1, , , , 1, , 1, 1 ], , [ , , 1, , , 1, , , , , , 1, , , , 1 ], [ , , , , , , , , , 1, , , , , , , , , , 1 ], [ 1, 1, 1, 1, 1, 1, , 1, 1, 1, , , 1, 1, , 1, , 1, , , 1, 1, 1, , , 1 ], [ , , , , , 1, , , , , , , , , , , , , 1 ], [ , 1, , , , , , , , , , , , 1, , 1, 1, , 1, , , 1 ], [ , , , , , 1, , , , , , , , , , , , , , 1 ], [ , 1, 1, 1, 1, , , , , 1, , , 1, , 1, , , , 1, 1, , , , 1, 1 ], [ , 1, , , 1, , , 1, , 1, 1, , 1, , , , , , , 1 ], [ , , 1, , 1, , , 1, , , , , , , , , , , 1, 1, , , , 1 ], [ , 1, , , , , , , , , , , , , , , , , 1, , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , 1 ], [ , 1, 1, , , , , , , , , , , , , , , , 1, , 1, 1 ], [ , , , , , , , , , , , , 1 ], , [ , 1, 1, 1, 1, , , , 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1, , 1 ], [ 1, , , , 1, , , , , , , , , , 1 ], [ 1, , , , , , , , , 1 ], , [ , 1, , , , 1, , , , , , , , , , , , , , , , , , , , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, , , , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , 1, 1, 1, 1, , 1, , , , 1, 1, , , 1, 1, , 1 ], [ , 1, 1, , 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , , , , , , , , , , , 1 ], [ 1, 1, 1, , , , , 1, 1, 1, , 1, 1, 1, 1, , , 1, 1, , 1, 1, , , , , 1 ], [ , 1, , , , , , , 1, 1, , , 1, 1, 1, , 1, , , 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , 1, , , , 1, , , , 1, , , 1, , , , 1, , , , , , , 1, 1 ], [ , 1, 1, 1, 1, 1, , , 1, 1, 1, , 1, 1, 1, 1, , , 1, 1, 1, 1, , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, , 1, , , 1, 1, 1, 1, , 1, 1, 1, 1, , , , 1, , 1, , 1, , , 1 ], [ 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , , 1, , , , , , , , , 1, 1, , , , , , , , , 1 ], , [ , 1, , 1, , 1, , 1, , 1, , 1, 1, 1, 1, 1, , , 1, , 1, , 1, , , , 1 ], [ , 1, , , 1, 1, , 1, 1, 1, , , 1, 1, 1, 1, 1, , 1, 1, 1, , 1, , , 1 ], [ 1, , , 1, , , , 1, 1, 1, , , , , 1, 1, , , , 1, , 1 ], [ 1, 1, , 1, 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ 1, 1, , , , , , , , 1, , 1, , , , , , , , 1, , 1 ], [ , 1, , , , 1, , 1, 1, , , , 1, 1, , 1, , , , 1, 1, 1, , 1 ], , [ , 1, , , , , , 1, , , , , , , 1 ], [ , , , , , , , , 1, , , , 1, , 1, , , , , , , , , , , , 1 ] ], [ , [ , 1, 1, , 1, 1, 1, 1, , 1, 1, 1, , 1, 1, , 1, 1, , 1, 1, 1, 1, 1, 1, , 1 ], [ , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1 ], [ , 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, , 1 ], [ 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , 1, , , , , , , , 1, , , , , , 1, , , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, , , , 1, 1, 1, , 1, 1, 1, 1, , , 1, 1, 1, 1, , , 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1 ], [ 1, 1, , 1, , 1, , 1, , 1, 1, 1, 1, 1, 1, 1, , 1, 1, , , 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, 1, , , , , 1, 1, 1, , , 1, , 1, 1, , , , 1, , 1, , , 1, 1 ], [ , , , , , , , 1, , , , 1, 1, 1, 1, 1, , 1, , , , , , , , 1 ], [ 1, 1, 1, 1, , 1, 1, 1, , 1, , 1, 1, 1, 1, , 1, , 1, , 1, 1, , , 1, , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , , 1, 1, , 1, , 1, 1, 1, , 1, , 1, 1, , 1, 1, , 1, , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , , , , , , , 1, , , , , 1, , 1 ], [ , 1, 1, 1, , 1, , 1, , 1, , , , 1, , 1, , , 1, , , , , , 1, 1 ], [ , 1, , , 1, 1, , 1, , 1, , 1, 1, 1, 1, 1, , 1, 1, , , 1, , , 1 ], [ 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, , , , , 1, , 1, , 1, , , , , , 1, , 1, , , , 1, 1 ] ], [ , [ , 1, , 1, , , , , , , , , , , , , , , 1, , , , 1 ], [ , , , , , , , , , 1, , 1, 1, 1, , 1, , , 1, , 1, 1 ], [ 1, 1, , , , , , , 1, , , , , , , 1, , , , , , 1 ], [ , 1, , , , , , , , , , 1, , , , , , , , , 1, 1 ], , [ , , , , , , , , , , , , , , , 1, , , , 1, , 1 ], [ , , 1, 1, , 1, , 1, , , , , , , , 1, , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , , , 1, 1 ], [ , 1, , , , , , , , , , , , , 1 ], [ 1, , 1, 1, , , , 1, , , , , , , , , 1, , , 1, , , 1, 1 ], [ , 1, 1, , 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, , 1, 1, , 1 ], [ , 1, , , 1, 1, , , , , , 1, , 1, , 1, , , 1, , 1, 1 ], [ 1, 1, 1, 1, , 1, , 1, , 1, , 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1 ], [ , 1, 1, , , 1, , 1, , 1, 1, 1, , , 1, 1, 1, , 1, 1, 1, 1, , 1, 1 ], [ , , , , 1, , , 1, , , , , , , 1, , , , 1, 1 ], [ , 1, , , , , , , , , , 1, , 1, , 1, , , , , 1, , , , , 1 ], , [ 1, 1, , 1, , 1, , 1, 1, , , , , , 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, , 1, , , , , , 1, , , , , , 1, 1, , , , 1, 1, , , 1 ], [ , 1, 1, , 1, 1, , , , 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ , 1, 1, , , 1, , , , 1, , , , 1, 1 ], [ , , , , 1 ], [ , , , , , , , , , 1, , , 1 ], , [ , , 1, , 1, , , , , , , , , 1, , , , , , , , , , , , 1 ], [ , , , , , , , , , , , , , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , 1, 1, , 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , , 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, , , , , 1 ], [ , 1, , 1, , , , , , 1, , , , , 1, 1, , , , , 1, 1 ], [ , 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, , , 1, , 1, 1, 1 ], [ , 1, , , , 1, , , , , , , 1 ], [ , 1, , , 1, , , 1, , 1, , 1, 1, , 1, , , , , 1, , 1, , , , 1, 1 ], [ , 1, , , 1, , , 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , , , , , , , , , , , , , , , , , , 1 ], [ , 1, 1, 1, , , , 1, 1, , , , , , 1, 1, 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1, 1 ], [ , 1, , , , 1, , , , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , , 1, , , , , , , , 1, , , , , , , , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ 1, 1, , 1, 1, 1, , 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1 ], [ 1, 1, , , , , , , 1, 1, , , , , 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, , 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1 ], , [ , 1, 1, , , , , 1, , 1, , , , 1, 1, 1, , , 1, , , , , 1 ], [ , , , , , , , , , , , , , 1 ], [ , , , , , 1, , , , , , , , 1, 1, , , , , 1, , 1, , , 1, 1 ], [ , , , , , , , , , , , , , , 1 ] ], [ , [ , 1 ], , , , , , , , , , , , , , , , , , , , [ 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, , , 1, 1, 1, 1, 1 ], [ , 1, , 1, , 1, , , 1, 1, 1, , 1, 1, 1, 1, 1, , , 1, , , , 1, , 1, 1 ], [ , 1, , 1, , 1, , , 1, , , , , 1, , , , , , 1, 1 ], [ , 1, , 1, , , , , 1, , , , 1, , 1, 1, 1, 1, 1, 1, 1, 1, , 1 ], [ , 1, , , , , , , , , , , , , , , 1 ] ], [ , [ , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , 1, , , , , , , , , 1, 1, , , , 1 ], [ , , , , , , 1 ], [ , , 1 ], [ , 1, 1, , , 1, , 1, , 1, 1, , 1, 1, 1, , , , 1, 1, 1, , , , , 1 ], , [ , 1, , , , 1, , , , , , 1, , , 1, , , , 1, 1, , 1 ], [ , , , , , , , 1, , , , , , , , , 1 ], [ , 1, , , , 1, 1, , , , , , 1, 1, 1, , , , 1, , 1, 1 ], [ , , , , , , , 1, , 1, , , , , , , , , , 1 ], [ , 1, 1, , , , , , 1, 1, , , , 1, , , , , , , 1, , , 1 ], , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, , , 1, , , 1, , , , , 1, , 1, , 1, , 1, , , , , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, , , , , 1, 1, , 1, 1, , 1, , , 1, , 1 ], [ , , , , , , , , , , , , , , 1, , , , , , 1 ], , [ , , , , , , , , , 1, , , , , , 1, , , , , 1 ], [ , , 1, , , , , , , 1, , , 1, 1 ], [ , , , 1, , , , , 1, , , , , 1, , , , , , 1, , , , 1 ], [ 1, , 1, 1, , 1, 1, 1, 1, 1, , 1, , , , 1, 1, 1, , , 1, 1, , , , 1, 1 ], , [ 1, 1, , , , , , , , , , 1, , 1, , 1, , , 1 ], [ , , , , 1, , , , , , , , , , , , , , , , , , , 1 ], [ , , , , , , , , , , , , , , 1, , , , , 1, , 1 ], [ , , , , , , , , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, , , 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ , , 1, , , 1, , , , , , , , 1, , , , , , 1, , , , 1 ], [ 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, 1, , 1, , , , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , , 1, 1, 1, 1, , 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ 1, 1, , , , , , , 1, , 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1 ], [ 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1 ], [ 1, 1, 1, 1, , 1, , 1, , 1, 1, 1, 1, 1, , , , 1, 1, 1, 1, , 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, , 1, , , , , , 1, , 1, , , , , 1, 1, , , , , 1 ], [ 1, , 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , 1, 1, , 1, , 1, , , , 1, 1, 1, 1, 1, , , 1, 1, , 1, , 1 ], [ , 1, 1, 1, 1, , , , , 1, , 1, 1, 1, 1, 1, , , 1, 1, , , , 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, , , , , 1, , 1, , 1, , , 1, , , 1, 1, , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , , , , , , , 1, , , , , 1, 1, , , 1, , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , , 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , , , , 1, , 1, 1, , 1, 1, 1, 1, 1, , , 1, , 1, , 1 ], [ 1, 1, 1, , 1, 1, 1, 1, , , , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1 ], [ 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , 1, , 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1 ], [ , , 1, , , , , , , , , , 1, 1, 1, 1, 1, 1, 1, , 1, 1, , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , 1, 1, , , , , , 1, 1, 1, 1, 1, , , , 1, 1, 1, , 1, 1, 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, 1, , , , 1, 1, 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1 ], [ , 1, 1, 1, , 1, , 1, 1, 1, 1, , , 1, 1, 1, , 1, 1, 1, 1, 1, , , 1, 1 ], [ 1, 1, , , , 1, , , 1, 1, 1, , 1, , 1, , 1, , 1, 1, 1, 1, 1, , 1, , 1 ], [ , 1, , , , , , , 1, , 1, , 1, 1, 1, 1, , , , , , , , , 1 ] ], [ , [ , , , , , , , , , , , , , 1, 1, , , , 1 ], [ , 1, , , , , , , , 1, , , 1, , , , , , 1, , , 1, , , , 1 ], , [ , 1, , , , 1, , 1, , 1, 1, , 1, 1, , , , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , , 1 ], [ , , , , , , , , , 1 ], [ 1, 1, 1, , , 1, , , , , , , , , 1, 1, , , , , , , , , , 1 ], [ , 1, , , , , , , , , , , , , 1 ], [ , , , , , , , , , , , , , , , , , , , 1, , , 1 ], [ , , , , , , , , , 1 ], [ 1, 1, , , , , , 1, 1, 1, , 1, 1, , , , 1, 1, , 1, , 1, 1, 1, , 1 ], [ , 1, 1, 1, , 1, 1, , , 1, , 1, 1, 1, 1, , , , , , , 1, , 1 ], [ , 1, 1, 1, 1, , , 1, , 1, , , , 1, 1, 1, 1, , 1, 1, , 1 ], [ , 1, , , 1, 1, , 1, , , , 1, , 1, 1, , 1, , 1, , , 1, , , 1, , 1 ], [ , , , , , , , , , , , 1 ], [ , , , , , , , , , 1, , , , , , , , , , , , , 1 ], , [ 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , , , , , 1, 1, , 1, , , , , 1, , , 1, , 1 ], [ , 1, , , , 1, , , 1, , , , , , , , 1, , 1, , , 1 ], [ , , , , , , , , , , , , , 1, 1, , , , 1, , , 1 ], [ , , , , , 1, , , 1, , , , 1 ], [ , 1 ], , [ , 1 ], [ 1, , , , , , , , , , , , , , 1, , , , , 1 ] ], [ , [ , 1, , , , 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, , 1, 1, , 1, 1, , , 1 ], [ , , 1, , , , , , , , , 1 ], , , [ 1, , , 1, 1, , , , , , , , 1, 1, , 1, 1, , 1 ], , [ , , , , , , , , , , , , , , , , , , 1, , 1 ], , [ 1, , , 1, 1, , 1, 1, , , , , 1, , 1, , , , , 1, 1, , 1 ], , [ , 1, , , , , , , , 1, 1, 1, 1, 1, , 1, 1, , , , 1, 1 ], [ , , , , , , , , , , , , , , , , 1, , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , , , , , , , , , , , 1, , 1, , , 1 ], [ 1, , , , , , , , , , , , , , , , , , 1, , 1 ], , , [ , 1, , , , , , , , , , , , , , 1, , , , 1, 1 ], [ , , , , , , , , , 1, , , 1, , , , , , , , , , 1 ], [ , , , , , , , , , , , , , , , 1 ], [ , , , , , , , , , , , , , 1, 1, , , , , , 1 ], , [ , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , , 1, 1, , 1, 1, 1, 1, 1, 1, , , 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, , , , , , , , 1 ], [ , , , , 1, , , 1, , , 1, 1, , , , , , , , , , 1, , , , 1 ], [ , 1, , 1, 1, , , 1, 1, 1, , , , 1, 1, 1, 1, , 1, 1, 1, 1, , 1 ], [ , , , , , , , 1 ], [ , 1, 1, , , , , 1, , 1, , , , , , 1, , , , , , 1, , 1, , 1 ], [ , 1, , , , , , 1, , , , 1, , , , , , , , , , 1 ], [ , , 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , , 1, , 1, 1, 1, 1, , 1 ], [ , 1, , , , , , , , 1 ], [ , 1, 1, , 1, , , , , , , , 1, , , , , , 1, , , 1, , 1, , 1 ], [ , 1, , 1, , 1, , 1, 1, 1, , 1, 1, 1, , 1, , , 1, 1, , 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , , 1, 1, , , , 1, 1, 1, , , , 1, 1, , , 1, 1 ], [ , , 1, 1, 1, 1, , 1, , 1, , 1, , 1, 1, 1, 1, , , , , 1, , 1, , 1 ], [ 1, 1, 1, 1, 1, 1, 1, 1, , 1, , 1, , 1, 1, 1, , , 1, 1, , , , 1, , 1 ], [ , , , 1 ], , [ , 1, 1, , 1, , , 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, , 1, 1, 1, 1, 1, 1 ], [ , 1, , , , , , 1, , 1, , 1, , , , , , , 1, 1, , 1, 1 ], [ , , , , , , 1, , 1, 1, , 1, , 1, , , , , , , , , , 1 ], [ , 1, 1, , 1, , , , 1, , , , 1, 1, 1, , , , 1, , 1, 1, 1, , 1, 1 ], , [ , 1, 1, , , , , , , , , , , , , 1, , , 1, , , , , 1 ], [ , 1, , , , , , , , , , , , , , , , , , , , , , 1 ], [ , 1, 1, , , , , , , 1, , , , 1, , , , , 1, , , , , , , 1 ] ], [ , [ , 1, 1, 1, 1, 1, , 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1 ], [ , 1, 1, 1, 1, 1, , 1, , 1, 1, , , 1, 1, 1, 1, , 1, , , , , 1, 1, 1 ], [ , , 1, 1, , 1, , 1, 1, , , , 1, 1, 1, 1, , , 1, , 1, 1, 1, 1, , 1 ], [ , 1, , 1, , , , , , , , 1, , 1, , 1, , , , , , , , , , 1 ], [ , , 1, , 1, , , 1, , , , , 1, 1, , , 1, , 1, 1, 1, 1 ], [ , 1 ], [ , 1, 1, , 1, , 1, 1, , 1, , , 1, 1, 1, , , , 1, , , 1, , 1 ], [ 1, 1, , 1, 1, 1, , , , , , , , , , , , , 1, , 1, 1, 1 ], [ , 1, 1, , , , , , , 1, , , 1, , 1, , 1, , 1, 1, , , 1, , , 1 ], [ , , 1, , , , , , , , , , , , , , , , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, 1, 1, 1, , 1, , 1, , , , , 1, 1, 1, , , 1, , 1, , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, , , 1, 1, 1, , 1, , 1, 1, 1, , , 1, 1, 1, 1, , , , 1, 1 ], [ , , , 1, 1, , , 1, , 1, , 1, , 1, 1, 1, 1, , 1, , , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , , , , , , , , , , , , , , , , , 1 ], [ , 1, 1, , 1, 1, , 1, , 1, , , , 1, 1, , , 1, 1, , 1, 1, , 1 ], [ , 1, 1, 1, 1, 1, , , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, , , 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1 ], [ , 1, 1, , 1, , , 1, , , 1, , 1, 1, 1, 1, 1, , 1, , 1, 1 ], [ , , , , , 1, , , , 1, , , , , 1, 1, , , , 1 ], [ , 1, , 1, 1, 1, , 1, , , 1, 1, 1, , , 1, , , 1, , 1, , , 1 ], [ , , 1, , , , , , , , , 1, , 1, , , , , 1, , 1 ], [ , 1, 1, , , , , , , , 1, 1, 1, , , , , , , , 1, , , , , 1 ], [ , , , , , , , , 1, , , , , 1, , , 1 ] ], [ , [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, 1, , 1, 1, , , 1, 1, 1, 1, 1, 1, 1, 1, , , , , , , , , 1, 1 ], [ , , , , , , , , 1, , , , 1, , 1, , 1 ], [ , 1, , , 1, 1, , 1, , , , 1, , , , , , , , 1 ], [ , 1, , 1, , 1, , , , 1, 1, , 1, , 1, , , , 1, 1, 1, 1, 1, , , 1 ], , [ , 1, , , , , , , , 1, , , 1, 1, , , 1, , 1, 1, , 1, , 1 ], [ , 1, , , 1, , , , , , , , 1, , , , , , , 1 ], [ 1, 1, , , , , 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1 ], , [ , 1, , , , , , 1, , 1, , 1, 1, 1, 1, 1, , , 1, , 1, 1, , , , 1 ], [ , 1, 1, , , 1, , 1, , 1, , , 1, 1, 1, 1, , , 1, , , 1, , , , 1 ], [ , 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , , , 1, , 1 ], [ , 1, , , 1, 1, , 1, 1, , , 1, 1, , 1, 1, , 1, , 1, , 1 ], [ 1, , 1, , , , , 1, , 1, , 1, 1, 1, 1, , , , , 1, 1, , , , 1, 1 ], [ , 1, 1, , , , , 1, 1, , , 1, , 1, 1, 1, 1, , , , , , , , , , 1 ], , [ , 1, 1, , , 1, , , , 1, , 1, 1, 1, 1, 1, , , , 1, , , , 1, , 1 ], [ , , , 1, 1, , , 1, , , , , 1, , 1, 1, 1, , 1, 1, , , , , , 1 ], [ , 1, , , , , , , , , , , 1, , , , 1, , , , , , , 1, , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, , 1, 1, 1, , 1, 1, , 1, 1, 1, 1 ], [ , 1, , , , , , , , , , , , , , , , , , , 1 ], [ , 1, , , , , , 1, , , , , 1, , 1, , , 1, 1, , 1, 1, , 1 ], [ , 1, , , , , , 1, , , , , 1, 1, , , , , , , , 1, , , , 1 ], [ , , , , , , , , , , , , , , , , , , 1, , , 1, , , , , 1 ], [ , , , , , , , 1, , , , 1 ] ], [ , [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , 1, , 1, , , , , , , 1, , , , , , , , 1, , , 1 ], [ , 1, , , , , , , 1 ], [ , , , , , , , , , , 1 ], [ , 1, , , , , , 1, 1, , , , , , 1 ], , [ , 1, 1, , , , , , 1, , , , , 1, 1, , , , 1 ], [ 1, , 1, , 1, , , , , 1, , , , , 1, , , , , , , , , 1, 1 ], [ , 1, 1, , , , , , , , , 1, 1, 1, 1, , , , 1, , , , , 1, , , 1 ], , [ , 1, 1, , 1, , , 1, 1, , , 1, , , 1, 1, 1, , 1, , 1, 1, 1, , , , 1 ], [ , , , , , 1, , , , , 1, , , 1, 1, , , 1, , 1, , , , 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , 1, , , 1, 1, , 1, , , , 1, , , , , , , , 1 ], [ , , , 1, , , , , 1, , , , , 1, , 1, , 1, 1, 1 ], [ , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ , , , , , 1 ], [ , 1, , , , , , 1, , , , , , , 1, 1, 1, , , 1 ], [ , 1, , , , , , , , , , 1, 1, 1, , , , , 1, , , 1 ], [ , , , , , 1, , 1, , , , , 1, 1, 1, , 1, 1, , 1, 1, 1, , , 1, 1 ], [ 1, 1, , , , , , , 1, , , , , 1, 1, , , , , , , , , , , 1 ], , [ , 1 ], [ , , , , , , , , , , , , , , , , , , , , , , , , 1 ], [ , , 1, , , , , 1, , , 1, , , , 1, , 1 ], [ , 1, , , , , , , , , 1 ] ] ];\n    function isValidLang(lang) {\n      var array = langs;\n      while (lang.length < 3) {\n        lang += '`';\n      }\n      for (var _i10 = 0; _i10 <= lang.length - 1; _i10++) {\n        var index = lang.charCodeAt(_i10) - 96;\n        array = array[index];\n        if (!array) {\n          return false;\n        }\n      }\n      return true;\n    }\n    function _validLangs(langArray) {\n      langArray = Array.isArray(langArray) ? langArray : langs;\n      var codes = [];\n      langArray.forEach(function(lang, index) {\n        var _char2 = String.fromCharCode(index + 96).replace('`', '');\n        if (Array.isArray(lang)) {\n          codes = codes.concat(_validLangs(lang).map(function(newLang) {\n            return _char2 + newLang;\n          }));\n        } else {\n          codes.push(_char2);\n        }\n      });\n      return codes;\n    }\n    var valid_langs_default = isValidLang;\n    axe._thisWillBeDeletedDoNotUse = axe._thisWillBeDeletedDoNotUse || {};\n    axe._thisWillBeDeletedDoNotUse.utils = {\n      setDefaultFrameMessenger: setDefaultFrameMessenger\n    };\n    var SerialVirtualNode = function(_abstract_virtual_nod2) {\n      _inherits(SerialVirtualNode, _abstract_virtual_nod2);\n      var _super2 = _createSuper(SerialVirtualNode);\n      function SerialVirtualNode(serialNode) {\n        var _this2;\n        _classCallCheck(this, SerialVirtualNode);\n        _this2 = _super2.call(this);\n        _this2._props = normaliseProps(serialNode);\n        _this2._attrs = normaliseAttrs(serialNode);\n        return _this2;\n      }\n      _createClass(SerialVirtualNode, [ {\n        key: 'attr',\n        value: function attr(attrName) {\n          return this._attrs[attrName] || null;\n        }\n      }, {\n        key: 'hasAttr',\n        value: function hasAttr(attrName) {\n          return this._attrs[attrName] !== void 0;\n        }\n      }, {\n        key: 'props',\n        get: function get() {\n          return this._props;\n        }\n      }, {\n        key: 'attrNames',\n        get: function get() {\n          return Object.keys(this._attrs);\n        }\n      } ]);\n      return SerialVirtualNode;\n    }(abstract_virtual_node_default);\n    function normaliseProps(serialNode) {\n      var nodeName2 = serialNode.nodeName;\n      var _serialNode$nodeType = serialNode.nodeType, nodeType = _serialNode$nodeType === void 0 ? 1 : _serialNode$nodeType;\n      assert_default(typeof nodeType === 'number', 'nodeType has to be a number, got \\''.concat(nodeType, '\\''));\n      assert_default(typeof nodeName2 === 'string', 'nodeName has to be a string, got \\''.concat(nodeName2, '\\''));\n      nodeName2 = nodeName2.toLowerCase();\n      var type = null;\n      if (nodeName2 === 'input') {\n        type = (serialNode.type || serialNode.attributes && serialNode.attributes.type || '').toLowerCase();\n        if (!valid_input_type_default().includes(type)) {\n          type = 'text';\n        }\n      }\n      var props = _extends({}, serialNode, {\n        nodeType: nodeType,\n        nodeName: nodeName2\n      });\n      if (type) {\n        props.type = type;\n      }\n      delete props.attributes;\n      return Object.freeze(props);\n    }\n    function normaliseAttrs(_ref22) {\n      var _ref22$attributes = _ref22.attributes, attributes4 = _ref22$attributes === void 0 ? {} : _ref22$attributes;\n      var attrMap = {\n        htmlFor: 'for',\n        className: 'class'\n      };\n      return Object.keys(attributes4).reduce(function(attrs, attrName) {\n        var value = attributes4[attrName];\n        assert_default(_typeof(value) !== 'object' || value === null, 'expects attributes not to be an object, \\''.concat(attrName, '\\' was'));\n        if (value !== void 0) {\n          var mappedName = attrMap[attrName] || attrName;\n          attrs[mappedName] = value !== null ? String(value) : null;\n        }\n        return attrs;\n      }, {});\n    }\n    var serial_virtual_node_default = SerialVirtualNode;\n    var aria_exports = {};\n    __export(aria_exports, {\n      allowedAttr: function allowedAttr() {\n        return allowed_attr_default;\n      },\n      arialabelText: function arialabelText() {\n        return arialabel_text_default;\n      },\n      arialabelledbyText: function arialabelledbyText() {\n        return arialabelledby_text_default;\n      },\n      getAccessibleRefs: function getAccessibleRefs() {\n        return get_accessible_refs_default;\n      },\n      getElementUnallowedRoles: function getElementUnallowedRoles() {\n        return get_element_unallowed_roles_default;\n      },\n      getExplicitRole: function getExplicitRole() {\n        return get_explicit_role_default;\n      },\n      getOwnedVirtual: function getOwnedVirtual() {\n        return get_owned_virtual_default;\n      },\n      getRole: function getRole() {\n        return get_role_default;\n      },\n      getRoleType: function getRoleType() {\n        return get_role_type_default;\n      },\n      getRolesByType: function getRolesByType() {\n        return get_roles_by_type_default;\n      },\n      getRolesWithNameFromContents: function getRolesWithNameFromContents() {\n        return get_roles_with_name_from_contents_default;\n      },\n      implicitNodes: function implicitNodes() {\n        return implicit_nodes_default;\n      },\n      implicitRole: function implicitRole() {\n        return implicit_role_default;\n      },\n      isAccessibleRef: function isAccessibleRef() {\n        return is_accessible_ref_default;\n      },\n      isAriaRoleAllowedOnElement: function isAriaRoleAllowedOnElement() {\n        return is_aria_role_allowed_on_element_default;\n      },\n      isUnsupportedRole: function isUnsupportedRole() {\n        return is_unsupported_role_default;\n      },\n      isValidRole: function isValidRole() {\n        return is_valid_role_default;\n      },\n      label: function label() {\n        return label_default2;\n      },\n      labelVirtual: function labelVirtual() {\n        return label_virtual_default;\n      },\n      lookupTable: function lookupTable() {\n        return lookup_table_default;\n      },\n      namedFromContents: function namedFromContents() {\n        return named_from_contents_default;\n      },\n      requiredAttr: function requiredAttr() {\n        return required_attr_default;\n      },\n      requiredContext: function requiredContext() {\n        return required_context_default;\n      },\n      requiredOwned: function requiredOwned() {\n        return required_owned_default;\n      },\n      validateAttr: function validateAttr() {\n        return validate_attr_default;\n      },\n      validateAttrValue: function validateAttrValue() {\n        return validate_attr_value_default;\n      }\n    });\n    function getGlobalAriaAttrs() {\n      if (cache_default.get('globalAriaAttrs')) {\n        return cache_default.get('globalAriaAttrs');\n      }\n      var globalAttrs = Object.keys(standards_default.ariaAttrs).filter(function(attrName) {\n        return standards_default.ariaAttrs[attrName].global;\n      });\n      cache_default.set('globalAriaAttrs', globalAttrs);\n      return globalAttrs;\n    }\n    var get_global_aria_attrs_default = getGlobalAriaAttrs;\n    function allowedAttr(role) {\n      var roleDef = standards_default.ariaRoles[role];\n      var attrs = _toConsumableArray(get_global_aria_attrs_default());\n      if (!roleDef) {\n        return attrs;\n      }\n      if (roleDef.allowedAttrs) {\n        attrs.push.apply(attrs, _toConsumableArray(roleDef.allowedAttrs));\n      }\n      if (roleDef.requiredAttrs) {\n        attrs.push.apply(attrs, _toConsumableArray(roleDef.requiredAttrs));\n      }\n      return attrs;\n    }\n    var allowed_attr_default = allowedAttr;\n    function arialabelText(vNode) {\n      if (!(vNode instanceof abstract_virtual_node_default)) {\n        if (vNode.nodeType !== 1) {\n          return '';\n        }\n        vNode = get_node_from_tree_default(vNode);\n      }\n      return vNode.attr('aria-label') || '';\n    }\n    var arialabel_text_default = arialabelText;\n    function isUnsupportedRole(role) {\n      var roleDefinition = standards_default.ariaRoles[role];\n      return roleDefinition ? !!roleDefinition.unsupported : false;\n    }\n    var is_unsupported_role_default = isUnsupportedRole;\n    function isValidRole(role) {\n      var _ref23 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, allowAbstract = _ref23.allowAbstract, _ref23$flagUnsupporte = _ref23.flagUnsupported, flagUnsupported = _ref23$flagUnsupporte === void 0 ? false : _ref23$flagUnsupporte;\n      var roleDefinition = standards_default.ariaRoles[role];\n      var isRoleUnsupported = is_unsupported_role_default(role);\n      if (!roleDefinition || flagUnsupported && isRoleUnsupported) {\n        return false;\n      }\n      return allowAbstract ? true : roleDefinition.type !== 'abstract';\n    }\n    var is_valid_role_default = isValidRole;\n    function getExplicitRole(vNode) {\n      var _ref24 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, fallback = _ref24.fallback, abstracts = _ref24.abstracts, dpub = _ref24.dpub;\n      vNode = vNode instanceof abstract_virtual_node_default ? vNode : get_node_from_tree_default(vNode);\n      if (vNode.props.nodeType !== 1) {\n        return null;\n      }\n      var roleAttr = (vNode.attr('role') || '').trim().toLowerCase();\n      var roleList = fallback ? token_list_default(roleAttr) : [ roleAttr ];\n      var firstValidRole = roleList.find(function(role) {\n        if (!dpub && role.substr(0, 4) === 'doc-') {\n          return false;\n        }\n        return is_valid_role_default(role, {\n          allowAbstract: abstracts\n        });\n      });\n      return firstValidRole || null;\n    }\n    var get_explicit_role_default = getExplicitRole;\n    function getElementsByContentType(type) {\n      return Object.keys(standards_default.htmlElms).filter(function(nodeName2) {\n        var elm = standards_default.htmlElms[nodeName2];\n        if (elm.contentTypes) {\n          return elm.contentTypes.includes(type);\n        }\n        if (!elm.variant) {\n          return false;\n        }\n        if (elm.variant['default'] && elm.variant['default'].contentTypes) {\n          return elm.variant['default'].contentTypes.includes(type);\n        }\n        return false;\n      });\n    }\n    var get_elements_by_content_type_default = getElementsByContentType;\n    function toGrid(node) {\n      var table5 = [];\n      var rows = node.rows;\n      for (var i = 0, rowLength = rows.length; i < rowLength; i++) {\n        var cells = rows[i].cells;\n        table5[i] = table5[i] || [];\n        var columnIndex = 0;\n        for (var j = 0, cellLength = cells.length; j < cellLength; j++) {\n          for (var colSpan = 0; colSpan < cells[j].colSpan; colSpan++) {\n            var rowspanAttr = cells[j].getAttribute('rowspan');\n            var rowspanValue = parseInt(rowspanAttr) === 0 || cells[j].rowspan === 0 ? rows.length : cells[j].rowSpan;\n            for (var rowSpan = 0; rowSpan < rowspanValue; rowSpan++) {\n              table5[i + rowSpan] = table5[i + rowSpan] || [];\n              while (table5[i + rowSpan][columnIndex]) {\n                columnIndex++;\n              }\n              table5[i + rowSpan][columnIndex] = cells[j];\n            }\n            columnIndex++;\n          }\n        }\n      }\n      return table5;\n    }\n    var to_grid_default = memoize_default(toGrid);\n    function getCellPosition(cell, tableGrid) {\n      var rowIndex, index;\n      if (!tableGrid) {\n        tableGrid = to_grid_default(find_up_default(cell, 'table'));\n      }\n      for (rowIndex = 0; rowIndex < tableGrid.length; rowIndex++) {\n        if (tableGrid[rowIndex]) {\n          index = tableGrid[rowIndex].indexOf(cell);\n          if (index !== -1) {\n            return {\n              x: index,\n              y: rowIndex\n            };\n          }\n        }\n      }\n    }\n    var get_cell_position_default = memoize_default(getCellPosition);\n    function getScope(cell) {\n      var scope = cell.getAttribute('scope');\n      var role = cell.getAttribute('role');\n      if (cell instanceof window.Element === false || [ 'TD', 'TH' ].indexOf(cell.nodeName.toUpperCase()) === -1) {\n        throw new TypeError('Expected TD or TH element');\n      }\n      if (role === 'columnheader') {\n        return 'col';\n      } else if (role === 'rowheader') {\n        return 'row';\n      } else if (scope === 'col' || scope === 'row') {\n        return scope;\n      } else if (cell.nodeName.toUpperCase() !== 'TH') {\n        return false;\n      }\n      var tableGrid = to_grid_default(find_up_default(cell, 'table'));\n      var pos = get_cell_position_default(cell, tableGrid);\n      var headerRow = tableGrid[pos.y].reduce(function(headerRow2, cell2) {\n        return headerRow2 && cell2.nodeName.toUpperCase() === 'TH';\n      }, true);\n      if (headerRow) {\n        return 'col';\n      }\n      var headerCol = tableGrid.map(function(col) {\n        return col[pos.x];\n      }).reduce(function(headerCol2, cell2) {\n        return headerCol2 && cell2 && cell2.nodeName.toUpperCase() === 'TH';\n      }, true);\n      if (headerCol) {\n        return 'row';\n      }\n      return 'auto';\n    }\n    var get_scope_default = getScope;\n    function isColumnHeader(element) {\n      return [ 'col', 'auto' ].indexOf(get_scope_default(element)) !== -1;\n    }\n    var is_column_header_default = isColumnHeader;\n    function isRowHeader(cell) {\n      return [ 'row', 'auto' ].includes(get_scope_default(cell));\n    }\n    var is_row_header_default = isRowHeader;\n    var sectioningElementSelector = get_elements_by_content_type_default('sectioning').map(function(nodeName2) {\n      return ''.concat(nodeName2, ':not([role])');\n    }).join(', ') + ' , main:not([role]), [role=article], [role=complementary], [role=main], [role=navigation], [role=region]';\n    function hasAccessibleName(vNode) {\n      var ariaLabelledby = sanitize_default(arialabelledby_text_default(vNode));\n      var ariaLabel = sanitize_default(arialabel_text_default(vNode));\n      return !!(ariaLabelledby || ariaLabel);\n    }\n    var implicitHtmlRoles = {\n      a: function a(vNode) {\n        return vNode.hasAttr('href') ? 'link' : null;\n      },\n      area: function area(vNode) {\n        return vNode.hasAttr('href') ? 'link' : null;\n      },\n      article: 'article',\n      aside: 'complementary',\n      body: 'document',\n      button: 'button',\n      datalist: 'listbox',\n      dd: 'definition',\n      dfn: 'term',\n      details: 'group',\n      dialog: 'dialog',\n      dt: 'term',\n      fieldset: 'group',\n      figure: 'figure',\n      footer: function footer(vNode) {\n        var sectioningElement = closest_default(vNode, sectioningElementSelector);\n        return !sectioningElement ? 'contentinfo' : null;\n      },\n      form: function form(vNode) {\n        return hasAccessibleName(vNode) ? 'form' : null;\n      },\n      h1: 'heading',\n      h2: 'heading',\n      h3: 'heading',\n      h4: 'heading',\n      h5: 'heading',\n      h6: 'heading',\n      header: function header(vNode) {\n        var sectioningElement = closest_default(vNode, sectioningElementSelector);\n        return !sectioningElement ? 'banner' : null;\n      },\n      hr: 'separator',\n      img: function img(vNode) {\n        var emptyAlt = vNode.hasAttr('alt') && !vNode.attr('alt');\n        var hasGlobalAria = get_global_aria_attrs_default().find(function(attr) {\n          return vNode.hasAttr(attr);\n        });\n        return emptyAlt && !hasGlobalAria && !is_focusable_default(vNode) ? 'presentation' : 'img';\n      },\n      input: function input(vNode) {\n        var suggestionsSourceElement;\n        if (vNode.hasAttr('list')) {\n          var listElement = idrefs_default(vNode.actualNode, 'list').filter(function(node) {\n            return !!node;\n          })[0];\n          suggestionsSourceElement = listElement && listElement.nodeName.toLowerCase() === 'datalist';\n        }\n        switch (vNode.props.type) {\n         case 'checkbox':\n          return 'checkbox';\n\n         case 'number':\n          return 'spinbutton';\n\n         case 'radio':\n          return 'radio';\n\n         case 'range':\n          return 'slider';\n\n         case 'search':\n          return !suggestionsSourceElement ? 'searchbox' : 'combobox';\n\n         case 'button':\n         case 'image':\n         case 'reset':\n         case 'submit':\n          return 'button';\n\n         case 'text':\n         case 'tel':\n         case 'url':\n         case 'email':\n         case '':\n          return !suggestionsSourceElement ? 'textbox' : 'combobox';\n\n         default:\n          return 'textbox';\n        }\n      },\n      li: 'listitem',\n      main: 'main',\n      math: 'math',\n      menu: 'list',\n      nav: 'navigation',\n      ol: 'list',\n      optgroup: 'group',\n      option: 'option',\n      output: 'status',\n      progress: 'progressbar',\n      section: function section(vNode) {\n        return hasAccessibleName(vNode) ? 'region' : null;\n      },\n      select: function select(vNode) {\n        return vNode.hasAttr('multiple') || parseInt(vNode.attr('size')) > 1 ? 'listbox' : 'combobox';\n      },\n      summary: 'button',\n      table: 'table',\n      tbody: 'rowgroup',\n      td: function td(vNode) {\n        var table5 = closest_default(vNode, 'table');\n        var role = get_explicit_role_default(table5);\n        return [ 'grid', 'treegrid' ].includes(role) ? 'gridcell' : 'cell';\n      },\n      textarea: 'textbox',\n      tfoot: 'rowgroup',\n      th: function th(vNode) {\n        if (is_column_header_default(vNode.actualNode)) {\n          return 'columnheader';\n        }\n        if (is_row_header_default(vNode.actualNode)) {\n          return 'rowheader';\n        }\n      },\n      thead: 'rowgroup',\n      tr: 'row',\n      ul: 'list'\n    };\n    var implicit_html_roles_default = implicitHtmlRoles;\n    function implicitRole(node) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      node = vNode.actualNode;\n      if (!vNode) {\n        throw new ReferenceError('Cannot get implicit role of a node outside the current scope.');\n      }\n      if (node && node.namespaceURI === 'http://www.w3.org/2000/svg') {\n        return null;\n      }\n      var nodeName2 = vNode.props.nodeName;\n      var role = implicit_html_roles_default[nodeName2];\n      if (!role) {\n        return null;\n      }\n      if (typeof role === 'function') {\n        return role(vNode);\n      }\n      return role;\n    }\n    var implicit_role_default = implicitRole;\n    var inheritsPresentationChain = {\n      td: [ 'tr' ],\n      th: [ 'tr' ],\n      tr: [ 'thead', 'tbody', 'tfoot', 'table' ],\n      thead: [ 'table' ],\n      tbody: [ 'table' ],\n      tfoot: [ 'table' ],\n      li: [ 'ol', 'ul' ],\n      dt: [ 'dl', 'div' ],\n      dd: [ 'dl', 'div' ],\n      div: [ 'dl' ]\n    };\n    function getInheritedRole(vNode, explicitRoleOptions) {\n      var parentNodeNames = inheritsPresentationChain[vNode.props.nodeName];\n      if (!parentNodeNames) {\n        return null;\n      }\n      if (!vNode.parent) {\n        throw new ReferenceError('Cannot determine role presentational inheritance of a required parent outside the current scope.');\n      }\n      if (!parentNodeNames.includes(vNode.parent.props.nodeName)) {\n        return null;\n      }\n      var parentRole = get_explicit_role_default(vNode.parent, explicitRoleOptions);\n      if ([ 'none', 'presentation' ].includes(parentRole) && !hasConflictResolution(vNode.parent)) {\n        return parentRole;\n      }\n      if (parentRole) {\n        return null;\n      }\n      return getInheritedRole(vNode.parent, explicitRoleOptions);\n    }\n    function resolveImplicitRole(vNode, explicitRoleOptions) {\n      var implicitRole3 = implicit_role_default(vNode);\n      if (!implicitRole3) {\n        return null;\n      }\n      var presentationalRole = getInheritedRole(vNode, explicitRoleOptions);\n      if (presentationalRole) {\n        return presentationalRole;\n      }\n      return implicitRole3;\n    }\n    function hasConflictResolution(vNode) {\n      var hasGlobalAria = get_global_aria_attrs_default().some(function(attr) {\n        return vNode.hasAttr(attr);\n      });\n      return hasGlobalAria || is_focusable_default(vNode);\n    }\n    function resolveRole(node) {\n      var _ref25 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var noImplicit = _ref25.noImplicit, explicitRoleOptions = _objectWithoutProperties(_ref25, [ 'noImplicit' ]);\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      if (vNode.props.nodeType !== 1) {\n        return null;\n      }\n      var explicitRole2 = get_explicit_role_default(vNode, explicitRoleOptions);\n      if (!explicitRole2) {\n        return noImplicit ? null : resolveImplicitRole(vNode, explicitRoleOptions);\n      }\n      if (![ 'presentation', 'none' ].includes(explicitRole2)) {\n        return explicitRole2;\n      }\n      if (hasConflictResolution(vNode)) {\n        return noImplicit ? null : resolveImplicitRole(vNode, explicitRoleOptions);\n      }\n      return explicitRole2;\n    }\n    function getRole(node) {\n      var _ref26 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var noPresentational = _ref26.noPresentational, options = _objectWithoutProperties(_ref26, [ 'noPresentational' ]);\n      var role = resolveRole(node, options);\n      if (noPresentational && [ 'presentation', 'none' ].includes(role)) {\n        return null;\n      }\n      return role;\n    }\n    var get_role_default = getRole;\n    function fromPrimative(someString, matcher) {\n      var matcherType = _typeof(matcher);\n      if (Array.isArray(matcher) && typeof someString !== 'undefined') {\n        return matcher.includes(someString);\n      }\n      if (matcherType === 'function') {\n        return !!matcher(someString);\n      }\n      if (someString !== null && someString !== void 0) {\n        if (matcher instanceof RegExp) {\n          return matcher.test(someString);\n        }\n        if (/^\\/.*\\/$/.test(matcher)) {\n          var pattern = matcher.substring(1, matcher.length - 1);\n          return new RegExp(pattern).test(someString);\n        }\n      }\n      return matcher === someString;\n    }\n    var from_primative_default = fromPrimative;\n    function fromFunction(getValue, matcher) {\n      var matcherType = _typeof(matcher);\n      if (matcherType !== 'object' || Array.isArray(matcher) || matcher instanceof RegExp) {\n        throw new Error('Expect matcher to be an object');\n      }\n      return Object.keys(matcher).every(function(propName) {\n        return from_primative_default(getValue(propName), matcher[propName]);\n      });\n    }\n    var from_function_default = fromFunction;\n    function attributes(vNode, matcher) {\n      if (!(vNode instanceof abstract_virtual_node_default)) {\n        vNode = get_node_from_tree_default(vNode);\n      }\n      return from_function_default(function(attrName) {\n        return vNode.attr(attrName);\n      }, matcher);\n    }\n    var attributes_default = attributes;\n    function condition(arg, condition4) {\n      return !!condition4(arg);\n    }\n    var condition_default = condition;\n    function explicitRole(vNode, matcher) {\n      return from_primative_default(get_explicit_role_default(vNode), matcher);\n    }\n    var explicit_role_default = explicitRole;\n    function implicitRole2(vNode, matcher) {\n      return from_primative_default(implicit_role_default(vNode), matcher);\n    }\n    var implicit_role_default2 = implicitRole2;\n    function nodeName(vNode, matcher) {\n      if (!(vNode instanceof abstract_virtual_node_default)) {\n        vNode = get_node_from_tree_default(vNode);\n      }\n      return from_primative_default(vNode.props.nodeName, matcher);\n    }\n    var node_name_default = nodeName;\n    function properties(vNode, matcher) {\n      if (!(vNode instanceof abstract_virtual_node_default)) {\n        vNode = get_node_from_tree_default(vNode);\n      }\n      return from_function_default(function(propName) {\n        return vNode.props[propName];\n      }, matcher);\n    }\n    var properties_default = properties;\n    function semanticRole(vNode, matcher) {\n      return from_primative_default(get_role_default(vNode), matcher);\n    }\n    var semantic_role_default = semanticRole;\n    var matchers = {\n      attributes: attributes_default,\n      condition: condition_default,\n      explicitRole: explicit_role_default,\n      implicitRole: implicit_role_default2,\n      nodeName: node_name_default,\n      properties: properties_default,\n      semanticRole: semantic_role_default\n    };\n    function fromDefinition(vNode, definition) {\n      if (!(vNode instanceof abstract_virtual_node_default)) {\n        vNode = get_node_from_tree_default(vNode);\n      }\n      if (Array.isArray(definition)) {\n        return definition.some(function(definitionItem) {\n          return fromDefinition(vNode, definitionItem);\n        });\n      }\n      if (typeof definition === 'string') {\n        return matches_default(vNode, definition);\n      }\n      return Object.keys(definition).every(function(matcherName) {\n        if (!matchers[matcherName]) {\n          throw new Error('Unknown matcher type \"'.concat(matcherName, '\"'));\n        }\n        var matchMethod = matchers[matcherName];\n        var matcher = definition[matcherName];\n        return matchMethod(vNode, matcher);\n      });\n    }\n    var from_definition_default = fromDefinition;\n    function matches5(vNode, definition) {\n      return from_definition_default(vNode, definition);\n    }\n    var matches_default2 = matches5;\n    matches_default2.attributes = attributes_default;\n    matches_default2.condition = condition_default;\n    matches_default2.explicitRole = explicit_role_default;\n    matches_default2.fromDefinition = from_definition_default;\n    matches_default2.fromFunction = from_function_default;\n    matches_default2.fromPrimative = from_primative_default;\n    matches_default2.implicitRole = implicit_role_default2;\n    matches_default2.nodeName = node_name_default;\n    matches_default2.properties = properties_default;\n    matches_default2.semanticRole = semantic_role_default;\n    var matches_default3 = matches_default2;\n    function getElementSpec(vNode) {\n      var standard = standards_default.htmlElms[vNode.props.nodeName];\n      if (!standard) {\n        return {};\n      }\n      if (!standard.variant) {\n        return standard;\n      }\n      var variant = standard.variant, spec = _objectWithoutProperties(standard, [ 'variant' ]);\n      for (var variantName in variant) {\n        if (!variant.hasOwnProperty(variantName) || variantName === 'default') {\n          continue;\n        }\n        var _variant$variantName = variant[variantName], matches14 = _variant$variantName.matches, props = _objectWithoutProperties(_variant$variantName, [ 'matches' ]);\n        if (matches_default3(vNode, matches14)) {\n          for (var propName in props) {\n            if (props.hasOwnProperty(propName)) {\n              spec[propName] = props[propName];\n            }\n          }\n        }\n      }\n      for (var _propName in variant['default']) {\n        if (variant['default'].hasOwnProperty(_propName) && typeof spec[_propName] === 'undefined') {\n          spec[_propName] = variant['default'][_propName];\n        }\n      }\n      return spec;\n    }\n    var get_element_spec_default = getElementSpec;\n    var alwaysTitleElements = [ 'iframe' ];\n    function titleText(node) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      if (vNode.props.nodeType !== 1 || !node.hasAttr('title')) {\n        return '';\n      }\n      if (!matches_default2(vNode, alwaysTitleElements) && [ 'none', 'presentation' ].includes(get_role_default(vNode))) {\n        return '';\n      }\n      return vNode.attr('title');\n    }\n    var title_text_default = titleText;\n    function namedFromContents(vNode) {\n      var _ref27 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, strict = _ref27.strict;\n      vNode = vNode instanceof abstract_virtual_node_default ? vNode : get_node_from_tree_default(vNode);\n      if (vNode.props.nodeType !== 1) {\n        return false;\n      }\n      var role = get_role_default(vNode);\n      var roleDef = standards_default.ariaRoles[role];\n      if (roleDef && roleDef.nameFromContent) {\n        return true;\n      }\n      if (strict) {\n        return false;\n      }\n      return !roleDef || [ 'presentation', 'none' ].includes(role);\n    }\n    var named_from_contents_default = namedFromContents;\n    function getOwnedVirtual(virtualNode) {\n      var actualNode = virtualNode.actualNode, children = virtualNode.children;\n      if (!children) {\n        throw new Error('getOwnedVirtual requires a virtual node');\n      }\n      if (virtualNode.hasAttr('aria-owns')) {\n        var owns = idrefs_default(actualNode, 'aria-owns').filter(function(element) {\n          return !!element;\n        }).map(function(element) {\n          return axe.utils.getNodeFromTree(element);\n        });\n        return [].concat(_toConsumableArray(children), _toConsumableArray(owns));\n      }\n      return _toConsumableArray(children);\n    }\n    var get_owned_virtual_default = getOwnedVirtual;\n    function subtreeText(virtualNode) {\n      var context3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var alreadyProcessed2 = accessible_text_virtual_default.alreadyProcessed;\n      context3.startNode = context3.startNode || virtualNode;\n      var _context = context3, strict = _context.strict, inControlContext = _context.inControlContext, inLabelledByContext = _context.inLabelledByContext;\n      if (alreadyProcessed2(virtualNode, context3) || virtualNode.props.nodeType !== 1) {\n        return '';\n      }\n      if (!named_from_contents_default(virtualNode, {\n        strict: strict\n      }) && !context3.subtreeDescendant) {\n        return '';\n      }\n      if (!strict) {\n        var subtreeDescendant = !inControlContext && !inLabelledByContext;\n        context3 = _extends({\n          subtreeDescendant: subtreeDescendant\n        }, context3);\n      }\n      return get_owned_virtual_default(virtualNode).reduce(function(contentText, child) {\n        return appendAccessibleText(contentText, child, context3);\n      }, '');\n    }\n    var phrasingElements = get_elements_by_content_type_default('phrasing').concat([ '#text' ]);\n    function appendAccessibleText(contentText, virtualNode, context3) {\n      var nodeName2 = virtualNode.props.nodeName;\n      var contentTextAdd = accessible_text_virtual_default(virtualNode, context3);\n      if (!contentTextAdd) {\n        return contentText;\n      }\n      if (!phrasingElements.includes(nodeName2)) {\n        if (contentTextAdd[0] !== ' ') {\n          contentTextAdd += ' ';\n        }\n        if (contentText && contentText[contentText.length - 1] !== ' ') {\n          contentTextAdd = ' ' + contentTextAdd;\n        }\n      }\n      return contentText + contentTextAdd;\n    }\n    var subtree_text_default = subtreeText;\n    function labelText(virtualNode) {\n      var context3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var alreadyProcessed2 = accessible_text_virtual_default.alreadyProcessed;\n      if (context3.inControlContext || context3.inLabelledByContext || alreadyProcessed2(virtualNode, context3)) {\n        return '';\n      }\n      if (!context3.startNode) {\n        context3.startNode = virtualNode;\n      }\n      var labelContext = _extends({\n        inControlContext: true\n      }, context3);\n      var explicitLabels = getExplicitLabels(virtualNode);\n      var implicitLabel = closest_default(virtualNode, 'label');\n      var labels;\n      if (implicitLabel) {\n        labels = [].concat(_toConsumableArray(explicitLabels), [ implicitLabel.actualNode ]);\n        labels.sort(node_sorter_default);\n      } else {\n        labels = explicitLabels;\n      }\n      return labels.map(function(label5) {\n        return accessible_text_default(label5, labelContext);\n      }).filter(function(text32) {\n        return text32 !== '';\n      }).join(' ');\n    }\n    function getExplicitLabels(virtualNode) {\n      if (!virtualNode.attr('id')) {\n        return [];\n      }\n      if (!virtualNode.actualNode) {\n        throw new TypeError('Cannot resolve explicit label reference for non-DOM nodes');\n      }\n      return find_elms_in_context_default({\n        elm: 'label',\n        attr: 'for',\n        value: virtualNode.attr('id'),\n        context: virtualNode.actualNode\n      });\n    }\n    var label_text_default = labelText;\n    var defaultButtonValues = {\n      submit: 'Submit',\n      image: 'Submit',\n      reset: 'Reset',\n      button: ''\n    };\n    var nativeTextMethods = {\n      valueText: function valueText(_ref28) {\n        var actualNode = _ref28.actualNode;\n        return actualNode.value || '';\n      },\n      buttonDefaultText: function buttonDefaultText(_ref29) {\n        var actualNode = _ref29.actualNode;\n        return defaultButtonValues[actualNode.type] || '';\n      },\n      tableCaptionText: descendantText.bind(null, 'caption'),\n      figureText: descendantText.bind(null, 'figcaption'),\n      svgTitleText: descendantText.bind(null, 'title'),\n      fieldsetLegendText: descendantText.bind(null, 'legend'),\n      altText: attrText.bind(null, 'alt'),\n      tableSummaryText: attrText.bind(null, 'summary'),\n      titleText: title_text_default,\n      subtreeText: subtree_text_default,\n      labelText: label_text_default,\n      singleSpace: function singleSpace() {\n        return ' ';\n      },\n      placeholderText: attrText.bind(null, 'placeholder')\n    };\n    function attrText(attr, vNode) {\n      return vNode.attr(attr) || '';\n    }\n    function descendantText(nodeName2, _ref30, context3) {\n      var actualNode = _ref30.actualNode;\n      nodeName2 = nodeName2.toLowerCase();\n      var nodeNames = [ nodeName2, actualNode.nodeName.toLowerCase() ].join(',');\n      var candidate = actualNode.querySelector(nodeNames);\n      if (!candidate || candidate.nodeName.toLowerCase() !== nodeName2) {\n        return '';\n      }\n      return accessible_text_default(candidate, context3);\n    }\n    var native_text_methods_default = nativeTextMethods;\n    function nativeTextAlternative(virtualNode) {\n      var context3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var actualNode = virtualNode.actualNode;\n      if (virtualNode.props.nodeType !== 1 || [ 'presentation', 'none' ].includes(get_role_default(virtualNode))) {\n        return '';\n      }\n      var textMethods = findTextMethods(virtualNode);\n      var accName = textMethods.reduce(function(accName2, step) {\n        return accName2 || step(virtualNode, context3);\n      }, '');\n      if (context3.debug) {\n        axe.log(accName || '{empty-value}', actualNode, context3);\n      }\n      return accName;\n    }\n    function findTextMethods(virtualNode) {\n      var elmSpec = get_element_spec_default(virtualNode);\n      var methods = elmSpec.namingMethods || [];\n      return methods.map(function(methodName) {\n        return native_text_methods_default[methodName];\n      });\n    }\n    var native_text_alternative_default = nativeTextAlternative;\n    var unsupported = {\n      accessibleNameFromFieldValue: [ 'combobox', 'listbox', 'progressbar' ]\n    };\n    var unsupported_default = unsupported;\n    var nonTextInputTypes = [ 'button', 'checkbox', 'color', 'file', 'hidden', 'image', 'password', 'radio', 'reset', 'submit' ];\n    function isNativeTextbox(node) {\n      node = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      var nodeName2 = node.props.nodeName;\n      return nodeName2 === 'textarea' || nodeName2 === 'input' && !nonTextInputTypes.includes((node.attr('type') || '').toLowerCase());\n    }\n    var is_native_textbox_default = isNativeTextbox;\n    function isNativeSelect(node) {\n      node = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      var nodeName2 = node.props.nodeName;\n      return nodeName2 === 'select';\n    }\n    var is_native_select_default = isNativeSelect;\n    function isAriaTextbox(node) {\n      var role = get_explicit_role_default(node);\n      return role === 'textbox';\n    }\n    var is_aria_textbox_default = isAriaTextbox;\n    function isAriaListbox(node) {\n      var role = get_explicit_role_default(node);\n      return role === 'listbox';\n    }\n    var is_aria_listbox_default = isAriaListbox;\n    function isAriaCombobox(node) {\n      var role = get_explicit_role_default(node);\n      return role === 'combobox';\n    }\n    var is_aria_combobox_default = isAriaCombobox;\n    var rangeRoles = [ 'progressbar', 'scrollbar', 'slider', 'spinbutton' ];\n    function isAriaRange(node) {\n      var role = get_explicit_role_default(node);\n      return rangeRoles.includes(role);\n    }\n    var is_aria_range_default = isAriaRange;\n    var controlValueRoles = [ 'textbox', 'progressbar', 'scrollbar', 'slider', 'spinbutton', 'combobox', 'listbox' ];\n    var _formControlValueMethods = {\n      nativeTextboxValue: nativeTextboxValue,\n      nativeSelectValue: nativeSelectValue,\n      ariaTextboxValue: ariaTextboxValue,\n      ariaListboxValue: ariaListboxValue,\n      ariaComboboxValue: ariaComboboxValue,\n      ariaRangeValue: ariaRangeValue\n    };\n    function formControlValue(virtualNode) {\n      var context3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var actualNode = virtualNode.actualNode;\n      var unsupportedRoles = unsupported_default.accessibleNameFromFieldValue || [];\n      var role = get_role_default(virtualNode);\n      if (context3.startNode === virtualNode || !controlValueRoles.includes(role) || unsupportedRoles.includes(role)) {\n        return '';\n      }\n      var valueMethods = Object.keys(_formControlValueMethods).map(function(name) {\n        return _formControlValueMethods[name];\n      });\n      var valueString = valueMethods.reduce(function(accName, step) {\n        return accName || step(virtualNode, context3);\n      }, '');\n      if (context3.debug) {\n        log_default(valueString || '{empty-value}', actualNode, context3);\n      }\n      return valueString;\n    }\n    function nativeTextboxValue(node) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      if (is_native_textbox_default(vNode)) {\n        return vNode.props.value || '';\n      }\n      return '';\n    }\n    function nativeSelectValue(node) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      if (!is_native_select_default(vNode)) {\n        return '';\n      }\n      var options = query_selector_all_default(vNode, 'option');\n      var selectedOptions = options.filter(function(option) {\n        return option.hasAttr('selected');\n      });\n      if (!selectedOptions.length) {\n        selectedOptions.push(options[0]);\n      }\n      return selectedOptions.map(function(option) {\n        return visible_virtual_default(option);\n      }).join(' ') || '';\n    }\n    function ariaTextboxValue(node) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      var actualNode = vNode.actualNode;\n      if (!is_aria_textbox_default(vNode)) {\n        return '';\n      }\n      if (!actualNode || actualNode && !is_hidden_with_css_default(actualNode)) {\n        return visible_virtual_default(vNode, true);\n      } else {\n        return actualNode.textContent;\n      }\n    }\n    function ariaListboxValue(node, context3) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      if (!is_aria_listbox_default(vNode)) {\n        return '';\n      }\n      var selected = get_owned_virtual_default(vNode).filter(function(owned) {\n        return get_role_default(owned) === 'option' && owned.attr('aria-selected') === 'true';\n      });\n      if (selected.length === 0) {\n        return '';\n      }\n      return accessible_text_virtual_default(selected[0], context3);\n    }\n    function ariaComboboxValue(node, context3) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      if (!is_aria_combobox_default(vNode)) {\n        return '';\n      }\n      var listbox = get_owned_virtual_default(vNode).filter(function(elm) {\n        return get_role_default(elm) === 'listbox';\n      })[0];\n      return listbox ? ariaListboxValue(listbox, context3) : '';\n    }\n    function ariaRangeValue(node) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      if (!is_aria_range_default(vNode) || !vNode.hasAttr('aria-valuenow')) {\n        return '';\n      }\n      var valueNow = +vNode.attr('aria-valuenow');\n      return !isNaN(valueNow) ? String(valueNow) : '0';\n    }\n    var form_control_value_default = formControlValue;\n    function accessibleTextVirtual(virtualNode) {\n      var context3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var actualNode = virtualNode.actualNode;\n      context3 = prepareContext(virtualNode, context3);\n      if (shouldIgnoreHidden(virtualNode, context3)) {\n        return '';\n      }\n      var computationSteps = [ arialabelledby_text_default, arialabel_text_default, native_text_alternative_default, form_control_value_default, subtree_text_default, textNodeValue, title_text_default ];\n      var accName = computationSteps.reduce(function(accName2, step) {\n        if (context3.startNode === virtualNode) {\n          accName2 = sanitize_default(accName2);\n        }\n        if (accName2 !== '') {\n          return accName2;\n        }\n        return step(virtualNode, context3);\n      }, '');\n      if (context3.debug) {\n        axe.log(accName || '{empty-value}', actualNode, context3);\n      }\n      return accName;\n    }\n    function textNodeValue(virtualNode) {\n      if (virtualNode.props.nodeType !== 3) {\n        return '';\n      }\n      return virtualNode.props.nodeValue;\n    }\n    function shouldIgnoreHidden(_ref31, context3) {\n      var actualNode = _ref31.actualNode;\n      if (!actualNode) {\n        return false;\n      }\n      if (actualNode.nodeType !== 1 || context3.includeHidden) {\n        return false;\n      }\n      return !is_visible_default(actualNode, true);\n    }\n    function prepareContext(virtualNode, context3) {\n      var actualNode = virtualNode.actualNode;\n      if (!context3.startNode) {\n        context3 = _extends({\n          startNode: virtualNode\n        }, context3);\n      }\n      if (!actualNode) {\n        return context3;\n      }\n      if (actualNode.nodeType === 1 && context3.inLabelledByContext && context3.includeHidden === void 0) {\n        context3 = _extends({\n          includeHidden: !is_visible_default(actualNode, true)\n        }, context3);\n      }\n      return context3;\n    }\n    accessibleTextVirtual.alreadyProcessed = function alreadyProcessed(virtualnode, context3) {\n      context3.processed = context3.processed || [];\n      if (context3.processed.includes(virtualnode)) {\n        return true;\n      }\n      context3.processed.push(virtualnode);\n      return false;\n    };\n    var accessible_text_virtual_default = accessibleTextVirtual;\n    function accessibleText(element, context3) {\n      var virtualNode = get_node_from_tree_default(element);\n      return accessible_text_virtual_default(virtualNode, context3);\n    }\n    var accessible_text_default = accessibleText;\n    function arialabelledbyText(vNode) {\n      var context3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (!(vNode instanceof abstract_virtual_node_default)) {\n        if (vNode.nodeType !== 1) {\n          return '';\n        }\n        vNode = get_node_from_tree_default(vNode);\n      }\n      if (vNode.props.nodeType !== 1 || context3.inLabelledByContext || context3.inControlContext || !vNode.attr('aria-labelledby')) {\n        return '';\n      }\n      var refs = idrefs_default(vNode, 'aria-labelledby').filter(function(elm) {\n        return elm;\n      });\n      return refs.reduce(function(accessibleName, elm) {\n        var accessibleNameAdd = accessible_text_default(elm, _extends({\n          inLabelledByContext: true,\n          startNode: context3.startNode || vNode\n        }, context3));\n        if (!accessibleName) {\n          return accessibleNameAdd;\n        } else {\n          return ''.concat(accessibleName, ' ').concat(accessibleNameAdd);\n        }\n      }, '');\n    }\n    var arialabelledby_text_default = arialabelledbyText;\n    var text_exports = {};\n    __export(text_exports, {\n      accessibleText: function accessibleText() {\n        return accessible_text_default;\n      },\n      accessibleTextVirtual: function accessibleTextVirtual() {\n        return accessible_text_virtual_default;\n      },\n      autocomplete: function autocomplete() {\n        return _autocomplete;\n      },\n      formControlValue: function formControlValue() {\n        return form_control_value_default;\n      },\n      formControlValueMethods: function formControlValueMethods() {\n        return _formControlValueMethods;\n      },\n      hasUnicode: function hasUnicode() {\n        return has_unicode_default;\n      },\n      isHumanInterpretable: function isHumanInterpretable() {\n        return is_human_interpretable_default;\n      },\n      isIconLigature: function isIconLigature() {\n        return is_icon_ligature_default;\n      },\n      isValidAutocomplete: function isValidAutocomplete() {\n        return is_valid_autocomplete_default;\n      },\n      label: function label() {\n        return label_default;\n      },\n      labelText: function labelText() {\n        return label_text_default;\n      },\n      labelVirtual: function labelVirtual() {\n        return label_virtual_default2;\n      },\n      nativeElementType: function nativeElementType() {\n        return native_element_type_default;\n      },\n      nativeTextAlternative: function nativeTextAlternative() {\n        return native_text_alternative_default;\n      },\n      nativeTextMethods: function nativeTextMethods() {\n        return native_text_methods_default;\n      },\n      removeUnicode: function removeUnicode() {\n        return remove_unicode_default;\n      },\n      sanitize: function sanitize() {\n        return sanitize_default;\n      },\n      subtreeText: function subtreeText() {\n        return subtree_text_default;\n      },\n      titleText: function titleText() {\n        return title_text_default;\n      },\n      unsupported: function unsupported() {\n        return unsupported_default;\n      },\n      visible: function visible() {\n        return visible_default;\n      },\n      visibleTextNodes: function visibleTextNodes() {\n        return visible_text_nodes_default;\n      },\n      visibleVirtual: function visibleVirtual() {\n        return visible_virtual_default;\n      }\n    });\n    function getUnicodeNonBmpRegExp() {\n      return /[\\u1D00-\\u1D7F\\u1D80-\\u1DBF\\u1DC0-\\u1DFF\\u20A0-\\u20CF\\u20D0-\\u20FF\\u2100-\\u214F\\u2150-\\u218F\\u2190-\\u21FF\\u2200-\\u22FF\\u2300-\\u23FF\\u2400-\\u243F\\u2440-\\u245F\\u2460-\\u24FF\\u2500-\\u257F\\u2580-\\u259F\\u25A0-\\u25FF\\u2600-\\u26FF\\u2700-\\u27BF\\uE000-\\uF8FF]/g;\n    }\n    function getPunctuationRegExp() {\n      return /[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&\\xa3\\xa2\\xa5\\xa7\\u20ac()*+,\\-.\\/:;<=>?@\\[\\]^_`{|}~\\xb1]/g;\n    }\n    function getSupplementaryPrivateUseRegExp() {\n      return /[\\uDB80-\\uDBBF][\\uDC00-\\uDFFF]/g;\n    }\n    var emoji_regex = __toModule(require_emoji_regex());\n    function hasUnicode(str, options) {\n      var emoji = options.emoji, nonBmp = options.nonBmp, punctuations = options.punctuations;\n      if (emoji) {\n        return emoji_regex['default']().test(str);\n      }\n      if (nonBmp) {\n        return getUnicodeNonBmpRegExp().test(str) || getSupplementaryPrivateUseRegExp().test(str);\n      }\n      if (punctuations) {\n        return getPunctuationRegExp().test(str);\n      }\n      return false;\n    }\n    var has_unicode_default = hasUnicode;\n    var emoji_regex2 = __toModule(require_emoji_regex());\n    function removeUnicode(str, options) {\n      var emoji = options.emoji, nonBmp = options.nonBmp, punctuations = options.punctuations;\n      if (emoji) {\n        str = str.replace(emoji_regex2['default'](), '');\n      }\n      if (nonBmp) {\n        str = str.replace(getUnicodeNonBmpRegExp(), '');\n        str = str.replace(getSupplementaryPrivateUseRegExp(), '');\n      }\n      if (punctuations) {\n        str = str.replace(getPunctuationRegExp(), '');\n      }\n      return str;\n    }\n    var remove_unicode_default = removeUnicode;\n    function isHumanInterpretable(str) {\n      if (!str.length) {\n        return 0;\n      }\n      var alphaNumericIconMap = [ 'x', 'i' ];\n      if (alphaNumericIconMap.includes(str)) {\n        return 0;\n      }\n      var noUnicodeStr = remove_unicode_default(str, {\n        emoji: true,\n        nonBmp: true,\n        punctuations: true\n      });\n      if (!sanitize_default(noUnicodeStr)) {\n        return 0;\n      }\n      return 1;\n    }\n    var is_human_interpretable_default = isHumanInterpretable;\n    function isIconLigature(textVNode) {\n      var differenceThreshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : .15;\n      var occuranceThreshold = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;\n      var nodeValue = textVNode.actualNode.nodeValue.trim();\n      if (!sanitize_default(nodeValue) || has_unicode_default(nodeValue, {\n        emoji: true,\n        nonBmp: true\n      })) {\n        return false;\n      }\n      if (!cache_default.get('canvasContext')) {\n        cache_default.set('canvasContext', document.createElement('canvas').getContext('2d'));\n      }\n      var canvasContext = cache_default.get('canvasContext');\n      var canvas = canvasContext.canvas;\n      if (!cache_default.get('fonts')) {\n        cache_default.set('fonts', {});\n      }\n      var fonts = cache_default.get('fonts');\n      var style = window.getComputedStyle(textVNode.parent.actualNode);\n      var fontFamily = style.getPropertyValue('font-family');\n      if (!fonts[fontFamily]) {\n        fonts[fontFamily] = {\n          occurances: 0,\n          numLigatures: 0\n        };\n      }\n      var font = fonts[fontFamily];\n      if (font.occurances >= occuranceThreshold) {\n        if (font.numLigatures / font.occurances === 1) {\n          return true;\n        } else if (font.numLigatures === 0) {\n          return false;\n        }\n      }\n      font.occurances++;\n      var fontSize = 30;\n      var fontStyle = ''.concat(fontSize, 'px ').concat(fontFamily);\n      canvasContext.font = fontStyle;\n      var firstChar = nodeValue.charAt(0);\n      var width = canvasContext.measureText(firstChar).width;\n      if (width < 30) {\n        var diff = 30 / width;\n        width *= diff;\n        fontSize *= diff;\n        fontStyle = ''.concat(fontSize, 'px ').concat(fontFamily);\n      }\n      canvas.width = width;\n      canvas.height = fontSize;\n      canvasContext.font = fontStyle;\n      canvasContext.textAlign = 'left';\n      canvasContext.textBaseline = 'top';\n      canvasContext.fillText(firstChar, 0, 0);\n      var compareData = new Uint32Array(canvasContext.getImageData(0, 0, width, fontSize).data.buffer);\n      if (!compareData.some(function(pixel) {\n        return pixel;\n      })) {\n        font.numLigatures++;\n        return true;\n      }\n      canvasContext.clearRect(0, 0, width, fontSize);\n      canvasContext.fillText(nodeValue, 0, 0);\n      var compareWith = new Uint32Array(canvasContext.getImageData(0, 0, width, fontSize).data.buffer);\n      var differences = compareData.reduce(function(diff, pixel, i) {\n        if (pixel === 0 && compareWith[i] === 0) {\n          return diff;\n        }\n        if (pixel !== 0 && compareWith[i] !== 0) {\n          return diff;\n        }\n        return ++diff;\n      }, 0);\n      var expectedWidth = nodeValue.split('').reduce(function(width2, _char3) {\n        return width2 + canvasContext.measureText(_char3).width;\n      }, 0);\n      var actualWidth = canvasContext.measureText(nodeValue).width;\n      var pixelDifference = differences / compareData.length;\n      var sizeDifference = 1 - actualWidth / expectedWidth;\n      if (pixelDifference >= differenceThreshold && sizeDifference >= differenceThreshold) {\n        font.numLigatures++;\n        return true;\n      }\n      return false;\n    }\n    var is_icon_ligature_default = isIconLigature;\n    var _autocomplete = {\n      stateTerms: [ 'on', 'off' ],\n      standaloneTerms: [ 'name', 'honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix', 'nickname', 'username', 'new-password', 'current-password', 'organization-title', 'organization', 'street-address', 'address-line1', 'address-line2', 'address-line3', 'address-level4', 'address-level3', 'address-level2', 'address-level1', 'country', 'country-name', 'postal-code', 'cc-name', 'cc-given-name', 'cc-additional-name', 'cc-family-name', 'cc-number', 'cc-exp', 'cc-exp-month', 'cc-exp-year', 'cc-csc', 'cc-type', 'transaction-currency', 'transaction-amount', 'language', 'bday', 'bday-day', 'bday-month', 'bday-year', 'sex', 'url', 'photo', 'one-time-code' ],\n      qualifiers: [ 'home', 'work', 'mobile', 'fax', 'pager' ],\n      qualifiedTerms: [ 'tel', 'tel-country-code', 'tel-national', 'tel-area-code', 'tel-local', 'tel-local-prefix', 'tel-local-suffix', 'tel-extension', 'email', 'impp' ],\n      locations: [ 'billing', 'shipping' ]\n    };\n    function isValidAutocomplete(autocompleteValue) {\n      var _ref32 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref32$looseTyped = _ref32.looseTyped, looseTyped = _ref32$looseTyped === void 0 ? false : _ref32$looseTyped, _ref32$stateTerms = _ref32.stateTerms, stateTerms = _ref32$stateTerms === void 0 ? [] : _ref32$stateTerms, _ref32$locations = _ref32.locations, locations = _ref32$locations === void 0 ? [] : _ref32$locations, _ref32$qualifiers = _ref32.qualifiers, qualifiers = _ref32$qualifiers === void 0 ? [] : _ref32$qualifiers, _ref32$standaloneTerm = _ref32.standaloneTerms, standaloneTerms = _ref32$standaloneTerm === void 0 ? [] : _ref32$standaloneTerm, _ref32$qualifiedTerms = _ref32.qualifiedTerms, qualifiedTerms = _ref32$qualifiedTerms === void 0 ? [] : _ref32$qualifiedTerms;\n      autocompleteValue = autocompleteValue.toLowerCase().trim();\n      stateTerms = stateTerms.concat(_autocomplete.stateTerms);\n      if (stateTerms.includes(autocompleteValue) || autocompleteValue === '') {\n        return true;\n      }\n      qualifiers = qualifiers.concat(_autocomplete.qualifiers);\n      locations = locations.concat(_autocomplete.locations);\n      standaloneTerms = standaloneTerms.concat(_autocomplete.standaloneTerms);\n      qualifiedTerms = qualifiedTerms.concat(_autocomplete.qualifiedTerms);\n      var autocompleteTerms = autocompleteValue.split(/\\s+/g);\n      if (!looseTyped) {\n        if (autocompleteTerms[0].length > 8 && autocompleteTerms[0].substr(0, 8) === 'section-') {\n          autocompleteTerms.shift();\n        }\n        if (locations.includes(autocompleteTerms[0])) {\n          autocompleteTerms.shift();\n        }\n        if (qualifiers.includes(autocompleteTerms[0])) {\n          autocompleteTerms.shift();\n          standaloneTerms = [];\n        }\n        if (autocompleteTerms.length !== 1) {\n          return false;\n        }\n      }\n      var purposeTerm = autocompleteTerms[autocompleteTerms.length - 1];\n      return standaloneTerms.includes(purposeTerm) || qualifiedTerms.includes(purposeTerm);\n    }\n    var is_valid_autocomplete_default = isValidAutocomplete;\n    function visible(element, screenReader, noRecursing) {\n      element = get_node_from_tree_default(element);\n      return visible_virtual_default(element, screenReader, noRecursing);\n    }\n    var visible_default = visible;\n    function labelVirtual2(virtualNode) {\n      var ref, candidate, doc;\n      candidate = label_virtual_default(virtualNode);\n      if (candidate) {\n        return candidate;\n      }\n      if (virtualNode.attr('id')) {\n        if (!virtualNode.actualNode) {\n          throw new TypeError('Cannot resolve explicit label reference for non-DOM nodes');\n        }\n        var id = escape_selector_default(virtualNode.attr('id'));\n        doc = get_root_node_default2(virtualNode.actualNode);\n        ref = doc.querySelector('label[for=\"' + id + '\"]');\n        candidate = ref && visible_default(ref, true);\n        if (candidate) {\n          return candidate;\n        }\n      }\n      ref = closest_default(virtualNode, 'label');\n      candidate = ref && visible_virtual_default(ref, true);\n      if (candidate) {\n        return candidate;\n      }\n      return null;\n    }\n    var label_virtual_default2 = labelVirtual2;\n    function label(node) {\n      node = get_node_from_tree_default(node);\n      return label_virtual_default2(node);\n    }\n    var label_default = label;\n    var nativeElementType = [ {\n      matches: [ {\n        nodeName: 'textarea'\n      }, {\n        nodeName: 'input',\n        properties: {\n          type: [ 'text', 'password', 'search', 'tel', 'email', 'url' ]\n        }\n      } ],\n      namingMethods: 'labelText'\n    }, {\n      matches: {\n        nodeName: 'input',\n        properties: {\n          type: [ 'button', 'submit', 'reset' ]\n        }\n      },\n      namingMethods: [ 'valueText', 'titleText', 'buttonDefaultText' ]\n    }, {\n      matches: {\n        nodeName: 'input',\n        properties: {\n          type: 'image'\n        }\n      },\n      namingMethods: [ 'altText', 'valueText', 'labelText', 'titleText', 'buttonDefaultText' ]\n    }, {\n      matches: 'button',\n      namingMethods: 'subtreeText'\n    }, {\n      matches: 'fieldset',\n      namingMethods: 'fieldsetLegendText'\n    }, {\n      matches: 'OUTPUT',\n      namingMethods: 'subtreeText'\n    }, {\n      matches: [ {\n        nodeName: 'select'\n      }, {\n        nodeName: 'input',\n        properties: {\n          type: /^(?!text|password|search|tel|email|url|button|submit|reset)/\n        }\n      } ],\n      namingMethods: 'labelText'\n    }, {\n      matches: 'summary',\n      namingMethods: 'subtreeText'\n    }, {\n      matches: 'figure',\n      namingMethods: [ 'figureText', 'titleText' ]\n    }, {\n      matches: 'img',\n      namingMethods: 'altText'\n    }, {\n      matches: 'table',\n      namingMethods: [ 'tableCaptionText', 'tableSummaryText' ]\n    }, {\n      matches: [ 'hr', 'br' ],\n      namingMethods: [ 'titleText', 'singleSpace' ]\n    } ];\n    var native_element_type_default = nativeElementType;\n    function visibleTextNodes(vNode) {\n      var parentVisible = is_visible_default(vNode.actualNode);\n      var nodes = [];\n      vNode.children.forEach(function(child) {\n        if (child.actualNode.nodeType === 3) {\n          if (parentVisible) {\n            nodes.push(child);\n          }\n        } else {\n          nodes = nodes.concat(visibleTextNodes(child));\n        }\n      });\n      return nodes;\n    }\n    var visible_text_nodes_default = visibleTextNodes;\n    var idRefsRegex = /^idrefs?$/;\n    function cacheIdRefs(node, idRefs, refAttrs) {\n      if (node.hasAttribute) {\n        if (node.nodeName.toUpperCase() === 'LABEL' && node.hasAttribute('for')) {\n          var id = node.getAttribute('for');\n          idRefs[id] = idRefs[id] || [];\n          idRefs[id].push(node);\n        }\n        for (var _i11 = 0; _i11 < refAttrs.length; ++_i11) {\n          var attr = refAttrs[_i11];\n          var attrValue = sanitize_default(node.getAttribute(attr) || '');\n          if (!attrValue) {\n            continue;\n          }\n          var tokens = token_list_default(attrValue);\n          for (var k = 0; k < tokens.length; ++k) {\n            idRefs[tokens[k]] = idRefs[tokens[k]] || [];\n            idRefs[tokens[k]].push(node);\n          }\n        }\n      }\n      for (var _i12 = 0; _i12 < node.children.length; _i12++) {\n        cacheIdRefs(node.children[_i12], idRefs, refAttrs);\n      }\n    }\n    function getAccessibleRefs(node) {\n      node = node.actualNode || node;\n      var root = get_root_node_default2(node);\n      root = root.documentElement || root;\n      var idRefsByRoot = cache_default.get('idRefsByRoot');\n      if (!idRefsByRoot) {\n        idRefsByRoot = new WeakMap();\n        cache_default.set('idRefsByRoot', idRefsByRoot);\n      }\n      var idRefs = idRefsByRoot.get(root);\n      if (!idRefs) {\n        idRefs = {};\n        idRefsByRoot.set(root, idRefs);\n        var refAttrs = Object.keys(standards_default.ariaAttrs).filter(function(attr) {\n          var type = standards_default.ariaAttrs[attr].type;\n          return idRefsRegex.test(type);\n        });\n        cacheIdRefs(root, idRefs, refAttrs);\n      }\n      return idRefs[node.id] || [];\n    }\n    var get_accessible_refs_default = getAccessibleRefs;\n    function getRoleType(role) {\n      var roleDef = standards_default.ariaRoles[role];\n      if (!roleDef) {\n        return null;\n      }\n      return roleDef.type;\n    }\n    var get_role_type_default = getRoleType;\n    function isAriaRoleAllowedOnElement(node, role) {\n      var vNode = node instanceof abstract_virtual_node_default ? node : get_node_from_tree_default(node);\n      var implicitRole3 = implicit_role_default(vNode);\n      if (role === implicitRole3) {\n        return true;\n      }\n      var spec = get_element_spec_default(vNode);\n      if (Array.isArray(spec.allowedRoles)) {\n        return spec.allowedRoles.includes(role);\n      }\n      return !!spec.allowedRoles;\n    }\n    var is_aria_role_allowed_on_element_default = isAriaRoleAllowedOnElement;\n    var dpubRoles2 = [ 'doc-backlink', 'doc-biblioentry', 'doc-biblioref', 'doc-cover', 'doc-endnote', 'doc-glossref', 'doc-noteref' ];\n    function getRoleSegments(node) {\n      var roles = [];\n      if (!node) {\n        return roles;\n      }\n      if (node.hasAttribute('role')) {\n        var nodeRoles = token_list_default(node.getAttribute('role').toLowerCase());\n        roles = roles.concat(nodeRoles);\n      }\n      if (node.hasAttributeNS('http://www.idpf.org/2007/ops', 'type')) {\n        var epubRoles = token_list_default(node.getAttributeNS('http://www.idpf.org/2007/ops', 'type').toLowerCase()).map(function(role) {\n          return 'doc-'.concat(role);\n        });\n        roles = roles.concat(epubRoles);\n      }\n      roles = roles.filter(function(role) {\n        return is_valid_role_default(role);\n      });\n      return roles;\n    }\n    function getElementUnallowedRoles(node) {\n      var allowImplicit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var tagName = node.nodeName.toUpperCase();\n      if (!is_html_element_default(node)) {\n        return [];\n      }\n      var roleSegments = getRoleSegments(node);\n      var implicitRole3 = implicit_role_default(node);\n      var unallowedRoles = roleSegments.filter(function(role) {\n        if (allowImplicit && role === implicitRole3) {\n          return false;\n        }\n        if (allowImplicit && dpubRoles2.includes(role)) {\n          var roleType = get_role_type_default(role);\n          if (implicitRole3 !== roleType) {\n            return true;\n          }\n        }\n        if (!allowImplicit && !(role === 'row' && tagName === 'TR' && element_matches_default(node, 'table[role=\"grid\"] > tr'))) {\n          return true;\n        }\n        return !is_aria_role_allowed_on_element_default(node, role);\n      });\n      return unallowedRoles;\n    }\n    var get_element_unallowed_roles_default = getElementUnallowedRoles;\n    function getAriaRolesByType(type) {\n      return Object.keys(standards_default.ariaRoles).filter(function(roleName) {\n        return standards_default.ariaRoles[roleName].type === type;\n      });\n    }\n    var get_aria_roles_by_type_default = getAriaRolesByType;\n    function getRolesByType(roleType) {\n      return get_aria_roles_by_type_default(roleType);\n    }\n    var get_roles_by_type_default = getRolesByType;\n    function getAriaRolesSupportingNameFromContent() {\n      if (cache_default.get('ariaRolesNameFromContent')) {\n        return cache_default.get('ariaRolesNameFromContent');\n      }\n      var contentRoles = Object.keys(standards_default.ariaRoles).filter(function(roleName) {\n        return standards_default.ariaRoles[roleName].nameFromContent;\n      });\n      cache_default.set('ariaRolesNameFromContent', contentRoles);\n      return contentRoles;\n    }\n    var get_aria_roles_supporting_name_from_content_default = getAriaRolesSupportingNameFromContent;\n    function getRolesWithNameFromContents() {\n      return get_aria_roles_supporting_name_from_content_default();\n    }\n    var get_roles_with_name_from_contents_default = getRolesWithNameFromContents;\n    var isNull = function isNull(value) {\n      return value === null;\n    };\n    var isNotNull = function isNotNull(value) {\n      return value !== null;\n    };\n    var lookupTable = {};\n    lookupTable.attributes = {\n      'aria-activedescendant': {\n        type: 'idref',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-atomic': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-autocomplete': {\n        type: 'nmtoken',\n        values: [ 'inline', 'list', 'both', 'none' ],\n        unsupported: false\n      },\n      'aria-busy': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-checked': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'mixed', 'undefined' ],\n        unsupported: false\n      },\n      'aria-colcount': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-colindex': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-colspan': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-controls': {\n        type: 'idrefs',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-current': {\n        type: 'nmtoken',\n        allowEmpty: true,\n        values: [ 'page', 'step', 'location', 'date', 'time', 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-describedby': {\n        type: 'idrefs',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-describedat': {\n        unsupported: true,\n        unstandardized: true\n      },\n      'aria-details': {\n        type: 'idref',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-disabled': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-dropeffect': {\n        type: 'nmtokens',\n        values: [ 'copy', 'move', 'reference', 'execute', 'popup', 'none' ],\n        unsupported: false\n      },\n      'aria-errormessage': {\n        type: 'idref',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-expanded': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'undefined' ],\n        unsupported: false\n      },\n      'aria-flowto': {\n        type: 'idrefs',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-grabbed': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'undefined' ],\n        unsupported: false\n      },\n      'aria-haspopup': {\n        type: 'nmtoken',\n        allowEmpty: true,\n        values: [ 'true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog' ],\n        unsupported: false\n      },\n      'aria-hidden': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-invalid': {\n        type: 'nmtoken',\n        allowEmpty: true,\n        values: [ 'true', 'false', 'spelling', 'grammar' ],\n        unsupported: false\n      },\n      'aria-keyshortcuts': {\n        type: 'string',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-label': {\n        type: 'string',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-labelledby': {\n        type: 'idrefs',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-level': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-live': {\n        type: 'nmtoken',\n        values: [ 'off', 'polite', 'assertive' ],\n        unsupported: false\n      },\n      'aria-modal': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-multiline': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-multiselectable': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-orientation': {\n        type: 'nmtoken',\n        values: [ 'horizontal', 'vertical' ],\n        unsupported: false\n      },\n      'aria-owns': {\n        type: 'idrefs',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-placeholder': {\n        type: 'string',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-posinset': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-pressed': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'mixed', 'undefined' ],\n        unsupported: false\n      },\n      'aria-readonly': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-relevant': {\n        type: 'nmtokens',\n        values: [ 'additions', 'removals', 'text', 'all' ],\n        unsupported: false\n      },\n      'aria-required': {\n        type: 'boolean',\n        values: [ 'true', 'false' ],\n        unsupported: false\n      },\n      'aria-roledescription': {\n        type: 'string',\n        allowEmpty: true,\n        unsupported: false\n      },\n      'aria-rowcount': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-rowindex': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-rowspan': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-selected': {\n        type: 'nmtoken',\n        values: [ 'true', 'false', 'undefined' ],\n        unsupported: false\n      },\n      'aria-setsize': {\n        type: 'int',\n        unsupported: false\n      },\n      'aria-sort': {\n        type: 'nmtoken',\n        values: [ 'ascending', 'descending', 'other', 'none' ],\n        unsupported: false\n      },\n      'aria-valuemax': {\n        type: 'decimal',\n        unsupported: false\n      },\n      'aria-valuemin': {\n        type: 'decimal',\n        unsupported: false\n      },\n      'aria-valuenow': {\n        type: 'decimal',\n        unsupported: false\n      },\n      'aria-valuetext': {\n        type: 'string',\n        unsupported: false\n      }\n    };\n    lookupTable.globalAttributes = [ 'aria-atomic', 'aria-busy', 'aria-controls', 'aria-current', 'aria-describedby', 'aria-details', 'aria-disabled', 'aria-dropeffect', 'aria-flowto', 'aria-grabbed', 'aria-haspopup', 'aria-hidden', 'aria-invalid', 'aria-keyshortcuts', 'aria-label', 'aria-labelledby', 'aria-live', 'aria-owns', 'aria-relevant', 'aria-roledescription' ];\n    lookupTable.role = {\n      alert: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      alertdialog: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-modal', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'dialog', 'section' ]\n      },\n      application: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage', 'aria-activedescendant' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'article', 'audio', 'embed', 'iframe', 'object', 'section', 'svg', 'video' ]\n      },\n      article: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'article' ],\n        unsupported: false\n      },\n      banner: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'header' ],\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      button: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-pressed', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'button', 'input[type=\"button\"]', 'input[type=\"image\"]', 'input[type=\"reset\"]', 'input[type=\"submit\"]', 'summary' ],\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      cell: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-colindex', 'aria-colspan', 'aria-rowindex', 'aria-rowspan', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'row' ],\n        implicit: [ 'td', 'th' ],\n        unsupported: false\n      },\n      checkbox: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-checked', 'aria-required', 'aria-readonly', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'input[type=\"checkbox\"]' ],\n        unsupported: false,\n        allowedElements: [ 'button' ]\n      },\n      columnheader: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-rowindex', 'aria-rowspan', 'aria-required', 'aria-readonly', 'aria-selected', 'aria-sort', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'row' ],\n        implicit: [ 'th' ],\n        unsupported: false\n      },\n      combobox: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-autocomplete', 'aria-required', 'aria-activedescendant', 'aria-orientation', 'aria-errormessage' ],\n          required: [ 'aria-expanded' ]\n        },\n        owned: {\n          all: [ 'listbox', 'tree', 'grid', 'dialog', 'textbox' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: 'input',\n          properties: {\n            type: [ 'text', 'search', 'tel', 'url', 'email' ]\n          }\n        } ]\n      },\n      command: {\n        nameFrom: [ 'author' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      complementary: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'aside' ],\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      composite: {\n        nameFrom: [ 'author' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      contentinfo: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'footer' ],\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      definition: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'dd', 'dfn' ],\n        unsupported: false\n      },\n      dialog: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-modal', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'dialog' ],\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      directory: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'ol', 'ul' ]\n      },\n      document: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'body' ],\n        unsupported: false,\n        allowedElements: [ 'article', 'embed', 'iframe', 'object', 'section', 'svg' ]\n      },\n      'doc-abstract': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-acknowledgments': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-afterword': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-appendix': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-backlink': {\n        type: 'link',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      'doc-biblioentry': {\n        type: 'listitem',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: [ 'doc-bibliography' ],\n        unsupported: false,\n        allowedElements: [ 'li' ]\n      },\n      'doc-bibliography': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'doc-biblioentry' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-biblioref': {\n        type: 'link',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      'doc-chapter': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-colophon': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-conclusion': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-cover': {\n        type: 'img',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false\n      },\n      'doc-credit': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-credits': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-dedication': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-endnote': {\n        type: 'listitem',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: [ 'doc-endnotes' ],\n        unsupported: false,\n        allowedElements: [ 'li' ]\n      },\n      'doc-endnotes': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'doc-endnote' ]\n        },\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-epigraph': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false\n      },\n      'doc-epilogue': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-errata': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-example': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'aside', 'section' ]\n      },\n      'doc-footnote': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'aside', 'footer', 'header' ]\n      },\n      'doc-foreword': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-glossary': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: [ 'term', 'definition' ],\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'dl' ]\n      },\n      'doc-glossref': {\n        type: 'link',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author', 'contents' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      'doc-index': {\n        type: 'navigation',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'nav', 'section' ]\n      },\n      'doc-introduction': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-noteref': {\n        type: 'link',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author', 'contents' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      'doc-notice': {\n        type: 'note',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-pagebreak': {\n        type: 'separator',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'hr' ]\n      },\n      'doc-pagelist': {\n        type: 'navigation',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'nav', 'section' ]\n      },\n      'doc-part': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-preface': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-prologue': {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-pullquote': {\n        type: 'none',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'aside', 'section' ]\n      },\n      'doc-qna': {\n        type: 'section',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      'doc-subtitle': {\n        type: 'sectionhead',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: {\n          nodeName: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ]\n        }\n      },\n      'doc-tip': {\n        type: 'note',\n        attributes: {\n          allowed: [ 'aria-expanded' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'aside' ]\n      },\n      'doc-toc': {\n        type: 'navigation',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        namefrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'nav', 'section' ]\n      },\n      feed: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'article' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'article', 'aside', 'section' ]\n      },\n      figure: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'figure' ],\n        unsupported: false\n      },\n      form: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'form' ],\n        unsupported: false\n      },\n      grid: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-colcount', 'aria-level', 'aria-multiselectable', 'aria-readonly', 'aria-rowcount', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'rowgroup', 'row' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'table' ],\n        unsupported: false\n      },\n      gridcell: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-rowindex', 'aria-rowspan', 'aria-selected', 'aria-readonly', 'aria-required', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'row' ],\n        implicit: [ 'td', 'th' ],\n        unsupported: false\n      },\n      group: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'details', 'optgroup' ],\n        unsupported: false,\n        allowedElements: [ 'dl', 'figcaption', 'fieldset', 'figure', 'footer', 'header', 'ol', 'ul' ]\n      },\n      heading: {\n        type: 'structure',\n        attributes: {\n          required: [ 'aria-level' ],\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ],\n        unsupported: false\n      },\n      img: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'img' ],\n        unsupported: false,\n        allowedElements: [ 'embed', 'iframe', 'object', 'svg' ]\n      },\n      input: {\n        nameFrom: [ 'author' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      landmark: {\n        nameFrom: [ 'author' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      link: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'a[href]', 'area[href]' ],\n        unsupported: false,\n        allowedElements: [ 'button', {\n          nodeName: 'input',\n          properties: {\n            type: [ 'image', 'button' ]\n          }\n        } ]\n      },\n      list: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: {\n          all: [ 'listitem' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'ol', 'ul', 'dl' ],\n        unsupported: false\n      },\n      listbox: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-multiselectable', 'aria-readonly', 'aria-required', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]\n        },\n        owned: {\n          all: [ 'option' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'select' ],\n        unsupported: false,\n        allowedElements: [ 'ol', 'ul' ]\n      },\n      listitem: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'list' ],\n        implicit: [ 'li', 'dt' ],\n        unsupported: false\n      },\n      log: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      main: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'main' ],\n        unsupported: false,\n        allowedElements: [ 'article', 'section' ]\n      },\n      marquee: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      math: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'math' ],\n        unsupported: false\n      },\n      menu: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'menuitem', 'menuitemradio', 'menuitemcheckbox' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'menu[type=\"context\"]' ],\n        unsupported: false,\n        allowedElements: [ 'ol', 'ul' ]\n      },\n      menubar: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'menuitem', 'menuitemradio', 'menuitemcheckbox' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'ol', 'ul' ]\n      },\n      menuitem: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-posinset', 'aria-setsize', 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'menu', 'menubar' ],\n        implicit: [ 'menuitem[type=\"command\"]' ],\n        unsupported: false,\n        allowedElements: [ 'button', 'li', {\n          nodeName: 'iput',\n          properties: {\n            type: [ 'image', 'button' ]\n          }\n        }, {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      menuitemcheckbox: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-checked', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'menu', 'menubar' ],\n        implicit: [ 'menuitem[type=\"checkbox\"]' ],\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: [ 'button', 'li' ]\n        }, {\n          nodeName: 'input',\n          properties: {\n            type: [ 'checkbox', 'image', 'button' ]\n          }\n        }, {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      menuitemradio: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-checked', 'aria-selected', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'menu', 'menubar' ],\n        implicit: [ 'menuitem[type=\"radio\"]' ],\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: [ 'button', 'li' ]\n        }, {\n          nodeName: 'input',\n          properties: {\n            type: [ 'image', 'button', 'radio' ]\n          }\n        }, {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      navigation: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'nav' ],\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      none: {\n        type: 'structure',\n        attributes: null,\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: [ 'article', 'aside', 'dl', 'embed', 'figcaption', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'iframe', 'li', 'ol', 'section', 'ul' ]\n        }, {\n          nodeName: 'img',\n          attributes: {\n            alt: isNotNull\n          }\n        } ]\n      },\n      note: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'aside' ]\n      },\n      option: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-selected', 'aria-posinset', 'aria-setsize', 'aria-checked', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'listbox' ],\n        implicit: [ 'option' ],\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: [ 'button', 'li' ]\n        }, {\n          nodeName: 'input',\n          properties: {\n            type: [ 'checkbox', 'button' ]\n          }\n        }, {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      presentation: {\n        type: 'structure',\n        attributes: null,\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: [ 'article', 'aside', 'dl', 'embed', 'figcaption', 'fieldset', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'iframe', 'li', 'ol', 'section', 'ul' ]\n        }, {\n          nodeName: 'img',\n          attributes: {\n            alt: isNotNull\n          }\n        } ]\n      },\n      progressbar: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-valuetext', 'aria-valuenow', 'aria-valuemax', 'aria-valuemin', 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'progress' ],\n        unsupported: false\n      },\n      radio: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-selected', 'aria-posinset', 'aria-setsize', 'aria-required', 'aria-errormessage', 'aria-checked' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'input[type=\"radio\"]' ],\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: [ 'button', 'li' ]\n        }, {\n          nodeName: 'input',\n          properties: {\n            type: [ 'image', 'button' ]\n          }\n        } ]\n      },\n      radiogroup: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-required', 'aria-expanded', 'aria-readonly', 'aria-errormessage', 'aria-orientation' ]\n        },\n        owned: {\n          all: [ 'radio' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: {\n          nodeName: [ 'ol', 'ul', 'fieldset' ]\n        }\n      },\n      range: {\n        nameFrom: [ 'author' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      region: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'section[aria-label]', 'section[aria-labelledby]', 'section[title]' ],\n        unsupported: false,\n        allowedElements: {\n          nodeName: [ 'article', 'aside' ]\n        }\n      },\n      roletype: {\n        type: 'abstract',\n        unsupported: false\n      },\n      row: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-colindex', 'aria-expanded', 'aria-level', 'aria-selected', 'aria-rowindex', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'cell', 'columnheader', 'rowheader', 'gridcell' ]\n        },\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'rowgroup', 'grid', 'treegrid', 'table' ],\n        implicit: [ 'tr' ],\n        unsupported: false\n      },\n      rowgroup: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: {\n          all: [ 'row' ]\n        },\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'grid', 'table', 'treegrid' ],\n        implicit: [ 'tbody', 'thead', 'tfoot' ],\n        unsupported: false\n      },\n      rowheader: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-colindex', 'aria-colspan', 'aria-expanded', 'aria-rowindex', 'aria-rowspan', 'aria-required', 'aria-readonly', 'aria-selected', 'aria-sort', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'row' ],\n        implicit: [ 'th' ],\n        unsupported: false\n      },\n      scrollbar: {\n        type: 'widget',\n        attributes: {\n          required: [ 'aria-controls', 'aria-valuenow' ],\n          allowed: [ 'aria-valuetext', 'aria-orientation', 'aria-errormessage', 'aria-valuemax', 'aria-valuemin' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false\n      },\n      search: {\n        type: 'landmark',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: {\n          nodeName: [ 'aside', 'form', 'section' ]\n        }\n      },\n      searchbox: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required', 'aria-placeholder', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'input[type=\"search\"]' ],\n        unsupported: false,\n        allowedElements: {\n          nodeName: 'input',\n          properties: {\n            type: 'text'\n          }\n        }\n      },\n      section: {\n        nameFrom: [ 'author', 'contents' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      sectionhead: {\n        nameFrom: [ 'author', 'contents' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      select: {\n        nameFrom: [ 'author' ],\n        type: 'abstract',\n        unsupported: false\n      },\n      separator: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-orientation', 'aria-valuenow', 'aria-valuemax', 'aria-valuemin', 'aria-valuetext', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'hr' ],\n        unsupported: false,\n        allowedElements: [ 'li' ]\n      },\n      slider: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-valuetext', 'aria-orientation', 'aria-readonly', 'aria-errormessage', 'aria-valuemax', 'aria-valuemin' ],\n          required: [ 'aria-valuenow' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'input[type=\"range\"]' ],\n        unsupported: false\n      },\n      spinbutton: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-valuetext', 'aria-required', 'aria-readonly', 'aria-errormessage', 'aria-valuemax', 'aria-valuemin' ],\n          required: [ 'aria-valuenow' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'input[type=\"number\"]' ],\n        unsupported: false,\n        allowedElements: {\n          nodeName: 'input',\n          properties: {\n            type: [ 'text', 'tel' ]\n          }\n        }\n      },\n      status: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'output' ],\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      structure: {\n        type: 'abstract',\n        unsupported: false\n      },\n      switch: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-errormessage' ],\n          required: [ 'aria-checked' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'button', {\n          nodeName: 'input',\n          properties: {\n            type: [ 'checkbox', 'image', 'button' ]\n          }\n        }, {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      tab: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-selected', 'aria-expanded', 'aria-setsize', 'aria-posinset', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'tablist' ],\n        unsupported: false,\n        allowedElements: [ {\n          nodeName: [ 'button', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li' ]\n        }, {\n          nodeName: 'input',\n          properties: {\n            type: 'button'\n          }\n        }, {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      table: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-colcount', 'aria-rowcount', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'rowgroup', 'row' ]\n        },\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'table' ],\n        unsupported: false\n      },\n      tablist: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-level', 'aria-multiselectable', 'aria-orientation', 'aria-errormessage' ]\n        },\n        owned: {\n          all: [ 'tab' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'ol', 'ul' ]\n      },\n      tabpanel: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'section' ]\n      },\n      term: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        implicit: [ 'dt' ],\n        unsupported: false\n      },\n      textbox: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-autocomplete', 'aria-multiline', 'aria-readonly', 'aria-required', 'aria-placeholder', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'input[type=\"text\"]', 'input[type=\"email\"]', 'input[type=\"password\"]', 'input[type=\"tel\"]', 'input[type=\"url\"]', 'input:not([type])', 'textarea' ],\n        unsupported: false\n      },\n      timer: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false\n      },\n      toolbar: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author' ],\n        context: null,\n        implicit: [ 'menu[type=\"toolbar\"]' ],\n        unsupported: false,\n        allowedElements: [ 'ol', 'ul' ]\n      },\n      tooltip: {\n        type: 'structure',\n        attributes: {\n          allowed: [ 'aria-expanded', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: null,\n        unsupported: false\n      },\n      tree: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-multiselectable', 'aria-required', 'aria-expanded', 'aria-orientation', 'aria-errormessage' ]\n        },\n        owned: {\n          all: [ 'treeitem' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false,\n        allowedElements: [ 'ol', 'ul' ]\n      },\n      treegrid: {\n        type: 'composite',\n        attributes: {\n          allowed: [ 'aria-activedescendant', 'aria-colcount', 'aria-expanded', 'aria-level', 'aria-multiselectable', 'aria-readonly', 'aria-required', 'aria-rowcount', 'aria-orientation', 'aria-errormessage' ]\n        },\n        owned: {\n          one: [ 'rowgroup', 'row' ]\n        },\n        nameFrom: [ 'author' ],\n        context: null,\n        unsupported: false\n      },\n      treeitem: {\n        type: 'widget',\n        attributes: {\n          allowed: [ 'aria-checked', 'aria-selected', 'aria-expanded', 'aria-level', 'aria-posinset', 'aria-setsize', 'aria-errormessage' ]\n        },\n        owned: null,\n        nameFrom: [ 'author', 'contents' ],\n        context: [ 'group', 'tree' ],\n        unsupported: false,\n        allowedElements: [ 'li', {\n          nodeName: 'a',\n          attributes: {\n            href: isNotNull\n          }\n        } ]\n      },\n      widget: {\n        type: 'abstract',\n        unsupported: false\n      },\n      window: {\n        nameFrom: [ 'author' ],\n        type: 'abstract',\n        unsupported: false\n      }\n    };\n    lookupTable.implicitHtmlRole = implicit_html_roles_default;\n    lookupTable.elementsAllowedNoRole = [ {\n      nodeName: [ 'base', 'body', 'caption', 'col', 'colgroup', 'datalist', 'dd', 'details', 'dt', 'head', 'html', 'keygen', 'label', 'legend', 'main', 'map', 'math', 'meta', 'meter', 'noscript', 'optgroup', 'param', 'picture', 'progress', 'script', 'source', 'style', 'template', 'textarea', 'title', 'track' ]\n    }, {\n      nodeName: 'area',\n      attributes: {\n        href: isNotNull\n      }\n    }, {\n      nodeName: 'input',\n      properties: {\n        type: [ 'color', 'data', 'datatime', 'file', 'hidden', 'month', 'number', 'password', 'range', 'reset', 'submit', 'time', 'week' ]\n      }\n    }, {\n      nodeName: 'link',\n      attributes: {\n        href: isNotNull\n      }\n    }, {\n      nodeName: 'menu',\n      attributes: {\n        type: 'context'\n      }\n    }, {\n      nodeName: 'menuitem',\n      attributes: {\n        type: [ 'command', 'checkbox', 'radio' ]\n      }\n    }, {\n      nodeName: 'select',\n      condition: function condition(vNode) {\n        if (!(vNode instanceof axe.AbstractVirtualNode)) {\n          vNode = axe.utils.getNodeFromTree(vNode);\n        }\n        return Number(vNode.attr('size')) > 1;\n      },\n      properties: {\n        multiple: true\n      }\n    }, {\n      nodeName: [ 'clippath', 'cursor', 'defs', 'desc', 'feblend', 'fecolormatrix', 'fecomponenttransfer', 'fecomposite', 'feconvolvematrix', 'fediffuselighting', 'fedisplacementmap', 'fedistantlight', 'fedropshadow', 'feflood', 'fefunca', 'fefuncb', 'fefuncg', 'fefuncr', 'fegaussianblur', 'feimage', 'femerge', 'femergenode', 'femorphology', 'feoffset', 'fepointlight', 'fespecularlighting', 'fespotlight', 'fetile', 'feturbulence', 'filter', 'hatch', 'hatchpath', 'lineargradient', 'marker', 'mask', 'meshgradient', 'meshpatch', 'meshrow', 'metadata', 'mpath', 'pattern', 'radialgradient', 'solidcolor', 'stop', 'switch', 'view' ]\n    } ];\n    lookupTable.elementsAllowedAnyRole = [ {\n      nodeName: 'a',\n      attributes: {\n        href: isNull\n      }\n    }, {\n      nodeName: 'img',\n      attributes: {\n        alt: isNull\n      }\n    }, {\n      nodeName: [ 'abbr', 'address', 'canvas', 'div', 'p', 'pre', 'blockquote', 'ins', 'del', 'output', 'span', 'table', 'tbody', 'thead', 'tfoot', 'td', 'em', 'strong', 'small', 's', 'cite', 'q', 'dfn', 'abbr', 'time', 'code', 'var', 'samp', 'kbd', 'sub', 'sup', 'i', 'b', 'u', 'mark', 'ruby', 'rt', 'rp', 'bdi', 'bdo', 'br', 'wbr', 'th', 'tr' ]\n    } ];\n    lookupTable.evaluateRoleForElement = {\n      A: function A(_ref33) {\n        var node = _ref33.node, out = _ref33.out;\n        if (node.namespaceURI === 'http://www.w3.org/2000/svg') {\n          return true;\n        }\n        if (node.href.length) {\n          return out;\n        }\n        return true;\n      },\n      AREA: function AREA(_ref34) {\n        var node = _ref34.node;\n        return !node.href;\n      },\n      BUTTON: function BUTTON(_ref35) {\n        var node = _ref35.node, role = _ref35.role, out = _ref35.out;\n        if (node.getAttribute('type') === 'menu') {\n          return role === 'menuitem';\n        }\n        return out;\n      },\n      IMG: function IMG(_ref36) {\n        var node = _ref36.node, role = _ref36.role, out = _ref36.out;\n        switch (node.alt) {\n         case null:\n          return out;\n\n         case '':\n          return role === 'presentation' || role === 'none';\n\n         default:\n          return role !== 'presentation' && role !== 'none';\n        }\n      },\n      INPUT: function INPUT(_ref37) {\n        var node = _ref37.node, role = _ref37.role, out = _ref37.out;\n        switch (node.type) {\n         case 'button':\n         case 'image':\n          return out;\n\n         case 'checkbox':\n          if (role === 'button' && node.hasAttribute('aria-pressed')) {\n            return true;\n          }\n          return out;\n\n         case 'radio':\n          return role === 'menuitemradio';\n\n         case 'text':\n          return role === 'combobox' || role === 'searchbox' || role === 'spinbutton';\n\n         case 'tel':\n          return role === 'combobox' || role === 'spinbutton';\n\n         case 'url':\n         case 'search':\n         case 'email':\n          return role === 'combobox';\n\n         default:\n          return false;\n        }\n      },\n      LI: function LI(_ref38) {\n        var node = _ref38.node, out = _ref38.out;\n        var hasImplicitListitemRole = axe.utils.matchesSelector(node, 'ol li, ul li');\n        if (hasImplicitListitemRole) {\n          return out;\n        }\n        return true;\n      },\n      MENU: function MENU(_ref39) {\n        var node = _ref39.node;\n        if (node.getAttribute('type') === 'context') {\n          return false;\n        }\n        return true;\n      },\n      OPTION: function OPTION(_ref40) {\n        var node = _ref40.node;\n        var withinOptionList = axe.utils.matchesSelector(node, 'select > option, datalist > option, optgroup > option');\n        return !withinOptionList;\n      },\n      SELECT: function SELECT(_ref41) {\n        var node = _ref41.node, role = _ref41.role;\n        return !node.multiple && node.size <= 1 && role === 'menu';\n      },\n      SVG: function SVG(_ref42) {\n        var node = _ref42.node, out = _ref42.out;\n        if (node.parentNode && node.parentNode.namespaceURI === 'http://www.w3.org/2000/svg') {\n          return true;\n        }\n        return out;\n      }\n    };\n    lookupTable.rolesOfType = {\n      widget: [ 'button', 'checkbox', 'dialog', 'gridcell', 'link', 'log', 'marquee', 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'progressbar', 'radio', 'scrollbar', 'searchbox', 'slider', 'spinbutton', 'status', 'switch', 'tab', 'tabpanel', 'textbox', 'timer', 'tooltip', 'tree', 'treeitem' ]\n    };\n    var lookup_table_default = lookupTable;\n    function implicitNodes(role) {\n      var implicit = null;\n      var roles = lookup_table_default.role[role];\n      if (roles && roles.implicit) {\n        implicit = clone_default(roles.implicit);\n      }\n      return implicit;\n    }\n    var implicit_nodes_default = implicitNodes;\n    function isAccessibleRef(node) {\n      return !!get_accessible_refs_default(node).length;\n    }\n    var is_accessible_ref_default = isAccessibleRef;\n    function label3(node) {\n      node = get_node_from_tree_default(node);\n      return label_virtual_default(node);\n    }\n    var label_default2 = label3;\n    function requiredAttr(role) {\n      var roleDef = standards_default.ariaRoles[role];\n      if (!roleDef || !Array.isArray(roleDef.requiredAttrs)) {\n        return [];\n      }\n      return _toConsumableArray(roleDef.requiredAttrs);\n    }\n    var required_attr_default = requiredAttr;\n    function requiredContext(role) {\n      var roleDef = standards_default.ariaRoles[role];\n      if (!roleDef || !Array.isArray(roleDef.requiredContext)) {\n        return null;\n      }\n      return _toConsumableArray(roleDef.requiredContext);\n    }\n    var required_context_default = requiredContext;\n    function requiredOwned(role) {\n      var roleDef = standards_default.ariaRoles[role];\n      if (!roleDef || !Array.isArray(roleDef.requiredOwned)) {\n        return null;\n      }\n      return _toConsumableArray(roleDef.requiredOwned);\n    }\n    var required_owned_default = requiredOwned;\n    function validateAttrValue(node, attr) {\n      var matches14;\n      var list;\n      var value = node.getAttribute(attr);\n      var attrInfo = standards_default.ariaAttrs[attr];\n      var doc = get_root_node_default2(node);\n      if (!attrInfo) {\n        return true;\n      }\n      if (attrInfo.allowEmpty && (!value || value.trim() === '')) {\n        return true;\n      }\n      switch (attrInfo.type) {\n       case 'boolean':\n        return [ 'true', 'false' ].includes(value.toLowerCase());\n\n       case 'nmtoken':\n        return typeof value === 'string' && attrInfo.values.includes(value.toLowerCase());\n\n       case 'nmtokens':\n        list = token_list_default(value);\n        return list.reduce(function(result, token) {\n          return result && attrInfo.values.includes(token);\n        }, list.length !== 0);\n\n       case 'idref':\n        return !!(value && doc.getElementById(value));\n\n       case 'idrefs':\n        list = token_list_default(value);\n        return list.some(function(token) {\n          return doc.getElementById(token);\n        });\n\n       case 'string':\n        return value.trim() !== '';\n\n       case 'decimal':\n        matches14 = value.match(/^[-+]?([0-9]*)\\.?([0-9]*)$/);\n        return !!(matches14 && (matches14[1] || matches14[2]));\n\n       case 'int':\n        var minValue = typeof attrInfo.minValue !== 'undefined' ? attrInfo.minValue : -Infinity;\n        return /^[-+]?[0-9]+$/.test(value) && parseInt(value) >= minValue;\n      }\n    }\n    var validate_attr_value_default = validateAttrValue;\n    function validateAttr(att) {\n      var attrDefinition = standards_default.ariaAttrs[att];\n      return !!attrDefinition;\n    }\n    var validate_attr_default = validateAttr;\n    function abstractroleEvaluate(node, options, virtualNode) {\n      var abstractRoles = token_list_default(virtualNode.attr('role')).filter(function(role) {\n        return get_role_type_default(role) === 'abstract';\n      });\n      if (abstractRoles.length > 0) {\n        this.data(abstractRoles);\n        return true;\n      }\n      return false;\n    }\n    var abstractrole_evaluate_default = abstractroleEvaluate;\n    function ariaAllowedAttrEvaluate(node, options, virtualNode) {\n      var invalid = [];\n      var role = get_role_default(virtualNode);\n      var attrs = virtualNode.attrNames;\n      var allowed = allowed_attr_default(role);\n      if (Array.isArray(options[role])) {\n        allowed = unique_array_default(options[role].concat(allowed));\n      }\n      if (role && allowed) {\n        for (var _i13 = 0; _i13 < attrs.length; _i13++) {\n          var attrName = attrs[_i13];\n          if (validate_attr_default(attrName) && !allowed.includes(attrName)) {\n            invalid.push(attrName + '=\"' + virtualNode.attr(attrName) + '\"');\n          }\n        }\n      }\n      if (invalid.length) {\n        this.data(invalid);\n        return false;\n      }\n      return true;\n    }\n    var aria_allowed_attr_evaluate_default = ariaAllowedAttrEvaluate;\n    function ariaAllowedRoledEvaluate(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var _options$allowImplici = options.allowImplicit, allowImplicit = _options$allowImplici === void 0 ? true : _options$allowImplici, _options$ignoredTags = options.ignoredTags, ignoredTags = _options$ignoredTags === void 0 ? [] : _options$ignoredTags;\n      var tagName = node.nodeName.toUpperCase();\n      if (ignoredTags.map(function(t) {\n        return t.toUpperCase();\n      }).includes(tagName)) {\n        return true;\n      }\n      var unallowedRoles = get_element_unallowed_roles_default(node, allowImplicit);\n      if (unallowedRoles.length) {\n        this.data(unallowedRoles);\n        if (!is_visible_default(node, true)) {\n          return void 0;\n        }\n        return false;\n      }\n      return true;\n    }\n    var aria_allowed_role_evaluate_default = ariaAllowedRoledEvaluate;\n    function ariaErrormessageEvaluate(node, options) {\n      options = Array.isArray(options) ? options : [];\n      var attr = node.getAttribute('aria-errormessage');\n      var hasAttr = node.hasAttribute('aria-errormessage');\n      var invaid = node.getAttribute('aria-invalid');\n      var hasInvallid = node.hasAttribute('aria-invalid');\n      if (!hasInvallid || invaid === 'false') {\n        return true;\n      }\n      var doc = get_root_node_default2(node);\n      function validateAttrValue2(attr2) {\n        if (attr2.trim() === '') {\n          return standards_default.ariaAttrs['aria-errormessage'].allowEmpty;\n        }\n        var idref = attr2 && doc.getElementById(attr2);\n        if (idref) {\n          return idref.getAttribute('role') === 'alert' || idref.getAttribute('aria-live') === 'assertive' || idref.getAttribute('aria-live') === 'polite' || token_list_default(node.getAttribute('aria-describedby')).indexOf(attr2) > -1;\n        }\n        return;\n      }\n      if (options.indexOf(attr) === -1 && hasAttr) {\n        this.data(token_list_default(attr));\n        return validateAttrValue2(attr);\n      }\n      return true;\n    }\n    var aria_errormessage_evaluate_default = ariaErrormessageEvaluate;\n    function ariaHiddenBodyEvaluate(node, options, virtualNode) {\n      return virtualNode.attr('aria-hidden') !== 'true';\n    }\n    var aria_hidden_body_evaluate_default = ariaHiddenBodyEvaluate;\n    function ariaProhibitedAttrEvaluate(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var virtualNode = arguments.length > 2 ? arguments[2] : undefined;\n      var _options$elementsAllo = options.elementsAllowedAriaLabel, elementsAllowedAriaLabel = _options$elementsAllo === void 0 ? [] : _options$elementsAllo;\n      var prohibitedList = listProhibitedAttrs(virtualNode, elementsAllowedAriaLabel);\n      var prohibited = prohibitedList.filter(function(attrName) {\n        if (!virtualNode.attrNames.includes(attrName)) {\n          return false;\n        }\n        return sanitize_default(virtualNode.attr(attrName)) !== '';\n      });\n      if (prohibited.length === 0) {\n        return false;\n      }\n      this.data(prohibited);\n      var hasTextContent = sanitize_default(subtree_text_default(virtualNode)) !== '';\n      return hasTextContent ? void 0 : true;\n    }\n    function listProhibitedAttrs(virtualNode, elementsAllowedAriaLabel) {\n      var role = get_role_default(virtualNode);\n      var roleSpec = standards_default.ariaRoles[role];\n      if (roleSpec) {\n        return roleSpec.prohibitedAttrs || [];\n      }\n      var nodeName2 = virtualNode.props.nodeName;\n      if (elementsAllowedAriaLabel.includes(nodeName2)) {\n        return [];\n      }\n      return [ 'aria-label', 'aria-labelledby' ];\n    }\n    var aria_prohibited_attr_evaluate_default = ariaProhibitedAttrEvaluate;\n    var standards_exports = {};\n    __export(standards_exports, {\n      getAriaRolesByType: function getAriaRolesByType() {\n        return get_aria_roles_by_type_default;\n      },\n      getAriaRolesSupportingNameFromContent: function getAriaRolesSupportingNameFromContent() {\n        return get_aria_roles_supporting_name_from_content_default;\n      },\n      getElementSpec: function getElementSpec() {\n        return get_element_spec_default;\n      },\n      getElementsByContentType: function getElementsByContentType() {\n        return get_elements_by_content_type_default;\n      },\n      getGlobalAriaAttrs: function getGlobalAriaAttrs() {\n        return get_global_aria_attrs_default;\n      },\n      implicitHtmlRoles: function implicitHtmlRoles() {\n        return implicit_html_roles_default;\n      }\n    });\n    function ariaRequiredAttrEvaluate(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var virtualNode = arguments.length > 2 ? arguments[2] : undefined;\n      var missing = [];\n      var attrs = virtualNode.attrNames;\n      if (attrs.length) {\n        var role = get_explicit_role_default(virtualNode);\n        var required = required_attr_default(role);\n        var elmSpec = get_element_spec_default(virtualNode);\n        if (Array.isArray(options[role])) {\n          required = unique_array_default(options[role], required);\n        }\n        if (role && required) {\n          for (var _i14 = 0, l = required.length; _i14 < l; _i14++) {\n            var attr = required[_i14];\n            if (!virtualNode.attr(attr) && !(elmSpec.implicitAttrs && typeof elmSpec.implicitAttrs[attr] !== 'undefined')) {\n              missing.push(attr);\n            }\n          }\n        }\n      }\n      if (missing.length) {\n        this.data(missing);\n        return false;\n      }\n      return true;\n    }\n    var aria_required_attr_evaluate_default = ariaRequiredAttrEvaluate;\n    function getOwnedRoles(virtualNode, required) {\n      var ownedRoles = [];\n      var ownedElements = get_owned_virtual_default(virtualNode);\n      var _loop4 = function _loop4(_i15) {\n        var ownedElement = ownedElements[_i15];\n        var role = get_role_default(ownedElement, {\n          noPresentational: true\n        });\n        if (!role || [ 'group', 'rowgroup' ].includes(role) && required.some(function(requiredRole) {\n          return requiredRole === role;\n        })) {\n          ownedElements.push.apply(ownedElements, _toConsumableArray(ownedElement.children));\n        } else if (role) {\n          ownedRoles.push(role);\n        }\n      };\n      for (var _i15 = 0; _i15 < ownedElements.length; _i15++) {\n        _loop4(_i15);\n      }\n      return ownedRoles;\n    }\n    function missingRequiredChildren(virtualNode, role, required, ownedRoles) {\n      var isCombobox = role === 'combobox';\n      if (isCombobox) {\n        var textTypeInputs = [ 'text', 'search', 'email', 'url', 'tel' ];\n        if (virtualNode.props.nodeName === 'input' && textTypeInputs.includes(virtualNode.props.type) || ownedRoles.includes('searchbox')) {\n          required = required.filter(function(requiredRole) {\n            return requiredRole !== 'textbox';\n          });\n        }\n        var expandedChildRoles = [ 'listbox', 'tree', 'grid', 'dialog' ];\n        var expandedValue = virtualNode.attr('aria-expanded');\n        var expanded = expandedValue && expandedValue.toLowerCase() !== 'false';\n        var popupRole = (virtualNode.attr('aria-haspopup') || 'listbox').toLowerCase();\n        required = required.filter(function(requiredRole) {\n          return !expandedChildRoles.includes(requiredRole) || expanded && requiredRole === popupRole;\n        });\n      }\n      for (var _i16 = 0; _i16 < ownedRoles.length; _i16++) {\n        var ownedRole = ownedRoles[_i16];\n        if (required.includes(ownedRole)) {\n          required = required.filter(function(requiredRole) {\n            return requiredRole !== ownedRole;\n          });\n          if (!isCombobox) {\n            return null;\n          }\n        }\n      }\n      if (required.length) {\n        return required;\n      }\n      return null;\n    }\n    function ariaRequiredChildrenEvaluate(node, options, virtualNode) {\n      var reviewEmpty = options && Array.isArray(options.reviewEmpty) ? options.reviewEmpty : [];\n      var role = get_explicit_role_default(virtualNode, {\n        dpub: true\n      });\n      var required = required_owned_default(role);\n      if (required === null) {\n        return true;\n      }\n      var ownedRoles = getOwnedRoles(virtualNode, required);\n      var missing = missingRequiredChildren(virtualNode, role, required, ownedRoles);\n      if (!missing) {\n        return true;\n      }\n      this.data(missing);\n      if (reviewEmpty.includes(role) && !has_content_virtual_default(virtualNode, false, true) && !ownedRoles.length && (!virtualNode.hasAttr('aria-owns') || !idrefs_default(node, 'aria-owns').length)) {\n        return void 0;\n      }\n      return false;\n    }\n    var aria_required_children_evaluate_default = ariaRequiredChildrenEvaluate;\n    function getMissingContext(virtualNode, ownGroupRoles, reqContext, includeElement) {\n      var explicitRole2 = get_explicit_role_default(virtualNode);\n      if (!reqContext) {\n        reqContext = required_context_default(explicitRole2);\n      }\n      if (!reqContext) {\n        return null;\n      }\n      var vNode = includeElement ? virtualNode : virtualNode.parent;\n      while (vNode) {\n        var parentRole = get_role_default(vNode);\n        if (reqContext.includes('group') && parentRole === 'group') {\n          if (ownGroupRoles.includes(explicitRole2)) {\n            reqContext.push(explicitRole2);\n          }\n          vNode = vNode.parent;\n          continue;\n        }\n        if (reqContext.includes(parentRole)) {\n          return null;\n        } else if (parentRole && ![ 'presentation', 'none' ].includes(parentRole)) {\n          return reqContext;\n        }\n        vNode = vNode.parent;\n      }\n      return reqContext;\n    }\n    function getAriaOwners(element) {\n      var owners = [], o = null;\n      while (element) {\n        if (element.getAttribute('id')) {\n          var id = escape_selector_default(element.getAttribute('id'));\n          var doc = get_root_node_default2(element);\n          o = doc.querySelector('[aria-owns~='.concat(id, ']'));\n          if (o) {\n            owners.push(o);\n          }\n        }\n        element = element.parentElement;\n      }\n      return owners.length ? owners : null;\n    }\n    function ariaRequiredParentEvaluate(node, options, virtualNode) {\n      var ownGroupRoles = options && Array.isArray(options.ownGroupRoles) ? options.ownGroupRoles : [];\n      var missingParents = getMissingContext(virtualNode, ownGroupRoles);\n      if (!missingParents) {\n        return true;\n      }\n      var owners = getAriaOwners(node);\n      if (owners) {\n        for (var _i17 = 0, l = owners.length; _i17 < l; _i17++) {\n          missingParents = getMissingContext(get_node_from_tree_default(owners[_i17]), ownGroupRoles, missingParents, true);\n          if (!missingParents) {\n            return true;\n          }\n        }\n      }\n      this.data(missingParents);\n      return false;\n    }\n    var aria_required_parent_evaluate_default = ariaRequiredParentEvaluate;\n    function ariaRoledescriptionEvaluate(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var role = get_role_default(node);\n      var supportedRoles = options.supportedRoles || [];\n      if (supportedRoles.includes(role)) {\n        return true;\n      }\n      if (role && role !== 'presentation' && role !== 'none') {\n        return void 0;\n      }\n      return false;\n    }\n    var aria_roledescription_evaluate_default = ariaRoledescriptionEvaluate;\n    function ariaUnsupportedAttrEvaluate(node, options, virtualNode) {\n      var unsupportedAttrs = virtualNode.attrNames.filter(function(name) {\n        var attribute = standards_default.ariaAttrs[name];\n        if (!validate_attr_default(name)) {\n          return false;\n        }\n        var unsupported4 = attribute.unsupported;\n        if (_typeof(unsupported4) !== 'object') {\n          return !!unsupported4;\n        }\n        return !matches_default3(node, unsupported4.exceptions);\n      });\n      if (unsupportedAttrs.length) {\n        this.data(unsupportedAttrs);\n        return true;\n      }\n      return false;\n    }\n    var aria_unsupported_attr_evaluate_default = ariaUnsupportedAttrEvaluate;\n    function ariaValidAttrEvaluate(node, options) {\n      options = Array.isArray(options.value) ? options.value : [];\n      var invalid = [], aria43 = /^aria-/;\n      var attr, attrs = get_node_attributes_default(node);\n      for (var i = 0, l = attrs.length; i < l; i++) {\n        attr = attrs[i].name;\n        if (options.indexOf(attr) === -1 && aria43.test(attr) && !validate_attr_default(attr)) {\n          invalid.push(attr);\n        }\n      }\n      if (invalid.length) {\n        this.data(invalid);\n        return false;\n      }\n      return true;\n    }\n    var aria_valid_attr_evaluate_default = ariaValidAttrEvaluate;\n    function ariaValidAttrValueEvaluate(node, options) {\n      options = Array.isArray(options.value) ? options.value : [];\n      var needsReview = '';\n      var messageKey = '';\n      var invalid = [];\n      var aria43 = /^aria-/;\n      var attrs = get_node_attributes_default(node);\n      var skipAttrs = [ 'aria-errormessage' ];\n      var preChecks = {\n        'aria-controls': function ariaControls() {\n          return node.getAttribute('aria-expanded') !== 'false' && node.getAttribute('aria-selected') !== 'false';\n        },\n        'aria-current': function ariaCurrent() {\n          if (!validate_attr_value_default(node, 'aria-current')) {\n            needsReview = 'aria-current=\"'.concat(node.getAttribute('aria-current'), '\"');\n            messageKey = 'ariaCurrent';\n          }\n          return;\n        },\n        'aria-owns': function ariaOwns() {\n          return node.getAttribute('aria-expanded') !== 'false';\n        },\n        'aria-describedby': function ariaDescribedby() {\n          if (!validate_attr_value_default(node, 'aria-describedby')) {\n            needsReview = 'aria-describedby=\"'.concat(node.getAttribute('aria-describedby'), '\"');\n            messageKey = 'noId';\n          }\n          return;\n        },\n        'aria-labelledby': function ariaLabelledby() {\n          if (!validate_attr_value_default(node, 'aria-labelledby')) {\n            needsReview = 'aria-labelledby=\"'.concat(node.getAttribute('aria-labelledby'), '\"');\n            messageKey = 'noId';\n          }\n        }\n      };\n      for (var _i18 = 0, l = attrs.length; _i18 < l; _i18++) {\n        var attr = attrs[_i18];\n        var attrName = attr.name;\n        if (!skipAttrs.includes(attrName) && options.indexOf(attrName) === -1 && aria43.test(attrName) && (preChecks[attrName] ? preChecks[attrName]() : true) && !validate_attr_value_default(node, attrName)) {\n          invalid.push(''.concat(attrName, '=\"').concat(attr.nodeValue, '\"'));\n        }\n      }\n      if (needsReview) {\n        this.data({\n          messageKey: messageKey,\n          needsReview: needsReview\n        });\n        return void 0;\n      }\n      if (invalid.length) {\n        this.data(invalid);\n        return false;\n      }\n      return true;\n    }\n    var aria_valid_attr_value_evaluate_default = ariaValidAttrValueEvaluate;\n    function fallbackroleEvaluate(node, options, virtualNode) {\n      return token_list_default(virtualNode.attr('role')).length > 1;\n    }\n    var fallbackrole_evaluate_default = fallbackroleEvaluate;\n    function hasGlobalAriaAttributeEvaluate(node, options, virtualNode) {\n      var globalAttrs = get_global_aria_attrs_default().filter(function(attr) {\n        return virtualNode.hasAttr(attr);\n      });\n      this.data(globalAttrs);\n      return globalAttrs.length > 0;\n    }\n    var has_global_aria_attribute_evaluate_default = hasGlobalAriaAttributeEvaluate;\n    function hasWidgetRoleEvaluate(node) {\n      var role = node.getAttribute('role');\n      if (role === null) {\n        return false;\n      }\n      var roleType = get_role_type_default(role);\n      return roleType === 'widget' || roleType === 'composite';\n    }\n    var has_widget_role_evaluate_default = hasWidgetRoleEvaluate;\n    function invalidroleEvaluate(node, options, virtualNode) {\n      var allRoles = token_list_default(virtualNode.attr('role'));\n      var allInvalid = allRoles.every(function(role) {\n        return !is_valid_role_default(role, {\n          allowAbstract: true\n        });\n      });\n      if (allInvalid) {\n        this.data(allRoles);\n        return true;\n      }\n      return false;\n    }\n    var invalidrole_evaluate_default = invalidroleEvaluate;\n    function isElementFocusableEvaluate(node, options, virtualNode) {\n      return is_focusable_default(virtualNode);\n    }\n    var is_element_focusable_evaluate_default = isElementFocusableEvaluate;\n    function noImplicitExplicitLabelEvaluate(node, options, virtualNode) {\n      var role = get_role_default(virtualNode, {\n        noImplicit: true\n      });\n      this.data(role);\n      var label5;\n      var accText;\n      try {\n        label5 = sanitize_default(label_text_default(virtualNode)).toLowerCase();\n        accText = sanitize_default(accessible_text_virtual_default(virtualNode)).toLowerCase();\n      } catch (e) {\n        return void 0;\n      }\n      if (!accText && !label5) {\n        return false;\n      }\n      if (!accText && label5) {\n        return void 0;\n      }\n      if (!accText.includes(label5)) {\n        return void 0;\n      }\n      return false;\n    }\n    var no_implicit_explicit_label_evaluate_default = noImplicitExplicitLabelEvaluate;\n    function unsupportedroleEvaluate(node, options, virtualNode) {\n      return is_unsupported_role_default(get_role_default(virtualNode));\n    }\n    var unsupportedrole_evaluate_default = unsupportedroleEvaluate;\n    var VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS = {\n      ARTICLE: true,\n      ASIDE: true,\n      NAV: true,\n      SECTION: true\n    };\n    var VALID_ROLES_FOR_SCROLLABLE_REGIONS = {\n      application: true,\n      banner: false,\n      complementary: true,\n      contentinfo: true,\n      form: true,\n      main: true,\n      navigation: true,\n      region: true,\n      search: false\n    };\n    function validScrollableTagName(node) {\n      var nodeName2 = node.nodeName.toUpperCase();\n      return VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS[nodeName2] || false;\n    }\n    function validScrollableRole(node, options) {\n      var role = get_explicit_role_default(node);\n      if (!role) {\n        return false;\n      }\n      return VALID_ROLES_FOR_SCROLLABLE_REGIONS[role] || options.roles.includes(role) || false;\n    }\n    function validScrollableSemanticsEvaluate(node, options) {\n      return validScrollableRole(node, options) || validScrollableTagName(node);\n    }\n    var valid_scrollable_semantics_evaluate_default = validScrollableSemanticsEvaluate;\n    var table_exports = {};\n    __export(table_exports, {\n      getAllCells: function getAllCells() {\n        return get_all_cells_default;\n      },\n      getCellPosition: function getCellPosition() {\n        return get_cell_position_default;\n      },\n      getHeaders: function getHeaders() {\n        return get_headers_default;\n      },\n      getScope: function getScope() {\n        return get_scope_default;\n      },\n      isColumnHeader: function isColumnHeader() {\n        return is_column_header_default;\n      },\n      isDataCell: function isDataCell() {\n        return is_data_cell_default;\n      },\n      isDataTable: function isDataTable() {\n        return is_data_table_default;\n      },\n      isHeader: function isHeader() {\n        return is_header_default;\n      },\n      isRowHeader: function isRowHeader() {\n        return is_row_header_default;\n      },\n      toArray: function toArray() {\n        return to_grid_default;\n      },\n      toGrid: function toGrid() {\n        return to_grid_default;\n      },\n      traverse: function traverse() {\n        return traverse_default;\n      }\n    });\n    function getAllCells(tableElm) {\n      var rowIndex, cellIndex, rowLength, cellLength;\n      var cells = [];\n      for (rowIndex = 0, rowLength = tableElm.rows.length; rowIndex < rowLength; rowIndex++) {\n        for (cellIndex = 0, cellLength = tableElm.rows[rowIndex].cells.length; cellIndex < cellLength; cellIndex++) {\n          cells.push(tableElm.rows[rowIndex].cells[cellIndex]);\n        }\n      }\n      return cells;\n    }\n    var get_all_cells_default = getAllCells;\n    function traverseForHeaders(headerType, position, tableGrid) {\n      var property = headerType === 'row' ? '_rowHeaders' : '_colHeaders';\n      var predicate = headerType === 'row' ? is_row_header_default : is_column_header_default;\n      var startCell = tableGrid[position.y][position.x];\n      var colspan = startCell.colSpan - 1;\n      var rowspanAttr = startCell.getAttribute('rowspan');\n      var rowspanValue = parseInt(rowspanAttr) === 0 || startCell.rowspan === 0 ? tableGrid.length : startCell.rowSpan;\n      var rowspan = rowspanValue - 1;\n      var rowStart = position.y + rowspan;\n      var colStart = position.x + colspan;\n      var rowEnd = headerType === 'row' ? position.y : 0;\n      var colEnd = headerType === 'row' ? 0 : position.x;\n      var headers;\n      var cells = [];\n      for (var row = rowStart; row >= rowEnd && !headers; row--) {\n        for (var col = colStart; col >= colEnd; col--) {\n          var cell = tableGrid[row] ? tableGrid[row][col] : void 0;\n          if (!cell) {\n            continue;\n          }\n          var vNode = axe.utils.getNodeFromTree(cell);\n          if (vNode[property]) {\n            headers = vNode[property];\n            break;\n          }\n          cells.push(cell);\n        }\n      }\n      headers = (headers || []).concat(cells.filter(predicate));\n      cells.forEach(function(tableCell) {\n        var vNode = axe.utils.getNodeFromTree(tableCell);\n        vNode[property] = headers;\n      });\n      return headers;\n    }\n    function getHeaders(cell, tableGrid) {\n      if (cell.getAttribute('headers')) {\n        var headers = idrefs_default(cell, 'headers');\n        if (headers.filter(function(header) {\n          return header;\n        }).length) {\n          return headers;\n        }\n      }\n      if (!tableGrid) {\n        tableGrid = to_grid_default(find_up_default(cell, 'table'));\n      }\n      var position = get_cell_position_default(cell, tableGrid);\n      var rowHeaders = traverseForHeaders('row', position, tableGrid);\n      var colHeaders = traverseForHeaders('col', position, tableGrid);\n      return [].concat(rowHeaders, colHeaders).reverse();\n    }\n    var get_headers_default = getHeaders;\n    function isDataCell(cell) {\n      if (!cell.children.length && !cell.textContent.trim()) {\n        return false;\n      }\n      var role = cell.getAttribute('role');\n      if (is_valid_role_default(role)) {\n        return [ 'cell', 'gridcell' ].includes(role);\n      } else {\n        return cell.nodeName.toUpperCase() === 'TD';\n      }\n    }\n    var is_data_cell_default = isDataCell;\n    function isDataTable(node) {\n      var role = (node.getAttribute('role') || '').toLowerCase();\n      if ((role === 'presentation' || role === 'none') && !is_focusable_default(node)) {\n        return false;\n      }\n      if (node.getAttribute('contenteditable') === 'true' || find_up_default(node, '[contenteditable=\"true\"]')) {\n        return true;\n      }\n      if (role === 'grid' || role === 'treegrid' || role === 'table') {\n        return true;\n      }\n      if (get_role_type_default(role) === 'landmark') {\n        return true;\n      }\n      if (node.getAttribute('datatable') === '0') {\n        return false;\n      }\n      if (node.getAttribute('summary')) {\n        return true;\n      }\n      if (node.tHead || node.tFoot || node.caption) {\n        return true;\n      }\n      for (var childIndex = 0, childLength = node.children.length; childIndex < childLength; childIndex++) {\n        if (node.children[childIndex].nodeName.toUpperCase() === 'COLGROUP') {\n          return true;\n        }\n      }\n      var cells = 0;\n      var rowLength = node.rows.length;\n      var row, cell;\n      var hasBorder = false;\n      for (var rowIndex = 0; rowIndex < rowLength; rowIndex++) {\n        row = node.rows[rowIndex];\n        for (var cellIndex = 0, cellLength = row.cells.length; cellIndex < cellLength; cellIndex++) {\n          cell = row.cells[cellIndex];\n          if (cell.nodeName.toUpperCase() === 'TH') {\n            return true;\n          }\n          if (!hasBorder && (cell.offsetWidth !== cell.clientWidth || cell.offsetHeight !== cell.clientHeight)) {\n            hasBorder = true;\n          }\n          if (cell.getAttribute('scope') || cell.getAttribute('headers') || cell.getAttribute('abbr')) {\n            return true;\n          }\n          if ([ 'columnheader', 'rowheader' ].includes((cell.getAttribute('role') || '').toLowerCase())) {\n            return true;\n          }\n          if (cell.children.length === 1 && cell.children[0].nodeName.toUpperCase() === 'ABBR') {\n            return true;\n          }\n          cells++;\n        }\n      }\n      if (node.getElementsByTagName('table').length) {\n        return false;\n      }\n      if (rowLength < 2) {\n        return false;\n      }\n      var sampleRow = node.rows[Math.ceil(rowLength / 2)];\n      if (sampleRow.cells.length === 1 && sampleRow.cells[0].colSpan === 1) {\n        return false;\n      }\n      if (sampleRow.cells.length >= 5) {\n        return true;\n      }\n      if (hasBorder) {\n        return true;\n      }\n      var bgColor, bgImage;\n      for (rowIndex = 0; rowIndex < rowLength; rowIndex++) {\n        row = node.rows[rowIndex];\n        if (bgColor && bgColor !== window.getComputedStyle(row).getPropertyValue('background-color')) {\n          return true;\n        } else {\n          bgColor = window.getComputedStyle(row).getPropertyValue('background-color');\n        }\n        if (bgImage && bgImage !== window.getComputedStyle(row).getPropertyValue('background-image')) {\n          return true;\n        } else {\n          bgImage = window.getComputedStyle(row).getPropertyValue('background-image');\n        }\n      }\n      if (rowLength >= 20) {\n        return true;\n      }\n      if (get_element_coordinates_default(node).width > get_viewport_size_default(window).width * .95) {\n        return false;\n      }\n      if (cells < 10) {\n        return false;\n      }\n      if (node.querySelector('object, embed, iframe, applet')) {\n        return false;\n      }\n      return true;\n    }\n    var is_data_table_default = isDataTable;\n    function isHeader(cell) {\n      if (is_column_header_default(cell) || is_row_header_default(cell)) {\n        return true;\n      }\n      if (cell.getAttribute('id')) {\n        var id = escape_selector_default(cell.getAttribute('id'));\n        return !!document.querySelector('[headers~=\"'.concat(id, '\"]'));\n      }\n      return false;\n    }\n    var is_header_default = isHeader;\n    function traverseTable(dir, position, tableGrid, callback) {\n      var result;\n      var cell = tableGrid[position.y] ? tableGrid[position.y][position.x] : void 0;\n      if (!cell) {\n        return [];\n      }\n      if (typeof callback === 'function') {\n        result = callback(cell, position, tableGrid);\n        if (result === true) {\n          return [ cell ];\n        }\n      }\n      result = traverseTable(dir, {\n        x: position.x + dir.x,\n        y: position.y + dir.y\n      }, tableGrid, callback);\n      result.unshift(cell);\n      return result;\n    }\n    function traverse(dir, startPos, tableGrid, callback) {\n      if (Array.isArray(startPos)) {\n        callback = tableGrid;\n        tableGrid = startPos;\n        startPos = {\n          x: 0,\n          y: 0\n        };\n      }\n      if (typeof dir === 'string') {\n        switch (dir) {\n         case 'left':\n          dir = {\n            x: -1,\n            y: 0\n          };\n          break;\n\n         case 'up':\n          dir = {\n            x: 0,\n            y: -1\n          };\n          break;\n\n         case 'right':\n          dir = {\n            x: 1,\n            y: 0\n          };\n          break;\n\n         case 'down':\n          dir = {\n            x: 0,\n            y: 1\n          };\n          break;\n        }\n      }\n      return traverseTable(dir, {\n        x: startPos.x + dir.x,\n        y: startPos.y + dir.y\n      }, tableGrid, callback);\n    }\n    var traverse_default = traverse;\n    function captionFakedEvaluate(node) {\n      var table5 = to_grid_default(node);\n      var firstRow = table5[0];\n      if (table5.length <= 1 || firstRow.length <= 1 || node.rows.length <= 1) {\n        return true;\n      }\n      return firstRow.reduce(function(out, curr, i) {\n        return out || curr !== firstRow[i + 1] && firstRow[i + 1] !== void 0;\n      }, false);\n    }\n    var caption_faked_evaluate_default = captionFakedEvaluate;\n    function html5ScopeEvaluate(node) {\n      if (!is_html5_default(document)) {\n        return true;\n      }\n      return node.nodeName.toUpperCase() === 'TH';\n    }\n    var html5_scope_evaluate_default = html5ScopeEvaluate;\n    function sameCaptionSummaryEvaluate(node) {\n      return !!(node.summary && node.caption) && node.summary.toLowerCase() === accessible_text_default(node.caption).toLowerCase();\n    }\n    var same_caption_summary_evaluate_default = sameCaptionSummaryEvaluate;\n    function scopeValueEvaluate(node, options) {\n      var value = node.getAttribute('scope').toLowerCase();\n      return options.values.indexOf(value) !== -1;\n    }\n    var scope_value_evaluate_default = scopeValueEvaluate;\n    function tdHasHeaderEvaluate(node) {\n      var badCells = [];\n      var cells = get_all_cells_default(node);\n      var tableGrid = to_grid_default(node);\n      cells.forEach(function(cell) {\n        if (has_content_default(cell) && is_data_cell_default(cell) && !label_default2(cell)) {\n          var hasHeaders = get_headers_default(cell, tableGrid).some(function(header) {\n            return header !== null && !!has_content_default(header);\n          });\n          if (!hasHeaders) {\n            badCells.push(cell);\n          }\n        }\n      });\n      if (badCells.length) {\n        this.relatedNodes(badCells);\n        return false;\n      }\n      return true;\n    }\n    var td_has_header_evaluate_default = tdHasHeaderEvaluate;\n    function tdHeadersAttrEvaluate(node) {\n      var cells = [];\n      var reviewCells = [];\n      var badCells = [];\n      for (var rowIndex = 0; rowIndex < node.rows.length; rowIndex++) {\n        var row = node.rows[rowIndex];\n        for (var cellIndex = 0; cellIndex < row.cells.length; cellIndex++) {\n          cells.push(row.cells[cellIndex]);\n        }\n      }\n      var ids = cells.reduce(function(ids2, cell) {\n        if (cell.getAttribute('id')) {\n          ids2.push(cell.getAttribute('id'));\n        }\n        return ids2;\n      }, []);\n      cells.forEach(function(cell) {\n        var isSelf = false;\n        var notOfTable = false;\n        if (!cell.hasAttribute('headers')) {\n          return;\n        }\n        var headersAttr = cell.getAttribute('headers').trim();\n        if (!headersAttr) {\n          return reviewCells.push(cell);\n        }\n        var headers = token_list_default(headersAttr);\n        if (headers.length !== 0) {\n          if (cell.getAttribute('id')) {\n            isSelf = headers.indexOf(cell.getAttribute('id').trim()) !== -1;\n          }\n          notOfTable = headers.some(function(header) {\n            return !ids.includes(header);\n          });\n          if (isSelf || notOfTable) {\n            badCells.push(cell);\n          }\n        }\n      });\n      if (badCells.length > 0) {\n        this.relatedNodes(badCells);\n        return false;\n      }\n      if (reviewCells.length) {\n        this.relatedNodes(reviewCells);\n        return void 0;\n      }\n      return true;\n    }\n    var td_headers_attr_evaluate_default = tdHeadersAttrEvaluate;\n    function thHasDataCellsEvaluate(node) {\n      var cells = get_all_cells_default(node);\n      var checkResult = this;\n      var reffedHeaders = [];\n      cells.forEach(function(cell) {\n        var headers2 = cell.getAttribute('headers');\n        if (headers2) {\n          reffedHeaders = reffedHeaders.concat(headers2.split(/\\s+/));\n        }\n        var ariaLabel = cell.getAttribute('aria-labelledby');\n        if (ariaLabel) {\n          reffedHeaders = reffedHeaders.concat(ariaLabel.split(/\\s+/));\n        }\n      });\n      var headers = cells.filter(function(cell) {\n        if (sanitize_default(cell.textContent) === '') {\n          return false;\n        }\n        return cell.nodeName.toUpperCase() === 'TH' || [ 'rowheader', 'columnheader' ].indexOf(cell.getAttribute('role')) !== -1;\n      });\n      var tableGrid = to_grid_default(node);\n      var out = true;\n      headers.forEach(function(header) {\n        if (header.getAttribute('id') && reffedHeaders.includes(header.getAttribute('id'))) {\n          return;\n        }\n        var pos = get_cell_position_default(header, tableGrid);\n        var hasCell = false;\n        if (is_column_header_default(header)) {\n          hasCell = traverse_default('down', pos, tableGrid).find(function(cell) {\n            return !is_column_header_default(cell) && get_headers_default(cell, tableGrid).includes(header);\n          });\n        }\n        if (!hasCell && is_row_header_default(header)) {\n          hasCell = traverse_default('right', pos, tableGrid).find(function(cell) {\n            return !is_row_header_default(cell) && get_headers_default(cell, tableGrid).includes(header);\n          });\n        }\n        if (!hasCell) {\n          checkResult.relatedNodes(header);\n        }\n        out = out && hasCell;\n      });\n      return out ? true : void 0;\n    }\n    var th_has_data_cells_evaluate_default = thHasDataCellsEvaluate;\n    function hiddenContentEvaluate(node, options, virtualNode) {\n      var whitelist = [ 'SCRIPT', 'HEAD', 'TITLE', 'NOSCRIPT', 'STYLE', 'TEMPLATE' ];\n      if (!whitelist.includes(node.nodeName.toUpperCase()) && has_content_virtual_default(virtualNode)) {\n        var styles = window.getComputedStyle(node);\n        if (styles.getPropertyValue('display') === 'none') {\n          return void 0;\n        } else if (styles.getPropertyValue('visibility') === 'hidden') {\n          var parent = get_composed_parent_default(node);\n          var parentStyle = parent && window.getComputedStyle(parent);\n          if (!parentStyle || parentStyle.getPropertyValue('visibility') !== 'hidden') {\n            return void 0;\n          }\n        }\n      }\n      return true;\n    }\n    var hidden_content_evaluate_default = hiddenContentEvaluate;\n    var color_exports = {};\n    __export(color_exports, {\n      Color: function Color() {\n        return color_default;\n      },\n      centerPointOfRect: function centerPointOfRect() {\n        return center_point_of_rect_default;\n      },\n      elementHasImage: function elementHasImage() {\n        return element_has_image_default;\n      },\n      elementIsDistinct: function elementIsDistinct() {\n        return element_is_distinct_default;\n      },\n      filteredRectStack: function filteredRectStack() {\n        return filtered_rect_stack_default;\n      },\n      flattenColors: function flattenColors() {\n        return flatten_colors_default;\n      },\n      getBackgroundColor: function getBackgroundColor() {\n        return get_background_color_default;\n      },\n      getBackgroundStack: function getBackgroundStack() {\n        return get_background_stack_default;\n      },\n      getContrast: function getContrast() {\n        return get_contrast_default;\n      },\n      getForegroundColor: function getForegroundColor() {\n        return get_foreground_color_default;\n      },\n      getOwnBackgroundColor: function getOwnBackgroundColor() {\n        return get_own_background_color_default;\n      },\n      getRectStack: function getRectStack() {\n        return get_rect_stack_default;\n      },\n      getTextShadowColors: function getTextShadowColors() {\n        return get_text_shadow_colors_default;\n      },\n      hasValidContrastRatio: function hasValidContrastRatio() {\n        return has_valid_contrast_ratio_default;\n      },\n      incompleteData: function incompleteData() {\n        return incomplete_data_default;\n      }\n    });\n    function centerPointOfRect(rect) {\n      if (rect.left > window.innerWidth) {\n        return void 0;\n      }\n      if (rect.top > window.innerHeight) {\n        return void 0;\n      }\n      var x = Math.min(Math.ceil(rect.left + rect.width / 2), window.innerWidth - 1);\n      var y = Math.min(Math.ceil(rect.top + rect.height / 2), window.innerHeight - 1);\n      return {\n        x: x,\n        y: y\n      };\n    }\n    var center_point_of_rect_default = centerPointOfRect;\n    function _getFonts(style) {\n      return style.getPropertyValue('font-family').split(/[,;]/g).map(function(font) {\n        return font.trim().toLowerCase();\n      });\n    }\n    function elementIsDistinct(node, ancestorNode) {\n      var nodeStyle = window.getComputedStyle(node);\n      if (nodeStyle.getPropertyValue('background-image') !== 'none') {\n        return true;\n      }\n      var hasBorder = [ 'border-bottom', 'border-top', 'outline' ].reduce(function(result, edge) {\n        var borderClr = new color_default();\n        borderClr.parseString(nodeStyle.getPropertyValue(edge + '-color'));\n        return result || nodeStyle.getPropertyValue(edge + '-style') !== 'none' && parseFloat(nodeStyle.getPropertyValue(edge + '-width')) > 0 && borderClr.alpha !== 0;\n      }, false);\n      if (hasBorder) {\n        return true;\n      }\n      var parentStyle = window.getComputedStyle(ancestorNode);\n      if (_getFonts(nodeStyle)[0] !== _getFonts(parentStyle)[0]) {\n        return true;\n      }\n      var hasStyle = [ 'text-decoration-line', 'text-decoration-style', 'font-weight', 'font-style', 'font-size' ].reduce(function(result, cssProp) {\n        return result || nodeStyle.getPropertyValue(cssProp) !== parentStyle.getPropertyValue(cssProp);\n      }, false);\n      var tDec = nodeStyle.getPropertyValue('text-decoration');\n      if (tDec.split(' ').length < 3) {\n        hasStyle = hasStyle || tDec !== parentStyle.getPropertyValue('text-decoration');\n      }\n      return hasStyle;\n    }\n    var element_is_distinct_default = elementIsDistinct;\n    function getRectStack2(elm) {\n      var boundingStack = get_element_stack_default(elm);\n      var filteredArr = get_text_element_stack_default(elm);\n      if (!filteredArr || filteredArr.length <= 1) {\n        return [ boundingStack ];\n      }\n      if (filteredArr.some(function(stack) {\n        return stack === void 0;\n      })) {\n        return null;\n      }\n      filteredArr.splice(0, 0, boundingStack);\n      return filteredArr;\n    }\n    var get_rect_stack_default = getRectStack2;\n    function filteredRectStack(elm) {\n      var rectStack = get_rect_stack_default(elm);\n      if (rectStack && rectStack.length === 1) {\n        return rectStack[0];\n      }\n      if (rectStack && rectStack.length > 1) {\n        var boundingStack = rectStack.shift();\n        var isSame;\n        rectStack.forEach(function(rectList, index) {\n          if (index === 0) {\n            return;\n          }\n          var rectA = rectStack[index - 1], rectB = rectStack[index];\n          isSame = rectA.every(function(element, elementIndex) {\n            return element === rectB[elementIndex];\n          }) || boundingStack.includes(elm);\n        });\n        if (!isSame) {\n          incomplete_data_default.set('bgColor', 'elmPartiallyObscuring');\n          return null;\n        }\n        return rectStack[0];\n      }\n      incomplete_data_default.set('bgColor', 'outsideViewport');\n      return null;\n    }\n    var filtered_rect_stack_default = filteredRectStack;\n    function flattenColors(fgColor, bgColor) {\n      var alpha = fgColor.alpha;\n      var r = (1 - alpha) * bgColor.red + alpha * fgColor.red;\n      var g = (1 - alpha) * bgColor.green + alpha * fgColor.green;\n      var b = (1 - alpha) * bgColor.blue + alpha * fgColor.blue;\n      var a = fgColor.alpha + bgColor.alpha * (1 - fgColor.alpha);\n      return new color_default(r, g, b, a);\n    }\n    var flatten_colors_default = flattenColors;\n    function contentOverlapping(targetElement, bgNode) {\n      var targetRect = targetElement.getClientRects()[0];\n      var obscuringElements = shadow_elements_from_point_default(targetRect.left, targetRect.top);\n      if (obscuringElements) {\n        for (var i = 0; i < obscuringElements.length; i++) {\n          if (obscuringElements[i] !== targetElement && obscuringElements[i] === bgNode) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n    function calculateObscuringElement(elmIndex, elmStack, originalElm) {\n      if (elmIndex > 0) {\n        for (var i = elmIndex - 1; i >= 0; i--) {\n          var bgElm = elmStack[i];\n          if (contentOverlapping(originalElm, bgElm)) {\n            return true;\n          } else {\n            elmStack.splice(i, 1);\n          }\n        }\n      }\n      return false;\n    }\n    function sortPageBackground(elmStack) {\n      var bodyIndex = elmStack.indexOf(document.body);\n      var bgNodes = elmStack;\n      var sortBodyElement = bodyIndex > 1 || bodyIndex === -1;\n      if (sortBodyElement && !element_has_image_default(document.documentElement) && get_own_background_color_default(window.getComputedStyle(document.documentElement)).alpha === 0) {\n        if (bodyIndex > 1) {\n          bgNodes.splice(bodyIndex, 1);\n        }\n        bgNodes.splice(elmStack.indexOf(document.documentElement), 1);\n        bgNodes.push(document.body);\n      }\n      return bgNodes;\n    }\n    function getBackgroundStack(elm) {\n      var elmStack = filtered_rect_stack_default(elm);\n      if (elmStack === null) {\n        return null;\n      }\n      elmStack = reduce_to_elements_below_floating_default(elmStack, elm);\n      elmStack = sortPageBackground(elmStack);\n      var elmIndex = elmStack.indexOf(elm);\n      if (calculateObscuringElement(elmIndex, elmStack, elm)) {\n        incomplete_data_default.set('bgColor', 'bgOverlap');\n        return null;\n      }\n      return elmIndex !== -1 ? elmStack : null;\n    }\n    var get_background_stack_default = getBackgroundStack;\n    function getTextShadowColors(node) {\n      var _ref43 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, minRatio = _ref43.minRatio, maxRatio = _ref43.maxRatio;\n      var style = window.getComputedStyle(node);\n      var textShadow = style.getPropertyValue('text-shadow');\n      if (textShadow === 'none') {\n        return [];\n      }\n      var fontSizeStr = style.getPropertyValue('font-size');\n      var fontSize = parseInt(fontSizeStr);\n      assert_default(isNaN(fontSize) === false, 'Unable to determine font-size value '.concat(fontSizeStr));\n      var shadowColors = [];\n      var shadows = parseTextShadows(textShadow);\n      shadows.forEach(function(_ref44) {\n        var colorStr = _ref44.colorStr, pixels = _ref44.pixels;\n        colorStr = colorStr || style.getPropertyValue('color');\n        var _pixels = _slicedToArray(pixels, 3), offsetY = _pixels[0], offsetX = _pixels[1], _pixels$ = _pixels[2], blurRadius = _pixels$ === void 0 ? 0 : _pixels$;\n        if ((!minRatio || blurRadius >= fontSize * minRatio) && (!maxRatio || blurRadius < fontSize * maxRatio)) {\n          var color10 = textShadowColor({\n            colorStr: colorStr,\n            offsetY: offsetY,\n            offsetX: offsetX,\n            blurRadius: blurRadius,\n            fontSize: fontSize\n          });\n          shadowColors.push(color10);\n        }\n      });\n      return shadowColors;\n    }\n    function parseTextShadows(textShadow) {\n      var current = {\n        pixels: []\n      };\n      var str = textShadow.trim();\n      var shadows = [ current ];\n      if (!str) {\n        return [];\n      }\n      while (str) {\n        var colorMatch = str.match(/^rgba?\\([0-9,.\\s]+\\)/i) || str.match(/^[a-z]+/i) || str.match(/^#[0-9a-f]+/i);\n        var pixelMatch = str.match(/^([0-9.-]+)px/i) || str.match(/^(0)/);\n        if (colorMatch) {\n          assert_default(!current.colorStr, 'Multiple colors identified in text-shadow: '.concat(textShadow));\n          str = str.replace(colorMatch[0], '').trim();\n          current.colorStr = colorMatch[0];\n        } else if (pixelMatch) {\n          assert_default(current.pixels.length < 3, 'Too many pixel units in text-shadow: '.concat(textShadow));\n          str = str.replace(pixelMatch[0], '').trim();\n          var pixelUnit = parseFloat((pixelMatch[1][0] === '.' ? '0' : '') + pixelMatch[1]);\n          current.pixels.push(pixelUnit);\n        } else if (str[0] === ',') {\n          assert_default(current.pixels.length >= 2, 'Missing pixel value in text-shadow: '.concat(textShadow));\n          current = {\n            pixels: []\n          };\n          shadows.push(current);\n          str = str.substr(1).trim();\n        } else {\n          throw new Error('Unable to process text-shadows: '.concat(textShadow));\n        }\n      }\n      return shadows;\n    }\n    function textShadowColor(_ref45) {\n      var colorStr = _ref45.colorStr, offsetX = _ref45.offsetX, offsetY = _ref45.offsetY, blurRadius = _ref45.blurRadius, fontSize = _ref45.fontSize;\n      if (offsetX > blurRadius || offsetY > blurRadius) {\n        return new color_default(0, 0, 0, 0);\n      }\n      var shadowColor = new color_default();\n      shadowColor.parseString(colorStr);\n      shadowColor.alpha *= blurRadiusToAlpha(blurRadius, fontSize);\n      return shadowColor;\n    }\n    function blurRadiusToAlpha(blurRadius, fontSize) {\n      var relativeBlur = blurRadius / fontSize;\n      return .185 / (relativeBlur + .4);\n    }\n    var get_text_shadow_colors_default = getTextShadowColors;\n    function elmPartiallyObscured(elm, bgElm, bgColor) {\n      var obscured = elm !== bgElm && !visually_contains_default(elm, bgElm) && bgColor.alpha !== 0;\n      if (obscured) {\n        incomplete_data_default.set('bgColor', 'elmPartiallyObscured');\n      }\n      return obscured;\n    }\n    function getBackgroundColor(elm) {\n      var bgElms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var shadowOutlineEmMax = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : .1;\n      var bgColors = get_text_shadow_colors_default(elm, {\n        minRatio: shadowOutlineEmMax\n      });\n      var elmStack = get_background_stack_default(elm);\n      (elmStack || []).some(function(bgElm) {\n        var bgElmStyle = window.getComputedStyle(bgElm);\n        var bgColor = get_own_background_color_default(bgElmStyle);\n        if (elmPartiallyObscured(elm, bgElm, bgColor) || element_has_image_default(bgElm, bgElmStyle)) {\n          bgColors = null;\n          bgElms.push(bgElm);\n          return true;\n        }\n        if (bgColor.alpha !== 0) {\n          bgElms.push(bgElm);\n          bgColors.push(bgColor);\n          return bgColor.alpha === 1;\n        } else {\n          return false;\n        }\n      });\n      if (bgColors === null || elmStack === null) {\n        return null;\n      }\n      bgColors.push(new color_default(255, 255, 255, 1));\n      var colors = bgColors.reduce(flatten_colors_default);\n      return colors;\n    }\n    var get_background_color_default = getBackgroundColor;\n    function getContrast(bgColor, fgColor) {\n      if (!fgColor || !bgColor) {\n        return null;\n      }\n      if (fgColor.alpha < 1) {\n        fgColor = flatten_colors_default(fgColor, bgColor);\n      }\n      var bL = bgColor.getRelativeLuminance();\n      var fL = fgColor.getRelativeLuminance();\n      return (Math.max(fL, bL) + .05) / (Math.min(fL, bL) + .05);\n    }\n    var get_contrast_default = getContrast;\n    function getOpacity(node) {\n      if (!node) {\n        return 1;\n      }\n      var vNode = get_node_from_tree_default(node);\n      if (vNode && vNode._opacity !== void 0 && vNode._opacity !== null) {\n        return vNode._opacity;\n      }\n      var nodeStyle = window.getComputedStyle(node);\n      var opacity = nodeStyle.getPropertyValue('opacity');\n      var finalOpacity = opacity * getOpacity(node.parentElement);\n      if (vNode) {\n        vNode._opacity = finalOpacity;\n      }\n      return finalOpacity;\n    }\n    function getForegroundColor(node, _, bgColor) {\n      var nodeStyle = window.getComputedStyle(node);\n      var fgColor = new color_default();\n      fgColor.parseString(nodeStyle.getPropertyValue('color'));\n      var opacity = getOpacity(node);\n      fgColor.alpha = fgColor.alpha * opacity;\n      if (fgColor.alpha === 1) {\n        return fgColor;\n      }\n      if (!bgColor) {\n        bgColor = get_background_color_default(node, []);\n      }\n      if (bgColor === null) {\n        var reason = incomplete_data_default.get('bgColor');\n        incomplete_data_default.set('fgColor', reason);\n        return null;\n      }\n      return flatten_colors_default(fgColor, bgColor);\n    }\n    var get_foreground_color_default = getForegroundColor;\n    function hasValidContrastRatio(bg, fg, fontSize, isBold) {\n      var contrast = get_contrast_default(bg, fg);\n      var isSmallFont = isBold && Math.ceil(fontSize * 72) / 96 < 14 || !isBold && Math.ceil(fontSize * 72) / 96 < 18;\n      var expectedContrastRatio = isSmallFont ? 4.5 : 3;\n      return {\n        isValid: contrast > expectedContrastRatio,\n        contrastRatio: contrast,\n        expectedContrastRatio: expectedContrastRatio\n      };\n    }\n    var has_valid_contrast_ratio_default = hasValidContrastRatio;\n    var hasPsuedoElement = memoize_default(function hasPsuedoElement2(node, pseudo) {\n      var style = window.getComputedStyle(node, pseudo);\n      var backgroundColor = get_own_background_color_default(style);\n      return style.getPropertyValue('content') !== 'none' && style.getPropertyValue('position') === 'absolute' && parseInt(style.getPropertyValue('width')) !== 0 && parseInt(style.getPropertyValue('height')) !== 0 && (backgroundColor.alpha !== 0 || style.getPropertyValue('background-image') !== 'none');\n    });\n    function colorContrastEvaluate(node, options, virtualNode) {\n      if (!is_visible_default(node, false)) {\n        return true;\n      }\n      var ignoreUnicode = options.ignoreUnicode, ignoreLength = options.ignoreLength, boldValue = options.boldValue, boldTextPt = options.boldTextPt, largeTextPt = options.largeTextPt, contrastRatio = options.contrastRatio, shadowOutlineEmMax = options.shadowOutlineEmMax;\n      var visibleText = visible_virtual_default(virtualNode, false, true);\n      var textContainsOnlyUnicode = has_unicode_default(visibleText, {\n        nonBmp: true\n      }) && sanitize_default(remove_unicode_default(visibleText, {\n        nonBmp: true\n      })) === '';\n      if (textContainsOnlyUnicode && ignoreUnicode) {\n        this.data({\n          messageKey: 'nonBmp'\n        });\n        return void 0;\n      }\n      var bgNodes = [];\n      var bgColor = get_background_color_default(node, bgNodes, shadowOutlineEmMax);\n      var fgColor = get_foreground_color_default(node, false, bgColor);\n      var shadowColors = get_text_shadow_colors_default(node, {\n        maxRatio: shadowOutlineEmMax\n      });\n      var nodeStyle = window.getComputedStyle(node);\n      var fontSize = parseFloat(nodeStyle.getPropertyValue('font-size'));\n      var fontWeight = nodeStyle.getPropertyValue('font-weight');\n      var bold = parseFloat(fontWeight) >= boldValue || fontWeight === 'bold';\n      var contrast = null;\n      if (shadowColors.length === 0) {\n        contrast = get_contrast_default(bgColor, fgColor);\n      } else if (fgColor && bgColor) {\n        var shadowColor = [].concat(_toConsumableArray(shadowColors), [ bgColor ]).reduce(flatten_colors_default);\n        var bgContrast = get_contrast_default(bgColor, shadowColor);\n        var fgContrast = get_contrast_default(shadowColor, fgColor);\n        contrast = Math.max(bgContrast, fgContrast);\n      }\n      var ptSize = Math.ceil(fontSize * 72) / 96;\n      var isSmallFont = bold && ptSize < boldTextPt || !bold && ptSize < largeTextPt;\n      var _ref46 = isSmallFont ? contrastRatio.normal : contrastRatio.large, expected = _ref46.expected, minThreshold = _ref46.minThreshold, maxThreshold = _ref46.maxThreshold;\n      var isValid = contrast > expected;\n      var parentNode = node.parentElement;\n      while (parentNode) {\n        if (hasPsuedoElement(parentNode, ':before') || hasPsuedoElement(parentNode, ':after')) {\n          this.data({\n            messageKey: 'pseudoContent'\n          });\n          this.relatedNodes(parentNode);\n          return void 0;\n        }\n        parentNode = parentNode.parentElement;\n      }\n      if (typeof minThreshold === 'number' && contrast < minThreshold || typeof maxThreshold === 'number' && contrast > maxThreshold) {\n        return true;\n      }\n      var truncatedResult = Math.floor(contrast * 100) / 100;\n      var missing;\n      if (bgColor === null) {\n        missing = incomplete_data_default.get('bgColor');\n      }\n      var equalRatio = truncatedResult === 1;\n      var shortTextContent = visibleText.length === 1;\n      if (equalRatio) {\n        missing = incomplete_data_default.set('bgColor', 'equalRatio');\n      } else if (shortTextContent && !ignoreLength) {\n        missing = 'shortTextContent';\n      }\n      var data2 = {\n        fgColor: fgColor ? fgColor.toHexString() : void 0,\n        bgColor: bgColor ? bgColor.toHexString() : void 0,\n        contrastRatio: truncatedResult,\n        fontSize: ''.concat((fontSize * 72 / 96).toFixed(1), 'pt (').concat(fontSize, 'px)'),\n        fontWeight: bold ? 'bold' : 'normal',\n        messageKey: missing,\n        expectedContrastRatio: expected + ':1'\n      };\n      this.data(data2);\n      if (fgColor === null || bgColor === null || equalRatio || shortTextContent && !ignoreLength && !isValid) {\n        missing = null;\n        incomplete_data_default.clear();\n        this.relatedNodes(bgNodes);\n        return void 0;\n      }\n      if (!isValid) {\n        this.relatedNodes(bgNodes);\n      }\n      return isValid;\n    }\n    var color_contrast_evaluate_default = colorContrastEvaluate;\n    function getContrast2(color1, color22) {\n      var c1lum = color1.getRelativeLuminance();\n      var c2lum = color22.getRelativeLuminance();\n      return (Math.max(c1lum, c2lum) + .05) / (Math.min(c1lum, c2lum) + .05);\n    }\n    var blockLike2 = [ 'block', 'list-item', 'table', 'flex', 'grid', 'inline-block' ];\n    function isBlock2(elm) {\n      var display = window.getComputedStyle(elm).getPropertyValue('display');\n      return blockLike2.indexOf(display) !== -1 || display.substr(0, 6) === 'table-';\n    }\n    function linkInTextBlockEvaluate(node) {\n      if (isBlock2(node)) {\n        return false;\n      }\n      var parentBlock = get_composed_parent_default(node);\n      while (parentBlock.nodeType === 1 && !isBlock2(parentBlock)) {\n        parentBlock = get_composed_parent_default(parentBlock);\n      }\n      this.relatedNodes([ parentBlock ]);\n      if (element_is_distinct_default(node, parentBlock)) {\n        return true;\n      } else {\n        var nodeColor, parentColor;\n        nodeColor = get_foreground_color_default(node);\n        parentColor = get_foreground_color_default(parentBlock);\n        if (!nodeColor || !parentColor) {\n          return void 0;\n        }\n        var contrast = getContrast2(nodeColor, parentColor);\n        if (contrast === 1) {\n          return true;\n        } else if (contrast >= 3) {\n          incomplete_data_default.set('fgColor', 'bgContrast');\n          this.data({\n            messageKey: incomplete_data_default.get('fgColor')\n          });\n          incomplete_data_default.clear();\n          return void 0;\n        }\n        nodeColor = get_background_color_default(node);\n        parentColor = get_background_color_default(parentBlock);\n        if (!nodeColor || !parentColor || getContrast2(nodeColor, parentColor) >= 3) {\n          var reason;\n          if (!nodeColor || !parentColor) {\n            reason = incomplete_data_default.get('bgColor');\n          } else {\n            reason = 'bgContrast';\n          }\n          incomplete_data_default.set('fgColor', reason);\n          this.data({\n            messageKey: incomplete_data_default.get('fgColor')\n          });\n          incomplete_data_default.clear();\n          return void 0;\n        }\n      }\n      return false;\n    }\n    var link_in_text_block_evaluate_default = linkInTextBlockEvaluate;\n    function autocompleteAppropriateEvaluate(node, options, virtualNode) {\n      if (virtualNode.props.nodeName !== 'input') {\n        return true;\n      }\n      var number = [ 'text', 'search', 'number', 'tel' ];\n      var url = [ 'text', 'search', 'url' ];\n      var allowedTypesMap = {\n        bday: [ 'text', 'search', 'date' ],\n        email: [ 'text', 'search', 'email' ],\n        username: [ 'text', 'search', 'email' ],\n        'street-address': [ 'text' ],\n        tel: [ 'text', 'search', 'tel' ],\n        'tel-country-code': [ 'text', 'search', 'tel' ],\n        'tel-national': [ 'text', 'search', 'tel' ],\n        'tel-area-code': [ 'text', 'search', 'tel' ],\n        'tel-local': [ 'text', 'search', 'tel' ],\n        'tel-local-prefix': [ 'text', 'search', 'tel' ],\n        'tel-local-suffix': [ 'text', 'search', 'tel' ],\n        'tel-extension': [ 'text', 'search', 'tel' ],\n        'cc-number': number,\n        'cc-exp': [ 'text', 'search', 'month', 'tel' ],\n        'cc-exp-month': number,\n        'cc-exp-year': number,\n        'cc-csc': number,\n        'transaction-amount': number,\n        'bday-day': number,\n        'bday-month': number,\n        'bday-year': number,\n        'new-password': [ 'text', 'search', 'password' ],\n        'current-password': [ 'text', 'search', 'password' ],\n        url: url,\n        photo: url,\n        impp: url\n      };\n      if (_typeof(options) === 'object') {\n        Object.keys(options).forEach(function(key) {\n          if (!allowedTypesMap[key]) {\n            allowedTypesMap[key] = [];\n          }\n          allowedTypesMap[key] = allowedTypesMap[key].concat(options[key]);\n        });\n      }\n      var autocompleteAttr = virtualNode.attr('autocomplete');\n      var autocompleteTerms = autocompleteAttr.split(/\\s+/g).map(function(term) {\n        return term.toLowerCase();\n      });\n      var purposeTerm = autocompleteTerms[autocompleteTerms.length - 1];\n      if (_autocomplete.stateTerms.includes(purposeTerm)) {\n        return true;\n      }\n      var allowedTypes = allowedTypesMap[purposeTerm];\n      var type = virtualNode.hasAttr('type') ? sanitize_default(virtualNode.attr('type')).toLowerCase() : 'text';\n      type = valid_input_type_default().includes(type) ? type : 'text';\n      if (typeof allowedTypes === 'undefined') {\n        return type === 'text';\n      }\n      return allowedTypes.includes(type);\n    }\n    var autocomplete_appropriate_evaluate_default = autocompleteAppropriateEvaluate;\n    function autocompleteValidEvaluate(node, options, virtualNode) {\n      var autocomplete2 = virtualNode.attr('autocomplete') || '';\n      return is_valid_autocomplete_default(autocomplete2, options);\n    }\n    var autocomplete_valid_evaluate_default = autocompleteValidEvaluate;\n    function attrNonSpaceContentEvaluate(node) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var vNode = arguments.length > 2 ? arguments[2] : undefined;\n      if (!options.attribute || typeof options.attribute !== 'string') {\n        throw new TypeError('attr-non-space-content requires options.attribute to be a string');\n      }\n      if (!vNode.hasAttr(options.attribute)) {\n        this.data({\n          messageKey: 'noAttr'\n        });\n        return false;\n      }\n      var attribute = vNode.attr(options.attribute);\n      var attributeIsEmpty = !sanitize_default(attribute);\n      if (attributeIsEmpty) {\n        this.data({\n          messageKey: 'emptyAttr'\n        });\n        return false;\n      }\n      return true;\n    }\n    var attr_non_space_content_evaluate_default = attrNonSpaceContentEvaluate;\n    function pageHasElmAfter(results) {\n      var elmUsedAnywhere = results.some(function(frameResult) {\n        return frameResult.result === true;\n      });\n      if (elmUsedAnywhere) {\n        results.forEach(function(result) {\n          result.result = true;\n        });\n      }\n      return results;\n    }\n    var has_descendant_after_default = pageHasElmAfter;\n    function hasDescendant(node, options, virtualNode) {\n      if (!options || !options.selector || typeof options.selector !== 'string') {\n        throw new TypeError('has-descendant requires options.selector to be a string');\n      }\n      var matchingElms = query_selector_all_filter_default(virtualNode, options.selector, function(vNode) {\n        return is_visible_default(vNode.actualNode, true);\n      });\n      this.relatedNodes(matchingElms.map(function(vNode) {\n        return vNode.actualNode;\n      }));\n      return matchingElms.length > 0;\n    }\n    var has_descendant_evaluate_default = hasDescendant;\n    function hasTextContentEvaluate(node, options, virtualNode) {\n      try {\n        return sanitize_default(subtree_text_default(virtualNode)) !== '';\n      } catch (e) {\n        return void 0;\n      }\n    }\n    var has_text_content_evaluate_default = hasTextContentEvaluate;\n    function matchesDefinitionEvaluate(_, options, virtualNode) {\n      return matches_default3(virtualNode, options.matcher);\n    }\n    var matches_definition_evaluate_default = matchesDefinitionEvaluate;\n    function pageNoDuplicateAfter(results) {\n      return results.filter(function(checkResult) {\n        return checkResult.data !== 'ignored';\n      });\n    }\n    var page_no_duplicate_after_default = pageNoDuplicateAfter;\n    function pageNoDuplicateEvaluate(node, options, virtualNode) {\n      if (!options || !options.selector || typeof options.selector !== 'string') {\n        throw new TypeError('page-no-duplicate requires options.selector to be a string');\n      }\n      var key = 'page-no-duplicate;' + options.selector;\n      if (cache_default.get(key)) {\n        this.data('ignored');\n        return;\n      }\n      cache_default.set(key, true);\n      var elms = query_selector_all_filter_default(axe._tree[0], options.selector, function(elm) {\n        return is_visible_default(elm.actualNode);\n      });\n      if (typeof options.nativeScopeFilter === 'string') {\n        elms = elms.filter(function(elm) {\n          return elm.actualNode.hasAttribute('role') || !find_up_virtual_default(elm, options.nativeScopeFilter);\n        });\n      }\n      this.relatedNodes(elms.filter(function(elm) {\n        return elm !== virtualNode;\n      }).map(function(elm) {\n        return elm.actualNode;\n      }));\n      return elms.length <= 1;\n    }\n    var page_no_duplicate_evaluate_default = pageNoDuplicateEvaluate;\n    var joinStr = ' > ';\n    function getFramePath(ancestry, nodePath) {\n      ancestry = ancestry.slice(0, ancestry.length - 1);\n      if (nodePath) {\n        ancestry = ancestry.concat(nodePath);\n      }\n      return ancestry.join(joinStr);\n    }\n    function headingOrderAfter(results) {\n      if (results.length < 2) {\n        return results;\n      }\n      var pageResult = results.find(function(result) {\n        return !result.node._fromFrame;\n      });\n      var headingOrder = pageResult.data.headingOrder.map(function(heading) {\n        return _extends({}, heading, {\n          ancestry: getFramePath(pageResult.node.ancestry, heading.ancestry)\n        });\n      });\n      var nestedResults = results.filter(function(result) {\n        return result.data && result.data.headingOrder && result.node._fromFrame;\n      });\n      nestedResults.forEach(function(result) {\n        result.data.headingOrder = result.data.headingOrder.map(function(heading) {\n          return _extends({}, heading, {\n            ancestry: getFramePath(result.node.ancestry, heading.ancestry)\n          });\n        });\n      });\n      function getFrameIndex(result) {\n        var path = getFramePath(result.node.ancestry);\n        var heading = headingOrder.find(function(heading2) {\n          return heading2.ancestry === path;\n        });\n        return headingOrder.indexOf(heading);\n      }\n      function replaceFrameWithResults(index, result) {\n        var _headingOrder;\n        (_headingOrder = headingOrder).splice.apply(_headingOrder, [ index, 1 ].concat(_toConsumableArray(result.data.headingOrder)));\n      }\n      var replaced = false;\n      while (nestedResults.length) {\n        for (var _i19 = 0; _i19 < nestedResults.length; ) {\n          var nestedResult = nestedResults[_i19];\n          var index = getFrameIndex(nestedResult);\n          if (index !== -1) {\n            replaceFrameWithResults(index, nestedResult);\n            replaced = true;\n            nestedResults.splice(_i19, 1);\n          } else {\n            _i19++;\n          }\n        }\n        if (!replaced) {\n          throw new Error('Unable to find parent iframe of heading-order results');\n        }\n      }\n      results.forEach(function(result) {\n        var path = result.node.ancestry.join(joinStr);\n        var heading = headingOrder.find(function(heading2) {\n          return heading2.ancestry === path;\n        });\n        var index = headingOrder.indexOf(heading);\n        headingOrder.splice(index, 1, {\n          level: headingOrder[index].level,\n          result: result\n        });\n      });\n      headingOrder = headingOrder.filter(function(heading) {\n        return heading.level > 0;\n      });\n      var _loop5 = function _loop5(_i20) {\n        var result = results[_i20];\n        var heading = headingOrder.find(function(heading2) {\n          return heading2.result === result;\n        });\n        var index = headingOrder.indexOf(heading);\n        var currLevel = headingOrder[index].level;\n        var prevLevel = headingOrder[index - 1].level;\n        if (currLevel - prevLevel > 1) {\n          result.result = false;\n        }\n      };\n      for (var _i20 = 1; _i20 < results.length; _i20++) {\n        _loop5(_i20);\n      }\n      return results;\n    }\n    var heading_order_after_default = headingOrderAfter;\n    function getLevel(vNode) {\n      var role = vNode.attr('role');\n      if (role && role.includes('heading')) {\n        var ariaHeadingLevel = vNode.attr('aria-level');\n        var level = parseInt(ariaHeadingLevel, 10);\n        if (isNaN(level) || level < 1 || level > 6) {\n          return 2;\n        }\n        return level;\n      }\n      var headingLevel = vNode.props.nodeName.match(/h(\\d)/);\n      if (headingLevel) {\n        return parseInt(headingLevel[1], 10);\n      }\n      return -1;\n    }\n    function headingOrderEvaluate() {\n      var headingOrder = cache_default.get('headingOrder');\n      if (headingOrder) {\n        return true;\n      }\n      var selector = 'h1, h2, h3, h4, h5, h6, [role=heading], iframe, frame';\n      var vNodes = query_selector_all_filter_default(axe._tree[0], selector, function(vNode) {\n        return is_visible_default(vNode.actualNode, true);\n      });\n      headingOrder = vNodes.map(function(vNode) {\n        return {\n          ancestry: [ _getAncestry(vNode.actualNode) ],\n          level: getLevel(vNode)\n        };\n      });\n      this.data({\n        headingOrder: headingOrder\n      });\n      cache_default.set('headingOrder', vNodes);\n      return true;\n    }\n    var heading_order_evaluate_default = headingOrderEvaluate;\n    function isIdenticalObject(a, b) {\n      if (!a || !b) {\n        return false;\n      }\n      var aProps = Object.getOwnPropertyNames(a);\n      var bProps = Object.getOwnPropertyNames(b);\n      if (aProps.length !== bProps.length) {\n        return false;\n      }\n      var result = aProps.every(function(propName) {\n        var aValue = a[propName];\n        var bValue = b[propName];\n        if (_typeof(aValue) !== _typeof(bValue)) {\n          return false;\n        }\n        if (typeof aValue === 'object' || typeof bValue === 'object') {\n          return isIdenticalObject(aValue, bValue);\n        }\n        return aValue === bValue;\n      });\n      return result;\n    }\n    function identicalLinksSamePurposeAfter(results) {\n      if (results.length < 2) {\n        return results;\n      }\n      var incompleteResults = results.filter(function(_ref47) {\n        var result = _ref47.result;\n        return result !== void 0;\n      });\n      var uniqueResults = [];\n      var nameMap = {};\n      var _loop6 = function _loop6(index) {\n        var _currentResult$relate;\n        var currentResult = incompleteResults[index];\n        var _currentResult$data = currentResult.data, name = _currentResult$data.name, urlProps = _currentResult$data.urlProps;\n        if (nameMap[name]) {\n          return 'continue';\n        }\n        var sameNameResults = incompleteResults.filter(function(_ref48, resultNum) {\n          var data2 = _ref48.data;\n          return data2.name === name && resultNum !== index;\n        });\n        var isSameUrl = sameNameResults.every(function(_ref49) {\n          var data2 = _ref49.data;\n          return isIdenticalObject(data2.urlProps, urlProps);\n        });\n        if (sameNameResults.length && !isSameUrl) {\n          currentResult.result = void 0;\n        }\n        currentResult.relatedNodes = [];\n        (_currentResult$relate = currentResult.relatedNodes).push.apply(_currentResult$relate, _toConsumableArray(sameNameResults.map(function(node) {\n          return node.relatedNodes[0];\n        })));\n        nameMap[name] = sameNameResults;\n        uniqueResults.push(currentResult);\n      };\n      for (var index = 0; index < incompleteResults.length; index++) {\n        var _ret2 = _loop6(index);\n        if (_ret2 === 'continue') {\n          continue;\n        }\n      }\n      return uniqueResults;\n    }\n    var identical_links_same_purpose_after_default = identicalLinksSamePurposeAfter;\n    var commons_exports = {};\n    __export(commons_exports, {\n      aria: function aria() {\n        return aria_exports;\n      },\n      color: function color() {\n        return color_exports;\n      },\n      dom: function dom() {\n        return dom_exports;\n      },\n      forms: function forms() {\n        return forms_exports;\n      },\n      matches: function matches() {\n        return matches_default3;\n      },\n      standards: function standards() {\n        return standards_exports;\n      },\n      table: function table() {\n        return table_exports;\n      },\n      text: function text() {\n        return text_exports;\n      },\n      utils: function utils() {\n        return utils_exports;\n      }\n    });\n    var forms_exports = {};\n    __export(forms_exports, {\n      isAriaCombobox: function isAriaCombobox() {\n        return is_aria_combobox_default;\n      },\n      isAriaListbox: function isAriaListbox() {\n        return is_aria_listbox_default;\n      },\n      isAriaRange: function isAriaRange() {\n        return is_aria_range_default;\n      },\n      isAriaTextbox: function isAriaTextbox() {\n        return is_aria_textbox_default;\n      },\n      isDisabled: function isDisabled() {\n        return is_disabled_default;\n      },\n      isNativeSelect: function isNativeSelect() {\n        return is_native_select_default;\n      },\n      isNativeTextbox: function isNativeTextbox() {\n        return is_native_textbox_default;\n      }\n    });\n    var disabledNodeNames = [ 'fieldset', 'button', 'select', 'input', 'textarea' ];\n    function isDisabled(virtualNode) {\n      var disabledState = virtualNode._isDisabled;\n      if (typeof disabledState === 'boolean') {\n        return disabledState;\n      }\n      var nodeName2 = virtualNode.props.nodeName;\n      var ariaDisabled = virtualNode.attr('aria-disabled');\n      if (disabledNodeNames.includes(nodeName2) && virtualNode.hasAttr('disabled')) {\n        disabledState = true;\n      } else if (ariaDisabled) {\n        disabledState = ariaDisabled.toLowerCase() === 'true';\n      } else if (virtualNode.parent) {\n        disabledState = isDisabled(virtualNode.parent);\n      } else {\n        disabledState = false;\n      }\n      virtualNode._isDisabled = disabledState;\n      return disabledState;\n    }\n    var is_disabled_default = isDisabled;\n    var commons = {\n      aria: aria_exports,\n      color: color_exports,\n      dom: dom_exports,\n      forms: forms_exports,\n      matches: matches_default3,\n      standards: standards_exports,\n      table: table_exports,\n      text: text_exports,\n      utils: utils_exports\n    };\n    function identicalLinksSamePurposeEvaluate(node, options, virtualNode) {\n      var accText = text_exports.accessibleTextVirtual(virtualNode);\n      var name = text_exports.sanitize(text_exports.removeUnicode(accText, {\n        emoji: true,\n        nonBmp: true,\n        punctuations: true\n      })).toLowerCase();\n      if (!name) {\n        return void 0;\n      }\n      var afterData = {\n        name: name,\n        urlProps: dom_exports.urlPropsFromAttribute(node, 'href')\n      };\n      this.data(afterData);\n      this.relatedNodes([ node ]);\n      return true;\n    }\n    var identical_links_same_purpose_evaluate_default = identicalLinksSamePurposeEvaluate;\n    function internalLinkPresentEvaluate(node, options, virtualNode) {\n      var links = query_selector_all_default(virtualNode, 'a[href]');\n      return links.some(function(vLink) {\n        return /^#[^/!]/.test(vLink.actualNode.getAttribute('href'));\n      });\n    }\n    var internal_link_present_evaluate_default = internalLinkPresentEvaluate;\n    function metaRefreshEvaluate(node, options, virtualNode) {\n      var content = virtualNode.attr('content') || '', parsedParams = content.split(/[;,]/);\n      return content === '' || parsedParams[0] === '0';\n    }\n    var meta_refresh_evaluate_default = metaRefreshEvaluate;\n    function normalizeFontWeight(weight) {\n      switch (weight) {\n       case 'lighter':\n        return 100;\n\n       case 'normal':\n        return 400;\n\n       case 'bold':\n        return 700;\n\n       case 'bolder':\n        return 900;\n      }\n      weight = parseInt(weight);\n      return !isNaN(weight) ? weight : 400;\n    }\n    function getTextContainer(elm) {\n      var nextNode = elm;\n      var outerText = elm.textContent.trim();\n      var innerText = outerText;\n      while (innerText === outerText && nextNode !== void 0) {\n        var _i21 = -1;\n        elm = nextNode;\n        if (elm.children.length === 0) {\n          return elm;\n        }\n        do {\n          _i21++;\n          innerText = elm.children[_i21].textContent.trim();\n        } while (innerText === '' && _i21 + 1 < elm.children.length);\n        nextNode = elm.children[_i21];\n      }\n      return elm;\n    }\n    function getStyleValues(node) {\n      var style = window.getComputedStyle(getTextContainer(node));\n      return {\n        fontWeight: normalizeFontWeight(style.getPropertyValue('font-weight')),\n        fontSize: parseInt(style.getPropertyValue('font-size')),\n        isItalic: style.getPropertyValue('font-style') === 'italic'\n      };\n    }\n    function isHeaderStyle(styleA, styleB, margins) {\n      return margins.reduce(function(out, margin) {\n        return out || (!margin.size || styleA.fontSize / margin.size > styleB.fontSize) && (!margin.weight || styleA.fontWeight - margin.weight > styleB.fontWeight) && (!margin.italic || styleA.isItalic && !styleB.isItalic);\n      }, false);\n    }\n    function pAsHeadingEvaluate(node, options, virtualNode) {\n      var siblings = Array.from(node.parentNode.children);\n      var currentIndex = siblings.indexOf(node);\n      options = options || {};\n      var margins = options.margins || [];\n      var nextSibling = siblings.slice(currentIndex + 1).find(function(elm) {\n        return elm.nodeName.toUpperCase() === 'P';\n      });\n      var prevSibling = siblings.slice(0, currentIndex).reverse().find(function(elm) {\n        return elm.nodeName.toUpperCase() === 'P';\n      });\n      var currStyle = getStyleValues(node);\n      var nextStyle = nextSibling ? getStyleValues(nextSibling) : null;\n      var prevStyle = prevSibling ? getStyleValues(prevSibling) : null;\n      if (!nextStyle || !isHeaderStyle(currStyle, nextStyle, margins)) {\n        return true;\n      }\n      var blockquote = find_up_virtual_default(virtualNode, 'blockquote');\n      if (blockquote && blockquote.nodeName.toUpperCase() === 'BLOCKQUOTE') {\n        return void 0;\n      }\n      if (prevStyle && !isHeaderStyle(currStyle, prevStyle, margins)) {\n        return void 0;\n      }\n      return false;\n    }\n    var p_as_heading_evaluate_default = pAsHeadingEvaluate;\n    var landmarkRoles = get_aria_roles_by_type_default('landmark');\n    var implicitAriaLiveRoles = [ 'alert', 'log', 'status' ];\n    function isRegion(virtualNode, options) {\n      var node = virtualNode.actualNode;\n      var role = get_role_default(virtualNode);\n      var ariaLive = (node.getAttribute('aria-live') || '').toLowerCase().trim();\n      if ([ 'assertive', 'polite' ].includes(ariaLive) || implicitAriaLiveRoles.includes(role)) {\n        return true;\n      }\n      if (landmarkRoles.includes(role)) {\n        return true;\n      }\n      if (options.regionMatcher && matches_default3(virtualNode, options.regionMatcher)) {\n        return true;\n      }\n      return false;\n    }\n    function findRegionlessElms(virtualNode, options) {\n      var node = virtualNode.actualNode;\n      if (isRegion(virtualNode, options) || is_skip_link_default(virtualNode.actualNode) && get_element_by_reference_default(virtualNode.actualNode, 'href') || !is_visible_default(node, true)) {\n        var vNode = virtualNode;\n        while (vNode) {\n          vNode._hasRegionDescendant = true;\n          vNode = vNode.parent;\n        }\n        return [];\n      } else if (node !== document.body && has_content_default(node, true)) {\n        return [ virtualNode ];\n      } else {\n        return virtualNode.children.filter(function(_ref50) {\n          var actualNode = _ref50.actualNode;\n          return actualNode.nodeType === 1;\n        }).map(function(vNode) {\n          return findRegionlessElms(vNode, options);\n        }).reduce(function(a, b) {\n          return a.concat(b);\n        }, []);\n      }\n    }\n    function regionEvaluate(node, options, virtualNode) {\n      var regionlessNodes = cache_default.get('regionlessNodes');\n      if (regionlessNodes) {\n        return !regionlessNodes.includes(virtualNode);\n      }\n      var tree = axe._tree;\n      regionlessNodes = findRegionlessElms(tree[0], options).map(function(vNode) {\n        while (vNode.parent && !vNode.parent._hasRegionDescendant && vNode.parent.actualNode !== document.body) {\n          vNode = vNode.parent;\n        }\n        return vNode;\n      }).filter(function(vNode, index, array) {\n        return array.indexOf(vNode) === index;\n      });\n      cache_default.set('regionlessNodes', regionlessNodes);\n      return !regionlessNodes.includes(virtualNode);\n    }\n    var region_evaluate_default = regionEvaluate;\n    function skipLinkEvaluate(node) {\n      var target = get_element_by_reference_default(node, 'href');\n      if (target) {\n        return is_visible_default(target, true) || void 0;\n      }\n      return false;\n    }\n    var skip_link_evaluate_default = skipLinkEvaluate;\n    function uniqueFrameTitleAfter(results) {\n      var titles = {};\n      results.forEach(function(r) {\n        titles[r.data] = titles[r.data] !== void 0 ? ++titles[r.data] : 0;\n      });\n      results.forEach(function(r) {\n        r.result = !!titles[r.data];\n      });\n      return results;\n    }\n    var unique_frame_title_after_default = uniqueFrameTitleAfter;\n    function uniqueFrameTitleEvaluate(node, options, vNode) {\n      var title = sanitize_default(vNode.attr('title')).toLowerCase();\n      this.data(title);\n      return true;\n    }\n    var unique_frame_title_evaluate_default = uniqueFrameTitleEvaluate;\n    function ariaLabelEvaluate(node, options, virtualNode) {\n      return !!sanitize_default(arialabel_text_default(virtualNode));\n    }\n    var aria_label_evaluate_default = ariaLabelEvaluate;\n    function ariaLabelledbyEvaluate(node, options, virtualNode) {\n      try {\n        return !!sanitize_default(arialabelledby_text_default(virtualNode));\n      } catch (e) {\n        return void 0;\n      }\n    }\n    var aria_labelledby_evaluate_default = ariaLabelledbyEvaluate;\n    function avoidInlineSpacingEvaluate(node, options) {\n      var overriddenProperties = options.cssProperties.filter(function(property) {\n        if (node.style.getPropertyPriority(property) === 'important') {\n          return property;\n        }\n      });\n      if (overriddenProperties.length > 0) {\n        this.data(overriddenProperties);\n        return false;\n      }\n      return true;\n    }\n    var avoid_inline_spacing_evaluate_default = avoidInlineSpacingEvaluate;\n    function docHasTitleEvaluate() {\n      var title = document.title;\n      return !!sanitize_default(title);\n    }\n    var doc_has_title_evaluate_default = docHasTitleEvaluate;\n    function existsEvaluate() {\n      return void 0;\n    }\n    var exists_evaluate_default = existsEvaluate;\n    function hasAltEvaluate(node, options, virtualNode) {\n      var nodeName2 = virtualNode.props.nodeName;\n      if (![ 'img', 'input', 'area' ].includes(nodeName2)) {\n        return false;\n      }\n      return virtualNode.hasAttr('alt');\n    }\n    var has_alt_evaluate_default = hasAltEvaluate;\n    function isOnScreenEvaluate(node) {\n      return is_visible_default(node, false) && !is_offscreen_default(node);\n    }\n    var is_on_screen_evaluate_default = isOnScreenEvaluate;\n    function nonEmptyIfPresentEvaluate(node, options, virtualNode) {\n      var nodeName2 = virtualNode.props.nodeName;\n      var type = (virtualNode.attr('type') || '').toLowerCase();\n      var label5 = virtualNode.attr('value');\n      if (label5) {\n        this.data({\n          messageKey: 'has-label'\n        });\n      }\n      if (nodeName2 === 'input' && [ 'submit', 'reset' ].includes(type)) {\n        return label5 === null;\n      }\n      return false;\n    }\n    var non_empty_if_present_evaluate_default = nonEmptyIfPresentEvaluate;\n    function presentationalRoleEvaluate(node, options, virtualNode) {\n      var role = get_role_default(virtualNode);\n      var explicitRole2 = get_explicit_role_default(virtualNode);\n      if ([ 'presentation', 'none' ].includes(role)) {\n        this.data({\n          role: role\n        });\n        return true;\n      }\n      if (![ 'presentation', 'none' ].includes(explicitRole2)) {\n        return false;\n      }\n      var hasGlobalAria = get_global_aria_attrs_default().some(function(attr) {\n        return virtualNode.hasAttr(attr);\n      });\n      var focusable = is_focusable_default(virtualNode);\n      var messageKey;\n      if (hasGlobalAria && !focusable) {\n        messageKey = 'globalAria';\n      } else if (!hasGlobalAria && focusable) {\n        messageKey = 'focusable';\n      } else {\n        messageKey = 'both';\n      }\n      this.data({\n        messageKey: messageKey,\n        role: role\n      });\n      return false;\n    }\n    var presentational_role_evaluate_default = presentationalRoleEvaluate;\n    function svgNonEmptyTitleEvaluate(node, options, virtualNode) {\n      if (!virtualNode.children) {\n        return void 0;\n      }\n      var titleNode = virtualNode.children.find(function(_ref51) {\n        var props = _ref51.props;\n        return props.nodeName === 'title';\n      });\n      if (!titleNode) {\n        this.data({\n          messageKey: 'noTitle'\n        });\n        return false;\n      }\n      try {\n        if (visible_virtual_default(titleNode) === '') {\n          this.data({\n            messageKey: 'emptyTitle'\n          });\n          return false;\n        }\n      } catch (e) {\n        return void 0;\n      }\n      return true;\n    }\n    var svg_non_empty_title_evaluate_default = svgNonEmptyTitleEvaluate;\n    function cssOrientationLockEvaluate(node, options, virtualNode, context3) {\n      var _ref52 = context3 || {}, _ref52$cssom = _ref52.cssom, cssom = _ref52$cssom === void 0 ? void 0 : _ref52$cssom;\n      var _ref53 = options || {}, _ref53$degreeThreshol = _ref53.degreeThreshold, degreeThreshold = _ref53$degreeThreshol === void 0 ? 0 : _ref53$degreeThreshol;\n      if (!cssom || !cssom.length) {\n        return void 0;\n      }\n      var isLocked = false;\n      var relatedElements = [];\n      var rulesGroupByDocumentFragment = groupCssomByDocument(cssom);\n      var _loop7 = function _loop7() {\n        var key = _Object$keys2[_i22];\n        var _rulesGroupByDocument = rulesGroupByDocumentFragment[key], root = _rulesGroupByDocument.root, rules = _rulesGroupByDocument.rules;\n        var orientationRules = rules.filter(isMediaRuleWithOrientation);\n        if (!orientationRules.length) {\n          return 'continue';\n        }\n        orientationRules.forEach(function(_ref54) {\n          var cssRules = _ref54.cssRules;\n          Array.from(cssRules).forEach(function(cssRule) {\n            var locked = getIsOrientationLocked(cssRule);\n            if (locked && cssRule.selectorText.toUpperCase() !== 'HTML') {\n              var elms = Array.from(root.querySelectorAll(cssRule.selectorText)) || [];\n              relatedElements = relatedElements.concat(elms);\n            }\n            isLocked = isLocked || locked;\n          });\n        });\n      };\n      for (var _i22 = 0, _Object$keys2 = Object.keys(rulesGroupByDocumentFragment); _i22 < _Object$keys2.length; _i22++) {\n        var _ret3 = _loop7();\n        if (_ret3 === 'continue') {\n          continue;\n        }\n      }\n      if (!isLocked) {\n        return true;\n      }\n      if (relatedElements.length) {\n        this.relatedNodes(relatedElements);\n      }\n      return false;\n      function groupCssomByDocument(cssObjectModel) {\n        return cssObjectModel.reduce(function(out, _ref55) {\n          var sheet = _ref55.sheet, root = _ref55.root, shadowId = _ref55.shadowId;\n          var key = shadowId ? shadowId : 'topDocument';\n          if (!out[key]) {\n            out[key] = {\n              root: root,\n              rules: []\n            };\n          }\n          if (!sheet || !sheet.cssRules) {\n            return out;\n          }\n          var rules = Array.from(sheet.cssRules);\n          out[key].rules = out[key].rules.concat(rules);\n          return out;\n        }, {});\n      }\n      function isMediaRuleWithOrientation(_ref56) {\n        var type = _ref56.type, cssText = _ref56.cssText;\n        if (type !== 4) {\n          return false;\n        }\n        return /orientation:\\s*landscape/i.test(cssText) || /orientation:\\s*portrait/i.test(cssText);\n      }\n      function getIsOrientationLocked(_ref57) {\n        var selectorText = _ref57.selectorText, style = _ref57.style;\n        if (!selectorText || style.length <= 0) {\n          return false;\n        }\n        var transformStyle = style.transform || style.webkitTransform || style.msTransform || false;\n        if (!transformStyle) {\n          return false;\n        }\n        var matches14 = transformStyle.match(/(rotate|rotateZ|rotate3d|matrix|matrix3d)\\(([^)]+)\\)(?!.*(rotate|rotateZ|rotate3d|matrix|matrix3d))/);\n        if (!matches14) {\n          return false;\n        }\n        var _matches = _slicedToArray(matches14, 3), transformFn = _matches[1], transformFnValue = _matches[2];\n        var degrees = getRotationInDegrees(transformFn, transformFnValue);\n        if (!degrees) {\n          return false;\n        }\n        degrees = Math.abs(degrees);\n        if (Math.abs(degrees - 180) % 180 <= degreeThreshold) {\n          return false;\n        }\n        return Math.abs(degrees - 90) % 90 <= degreeThreshold;\n      }\n      function getRotationInDegrees(transformFunction, transformFnValue) {\n        switch (transformFunction) {\n         case 'rotate':\n         case 'rotateZ':\n          return getAngleInDegrees(transformFnValue);\n\n         case 'rotate3d':\n          var _transformFnValue$spl = transformFnValue.split(',').map(function(value) {\n            return value.trim();\n          }), _transformFnValue$spl2 = _slicedToArray(_transformFnValue$spl, 4), z = _transformFnValue$spl2[2], angleWithUnit = _transformFnValue$spl2[3];\n          if (parseInt(z) === 0) {\n            return;\n          }\n          return getAngleInDegrees(angleWithUnit);\n\n         case 'matrix':\n         case 'matrix3d':\n          return getAngleInDegreesFromMatrixTransform(transformFnValue);\n\n         default:\n          return;\n        }\n      }\n      function getAngleInDegrees(angleWithUnit) {\n        var _ref58 = angleWithUnit.match(/(deg|grad|rad|turn)/) || [], _ref59 = _slicedToArray(_ref58, 1), unit = _ref59[0];\n        if (!unit) {\n          return;\n        }\n        var angle = parseFloat(angleWithUnit.replace(unit, ''));\n        switch (unit) {\n         case 'rad':\n          return convertRadToDeg(angle);\n\n         case 'grad':\n          return convertGradToDeg(angle);\n\n         case 'turn':\n          return convertTurnToDeg(angle);\n\n         case 'deg':\n         default:\n          return parseInt(angle);\n        }\n      }\n      function getAngleInDegreesFromMatrixTransform(transformFnValue) {\n        var values = transformFnValue.split(',');\n        if (values.length <= 6) {\n          var _values = _slicedToArray(values, 2), a = _values[0], b2 = _values[1];\n          var radians = Math.atan2(parseFloat(b2), parseFloat(a));\n          return convertRadToDeg(radians);\n        }\n        var sinB = parseFloat(values[8]);\n        var b = Math.asin(sinB);\n        var cosB = Math.cos(b);\n        var rotateZRadians = Math.acos(parseFloat(values[0]) / cosB);\n        return convertRadToDeg(rotateZRadians);\n      }\n      function convertRadToDeg(radians) {\n        return Math.round(radians * (180 / Math.PI));\n      }\n      function convertGradToDeg(grad) {\n        grad = grad % 400;\n        if (grad < 0) {\n          grad += 400;\n        }\n        return Math.round(grad / 400 * 360);\n      }\n      function convertTurnToDeg(turn) {\n        return Math.round(360 / (1 / turn));\n      }\n    }\n    var css_orientation_lock_evaluate_default = cssOrientationLockEvaluate;\n    function metaViewportScaleEvaluate(node, options, virtualNode) {\n      var _ref60 = options || {}, _ref60$scaleMinimum = _ref60.scaleMinimum, scaleMinimum = _ref60$scaleMinimum === void 0 ? 2 : _ref60$scaleMinimum, _ref60$lowerBound = _ref60.lowerBound, lowerBound = _ref60$lowerBound === void 0 ? false : _ref60$lowerBound;\n      var content = virtualNode.attr('content') || '';\n      if (!content) {\n        return true;\n      }\n      var result = content.split(/[;,]/).reduce(function(out, item) {\n        var contentValue = item.trim();\n        if (!contentValue) {\n          return out;\n        }\n        var _contentValue$split = contentValue.split('='), _contentValue$split2 = _slicedToArray(_contentValue$split, 2), key = _contentValue$split2[0], value = _contentValue$split2[1];\n        if (!key || !value) {\n          return out;\n        }\n        var curatedKey = key.toLowerCase().trim();\n        var curatedValue = value.toLowerCase().trim();\n        if (curatedKey === 'maximum-scale' && curatedValue === 'yes') {\n          curatedValue = 1;\n        }\n        if (curatedKey === 'maximum-scale' && parseFloat(curatedValue) < 0) {\n          return out;\n        }\n        out[curatedKey] = curatedValue;\n        return out;\n      }, {});\n      if (lowerBound && result['maximum-scale'] && parseFloat(result['maximum-scale']) < lowerBound) {\n        return true;\n      }\n      if (!lowerBound && result['user-scalable'] === 'no') {\n        this.data('user-scalable=no');\n        return false;\n      }\n      if (result['maximum-scale'] && parseFloat(result['maximum-scale']) < scaleMinimum) {\n        this.data('maximum-scale');\n        return false;\n      }\n      return true;\n    }\n    var meta_viewport_scale_evaluate_default = metaViewportScaleEvaluate;\n    function duplicateIdAfter(results) {\n      var uniqueIds = [];\n      return results.filter(function(r) {\n        if (uniqueIds.indexOf(r.data) === -1) {\n          uniqueIds.push(r.data);\n          return true;\n        }\n        return false;\n      });\n    }\n    var duplicate_id_after_default = duplicateIdAfter;\n    function duplicateIdEvaluate(node) {\n      var id = node.getAttribute('id').trim();\n      if (!id) {\n        return true;\n      }\n      var root = get_root_node_default2(node);\n      var matchingNodes = Array.from(root.querySelectorAll('[id=\"'.concat(escape_selector_default(id), '\"]'))).filter(function(foundNode) {\n        return foundNode !== node;\n      });\n      if (matchingNodes.length) {\n        this.relatedNodes(matchingNodes);\n      }\n      this.data(id);\n      return matchingNodes.length === 0;\n    }\n    var duplicate_id_evaluate_default = duplicateIdEvaluate;\n    function accesskeysAfter(results) {\n      var seen = {};\n      return results.filter(function(r) {\n        if (!r.data) {\n          return false;\n        }\n        var key = r.data.toUpperCase();\n        if (!seen[key]) {\n          seen[key] = r;\n          r.relatedNodes = [];\n          return true;\n        }\n        seen[key].relatedNodes.push(r.relatedNodes[0]);\n        return false;\n      }).map(function(r) {\n        r.result = !!r.relatedNodes.length;\n        return r;\n      });\n    }\n    var accesskeys_after_default = accesskeysAfter;\n    function accesskeysEvaluate(node) {\n      if (is_visible_default(node, false)) {\n        this.data(node.getAttribute('accesskey'));\n        this.relatedNodes([ node ]);\n      }\n      return true;\n    }\n    var accesskeys_evaluate_default = accesskeysEvaluate;\n    function focusableContentEvaluate(node, options, virtualNode) {\n      var tabbableElements = virtualNode.tabbableElements;\n      if (!tabbableElements) {\n        return false;\n      }\n      var tabbableContentElements = tabbableElements.filter(function(el) {\n        return el !== virtualNode;\n      });\n      return tabbableContentElements.length > 0;\n    }\n    var focusable_content_evaluate_default = focusableContentEvaluate;\n    function focusableDisabledEvaluate(node, options, virtualNode) {\n      var elementsThatCanBeDisabled = [ 'BUTTON', 'FIELDSET', 'INPUT', 'SELECT', 'TEXTAREA' ];\n      var tabbableElements = virtualNode.tabbableElements;\n      if (!tabbableElements || !tabbableElements.length) {\n        return true;\n      }\n      var relatedNodes = tabbableElements.reduce(function(out, _ref61) {\n        var el = _ref61.actualNode;\n        var nodeName2 = el.nodeName.toUpperCase();\n        if (elementsThatCanBeDisabled.includes(nodeName2)) {\n          out.push(el);\n        }\n        return out;\n      }, []);\n      this.relatedNodes(relatedNodes);\n      if (relatedNodes.length && is_modal_open_default()) {\n        return true;\n      }\n      return relatedNodes.length === 0;\n    }\n    var focusable_disabled_evaluate_default = focusableDisabledEvaluate;\n    function focusableElementEvaluate(node, options, virtualNode) {\n      if (virtualNode.hasAttr('contenteditable') && isContenteditable(virtualNode)) {\n        return true;\n      }\n      var isFocusable2 = virtualNode.isFocusable;\n      var tabIndex = parseInt(virtualNode.attr('tabindex'), 10);\n      tabIndex = !isNaN(tabIndex) ? tabIndex : null;\n      return tabIndex ? isFocusable2 && tabIndex >= 0 : isFocusable2;\n      function isContenteditable(vNode) {\n        var contenteditable = vNode.attr('contenteditable');\n        if (contenteditable === 'true' || contenteditable === '') {\n          return true;\n        }\n        if (contenteditable === 'false') {\n          return false;\n        }\n        var ancestor = closest_default(virtualNode.parent, '[contenteditable]');\n        if (!ancestor) {\n          return false;\n        }\n        return isContenteditable(ancestor);\n      }\n    }\n    var focusable_element_evaluate_default = focusableElementEvaluate;\n    function focusableModalOpenEvaluate(node, options, virtualNode) {\n      var tabbableElements = virtualNode.tabbableElements.map(function(_ref62) {\n        var actualNode = _ref62.actualNode;\n        return actualNode;\n      });\n      if (!tabbableElements || !tabbableElements.length) {\n        return true;\n      }\n      if (is_modal_open_default()) {\n        this.relatedNodes(tabbableElements);\n        return void 0;\n      }\n      return true;\n    }\n    var focusable_modal_open_evaluate_default = focusableModalOpenEvaluate;\n    function focusableNoNameEvaluate(node, options, virtualNode) {\n      var tabIndex = virtualNode.attr('tabindex');\n      var inFocusOrder = is_focusable_default(virtualNode) && tabIndex > -1;\n      if (!inFocusOrder) {\n        return false;\n      }\n      try {\n        return !accessible_text_virtual_default(virtualNode);\n      } catch (e) {\n        return void 0;\n      }\n    }\n    var focusable_no_name_evaluate_default = focusableNoNameEvaluate;\n    function focusableNotTabbableEvaluate(node, options, virtualNode) {\n      var elementsThatCanBeDisabled = [ 'BUTTON', 'FIELDSET', 'INPUT', 'SELECT', 'TEXTAREA' ];\n      var tabbableElements = virtualNode.tabbableElements;\n      if (!tabbableElements || !tabbableElements.length) {\n        return true;\n      }\n      var relatedNodes = tabbableElements.reduce(function(out, _ref63) {\n        var el = _ref63.actualNode;\n        var nodeName2 = el.nodeName.toUpperCase();\n        if (!elementsThatCanBeDisabled.includes(nodeName2)) {\n          out.push(el);\n        }\n        return out;\n      }, []);\n      this.relatedNodes(relatedNodes);\n      if (relatedNodes.length > 0 && is_modal_open_default()) {\n        return true;\n      }\n      return relatedNodes.length === 0;\n    }\n    var focusable_not_tabbable_evaluate_default = focusableNotTabbableEvaluate;\n    function landmarkIsTopLevelEvaluate(node) {\n      var landmarks = get_aria_roles_by_type_default('landmark');\n      var parent = get_composed_parent_default(node);\n      var nodeRole = get_role_default(node);\n      this.data({\n        role: nodeRole\n      });\n      while (parent) {\n        var role = parent.getAttribute('role');\n        if (!role && parent.nodeName.toUpperCase() !== 'FORM') {\n          role = implicit_role_default(parent);\n        }\n        if (role && landmarks.includes(role) && !(role === 'main' && nodeRole === 'complementary')) {\n          return false;\n        }\n        parent = get_composed_parent_default(parent);\n      }\n      return true;\n    }\n    var landmark_is_top_level_evaluate_default = landmarkIsTopLevelEvaluate;\n    function focusableDescendants(vNode) {\n      if (is_focusable_default(vNode)) {\n        return true;\n      }\n      if (!vNode.children) {\n        if (vNode.props.nodeType === 1) {\n          throw new Error('Cannot determine children');\n        }\n        return false;\n      }\n      return vNode.children.some(function(child) {\n        return focusableDescendants(child);\n      });\n    }\n    function noFocusbleContentEvaluate(node, options, virtualNode) {\n      if (!virtualNode.children) {\n        return void 0;\n      }\n      try {\n        return !virtualNode.children.some(function(child) {\n          return focusableDescendants(child);\n        });\n      } catch (e) {\n        return void 0;\n      }\n    }\n    var no_focusable_content_evaluate_default = noFocusbleContentEvaluate;\n    function tabindexEvaluate(node, options, virtualNode) {\n      var tabIndex = parseInt(virtualNode.attr('tabindex'), 10);\n      return isNaN(tabIndex) ? true : tabIndex <= 0;\n    }\n    var tabindex_evaluate_default = tabindexEvaluate;\n    function altSpaceValueEvaluate(node, options, virtualNode) {\n      var alt = virtualNode.attr('alt');\n      var isOnlySpace = /^\\s+$/;\n      return typeof alt === 'string' && isOnlySpace.test(alt);\n    }\n    var alt_space_value_evaluate_default = altSpaceValueEvaluate;\n    function duplicateImgLabelEvaluate(node, options, virtualNode) {\n      if ([ 'none', 'presentation' ].includes(get_role_default(virtualNode))) {\n        return false;\n      }\n      var parentVNode = closest_default(virtualNode, options.parentSelector);\n      if (!parentVNode) {\n        return false;\n      }\n      var visibleText = visible_virtual_default(parentVNode, true).toLowerCase();\n      if (visibleText === '') {\n        return false;\n      }\n      return visibleText === accessible_text_virtual_default(virtualNode).toLowerCase();\n    }\n    var duplicate_img_label_evaluate_default = duplicateImgLabelEvaluate;\n    function explicitEvaluate(node, options, virtualNode) {\n      if (virtualNode.attr('id')) {\n        if (!virtualNode.actualNode) {\n          return void 0;\n        }\n        var root = get_root_node_default2(virtualNode.actualNode);\n        var id = escape_selector_default(virtualNode.attr('id'));\n        var labels = Array.from(root.querySelectorAll('label[for=\"'.concat(id, '\"]')));\n        if (labels.length) {\n          try {\n            return labels.some(function(label5) {\n              if (!is_visible_default(label5)) {\n                return true;\n              } else {\n                return !!accessible_text_default(label5);\n              }\n            });\n          } catch (e) {\n            return void 0;\n          }\n        }\n      }\n      return false;\n    }\n    var explicit_evaluate_default = explicitEvaluate;\n    function helpSameAsLabelEvaluate(node, options, virtualNode) {\n      var labelText2 = label_virtual_default2(virtualNode), check4 = node.getAttribute('title');\n      if (!labelText2) {\n        return false;\n      }\n      if (!check4) {\n        check4 = '';\n        if (node.getAttribute('aria-describedby')) {\n          var ref = idrefs_default(node, 'aria-describedby');\n          check4 = ref.map(function(thing) {\n            return thing ? accessible_text_default(thing) : '';\n          }).join('');\n        }\n      }\n      return sanitize_default(check4) === sanitize_default(labelText2);\n    }\n    var help_same_as_label_evaluate_default = helpSameAsLabelEvaluate;\n    function hiddenExplicitLabelEvaluate(node, options, virtualNode) {\n      if (virtualNode.hasAttr('id')) {\n        if (!virtualNode.actualNode) {\n          return void 0;\n        }\n        var root = get_root_node_default2(node);\n        var id = escape_selector_default(node.getAttribute('id'));\n        var label5 = root.querySelector('label[for=\"'.concat(id, '\"]'));\n        if (label5 && !is_visible_default(label5, true)) {\n          var name;\n          try {\n            name = accessible_text_virtual_default(virtualNode).trim();\n          } catch (e) {\n            return void 0;\n          }\n          var isNameEmpty = name === '';\n          return isNameEmpty;\n        }\n      }\n      return false;\n    }\n    var hidden_explicit_label_evaluate_default = hiddenExplicitLabelEvaluate;\n    function implicitEvaluate(node, options, virtualNode) {\n      try {\n        var label5 = closest_default(virtualNode, 'label');\n        if (label5) {\n          return !!accessible_text_virtual_default(label5, {\n            inControlContext: true\n          });\n        }\n        return false;\n      } catch (e) {\n        return void 0;\n      }\n    }\n    var implicit_evaluate_default = implicitEvaluate;\n    function isStringContained(compare, compareWith) {\n      var curatedCompareWith = curateString(compareWith);\n      var curatedCompare = curateString(compare);\n      if (!curatedCompareWith || !curatedCompare) {\n        return false;\n      }\n      return curatedCompareWith.includes(curatedCompare);\n    }\n    function curateString(str) {\n      var noUnicodeStr = remove_unicode_default(str, {\n        emoji: true,\n        nonBmp: true,\n        punctuations: true\n      });\n      return sanitize_default(noUnicodeStr);\n    }\n    function labelContentNameMismatchEvaluate(node, options, virtualNode) {\n      var _ref64 = options || {}, pixelThreshold = _ref64.pixelThreshold, occuranceThreshold = _ref64.occuranceThreshold;\n      var accText = accessible_text_default(node).toLowerCase();\n      if (is_human_interpretable_default(accText) < 1) {\n        return void 0;\n      }\n      var textVNodes = visible_text_nodes_default(virtualNode);\n      var nonLigatureText = textVNodes.filter(function(textVNode) {\n        return !is_icon_ligature_default(textVNode, pixelThreshold, occuranceThreshold);\n      }).map(function(textVNode) {\n        return textVNode.actualNode.nodeValue;\n      }).join('');\n      var visibleText = sanitize_default(nonLigatureText).toLowerCase();\n      if (!visibleText) {\n        return true;\n      }\n      if (is_human_interpretable_default(visibleText) < 1) {\n        if (isStringContained(visibleText, accText)) {\n          return true;\n        }\n        return void 0;\n      }\n      return isStringContained(visibleText, accText);\n    }\n    var label_content_name_mismatch_evaluate_default = labelContentNameMismatchEvaluate;\n    function multipleLabelEvaluate(node) {\n      var id = escape_selector_default(node.getAttribute('id'));\n      var parent = node.parentNode;\n      var root = get_root_node_default2(node);\n      root = root.documentElement || root;\n      var labels = Array.from(root.querySelectorAll('label[for=\"'.concat(id, '\"]')));\n      if (labels.length) {\n        labels = labels.filter(function(label5) {\n          return is_visible_default(label5);\n        });\n      }\n      while (parent) {\n        if (parent.nodeName.toUpperCase() === 'LABEL' && labels.indexOf(parent) === -1) {\n          labels.push(parent);\n        }\n        parent = parent.parentNode;\n      }\n      this.relatedNodes(labels);\n      if (labels.length > 1) {\n        var ATVisibleLabels = labels.filter(function(label5) {\n          return is_visible_default(label5, true);\n        });\n        if (ATVisibleLabels.length > 1) {\n          return void 0;\n        }\n        var labelledby = idrefs_default(node, 'aria-labelledby');\n        return !labelledby.includes(ATVisibleLabels[0]) ? void 0 : false;\n      }\n      return false;\n    }\n    var multiple_label_evaluate_default = multipleLabelEvaluate;\n    function titleOnlyEvaluate(node, options, virtualNode) {\n      var labelText2 = label_virtual_default2(virtualNode);\n      var title = title_text_default(virtualNode);\n      var ariaDescribedBy = virtualNode.attr('aria-describedby');\n      return !labelText2 && !!(title || ariaDescribedBy);\n    }\n    var title_only_evaluate_default = titleOnlyEvaluate;\n    function landmarkIsUniqueAfter(results) {\n      var uniqueLandmarks = [];\n      return results.filter(function(currentResult) {\n        var findMatch = function findMatch(someResult) {\n          return currentResult.data.role === someResult.data.role && currentResult.data.accessibleText === someResult.data.accessibleText;\n        };\n        var matchedResult = uniqueLandmarks.find(findMatch);\n        if (matchedResult) {\n          matchedResult.result = false;\n          matchedResult.relatedNodes.push(currentResult.relatedNodes[0]);\n          return false;\n        }\n        uniqueLandmarks.push(currentResult);\n        currentResult.relatedNodes = [];\n        return true;\n      });\n    }\n    var landmark_is_unique_after_default = landmarkIsUniqueAfter;\n    function landmarkIsUniqueEvaluate(node, options, virtualNode) {\n      var role = get_role_default(node);\n      var accessibleText2 = accessible_text_virtual_default(virtualNode);\n      accessibleText2 = accessibleText2 ? accessibleText2.toLowerCase() : null;\n      this.data({\n        role: role,\n        accessibleText: accessibleText2\n      });\n      this.relatedNodes([ node ]);\n      return true;\n    }\n    var landmark_is_unique_evaluate_default = landmarkIsUniqueEvaluate;\n    function hasValue(value) {\n      return (value || '').trim() !== '';\n    }\n    function hasLangEvaluate(node, options, virtualNode) {\n      var xhtml2 = typeof document !== 'undefined' ? is_xhtml_default(document) : false;\n      if (options.attributes.includes('xml:lang') && options.attributes.includes('lang') && hasValue(virtualNode.attr('xml:lang')) && !hasValue(virtualNode.attr('lang')) && !xhtml2) {\n        this.data({\n          messageKey: 'noXHTML'\n        });\n        return false;\n      }\n      var hasLang = options.attributes.some(function(name) {\n        return hasValue(virtualNode.attr(name));\n      });\n      if (!hasLang) {\n        this.data({\n          messageKey: 'noLang'\n        });\n        return false;\n      }\n      return true;\n    }\n    var has_lang_evaluate_default = hasLangEvaluate;\n    function validLangEvaluate(node, options, virtualNode) {\n      var invalid = [];\n      options.attributes.forEach(function(langAttr) {\n        var langVal = virtualNode.attr(langAttr);\n        if (typeof langVal !== 'string') {\n          return;\n        }\n        var baselangVal = get_base_lang_default(langVal);\n        var invalidLang = options.value ? !options.value.map(get_base_lang_default).includes(baselangVal) : !valid_langs_default(baselangVal);\n        if (baselangVal !== '' && invalidLang || langVal !== '' && !sanitize_default(langVal)) {\n          invalid.push(langAttr + '=\"' + virtualNode.attr(langAttr) + '\"');\n        }\n      });\n      if (invalid.length) {\n        this.data(invalid);\n        return true;\n      }\n      return false;\n    }\n    var valid_lang_evaluate_default = validLangEvaluate;\n    function xmlLangMismatchEvaluate(node, options, vNode) {\n      var primaryLangValue = get_base_lang_default(vNode.attr('lang'));\n      var primaryXmlLangValue = get_base_lang_default(vNode.attr('xml:lang'));\n      return primaryLangValue === primaryXmlLangValue;\n    }\n    var xml_lang_mismatch_evaluate_default = xmlLangMismatchEvaluate;\n    function dlitemEvaluate(node) {\n      var parent = get_composed_parent_default(node);\n      var parentTagName = parent.nodeName.toUpperCase();\n      var parentRole = get_explicit_role_default(parent);\n      if (parentTagName === 'DIV' && [ 'presentation', 'none', null ].includes(parentRole)) {\n        parent = get_composed_parent_default(parent);\n        parentTagName = parent.nodeName.toUpperCase();\n        parentRole = get_explicit_role_default(parent);\n      }\n      if (parentTagName !== 'DL') {\n        return false;\n      }\n      if (!parentRole || [ 'presentation', 'none', 'list' ].includes(parentRole)) {\n        return true;\n      }\n      return false;\n    }\n    var dlitem_evaluate_default = dlitemEvaluate;\n    function listitemEvaluate(node) {\n      var parent = get_composed_parent_default(node);\n      if (!parent) {\n        return void 0;\n      }\n      var parentTagName = parent.nodeName.toUpperCase();\n      var parentRole = (parent.getAttribute('role') || '').toLowerCase();\n      if ([ 'presentation', 'none', 'list' ].includes(parentRole)) {\n        return true;\n      }\n      if (parentRole && is_valid_role_default(parentRole)) {\n        this.data({\n          messageKey: 'roleNotValid'\n        });\n        return false;\n      }\n      return [ 'UL', 'OL' ].includes(parentTagName);\n    }\n    var listitem_evaluate_default = listitemEvaluate;\n    function onlyDlitemsEvaluate(node, options, virtualNode) {\n      var ALLOWED_ROLES = [ 'definition', 'term', 'list' ];\n      var base = {\n        badNodes: [],\n        hasNonEmptyTextNode: false\n      };\n      var content = virtualNode.children.reduce(function(content2, child) {\n        var actualNode = child.actualNode;\n        if (actualNode.nodeName.toUpperCase() === 'DIV' && get_role_default(actualNode) === null) {\n          return content2.concat(child.children);\n        }\n        return content2.concat(child);\n      }, []);\n      var result = content.reduce(function(out, childNode) {\n        var actualNode = childNode.actualNode;\n        var tagName = actualNode.nodeName.toUpperCase();\n        if (actualNode.nodeType === 1 && is_visible_default(actualNode, true, false)) {\n          var explicitRole2 = get_explicit_role_default(actualNode);\n          if (tagName !== 'DT' && tagName !== 'DD' || explicitRole2) {\n            if (!ALLOWED_ROLES.includes(explicitRole2)) {\n              out.badNodes.push(actualNode);\n            }\n          }\n        } else if (actualNode.nodeType === 3 && actualNode.nodeValue.trim() !== '') {\n          out.hasNonEmptyTextNode = true;\n        }\n        return out;\n      }, base);\n      if (result.badNodes.length) {\n        this.relatedNodes(result.badNodes);\n      }\n      return !!result.badNodes.length || result.hasNonEmptyTextNode;\n    }\n    var only_dlitems_evaluate_default = onlyDlitemsEvaluate;\n    function onlyListitemsEvaluate(node, options, virtualNode) {\n      var hasNonEmptyTextNode = false;\n      var atLeastOneListitem = false;\n      var isEmpty = true;\n      var badNodes = [];\n      var badRoleNodes = [];\n      var badRoles = [];\n      virtualNode.children.forEach(function(vNode) {\n        var actualNode = vNode.actualNode;\n        if (actualNode.nodeType === 3 && actualNode.nodeValue.trim() !== '') {\n          hasNonEmptyTextNode = true;\n          return;\n        }\n        if (actualNode.nodeType !== 1 || !is_visible_default(actualNode, true, false)) {\n          return;\n        }\n        isEmpty = false;\n        var isLi = actualNode.nodeName.toUpperCase() === 'LI';\n        var role = get_role_default(vNode);\n        var isListItemRole = role === 'listitem';\n        if (!isLi && !isListItemRole) {\n          badNodes.push(actualNode);\n        }\n        if (isLi && !isListItemRole) {\n          badRoleNodes.push(actualNode);\n          if (!badRoles.includes(role)) {\n            badRoles.push(role);\n          }\n        }\n        if (isListItemRole) {\n          atLeastOneListitem = true;\n        }\n      });\n      if (hasNonEmptyTextNode || badNodes.length) {\n        this.relatedNodes(badNodes);\n        return true;\n      }\n      if (isEmpty || atLeastOneListitem) {\n        return false;\n      }\n      this.relatedNodes(badRoleNodes);\n      this.data({\n        messageKey: 'roleNotValid',\n        roles: badRoles.join(', ')\n      });\n      return true;\n    }\n    var only_listitems_evaluate_default = onlyListitemsEvaluate;\n    function structuredDlitemsEvaluate(node, options, virtualNode) {\n      var children = virtualNode.children;\n      if (!children || !children.length) {\n        return false;\n      }\n      var hasDt = false, hasDd = false, nodeName2;\n      for (var i = 0; i < children.length; i++) {\n        nodeName2 = children[i].props.nodeName.toUpperCase();\n        if (nodeName2 === 'DT') {\n          hasDt = true;\n        }\n        if (hasDt && nodeName2 === 'DD') {\n          return false;\n        }\n        if (nodeName2 === 'DD') {\n          hasDd = true;\n        }\n      }\n      return hasDt || hasDd;\n    }\n    var structured_dlitems_evaluate_default = structuredDlitemsEvaluate;\n    function captionEvaluate(node, options, virtualNode) {\n      var tracks = query_selector_all_default(virtualNode, 'track');\n      var hasCaptions = tracks.some(function(vNode) {\n        return (vNode.attr('kind') || '').toLowerCase() === 'captions';\n      });\n      return hasCaptions ? false : void 0;\n    }\n    var caption_evaluate_default = captionEvaluate;\n    function frameTestedEvaluate(node, options) {\n      var resolve = this.async();\n      var _Object$assign = Object.assign({\n        isViolation: false,\n        timeout: 500\n      }, options), isViolation = _Object$assign.isViolation, timeout = _Object$assign.timeout;\n      var timer = setTimeout(function() {\n        timer = setTimeout(function() {\n          timer = null;\n          resolve(isViolation ? false : void 0);\n        }, 0);\n      }, timeout);\n      _respondable(node.contentWindow, 'axe.ping', null, void 0, function() {\n        if (timer !== null) {\n          clearTimeout(timer);\n          resolve(true);\n        }\n      });\n    }\n    var frame_tested_evaluate_default = frameTestedEvaluate;\n    function noAutoplayAudioEvaluate(node, options) {\n      if (!node.duration) {\n        console.warn('axe.utils.preloadMedia did not load metadata');\n        return void 0;\n      }\n      var _options$allowedDurat = options.allowedDuration, allowedDuration = _options$allowedDurat === void 0 ? 3 : _options$allowedDurat;\n      var playableDuration = getPlayableDuration(node);\n      if (playableDuration <= allowedDuration && !node.hasAttribute('loop')) {\n        return true;\n      }\n      if (!node.hasAttribute('controls')) {\n        return false;\n      }\n      return true;\n      function getPlayableDuration(elm) {\n        if (!elm.currentSrc) {\n          return 0;\n        }\n        var playbackRange = getPlaybackRange(elm.currentSrc);\n        if (!playbackRange) {\n          return Math.abs(elm.duration - (elm.currentTime || 0));\n        }\n        if (playbackRange.length === 1) {\n          return Math.abs(elm.duration - playbackRange[0]);\n        }\n        return Math.abs(playbackRange[1] - playbackRange[0]);\n      }\n      function getPlaybackRange(src) {\n        var match = src.match(/#t=(.*)/);\n        if (!match) {\n          return;\n        }\n        var _match = _slicedToArray(match, 2), value = _match[1];\n        var ranges = value.split(',');\n        return ranges.map(function(range) {\n          if (/:/.test(range)) {\n            return convertHourMinSecToSeconds(range);\n          }\n          return parseFloat(range);\n        });\n      }\n      function convertHourMinSecToSeconds(hhMmSs) {\n        var parts = hhMmSs.split(':');\n        var secs = 0;\n        var mins = 1;\n        while (parts.length > 0) {\n          secs += mins * parseInt(parts.pop(), 10);\n          mins *= 60;\n        }\n        return parseFloat(secs);\n      }\n    }\n    var no_autoplay_audio_evaluate_default = noAutoplayAudioEvaluate;\n    function ariaAllowedAttrMatches(node, virtualNode) {\n      var aria43 = /^aria-/;\n      var attrs = virtualNode.attrNames;\n      if (attrs.length) {\n        for (var _i23 = 0, l = attrs.length; _i23 < l; _i23++) {\n          if (aria43.test(attrs[_i23])) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n    var aria_allowed_attr_matches_default = ariaAllowedAttrMatches;\n    function ariaAllowedRoleMatches(node) {\n      return get_explicit_role_default(node, {\n        dpub: true,\n        fallback: true\n      }) !== null;\n    }\n    var aria_allowed_role_matches_default = ariaAllowedRoleMatches;\n    function ariaHasAttrMatches(node) {\n      var aria43 = /^aria-/;\n      if (node.hasAttributes()) {\n        var attrs = get_node_attributes_default(node);\n        for (var i = 0, l = attrs.length; i < l; i++) {\n          if (aria43.test(attrs[i].name)) {\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n    var aria_has_attr_matches_default = ariaHasAttrMatches;\n    function shouldMatchElement(el) {\n      if (!el) {\n        return true;\n      }\n      if (el.getAttribute('aria-hidden') === 'true') {\n        return false;\n      }\n      return shouldMatchElement(get_composed_parent_default(el));\n    }\n    function ariaHiddenFocusMatches(node) {\n      return shouldMatchElement(get_composed_parent_default(node));\n    }\n    var aria_hidden_focus_matches_default = ariaHiddenFocusMatches;\n    function ariaRequiredChildrenMatches(node, virtualNode) {\n      var role = get_explicit_role_default(virtualNode, {\n        dpub: true\n      });\n      return !!required_owned_default(role);\n    }\n    var aria_required_children_matches_default = ariaRequiredChildrenMatches;\n    function ariaRequiredParentMatches(node, virtualNode) {\n      var role = get_explicit_role_default(virtualNode);\n      return !!required_context_default(role);\n    }\n    var aria_required_parent_matches_default = ariaRequiredParentMatches;\n    function autocompleteMatches(node, virtualNode) {\n      var autocomplete2 = virtualNode.attr('autocomplete');\n      if (!autocomplete2 || sanitize_default(autocomplete2) === '') {\n        return false;\n      }\n      var nodeName2 = virtualNode.props.nodeName;\n      if ([ 'textarea', 'input', 'select' ].includes(nodeName2) === false) {\n        return false;\n      }\n      var excludedInputTypes = [ 'submit', 'reset', 'button', 'hidden' ];\n      if (nodeName2 === 'input' && excludedInputTypes.includes(virtualNode.props.type)) {\n        return false;\n      }\n      var ariaDisabled = virtualNode.attr('aria-disabled') || 'false';\n      if (virtualNode.hasAttr('disabled') || ariaDisabled.toLowerCase() === 'true') {\n        return false;\n      }\n      var role = virtualNode.attr('role');\n      var tabIndex = virtualNode.attr('tabindex');\n      if (tabIndex === '-1' && role) {\n        var roleDef = standards_default.ariaRoles[role];\n        if (roleDef === void 0 || roleDef.type !== 'widget') {\n          return false;\n        }\n      }\n      if (tabIndex === '-1' && virtualNode.actualNode && !is_visible_default(virtualNode.actualNode, false) && !is_visible_default(virtualNode.actualNode, true)) {\n        return false;\n      }\n      return true;\n    }\n    var autocomplete_matches_default = autocompleteMatches;\n    function isInitiatorMatches(node, virtualNode, context3) {\n      return context3.initiator;\n    }\n    var is_initiator_matches_default = isInitiatorMatches;\n    function bypassMatches(node, virtualNode, context3) {\n      if (is_initiator_matches_default(node, virtualNode, context3)) {\n        return !!node.querySelector('a[href]');\n      }\n      return true;\n    }\n    var bypass_matches_default = bypassMatches;\n    function colorContrastMatches(node, virtualNode) {\n      var _virtualNode$props = virtualNode.props, nodeName2 = _virtualNode$props.nodeName, inputType = _virtualNode$props.type;\n      if (nodeName2 === 'option') {\n        return false;\n      }\n      if (nodeName2 === 'select' && !node.options.length) {\n        return false;\n      }\n      var nonTextInput = [ 'hidden', 'range', 'color', 'checkbox', 'radio', 'image' ];\n      if (nodeName2 === 'input' && nonTextInput.includes(inputType)) {\n        return false;\n      }\n      if (is_disabled_default(virtualNode)) {\n        return false;\n      }\n      var formElements = [ 'input', 'select', 'textarea' ];\n      if (formElements.includes(nodeName2)) {\n        var style = window.getComputedStyle(node);\n        var textIndent = parseInt(style.getPropertyValue('text-indent'), 10);\n        if (textIndent) {\n          var rect = node.getBoundingClientRect();\n          rect = {\n            top: rect.top,\n            bottom: rect.bottom,\n            left: rect.left + textIndent,\n            right: rect.right + textIndent\n          };\n          if (!visually_overlaps_default(rect, node)) {\n            return false;\n          }\n        }\n        return true;\n      }\n      var nodeParentLabel = find_up_virtual_default(virtualNode, 'label');\n      if (nodeName2 === 'label' || nodeParentLabel) {\n        var labelNode = nodeParentLabel || node;\n        var labelVirtual3 = nodeParentLabel ? get_node_from_tree_default(nodeParentLabel) : virtualNode;\n        if (labelNode.htmlFor) {\n          var doc = get_root_node_default2(labelNode);\n          var explicitControl = doc.getElementById(labelNode.htmlFor);\n          var explicitControlVirtual = explicitControl && get_node_from_tree_default(explicitControl);\n          if (explicitControlVirtual && is_disabled_default(explicitControlVirtual)) {\n            return false;\n          }\n        }\n        var query = 'input:not([type=\"hidden\"],[type=\"image\"],[type=\"button\"],[type=\"submit\"],[type=\"reset\"]), select, textarea';\n        var implicitControl = query_selector_all_default(labelVirtual3, query)[0];\n        if (implicitControl && is_disabled_default(implicitControl)) {\n          return false;\n        }\n      }\n      var ariaLabelledbyControls = [];\n      var ancestorNode = virtualNode;\n      while (ancestorNode) {\n        if (ancestorNode.props.id) {\n          var virtualControls = get_accessible_refs_default(ancestorNode).filter(function(control) {\n            return token_list_default(control.getAttribute('aria-labelledby') || '').includes(ancestorNode.props.id);\n          }).map(function(control) {\n            return get_node_from_tree_default(control);\n          });\n          ariaLabelledbyControls.push.apply(ariaLabelledbyControls, _toConsumableArray(virtualControls));\n        }\n        ancestorNode = ancestorNode.parent;\n      }\n      if (ariaLabelledbyControls.length > 0 && ariaLabelledbyControls.every(is_disabled_default)) {\n        return false;\n      }\n      var visibleText = visible_virtual_default(virtualNode, false, true);\n      var removeUnicodeOptions = {\n        emoji: true,\n        nonBmp: false,\n        punctuations: true\n      };\n      if (!visibleText || !remove_unicode_default(visibleText, removeUnicodeOptions)) {\n        return false;\n      }\n      var range = document.createRange();\n      var childNodes = virtualNode.children;\n      for (var index = 0; index < childNodes.length; index++) {\n        var child = childNodes[index];\n        if (child.actualNode.nodeType === 3 && sanitize_default(child.actualNode.nodeValue) !== '') {\n          range.selectNodeContents(child.actualNode);\n        }\n      }\n      var rects = range.getClientRects();\n      for (var _index = 0; _index < rects.length; _index++) {\n        if (visually_overlaps_default(rects[_index], node)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    var color_contrast_matches_default = colorContrastMatches;\n    function dataTableLargeMatches(node) {\n      if (is_data_table_default(node)) {\n        var tableArray = to_grid_default(node);\n        return tableArray.length >= 3 && tableArray[0].length >= 3 && tableArray[1].length >= 3 && tableArray[2].length >= 3;\n      }\n      return false;\n    }\n    var data_table_large_matches_default = dataTableLargeMatches;\n    function dataTableMatches(node) {\n      return is_data_table_default(node);\n    }\n    var data_table_matches_default = dataTableMatches;\n    function duplicateIdActiveMatches(node) {\n      var id = node.getAttribute('id').trim();\n      var idSelector = '*[id=\"'.concat(escape_selector_default(id), '\"]');\n      var idMatchingElms = Array.from(get_root_node_default2(node).querySelectorAll(idSelector));\n      return !is_accessible_ref_default(node) && idMatchingElms.some(is_focusable_default);\n    }\n    var duplicate_id_active_matches_default = duplicateIdActiveMatches;\n    function duplicateIdAriaMatches(node) {\n      return is_accessible_ref_default(node);\n    }\n    var duplicate_id_aria_matches_default = duplicateIdAriaMatches;\n    function duplicateIdMiscMatches(node) {\n      var id = node.getAttribute('id').trim();\n      var idSelector = '*[id=\"'.concat(escape_selector_default(id), '\"]');\n      var idMatchingElms = Array.from(get_root_node_default2(node).querySelectorAll(idSelector));\n      return !is_accessible_ref_default(node) && idMatchingElms.every(function(elm) {\n        return !is_focusable_default(elm);\n      });\n    }\n    var duplicate_id_misc_matches_default = duplicateIdMiscMatches;\n    function frameFocusableContentMatches(node, virtualNode, context3) {\n      return !context3.initiator && !context3.focusable && context3.boundingClientRect.width * context3.boundingClientRect.height > 1;\n    }\n    var frame_focusable_content_matches_default = frameFocusableContentMatches;\n    function frameTitleHasTextMatches(node) {\n      var title = node.getAttribute('title');\n      return !!sanitize_default(title);\n    }\n    var frame_title_has_text_matches_default = frameTitleHasTextMatches;\n    function headingMatches(node) {\n      var explicitRoles;\n      if (node.hasAttribute('role')) {\n        explicitRoles = node.getAttribute('role').split(/\\s+/i).filter(axe.commons.aria.isValidRole);\n      }\n      if (explicitRoles && explicitRoles.length > 0) {\n        return explicitRoles.includes('heading');\n      } else {\n        return axe.commons.aria.implicitRole(node) === 'heading';\n      }\n    }\n    var heading_matches_default = headingMatches;\n    function svgNamespaceMatches(node, virtualNode) {\n      try {\n        var nodeName2 = virtualNode.props.nodeName;\n        if (nodeName2 === 'svg') {\n          return true;\n        }\n        return !!closest_default(virtualNode, 'svg');\n      } catch (e) {\n        return false;\n      }\n    }\n    var svg_namespace_matches_default = svgNamespaceMatches;\n    function htmlNamespaceMatches(node, virtualNode) {\n      return !svg_namespace_matches_default(node, virtualNode);\n    }\n    var html_namespace_matches_default = htmlNamespaceMatches;\n    function identicalLinksSamePurposeMatches(node, virtualNode) {\n      var hasAccName = !!accessible_text_virtual_default(virtualNode);\n      if (!hasAccName) {\n        return false;\n      }\n      var role = get_role_default(node);\n      if (role && role !== 'link') {\n        return false;\n      }\n      return true;\n    }\n    var identical_links_same_purpose_matches_default = identicalLinksSamePurposeMatches;\n    function insertedIntoFocusOrderMatches(node) {\n      return inserted_into_focus_order_default(node);\n    }\n    var inserted_into_focus_order_matches_default = insertedIntoFocusOrderMatches;\n    function labelContentNameMismatchMatches(node, virtualNode) {\n      var role = get_role_default(node);\n      if (!role) {\n        return false;\n      }\n      var widgetRoles = get_aria_roles_by_type_default('widget');\n      var isWidgetType = widgetRoles.includes(role);\n      if (!isWidgetType) {\n        return false;\n      }\n      var rolesWithNameFromContents = get_aria_roles_supporting_name_from_content_default();\n      if (!rolesWithNameFromContents.includes(role)) {\n        return false;\n      }\n      if (!sanitize_default(arialabel_text_default(virtualNode)) && !sanitize_default(arialabelledby_text_default(node))) {\n        return false;\n      }\n      if (!sanitize_default(visible_virtual_default(virtualNode))) {\n        return false;\n      }\n      return true;\n    }\n    var label_content_name_mismatch_matches_default = labelContentNameMismatchMatches;\n    function labelMatches(node, virtualNode) {\n      if (virtualNode.props.nodeName !== 'input' || virtualNode.hasAttr('type') === false) {\n        return true;\n      }\n      var type = virtualNode.attr('type').toLowerCase();\n      return [ 'hidden', 'image', 'button', 'submit', 'reset' ].includes(type) === false;\n    }\n    var label_matches_default = labelMatches;\n    function landmarkHasBodyContextMatches(node, virtualNode) {\n      var nativeScopeFilter = 'article, aside, main, nav, section';\n      return node.hasAttribute('role') || !find_up_virtual_default(virtualNode, nativeScopeFilter);\n    }\n    var landmark_has_body_context_matches_default = landmarkHasBodyContextMatches;\n    function landmarkUniqueMatches(node, virtualNode) {\n      var excludedParentsForHeaderFooterLandmarks = [ 'article', 'aside', 'main', 'nav', 'section' ].join(',');\n      function isHeaderFooterLandmark(headerFooterElement) {\n        return !find_up_virtual_default(headerFooterElement, excludedParentsForHeaderFooterLandmarks);\n      }\n      function isLandmarkVirtual(virtualNode2) {\n        var actualNode = virtualNode2.actualNode;\n        var landmarkRoles2 = get_aria_roles_by_type_default('landmark');\n        var role = get_role_default(actualNode);\n        if (!role) {\n          return false;\n        }\n        var nodeName2 = actualNode.nodeName.toUpperCase();\n        if (nodeName2 === 'HEADER' || nodeName2 === 'FOOTER') {\n          return isHeaderFooterLandmark(virtualNode2);\n        }\n        if (nodeName2 === 'SECTION' || nodeName2 === 'FORM') {\n          var accessibleText2 = accessible_text_virtual_default(virtualNode2);\n          return !!accessibleText2;\n        }\n        return landmarkRoles2.indexOf(role) >= 0 || role === 'region';\n      }\n      return isLandmarkVirtual(virtualNode) && is_visible_default(node, true);\n    }\n    var landmark_unique_matches_default = landmarkUniqueMatches;\n    function dataTableMatches2(node) {\n      return !is_data_table_default(node) && !is_focusable_default(node);\n    }\n    var layout_table_matches_default = dataTableMatches2;\n    function linkInTextBlockMatches(node) {\n      var text32 = sanitize_default(node.textContent);\n      var role = node.getAttribute('role');\n      if (role && role !== 'link') {\n        return false;\n      }\n      if (!text32) {\n        return false;\n      }\n      if (!is_visible_default(node, false)) {\n        return false;\n      }\n      return is_in_text_block_default(node);\n    }\n    var link_in_text_block_matches_default = linkInTextBlockMatches;\n    function nestedInteractiveMatches(node, virtualNode) {\n      var role = get_role_default(virtualNode);\n      if (!role) {\n        return false;\n      }\n      return !!standards_default.ariaRoles[role].childrenPresentational;\n    }\n    var nested_interactive_matches_default = nestedInteractiveMatches;\n    function noAutoplayAudioMatches(node) {\n      if (!node.currentSrc) {\n        return false;\n      }\n      if (node.hasAttribute('paused') || node.hasAttribute('muted')) {\n        return false;\n      }\n      return true;\n    }\n    var no_autoplay_audio_matches_default = noAutoplayAudioMatches;\n    function noEmptyRoleMatches(node, virtualNode) {\n      if (!virtualNode.hasAttr('role')) {\n        return false;\n      }\n      if (!virtualNode.attr('role').trim()) {\n        return false;\n      }\n      return true;\n    }\n    var no_empty_role_matches_default = noEmptyRoleMatches;\n    function noExplicitNameRequired(node, virtualNode) {\n      var role = get_explicit_role_default(virtualNode);\n      if (!role || [ 'none', 'presentation' ].includes(role)) {\n        return true;\n      }\n      var _ref65 = aria_roles_default[role] || {}, accessibleNameRequired = _ref65.accessibleNameRequired;\n      if (accessibleNameRequired || is_focusable_default(virtualNode)) {\n        return true;\n      }\n      return false;\n    }\n    var no_explicit_name_required_matches_default = noExplicitNameRequired;\n    function noNamingMethodMatches(node, virtualNode) {\n      var _get_element_spec_def = get_element_spec_default(virtualNode), namingMethods = _get_element_spec_def.namingMethods;\n      if (namingMethods && namingMethods.length !== 0) {\n        return false;\n      }\n      if (get_explicit_role_default(virtualNode) === 'combobox' && query_selector_all_default(virtualNode, 'input:not([type=\"hidden\"])').length) {\n        return false;\n      }\n      return true;\n    }\n    var no_naming_method_matches_default = noNamingMethodMatches;\n    function noRoleMatches(node) {\n      return !node.getAttribute('role');\n    }\n    var no_role_matches_default = noRoleMatches;\n    function notHtmlMatches(node, virtualNode) {\n      return virtualNode.props.nodeName !== 'html';\n    }\n    var not_html_matches_default = notHtmlMatches;\n    function pAsHeadingMatches(node) {\n      var children = Array.from(node.parentNode.childNodes);\n      var nodeText = node.textContent.trim();\n      var isSentence = /[.!?:;](?![.!?:;])/g;\n      if (nodeText.length === 0 || (nodeText.match(isSentence) || []).length >= 2) {\n        return false;\n      }\n      var siblingsAfter = children.slice(children.indexOf(node) + 1).filter(function(elm) {\n        return elm.nodeName.toUpperCase() === 'P' && elm.textContent.trim() !== '';\n      });\n      return siblingsAfter.length !== 0;\n    }\n    var p_as_heading_matches_default = pAsHeadingMatches;\n    function scrollableRegionFocusableMatches(node, virtualNode) {\n      if (!!get_scroll_default(node, 13) === false) {\n        return false;\n      }\n      var role = get_explicit_role_default(virtualNode);\n      if (standards_default.ariaRoles.combobox.requiredOwned.includes(role)) {\n        if (closest_default(virtualNode, '[role~=\"combobox\"]')) {\n          return false;\n        }\n        var id = virtualNode.attr('id');\n        if (id) {\n          var doc = get_root_node_default(node);\n          var owned = Array.from(doc.querySelectorAll('[aria-owns~=\"'.concat(id, '\"], [aria-controls~=\"').concat(id, '\"]')));\n          var comboboxOwned = owned.some(function(el) {\n            var roles = token_list_default(el.getAttribute('role'));\n            return roles.includes('combobox');\n          });\n          if (comboboxOwned) {\n            return false;\n          }\n        }\n      }\n      var nodeAndDescendents = query_selector_all_default(virtualNode, '*');\n      var hasVisibleChildren = nodeAndDescendents.some(function(elm) {\n        return has_content_virtual_default(elm, true, true);\n      });\n      if (!hasVisibleChildren) {\n        return false;\n      }\n      return true;\n    }\n    var scrollable_region_focusable_matches_default = scrollableRegionFocusableMatches;\n    function skipLinkMatches(node) {\n      return is_skip_link_default(node) && is_offscreen_default(node);\n    }\n    var skip_link_matches_default = skipLinkMatches;\n    function windowIsTopMatches(node) {\n      return node.ownerDocument.defaultView.self === node.ownerDocument.defaultView.top;\n    }\n    var window_is_top_matches_default = windowIsTopMatches;\n    function xmlLangMismatchMatches(node) {\n      var primaryLangValue = get_base_lang_default(node.getAttribute('lang'));\n      var primaryXmlLangValue = get_base_lang_default(node.getAttribute('xml:lang'));\n      return valid_langs_default(primaryLangValue) && valid_langs_default(primaryXmlLangValue);\n    }\n    var xml_lang_mismatch_matches_default = xmlLangMismatchMatches;\n    var metadataFunctionMap = {\n      'abstractrole-evaluate': abstractrole_evaluate_default,\n      'aria-allowed-attr-evaluate': aria_allowed_attr_evaluate_default,\n      'aria-allowed-role-evaluate': aria_allowed_role_evaluate_default,\n      'aria-errormessage-evaluate': aria_errormessage_evaluate_default,\n      'aria-hidden-body-evaluate': aria_hidden_body_evaluate_default,\n      'aria-prohibited-attr-evaluate': aria_prohibited_attr_evaluate_default,\n      'aria-required-attr-evaluate': aria_required_attr_evaluate_default,\n      'aria-required-children-evaluate': aria_required_children_evaluate_default,\n      'aria-required-parent-evaluate': aria_required_parent_evaluate_default,\n      'aria-roledescription-evaluate': aria_roledescription_evaluate_default,\n      'aria-unsupported-attr-evaluate': aria_unsupported_attr_evaluate_default,\n      'aria-valid-attr-evaluate': aria_valid_attr_evaluate_default,\n      'aria-valid-attr-value-evaluate': aria_valid_attr_value_evaluate_default,\n      'fallbackrole-evaluate': fallbackrole_evaluate_default,\n      'has-global-aria-attribute-evaluate': has_global_aria_attribute_evaluate_default,\n      'has-widget-role-evaluate': has_widget_role_evaluate_default,\n      'invalidrole-evaluate': invalidrole_evaluate_default,\n      'is-element-focusable-evaluate': is_element_focusable_evaluate_default,\n      'no-implicit-explicit-label-evaluate': no_implicit_explicit_label_evaluate_default,\n      'unsupportedrole-evaluate': unsupportedrole_evaluate_default,\n      'valid-scrollable-semantics-evaluate': valid_scrollable_semantics_evaluate_default,\n      'caption-faked-evaluate': caption_faked_evaluate_default,\n      'html5-scope-evaluate': html5_scope_evaluate_default,\n      'same-caption-summary-evaluate': same_caption_summary_evaluate_default,\n      'scope-value-evaluate': scope_value_evaluate_default,\n      'td-has-header-evaluate': td_has_header_evaluate_default,\n      'td-headers-attr-evaluate': td_headers_attr_evaluate_default,\n      'th-has-data-cells-evaluate': th_has_data_cells_evaluate_default,\n      'hidden-content-evaluate': hidden_content_evaluate_default,\n      'color-contrast-evaluate': color_contrast_evaluate_default,\n      'link-in-text-block-evaluate': link_in_text_block_evaluate_default,\n      'autocomplete-appropriate-evaluate': autocomplete_appropriate_evaluate_default,\n      'autocomplete-valid-evaluate': autocomplete_valid_evaluate_default,\n      'attr-non-space-content-evaluate': attr_non_space_content_evaluate_default,\n      'has-descendant-after': has_descendant_after_default,\n      'has-descendant-evaluate': has_descendant_evaluate_default,\n      'has-text-content-evaluate': has_text_content_evaluate_default,\n      'matches-definition-evaluate': matches_definition_evaluate_default,\n      'page-no-duplicate-after': page_no_duplicate_after_default,\n      'page-no-duplicate-evaluate': page_no_duplicate_evaluate_default,\n      'heading-order-after': heading_order_after_default,\n      'heading-order-evaluate': heading_order_evaluate_default,\n      'identical-links-same-purpose-after': identical_links_same_purpose_after_default,\n      'identical-links-same-purpose-evaluate': identical_links_same_purpose_evaluate_default,\n      'internal-link-present-evaluate': internal_link_present_evaluate_default,\n      'meta-refresh-evaluate': meta_refresh_evaluate_default,\n      'p-as-heading-evaluate': p_as_heading_evaluate_default,\n      'region-evaluate': region_evaluate_default,\n      'skip-link-evaluate': skip_link_evaluate_default,\n      'unique-frame-title-after': unique_frame_title_after_default,\n      'unique-frame-title-evaluate': unique_frame_title_evaluate_default,\n      'aria-label-evaluate': aria_label_evaluate_default,\n      'aria-labelledby-evaluate': aria_labelledby_evaluate_default,\n      'avoid-inline-spacing-evaluate': avoid_inline_spacing_evaluate_default,\n      'doc-has-title-evaluate': doc_has_title_evaluate_default,\n      'exists-evaluate': exists_evaluate_default,\n      'has-alt-evaluate': has_alt_evaluate_default,\n      'is-on-screen-evaluate': is_on_screen_evaluate_default,\n      'non-empty-if-present-evaluate': non_empty_if_present_evaluate_default,\n      'presentational-role-evaluate': presentational_role_evaluate_default,\n      'svg-non-empty-title-evaluate': svg_non_empty_title_evaluate_default,\n      'css-orientation-lock-evaluate': css_orientation_lock_evaluate_default,\n      'meta-viewport-scale-evaluate': meta_viewport_scale_evaluate_default,\n      'duplicate-id-after': duplicate_id_after_default,\n      'duplicate-id-evaluate': duplicate_id_evaluate_default,\n      'accesskeys-after': accesskeys_after_default,\n      'accesskeys-evaluate': accesskeys_evaluate_default,\n      'focusable-content-evaluate': focusable_content_evaluate_default,\n      'focusable-disabled-evaluate': focusable_disabled_evaluate_default,\n      'focusable-element-evaluate': focusable_element_evaluate_default,\n      'focusable-modal-open-evaluate': focusable_modal_open_evaluate_default,\n      'focusable-no-name-evaluate': focusable_no_name_evaluate_default,\n      'focusable-not-tabbable-evaluate': focusable_not_tabbable_evaluate_default,\n      'landmark-is-top-level-evaluate': landmark_is_top_level_evaluate_default,\n      'no-focusable-content-evaluate': no_focusable_content_evaluate_default,\n      'tabindex-evaluate': tabindex_evaluate_default,\n      'alt-space-value-evaluate': alt_space_value_evaluate_default,\n      'duplicate-img-label-evaluate': duplicate_img_label_evaluate_default,\n      'explicit-evaluate': explicit_evaluate_default,\n      'help-same-as-label-evaluate': help_same_as_label_evaluate_default,\n      'hidden-explicit-label-evaluate': hidden_explicit_label_evaluate_default,\n      'implicit-evaluate': implicit_evaluate_default,\n      'label-content-name-mismatch-evaluate': label_content_name_mismatch_evaluate_default,\n      'multiple-label-evaluate': multiple_label_evaluate_default,\n      'title-only-evaluate': title_only_evaluate_default,\n      'landmark-is-unique-after': landmark_is_unique_after_default,\n      'landmark-is-unique-evaluate': landmark_is_unique_evaluate_default,\n      'has-lang-evaluate': has_lang_evaluate_default,\n      'valid-lang-evaluate': valid_lang_evaluate_default,\n      'xml-lang-mismatch-evaluate': xml_lang_mismatch_evaluate_default,\n      'dlitem-evaluate': dlitem_evaluate_default,\n      'listitem-evaluate': listitem_evaluate_default,\n      'only-dlitems-evaluate': only_dlitems_evaluate_default,\n      'only-listitems-evaluate': only_listitems_evaluate_default,\n      'structured-dlitems-evaluate': structured_dlitems_evaluate_default,\n      'caption-evaluate': caption_evaluate_default,\n      'frame-tested-evaluate': frame_tested_evaluate_default,\n      'no-autoplay-audio-evaluate': no_autoplay_audio_evaluate_default,\n      'aria-allowed-attr-matches': aria_allowed_attr_matches_default,\n      'aria-allowed-role-matches': aria_allowed_role_matches_default,\n      'aria-form-field-name-matches': no_naming_method_matches_default,\n      'aria-has-attr-matches': aria_has_attr_matches_default,\n      'aria-hidden-focus-matches': aria_hidden_focus_matches_default,\n      'aria-required-children-matches': aria_required_children_matches_default,\n      'aria-required-parent-matches': aria_required_parent_matches_default,\n      'autocomplete-matches': autocomplete_matches_default,\n      'bypass-matches': bypass_matches_default,\n      'color-contrast-matches': color_contrast_matches_default,\n      'data-table-large-matches': data_table_large_matches_default,\n      'data-table-matches': data_table_matches_default,\n      'duplicate-id-active-matches': duplicate_id_active_matches_default,\n      'duplicate-id-aria-matches': duplicate_id_aria_matches_default,\n      'duplicate-id-misc-matches': duplicate_id_misc_matches_default,\n      'frame-focusable-content-matches': frame_focusable_content_matches_default,\n      'frame-title-has-text-matches': frame_title_has_text_matches_default,\n      'heading-matches': heading_matches_default,\n      'html-namespace-matches': html_namespace_matches_default,\n      'identical-links-same-purpose-matches': identical_links_same_purpose_matches_default,\n      'inserted-into-focus-order-matches': inserted_into_focus_order_matches_default,\n      'is-initiator-matches': is_initiator_matches_default,\n      'label-content-name-mismatch-matches': label_content_name_mismatch_matches_default,\n      'label-matches': label_matches_default,\n      'landmark-has-body-context-matches': landmark_has_body_context_matches_default,\n      'landmark-unique-matches': landmark_unique_matches_default,\n      'layout-table-matches': layout_table_matches_default,\n      'link-in-text-block-matches': link_in_text_block_matches_default,\n      'nested-interactive-matches': nested_interactive_matches_default,\n      'no-autoplay-audio-matches': no_autoplay_audio_matches_default,\n      'no-empty-role-matches': no_empty_role_matches_default,\n      'no-explicit-name-required-matches': no_explicit_name_required_matches_default,\n      'no-naming-method-matches': no_naming_method_matches_default,\n      'no-role-matches': no_role_matches_default,\n      'not-html-matches': not_html_matches_default,\n      'p-as-heading-matches': p_as_heading_matches_default,\n      'scrollable-region-focusable-matches': scrollable_region_focusable_matches_default,\n      'skip-link-matches': skip_link_matches_default,\n      'svg-namespace-matches': svg_namespace_matches_default,\n      'window-is-top-matches': window_is_top_matches_default,\n      'xml-lang-mismatch-matches': xml_lang_mismatch_matches_default\n    };\n    var metadata_function_map_default = metadataFunctionMap;\n    function CheckResult(check4) {\n      this.id = check4.id;\n      this.data = null;\n      this.relatedNodes = [];\n      this.result = null;\n    }\n    var check_result_default = CheckResult;\n    function createExecutionContext(spec) {\n      if (typeof spec === 'string') {\n        if (metadata_function_map_default[spec]) {\n          return metadata_function_map_default[spec];\n        }\n        if (/^\\s*function[\\s\\w]*\\(/.test(spec)) {\n          return new Function('return ' + spec + ';')();\n        }\n        throw new ReferenceError('Function ID does not exist in the metadata-function-map: '.concat(spec));\n      }\n      return spec;\n    }\n    function normalizeOptions() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (Array.isArray(options) || _typeof(options) !== 'object') {\n        options = {\n          value: options\n        };\n      }\n      return options;\n    }\n    function Check(spec) {\n      if (spec) {\n        this.id = spec.id;\n        this.configure(spec);\n      }\n    }\n    Check.prototype.enabled = true;\n    Check.prototype.run = function run(node, options, context3, resolve, reject) {\n      options = options || {};\n      var enabled = options.hasOwnProperty('enabled') ? options.enabled : this.enabled;\n      var checkOptions = this.getOptions(options.options);\n      if (enabled) {\n        var checkResult = new check_result_default(this);\n        var helper = check_helper_default(checkResult, options, resolve, reject);\n        var result;\n        try {\n          result = this.evaluate.call(helper, node.actualNode, checkOptions, node, context3);\n        } catch (e) {\n          if (node && node.actualNode) {\n            e.errorNode = new dq_element_default(node.actualNode).toJSON();\n          }\n          reject(e);\n          return;\n        }\n        if (!helper.isAsync) {\n          checkResult.result = result;\n          resolve(checkResult);\n        }\n      } else {\n        resolve(null);\n      }\n    };\n    Check.prototype.runSync = function runSync(node, options, context3) {\n      options = options || {};\n      var _options = options, _options$enabled = _options.enabled, enabled = _options$enabled === void 0 ? this.enabled : _options$enabled;\n      if (!enabled) {\n        return null;\n      }\n      var checkOptions = this.getOptions(options.options);\n      var checkResult = new check_result_default(this);\n      var helper = check_helper_default(checkResult, options);\n      helper.async = function async() {\n        throw new Error('Cannot run async check while in a synchronous run');\n      };\n      var result;\n      try {\n        result = this.evaluate.call(helper, node.actualNode, checkOptions, node, context3);\n      } catch (e) {\n        if (node && node.actualNode) {\n          e.errorNode = new dq_element_default(node.actualNode).toJSON();\n        }\n        throw e;\n      }\n      checkResult.result = result;\n      return checkResult;\n    };\n    Check.prototype.configure = function configure(spec) {\n      var _this3 = this;\n      if (!spec.evaluate || metadata_function_map_default[spec.evaluate]) {\n        this._internalCheck = true;\n      }\n      if (spec.hasOwnProperty('enabled')) {\n        this.enabled = spec.enabled;\n      }\n      if (spec.hasOwnProperty('options')) {\n        if (this._internalCheck) {\n          this.options = normalizeOptions(spec.options);\n        } else {\n          this.options = spec.options;\n        }\n      }\n      [ 'evaluate', 'after' ].filter(function(prop) {\n        return spec.hasOwnProperty(prop);\n      }).forEach(function(prop) {\n        return _this3[prop] = createExecutionContext(spec[prop]);\n      });\n    };\n    Check.prototype.getOptions = function getOptions(options) {\n      if (this._internalCheck) {\n        return deep_merge_default(this.options, normalizeOptions(options || {}));\n      } else {\n        return options || this.options;\n      }\n    };\n    var check_default = Check;\n    function RuleResult(rule3) {\n      this.id = rule3.id;\n      this.result = constants_default.NA;\n      this.pageLevel = rule3.pageLevel;\n      this.impact = null;\n      this.nodes = [];\n    }\n    var rule_result_default = RuleResult;\n    function Rule(spec, parentAudit) {\n      this._audit = parentAudit;\n      this.id = spec.id;\n      this.selector = spec.selector || '*';\n      if (spec.impact) {\n        assert_default(constants_default.impact.includes(spec.impact), 'Impact '.concat(spec.impact, ' is not a valid impact'));\n        this.impact = spec.impact;\n      }\n      this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true;\n      this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true;\n      this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false;\n      this.reviewOnFail = typeof spec.reviewOnFail === 'boolean' ? spec.reviewOnFail : false;\n      this.any = spec.any || [];\n      this.all = spec.all || [];\n      this.none = spec.none || [];\n      this.tags = spec.tags || [];\n      this.preload = spec.preload ? true : false;\n      if (spec.matches) {\n        this.matches = createExecutionContext(spec.matches);\n      }\n    }\n    Rule.prototype.matches = function matches13() {\n      return true;\n    };\n    Rule.prototype.gather = function gather(context3) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var markStart = 'mark_gather_start_' + this.id;\n      var markEnd = 'mark_gather_end_' + this.id;\n      var markHiddenStart = 'mark_isHidden_start_' + this.id;\n      var markHiddenEnd = 'mark_isHidden_end_' + this.id;\n      if (options.performanceTimer) {\n        performance_timer_default.mark(markStart);\n      }\n      var elements = select_default(this.selector, context3);\n      if (this.excludeHidden) {\n        if (options.performanceTimer) {\n          performance_timer_default.mark(markHiddenStart);\n        }\n        elements = elements.filter(function(element) {\n          return !is_hidden_default(element.actualNode);\n        });\n        if (options.performanceTimer) {\n          performance_timer_default.mark(markHiddenEnd);\n          performance_timer_default.measure('rule_' + this.id + '#gather_axe.utils.isHidden', markHiddenStart, markHiddenEnd);\n        }\n      }\n      if (options.performanceTimer) {\n        performance_timer_default.mark(markEnd);\n        performance_timer_default.measure('rule_' + this.id + '#gather', markStart, markEnd);\n      }\n      return elements;\n    };\n    Rule.prototype.runChecks = function runChecks(type, node, options, context3, resolve, reject) {\n      var self2 = this;\n      var checkQueue = queue_default();\n      this[type].forEach(function(c) {\n        var check4 = self2._audit.checks[c.id || c];\n        var option = get_check_option_default(check4, self2.id, options);\n        checkQueue.defer(function(res, rej) {\n          check4.run(node, option, context3, res, rej);\n        });\n      });\n      checkQueue.then(function(results) {\n        results = results.filter(function(check4) {\n          return check4;\n        });\n        resolve({\n          type: type,\n          results: results\n        });\n      })['catch'](reject);\n    };\n    Rule.prototype.runChecksSync = function runChecksSync(type, node, options, context3) {\n      var self2 = this;\n      var results = [];\n      this[type].forEach(function(c) {\n        var check4 = self2._audit.checks[c.id || c];\n        var option = get_check_option_default(check4, self2.id, options);\n        results.push(check4.runSync(node, option, context3));\n      });\n      results = results.filter(function(check4) {\n        return check4;\n      });\n      return {\n        type: type,\n        results: results\n      };\n    };\n    Rule.prototype.run = function run2(context3) {\n      var _this4 = this;\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var resolve = arguments.length > 2 ? arguments[2] : undefined;\n      var reject = arguments.length > 3 ? arguments[3] : undefined;\n      if (options.performanceTimer) {\n        this._trackPerformance();\n      }\n      var q = queue_default();\n      var ruleResult = new rule_result_default(this);\n      var nodes;\n      try {\n        nodes = this.gatherAndMatchNodes(context3, options);\n      } catch (error) {\n        reject(new SupportError({\n          cause: error,\n          ruleId: this.id\n        }));\n        return;\n      }\n      if (options.performanceTimer) {\n        this._logGatherPerformance(nodes);\n      }\n      nodes.forEach(function(node) {\n        q.defer(function(resolveNode, rejectNode) {\n          var checkQueue = queue_default();\n          [ 'any', 'all', 'none' ].forEach(function(type) {\n            checkQueue.defer(function(res, rej) {\n              _this4.runChecks(type, node, options, context3, res, rej);\n            });\n          });\n          checkQueue.then(function(results) {\n            var result = getResult(results);\n            if (result) {\n              result.node = new dq_element_default(node.actualNode, options);\n              ruleResult.nodes.push(result);\n              if (_this4.reviewOnFail) {\n                [ 'any', 'all' ].forEach(function(type) {\n                  result[type].forEach(function(checkResult) {\n                    if (checkResult.result === false) {\n                      checkResult.result = void 0;\n                    }\n                  });\n                });\n                result.none.forEach(function(checkResult) {\n                  if (checkResult.result === true) {\n                    checkResult.result = void 0;\n                  }\n                });\n              }\n            }\n            resolveNode();\n          })['catch'](function(err2) {\n            return rejectNode(err2);\n          });\n        });\n      });\n      q.defer(function(resolve2) {\n        return setTimeout(resolve2, 0);\n      });\n      if (options.performanceTimer) {\n        this._logRulePerformance();\n      }\n      q.then(function() {\n        return resolve(ruleResult);\n      })['catch'](function(error) {\n        return reject(error);\n      });\n    };\n    Rule.prototype.runSync = function runSync2(context3) {\n      var _this5 = this;\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      if (options.performanceTimer) {\n        this._trackPerformance();\n      }\n      var ruleResult = new rule_result_default(this);\n      var nodes;\n      try {\n        nodes = this.gatherAndMatchNodes(context3, options);\n      } catch (error) {\n        throw new SupportError({\n          cause: error,\n          ruleId: this.id\n        });\n      }\n      if (options.performanceTimer) {\n        this._logGatherPerformance(nodes);\n      }\n      nodes.forEach(function(node) {\n        var results = [];\n        [ 'any', 'all', 'none' ].forEach(function(type) {\n          results.push(_this5.runChecksSync(type, node, options, context3));\n        });\n        var result = getResult(results);\n        if (result) {\n          result.node = node.actualNode ? new dq_element_default(node.actualNode, options) : null;\n          ruleResult.nodes.push(result);\n          if (_this5.reviewOnFail) {\n            [ 'any', 'all' ].forEach(function(type) {\n              result[type].forEach(function(checkResult) {\n                if (checkResult.result === false) {\n                  checkResult.result = void 0;\n                }\n              });\n            });\n            result.none.forEach(function(checkResult) {\n              if (checkResult.result === true) {\n                checkResult.result = void 0;\n              }\n            });\n          }\n        }\n      });\n      if (options.performanceTimer) {\n        this._logRulePerformance();\n      }\n      return ruleResult;\n    };\n    Rule.prototype._trackPerformance = function _trackPerformance() {\n      this._markStart = 'mark_rule_start_' + this.id;\n      this._markEnd = 'mark_rule_end_' + this.id;\n      this._markChecksStart = 'mark_runchecks_start_' + this.id;\n      this._markChecksEnd = 'mark_runchecks_end_' + this.id;\n    };\n    Rule.prototype._logGatherPerformance = function _logGatherPerformance(nodes) {\n      log_default('gather (', nodes.length, '):', performance_timer_default.timeElapsed() + 'ms');\n      performance_timer_default.mark(this._markChecksStart);\n    };\n    Rule.prototype._logRulePerformance = function _logRulePerformance() {\n      performance_timer_default.mark(this._markChecksEnd);\n      performance_timer_default.mark(this._markEnd);\n      performance_timer_default.measure('runchecks_' + this.id, this._markChecksStart, this._markChecksEnd);\n      performance_timer_default.measure('rule_' + this.id, this._markStart, this._markEnd);\n    };\n    function getResult(results) {\n      if (results.length) {\n        var hasResults = false;\n        var result = {};\n        results.forEach(function(r) {\n          var res = r.results.filter(function(result2) {\n            return result2;\n          });\n          result[r.type] = res;\n          if (res.length) {\n            hasResults = true;\n          }\n        });\n        if (hasResults) {\n          return result;\n        }\n        return null;\n      }\n    }\n    Rule.prototype.gatherAndMatchNodes = function gatherAndMatchNodes(context3, options) {\n      var _this6 = this;\n      var markMatchesStart = 'mark_matches_start_' + this.id;\n      var markMatchesEnd = 'mark_matches_end_' + this.id;\n      var nodes = this.gather(context3, options);\n      if (options.performanceTimer) {\n        performance_timer_default.mark(markMatchesStart);\n      }\n      nodes = nodes.filter(function(node) {\n        return _this6.matches(node.actualNode, node, context3);\n      });\n      if (options.performanceTimer) {\n        performance_timer_default.mark(markMatchesEnd);\n        performance_timer_default.measure('rule_' + this.id + '#matches', markMatchesStart, markMatchesEnd);\n      }\n      return nodes;\n    };\n    function findAfterChecks(rule3) {\n      return get_all_checks_default(rule3).map(function(c) {\n        var check4 = rule3._audit.checks[c.id || c];\n        return check4 && typeof check4.after === 'function' ? check4 : null;\n      }).filter(Boolean);\n    }\n    function findCheckResults(nodes, checkID) {\n      var checkResults = [];\n      nodes.forEach(function(nodeResult) {\n        var checks = get_all_checks_default(nodeResult);\n        checks.forEach(function(checkResult) {\n          if (checkResult.id === checkID) {\n            checkResult.node = nodeResult.node;\n            checkResults.push(checkResult);\n          }\n        });\n      });\n      return checkResults;\n    }\n    function filterChecks(checks) {\n      return checks.filter(function(check4) {\n        return check4.filtered !== true;\n      });\n    }\n    function sanitizeNodes(result) {\n      var checkTypes2 = [ 'any', 'all', 'none' ];\n      var nodes = result.nodes.filter(function(detail) {\n        var length = 0;\n        checkTypes2.forEach(function(type) {\n          detail[type] = filterChecks(detail[type]);\n          length += detail[type].length;\n        });\n        return length > 0;\n      });\n      if (result.pageLevel && nodes.length) {\n        nodes = [ nodes.reduce(function(a, b) {\n          if (a) {\n            checkTypes2.forEach(function(type) {\n              a[type].push.apply(a[type], b[type]);\n            });\n            return a;\n          }\n        }) ];\n      }\n      return nodes;\n    }\n    Rule.prototype.after = function after(result, options) {\n      var afterChecks = findAfterChecks(this);\n      var ruleID = this.id;\n      afterChecks.forEach(function(check4) {\n        var beforeResults = findCheckResults(result.nodes, check4.id);\n        var option = get_check_option_default(check4, ruleID, options);\n        var afterResults = check4.after(beforeResults, option);\n        beforeResults.forEach(function(item) {\n          delete item.node;\n          if (afterResults.indexOf(item) === -1) {\n            item.filtered = true;\n          }\n        });\n      });\n      result.nodes = sanitizeNodes(result);\n      return result;\n    };\n    Rule.prototype.configure = function configure2(spec) {\n      if (spec.hasOwnProperty('selector')) {\n        this.selector = spec.selector;\n      }\n      if (spec.hasOwnProperty('excludeHidden')) {\n        this.excludeHidden = typeof spec.excludeHidden === 'boolean' ? spec.excludeHidden : true;\n      }\n      if (spec.hasOwnProperty('enabled')) {\n        this.enabled = typeof spec.enabled === 'boolean' ? spec.enabled : true;\n      }\n      if (spec.hasOwnProperty('pageLevel')) {\n        this.pageLevel = typeof spec.pageLevel === 'boolean' ? spec.pageLevel : false;\n      }\n      if (spec.hasOwnProperty('reviewOnFail')) {\n        this.reviewOnFail = typeof spec.reviewOnFail === 'boolean' ? spec.reviewOnFail : false;\n      }\n      if (spec.hasOwnProperty('any')) {\n        this.any = spec.any;\n      }\n      if (spec.hasOwnProperty('all')) {\n        this.all = spec.all;\n      }\n      if (spec.hasOwnProperty('none')) {\n        this.none = spec.none;\n      }\n      if (spec.hasOwnProperty('tags')) {\n        this.tags = spec.tags;\n      }\n      if (spec.hasOwnProperty('matches')) {\n        this.matches = createExecutionContext(spec.matches);\n      }\n      if (spec.impact) {\n        assert_default(constants_default.impact.includes(spec.impact), 'Impact '.concat(spec.impact, ' is not a valid impact'));\n        this.impact = spec.impact;\n      }\n    };\n    var rule_default = Rule;\n    var dot = __toModule(require_doT());\n    var dotRegex = /\\{\\{.+?\\}\\}/g;\n    function getDefaultOrigin() {\n      if (window.origin) {\n        return window.origin;\n      }\n      if (window.location && window.location.origin) {\n        return window.location.origin;\n      }\n    }\n    function getDefaultConfiguration(audit3) {\n      var config;\n      if (audit3) {\n        config = clone_default(audit3);\n        config.commons = audit3.commons;\n      } else {\n        config = {};\n      }\n      config.reporter = config.reporter || null;\n      config.noHtml = config.noHtml || false;\n      if (!config.allowedOrigins) {\n        var defaultOrigin = getDefaultOrigin();\n        config.allowedOrigins = defaultOrigin ? [ defaultOrigin ] : [];\n      }\n      config.rules = config.rules || [];\n      config.checks = config.checks || [];\n      config.data = _extends({\n        checks: {},\n        rules: {}\n      }, config.data);\n      return config;\n    }\n    function unpackToObject(collection, audit3, method) {\n      var i, l;\n      for (i = 0, l = collection.length; i < l; i++) {\n        audit3[method](collection[i]);\n      }\n    }\n    var mergeCheckLocale = function mergeCheckLocale(a, b) {\n      var pass = b.pass, fail = b.fail;\n      if (typeof pass === 'string' && dotRegex.test(pass)) {\n        pass = dot['default'].compile(pass);\n      }\n      if (typeof fail === 'string' && dotRegex.test(fail)) {\n        fail = dot['default'].compile(fail);\n      }\n      return _extends({}, a, {\n        messages: {\n          pass: pass || a.messages.pass,\n          fail: fail || a.messages.fail,\n          incomplete: _typeof(a.messages.incomplete) === 'object' ? _extends({}, a.messages.incomplete, b.incomplete) : b.incomplete\n        }\n      });\n    };\n    var mergeRuleLocale = function mergeRuleLocale(a, b) {\n      var help = b.help, description = b.description;\n      if (typeof help === 'string' && dotRegex.test(help)) {\n        help = dot['default'].compile(help);\n      }\n      if (typeof description === 'string' && dotRegex.test(description)) {\n        description = dot['default'].compile(description);\n      }\n      return _extends({}, a, {\n        help: help || a.help,\n        description: description || a.description\n      });\n    };\n    var mergeFailureMessage = function mergeFailureMessage(a, b) {\n      var failureMessage = b.failureMessage;\n      if (typeof failureMessage === 'string' && dotRegex.test(failureMessage)) {\n        failureMessage = dot['default'].compile(failureMessage);\n      }\n      return _extends({}, a, {\n        failureMessage: failureMessage || a.failureMessage\n      });\n    };\n    var mergeFallbackMessage = function mergeFallbackMessage(a, b) {\n      if (typeof b === 'string' && dotRegex.test(b)) {\n        b = dot['default'].compile(b);\n      }\n      return b || a;\n    };\n    var Audit = function() {\n      function Audit(audit3) {\n        _classCallCheck(this, Audit);\n        this.lang = 'en';\n        this.defaultConfig = audit3;\n        this.standards = standards_default;\n        this._init();\n        this._defaultLocale = null;\n      }\n      _createClass(Audit, [ {\n        key: '_setDefaultLocale',\n        value: function _setDefaultLocale() {\n          if (this._defaultLocale) {\n            return;\n          }\n          var locale = {\n            checks: {},\n            rules: {},\n            failureSummaries: {},\n            incompleteFallbackMessage: '',\n            lang: this.lang\n          };\n          var checkIDs = Object.keys(this.data.checks);\n          for (var _i24 = 0; _i24 < checkIDs.length; _i24++) {\n            var id = checkIDs[_i24];\n            var check4 = this.data.checks[id];\n            var _check4$messages = check4.messages, pass = _check4$messages.pass, fail = _check4$messages.fail, incomplete = _check4$messages.incomplete;\n            locale.checks[id] = {\n              pass: pass,\n              fail: fail,\n              incomplete: incomplete\n            };\n          }\n          var ruleIDs = Object.keys(this.data.rules);\n          for (var _i25 = 0; _i25 < ruleIDs.length; _i25++) {\n            var _id = ruleIDs[_i25];\n            var rule3 = this.data.rules[_id];\n            var description = rule3.description, help = rule3.help;\n            locale.rules[_id] = {\n              description: description,\n              help: help\n            };\n          }\n          var failureSummaries = Object.keys(this.data.failureSummaries);\n          for (var _i26 = 0; _i26 < failureSummaries.length; _i26++) {\n            var type = failureSummaries[_i26];\n            var failureSummary2 = this.data.failureSummaries[type];\n            var failureMessage = failureSummary2.failureMessage;\n            locale.failureSummaries[type] = {\n              failureMessage: failureMessage\n            };\n          }\n          locale.incompleteFallbackMessage = this.data.incompleteFallbackMessage;\n          this._defaultLocale = locale;\n        }\n      }, {\n        key: '_resetLocale',\n        value: function _resetLocale() {\n          var defaultLocale = this._defaultLocale;\n          if (!defaultLocale) {\n            return;\n          }\n          this.applyLocale(defaultLocale);\n        }\n      }, {\n        key: '_applyCheckLocale',\n        value: function _applyCheckLocale(checks) {\n          var keys = Object.keys(checks);\n          for (var _i27 = 0; _i27 < keys.length; _i27++) {\n            var id = keys[_i27];\n            if (!this.data.checks[id]) {\n              throw new Error('Locale provided for unknown check: \"'.concat(id, '\"'));\n            }\n            this.data.checks[id] = mergeCheckLocale(this.data.checks[id], checks[id]);\n          }\n        }\n      }, {\n        key: '_applyRuleLocale',\n        value: function _applyRuleLocale(rules) {\n          var keys = Object.keys(rules);\n          for (var _i28 = 0; _i28 < keys.length; _i28++) {\n            var id = keys[_i28];\n            if (!this.data.rules[id]) {\n              throw new Error('Locale provided for unknown rule: \"'.concat(id, '\"'));\n            }\n            this.data.rules[id] = mergeRuleLocale(this.data.rules[id], rules[id]);\n          }\n        }\n      }, {\n        key: '_applyFailureSummaries',\n        value: function _applyFailureSummaries(messages) {\n          var keys = Object.keys(messages);\n          for (var _i29 = 0; _i29 < keys.length; _i29++) {\n            var key = keys[_i29];\n            if (!this.data.failureSummaries[key]) {\n              throw new Error('Locale provided for unknown failureMessage: \"'.concat(key, '\"'));\n            }\n            this.data.failureSummaries[key] = mergeFailureMessage(this.data.failureSummaries[key], messages[key]);\n          }\n        }\n      }, {\n        key: 'applyLocale',\n        value: function applyLocale(locale) {\n          this._setDefaultLocale();\n          if (locale.checks) {\n            this._applyCheckLocale(locale.checks);\n          }\n          if (locale.rules) {\n            this._applyRuleLocale(locale.rules);\n          }\n          if (locale.failureSummaries) {\n            this._applyFailureSummaries(locale.failureSummaries, 'failureSummaries');\n          }\n          if (locale.incompleteFallbackMessage) {\n            this.data.incompleteFallbackMessage = mergeFallbackMessage(this.data.incompleteFallbackMessage, locale.incompleteFallbackMessage);\n          }\n          if (locale.lang) {\n            this.lang = locale.lang;\n          }\n        }\n      }, {\n        key: 'setAllowedOrigins',\n        value: function setAllowedOrigins(allowedOrigins) {\n          var defaultOrigin = getDefaultOrigin();\n          this.allowedOrigins = [];\n          var _iterator2 = _createForOfIteratorHelper(allowedOrigins), _step2;\n          try {\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {\n              var origin = _step2.value;\n              if (origin === constants_default.allOrigins) {\n                this.allowedOrigins = [ '*' ];\n                return;\n              } else if (origin !== constants_default.sameOrigin) {\n                this.allowedOrigins.push(origin);\n              } else if (defaultOrigin) {\n                this.allowedOrigins.push(defaultOrigin);\n              }\n            }\n          } catch (err) {\n            _iterator2.e(err);\n          } finally {\n            _iterator2.f();\n          }\n        }\n      }, {\n        key: '_init',\n        value: function _init() {\n          var audit3 = getDefaultConfiguration(this.defaultConfig);\n          this.lang = audit3.lang || 'en';\n          this.reporter = audit3.reporter;\n          this.commands = {};\n          this.rules = [];\n          this.checks = {};\n          this.brand = 'axe';\n          this.application = 'axeAPI';\n          this.tagExclude = [ 'experimental' ];\n          this.noHtml = audit3.noHtml;\n          this.allowedOrigins = audit3.allowedOrigins;\n          unpackToObject(audit3.rules, this, 'addRule');\n          unpackToObject(audit3.checks, this, 'addCheck');\n          this.data = {};\n          this.data.checks = audit3.data && audit3.data.checks || {};\n          this.data.rules = audit3.data && audit3.data.rules || {};\n          this.data.failureSummaries = audit3.data && audit3.data.failureSummaries || {};\n          this.data.incompleteFallbackMessage = audit3.data && audit3.data.incompleteFallbackMessage || '';\n          this._constructHelpUrls();\n        }\n      }, {\n        key: 'registerCommand',\n        value: function registerCommand(command) {\n          this.commands[command.id] = command.callback;\n        }\n      }, {\n        key: 'addRule',\n        value: function addRule(spec) {\n          if (spec.metadata) {\n            this.data.rules[spec.id] = spec.metadata;\n          }\n          var rule3 = this.getRule(spec.id);\n          if (rule3) {\n            rule3.configure(spec);\n          } else {\n            this.rules.push(new rule_default(spec, this));\n          }\n        }\n      }, {\n        key: 'addCheck',\n        value: function addCheck(spec) {\n          var metadata = spec.metadata;\n          if (_typeof(metadata) === 'object') {\n            this.data.checks[spec.id] = metadata;\n            if (_typeof(metadata.messages) === 'object') {\n              Object.keys(metadata.messages).filter(function(prop) {\n                return metadata.messages.hasOwnProperty(prop) && typeof metadata.messages[prop] === 'string';\n              }).forEach(function(prop) {\n                if (metadata.messages[prop].indexOf('function') === 0) {\n                  metadata.messages[prop] = new Function('return ' + metadata.messages[prop] + ';')();\n                }\n              });\n            }\n          }\n          if (this.checks[spec.id]) {\n            this.checks[spec.id].configure(spec);\n          } else {\n            this.checks[spec.id] = new check_default(spec);\n          }\n        }\n      }, {\n        key: 'run',\n        value: function run(context3, options, resolve, reject) {\n          this.normalizeOptions(options);\n          axe._selectCache = [];\n          var allRulesToRun = getRulesToRun(this.rules, context3, options);\n          var runNowRules = allRulesToRun.now;\n          var runLaterRules = allRulesToRun.later;\n          var nowRulesQueue = queue_default();\n          runNowRules.forEach(function(rule3) {\n            nowRulesQueue.defer(getDefferedRule(rule3, context3, options));\n          });\n          var preloaderQueue = queue_default();\n          if (runLaterRules.length) {\n            preloaderQueue.defer(function(resolve2) {\n              preload_default(options).then(function(assets) {\n                return resolve2(assets);\n              })['catch'](function(err2) {\n                console.warn('Couldn\\'t load preload assets: ', err2);\n                resolve2(void 0);\n              });\n            });\n          }\n          var queueForNowRulesAndPreloader = queue_default();\n          queueForNowRulesAndPreloader.defer(nowRulesQueue);\n          queueForNowRulesAndPreloader.defer(preloaderQueue);\n          queueForNowRulesAndPreloader.then(function(nowRulesAndPreloaderResults) {\n            var assetsFromQueue = nowRulesAndPreloaderResults.pop();\n            if (assetsFromQueue && assetsFromQueue.length) {\n              var assets = assetsFromQueue[0];\n              if (assets) {\n                context3 = _extends({}, context3, assets);\n              }\n            }\n            var nowRulesResults = nowRulesAndPreloaderResults[0];\n            if (!runLaterRules.length) {\n              axe._selectCache = void 0;\n              resolve(nowRulesResults.filter(function(result) {\n                return !!result;\n              }));\n              return;\n            }\n            var laterRulesQueue = queue_default();\n            runLaterRules.forEach(function(rule3) {\n              var deferredRule = getDefferedRule(rule3, context3, options);\n              laterRulesQueue.defer(deferredRule);\n            });\n            laterRulesQueue.then(function(laterRuleResults) {\n              axe._selectCache = void 0;\n              resolve(nowRulesResults.concat(laterRuleResults).filter(function(result) {\n                return !!result;\n              }));\n            })['catch'](reject);\n          })['catch'](reject);\n        }\n      }, {\n        key: 'after',\n        value: function after(results, options) {\n          var rules = this.rules;\n          return results.map(function(ruleResult) {\n            var rule3 = find_by_default(rules, 'id', ruleResult.id);\n            if (!rule3) {\n              throw new Error('Result for unknown rule. You may be running mismatch axe-core versions');\n            }\n            return rule3.after(ruleResult, options);\n          });\n        }\n      }, {\n        key: 'getRule',\n        value: function getRule(ruleId) {\n          return this.rules.find(function(rule3) {\n            return rule3.id === ruleId;\n          });\n        }\n      }, {\n        key: 'normalizeOptions',\n        value: function normalizeOptions(options) {\n          var audit3 = this;\n          var tags = [];\n          var ruleIds = [];\n          audit3.rules.forEach(function(rule3) {\n            ruleIds.push(rule3.id);\n            rule3.tags.forEach(function(tag) {\n              if (!tags.includes(tag)) {\n                tags.push(tag);\n              }\n            });\n          });\n          if (_typeof(options.runOnly) === 'object') {\n            if (Array.isArray(options.runOnly)) {\n              var hasTag = options.runOnly.find(function(value) {\n                return tags.includes(value);\n              });\n              var hasRule = options.runOnly.find(function(value) {\n                return ruleIds.includes(value);\n              });\n              if (hasTag && hasRule) {\n                throw new Error('runOnly cannot be both rules and tags');\n              }\n              if (hasRule) {\n                options.runOnly = {\n                  type: 'rule',\n                  values: options.runOnly\n                };\n              } else {\n                options.runOnly = {\n                  type: 'tag',\n                  values: options.runOnly\n                };\n              }\n            }\n            var only = options.runOnly;\n            if (only.value && !only.values) {\n              only.values = only.value;\n              delete only.value;\n            }\n            if (!Array.isArray(only.values) || only.values.length === 0) {\n              throw new Error('runOnly.values must be a non-empty array');\n            }\n            if ([ 'rule', 'rules' ].includes(only.type)) {\n              only.type = 'rule';\n              only.values.forEach(function(ruleId) {\n                if (!ruleIds.includes(ruleId)) {\n                  throw new Error('unknown rule `' + ruleId + '` in options.runOnly');\n                }\n              });\n            } else if ([ 'tag', 'tags', void 0 ].includes(only.type)) {\n              only.type = 'tag';\n              var unmatchedTags = only.values.filter(function(tag) {\n                return !tags.includes(tag);\n              });\n              if (unmatchedTags.length !== 0) {\n                log_default('Could not find tags `' + unmatchedTags.join('`, `') + '`');\n              }\n            } else {\n              throw new Error('Unknown runOnly type \\''.concat(only.type, '\\''));\n            }\n          }\n          if (_typeof(options.rules) === 'object') {\n            Object.keys(options.rules).forEach(function(ruleId) {\n              if (!ruleIds.includes(ruleId)) {\n                throw new Error('unknown rule `' + ruleId + '` in options.rules');\n              }\n            });\n          }\n          return options;\n        }\n      }, {\n        key: 'setBranding',\n        value: function setBranding(branding) {\n          var previous = {\n            brand: this.brand,\n            application: this.application\n          };\n          if (branding && branding.hasOwnProperty('brand') && branding.brand && typeof branding.brand === 'string') {\n            this.brand = branding.brand;\n          }\n          if (branding && branding.hasOwnProperty('application') && branding.application && typeof branding.application === 'string') {\n            this.application = branding.application;\n          }\n          this._constructHelpUrls(previous);\n        }\n      }, {\n        key: '_constructHelpUrls',\n        value: function _constructHelpUrls() {\n          var _this7 = this;\n          var previous = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n          var version = (axe.version.match(/^[1-9][0-9]*\\.[0-9]+/) || [ 'x.y' ])[0];\n          this.rules.forEach(function(rule3) {\n            if (!_this7.data.rules[rule3.id]) {\n              _this7.data.rules[rule3.id] = {};\n            }\n            var metaData = _this7.data.rules[rule3.id];\n            if (typeof metaData.helpUrl !== 'string' || previous && metaData.helpUrl === getHelpUrl(previous, rule3.id, version)) {\n              metaData.helpUrl = getHelpUrl(_this7, rule3.id, version);\n            }\n          });\n        }\n      }, {\n        key: 'resetRulesAndChecks',\n        value: function resetRulesAndChecks() {\n          this._init();\n          this._resetLocale();\n        }\n      } ]);\n      return Audit;\n    }();\n    function getRulesToRun(rules, context3, options) {\n      var base = {\n        now: [],\n        later: []\n      };\n      var splitRules = rules.reduce(function(out, rule3) {\n        if (!rule_should_run_default(rule3, context3, options)) {\n          return out;\n        }\n        if (rule3.preload) {\n          out.later.push(rule3);\n          return out;\n        }\n        out.now.push(rule3);\n        return out;\n      }, base);\n      return splitRules;\n    }\n    function getDefferedRule(rule3, context3, options) {\n      if (options.performanceTimer) {\n        performance_timer_default.mark('mark_rule_start_' + rule3.id);\n      }\n      return function(resolve, reject) {\n        rule3.run(context3, options, function(ruleResult) {\n          resolve(ruleResult);\n        }, function(err2) {\n          if (!options.debug) {\n            var errResult = Object.assign(new rule_result_default(rule3), {\n              result: constants_default.CANTTELL,\n              description: 'An error occured while running this rule',\n              message: err2.message,\n              stack: err2.stack,\n              error: err2,\n              errorNode: err2.errorNode\n            });\n            resolve(errResult);\n          } else {\n            reject(err2);\n          }\n        });\n      };\n    }\n    function getHelpUrl(_ref66, ruleId, version) {\n      var brand = _ref66.brand, application = _ref66.application, lang = _ref66.lang;\n      return constants_default.helpUrlBase + brand + '/' + (version || axe.version.substring(0, axe.version.lastIndexOf('.'))) + '/' + ruleId + '?application=' + encodeURIComponent(application) + (lang && lang !== 'en' ? '&lang=' + encodeURIComponent(lang) : '');\n    }\n    var audit_default = Audit;\n    function pushUniqueFrame(collection, frame) {\n      if (is_hidden_default(frame)) {\n        return;\n      }\n      var fr = find_by_default(collection, 'node', frame);\n      if (!fr) {\n        collection.push({\n          node: frame,\n          include: [],\n          exclude: []\n        });\n      }\n    }\n    function pushUniqueFrameSelector(context3, type, selectorArray) {\n      context3.frames = context3.frames || [];\n      var result, frame;\n      var frames = document.querySelectorAll(selectorArray.shift());\n      frameloop: for (var i = 0, l = frames.length; i < l; i++) {\n        frame = frames[i];\n        for (var j = 0, l2 = context3.frames.length; j < l2; j++) {\n          if (context3.frames[j].node === frame) {\n            context3.frames[j][type].push(selectorArray);\n            break frameloop;\n          }\n        }\n        result = {\n          node: frame,\n          include: [],\n          exclude: []\n        };\n        if (selectorArray) {\n          result[type].push(selectorArray);\n        }\n        context3.frames.push(result);\n      }\n    }\n    function normalizeContext(context3) {\n      if (context3 && _typeof(context3) === 'object' || context3 instanceof window.NodeList) {\n        if (context3 instanceof window.Node) {\n          return {\n            include: [ context3 ],\n            exclude: []\n          };\n        }\n        if (context3.hasOwnProperty('include') || context3.hasOwnProperty('exclude')) {\n          return {\n            include: context3.include && +context3.include.length ? context3.include : [ document ],\n            exclude: context3.exclude || []\n          };\n        }\n        if (context3.length === +context3.length) {\n          return {\n            include: context3,\n            exclude: []\n          };\n        }\n      }\n      if (typeof context3 === 'string') {\n        return {\n          include: [ context3 ],\n          exclude: []\n        };\n      }\n      return {\n        include: [ document ],\n        exclude: []\n      };\n    }\n    function parseSelectorArray(context3, type) {\n      var item, result = [], nodeList;\n      for (var i = 0, l = context3[type].length; i < l; i++) {\n        item = context3[type][i];\n        if (typeof item === 'string') {\n          nodeList = Array.from(document.querySelectorAll(item));\n          result = result.concat(nodeList.map(function(node) {\n            return get_node_from_tree_default(node);\n          }));\n          break;\n        } else if (item && item.length && !(item instanceof window.Node)) {\n          if (item.length > 1) {\n            pushUniqueFrameSelector(context3, type, item);\n          } else {\n            nodeList = Array.from(document.querySelectorAll(item[0]));\n            result = result.concat(nodeList.map(function(node) {\n              return get_node_from_tree_default(node);\n            }));\n          }\n        } else if (item instanceof window.Node) {\n          if (item.documentElement instanceof window.Node) {\n            result.push(context3.flatTree[0]);\n          } else {\n            result.push(get_node_from_tree_default(item));\n          }\n        }\n      }\n      return result.filter(function(r) {\n        return r;\n      });\n    }\n    function validateContext(context3) {\n      if (context3.include.length === 0) {\n        if (context3.frames.length === 0) {\n          var env = _respondable.isInFrame() ? 'frame' : 'page';\n          return new Error('No elements found for include in ' + env + ' Context');\n        }\n        context3.frames.forEach(function(frame, i) {\n          if (frame.include.length === 0) {\n            return new Error('No elements found for include in Context of frame ' + i);\n          }\n        });\n      }\n    }\n    function getRootNode2(_ref67) {\n      var include = _ref67.include, exclude = _ref67.exclude;\n      var selectors = Array.from(include).concat(Array.from(exclude));\n      for (var i = 0; i < selectors.length; ++i) {\n        var item = selectors[i];\n        if (item instanceof window.Element) {\n          return item.ownerDocument.documentElement;\n        }\n        if (item instanceof window.Document) {\n          return item.documentElement;\n        }\n      }\n      return document.documentElement;\n    }\n    function Context(spec) {\n      var _this8 = this;\n      this.frames = [];\n      this.initiator = spec && typeof spec.initiator === 'boolean' ? spec.initiator : true;\n      this.focusable = spec && typeof spec.focusable === 'boolean' ? spec.focusable : true;\n      this.boundingClientRect = spec && _typeof(spec.boundingClientRect) === 'object' ? spec.boundingClientRect : {};\n      this.page = false;\n      spec = normalizeContext(spec);\n      this.flatTree = get_flattened_tree_default(getRootNode2(spec));\n      this.exclude = spec.exclude;\n      this.include = spec.include;\n      this.include = parseSelectorArray(this, 'include');\n      this.exclude = parseSelectorArray(this, 'exclude');\n      select_default('frame, iframe', this).forEach(function(frame) {\n        if (is_node_in_context_default(frame, _this8)) {\n          pushUniqueFrame(_this8.frames, frame.actualNode);\n        }\n      });\n      if (this.include.length === 1 && this.include[0].actualNode === document.documentElement) {\n        this.page = true;\n      }\n      var err2 = validateContext(this);\n      if (err2 instanceof Error) {\n        throw err2;\n      }\n      if (!Array.isArray(this.include)) {\n        this.include = Array.from(this.include);\n      }\n      this.include.sort(node_sorter_default);\n    }\n    var context_default = Context;\n    var imports_exports = {};\n    __export(imports_exports, {\n      CssSelectorParser: function CssSelectorParser() {\n        return css_selector_parser2.CssSelectorParser;\n      },\n      doT: function doT() {\n        return dot2['default'];\n      },\n      emojiRegexText: function emojiRegexText() {\n        return emoji_regex3['default'];\n      },\n      memoize: function memoize() {\n        return memoizee2['default'];\n      }\n    });\n    var css_selector_parser2 = __toModule(require_lib());\n    var dot2 = __toModule(require_doT());\n    var emoji_regex3 = __toModule(require_emoji_regex());\n    var memoizee2 = __toModule(require_memoizee());\n    var es6_promise = __toModule(require_es6_promise());\n    var typedarray = __toModule(require_typedarray());\n    var weakmap_polyfill = __toModule(require_weakmap_polyfill());\n    if (!('Promise' in window)) {\n      es6_promise['default'].polyfill();\n    }\n    if (!('Uint32Array' in window)) {\n      window.Uint32Array = typedarray.Uint32Array;\n    }\n    if (window.Uint32Array) {\n      if (!('some' in window.Uint32Array.prototype)) {\n        Object.defineProperty(window.Uint32Array.prototype, 'some', {\n          value: Array.prototype.some\n        });\n      }\n      if (!('reduce' in window.Uint32Array.prototype)) {\n        Object.defineProperty(window.Uint32Array.prototype, 'reduce', {\n          value: Array.prototype.reduce\n        });\n      }\n    }\n    function cleanup(resolve, reject) {\n      resolve = resolve || function res() {};\n      reject = reject || axe.log;\n      if (!axe._audit) {\n        throw new Error('No audit configured');\n      }\n      var q = axe.utils.queue();\n      var cleanupErrors = [];\n      Object.keys(axe.plugins).forEach(function(key) {\n        q.defer(function(res) {\n          var rej = function rej2(err2) {\n            cleanupErrors.push(err2);\n            res();\n          };\n          try {\n            axe.plugins[key].cleanup(res, rej);\n          } catch (err2) {\n            rej(err2);\n          }\n        });\n      });\n      var flattenedTree = axe.utils.getFlattenedTree(document.body);\n      axe.utils.querySelectorAll(flattenedTree, 'iframe, frame').forEach(function(node) {\n        q.defer(function(res, rej) {\n          return axe.utils.sendCommandToFrame(node.actualNode, {\n            command: 'cleanup-plugin'\n          }, res, rej);\n        });\n      });\n      q.then(function(results) {\n        if (cleanupErrors.length === 0) {\n          resolve(results);\n        } else {\n          reject(cleanupErrors);\n        }\n      })['catch'](reject);\n    }\n    var cleanup_default = cleanup;\n    var reporters = {};\n    var defaultReporter;\n    function hasReporter(reporterName) {\n      return reporters.hasOwnProperty(reporterName);\n    }\n    function getReporter(reporter4) {\n      if (typeof reporter4 === 'string' && reporters[reporter4]) {\n        return reporters[reporter4];\n      }\n      if (typeof reporter4 === 'function') {\n        return reporter4;\n      }\n      return defaultReporter;\n    }\n    function addReporter(name, cb, isDefault) {\n      reporters[name] = cb;\n      if (isDefault) {\n        defaultReporter = cb;\n      }\n    }\n    function configure3(spec) {\n      var audit3;\n      audit3 = axe._audit;\n      if (!audit3) {\n        throw new Error('No audit configured');\n      }\n      if (spec.axeVersion || spec.ver) {\n        var specVersion = spec.axeVersion || spec.ver;\n        if (!/^\\d+\\.\\d+\\.\\d+(-canary)?/.test(specVersion)) {\n          throw new Error('Invalid configured version '.concat(specVersion));\n        }\n        var _specVersion$split = specVersion.split('-'), _specVersion$split2 = _slicedToArray(_specVersion$split, 2), version = _specVersion$split2[0], canary = _specVersion$split2[1];\n        var _version$split$map = version.split('.').map(Number), _version$split$map2 = _slicedToArray(_version$split$map, 3), major = _version$split$map2[0], minor = _version$split$map2[1], patch = _version$split$map2[2];\n        var _axe$version$split = axe.version.split('-'), _axe$version$split2 = _slicedToArray(_axe$version$split, 2), axeVersion = _axe$version$split2[0], axeCanary = _axe$version$split2[1];\n        var _axeVersion$split$map = axeVersion.split('.').map(Number), _axeVersion$split$map2 = _slicedToArray(_axeVersion$split$map, 3), axeMajor = _axeVersion$split$map2[0], axeMinor = _axeVersion$split$map2[1], axePatch = _axeVersion$split$map2[2];\n        if (major !== axeMajor || axeMinor < minor || axeMinor === minor && axePatch < patch || major === axeMajor && minor === axeMinor && patch === axePatch && canary && canary !== axeCanary) {\n          throw new Error('Configured version '.concat(specVersion, ' is not compatible with current axe version ').concat(axe.version));\n        }\n      }\n      if (spec.reporter && (typeof spec.reporter === 'function' || hasReporter(spec.reporter))) {\n        audit3.reporter = spec.reporter;\n      }\n      if (spec.checks) {\n        if (!Array.isArray(spec.checks)) {\n          throw new TypeError('Checks property must be an array');\n        }\n        spec.checks.forEach(function(check4) {\n          if (!check4.id) {\n            throw new TypeError('Configured check '.concat(JSON.stringify(check4), ' is invalid. Checks must be an object with at least an id property'));\n          }\n          audit3.addCheck(check4);\n        });\n      }\n      var modifiedRules = [];\n      if (spec.rules) {\n        if (!Array.isArray(spec.rules)) {\n          throw new TypeError('Rules property must be an array');\n        }\n        spec.rules.forEach(function(rule3) {\n          if (!rule3.id) {\n            throw new TypeError('Configured rule '.concat(JSON.stringify(rule3), ' is invalid. Rules must be an object with at least an id property'));\n          }\n          modifiedRules.push(rule3.id);\n          audit3.addRule(rule3);\n        });\n      }\n      if (spec.disableOtherRules) {\n        audit3.rules.forEach(function(rule3) {\n          if (modifiedRules.includes(rule3.id) === false) {\n            rule3.enabled = false;\n          }\n        });\n      }\n      if (typeof spec.branding !== 'undefined') {\n        audit3.setBranding(spec.branding);\n      } else {\n        audit3._constructHelpUrls();\n      }\n      if (spec.tagExclude) {\n        audit3.tagExclude = spec.tagExclude;\n      }\n      if (spec.locale) {\n        audit3.applyLocale(spec.locale);\n      }\n      if (spec.standards) {\n        configureStandards(spec.standards);\n      }\n      if (spec.noHtml) {\n        audit3.noHtml = true;\n      }\n      if (spec.allowedOrigins) {\n        if (!Array.isArray(spec.allowedOrigins)) {\n          throw new TypeError('Allowed origins property must be an array');\n        }\n        if (spec.allowedOrigins.includes('*')) {\n          throw new Error('\"*\" is not allowed. Use \"'.concat(constants_default.allOrigins, '\" instead'));\n        }\n        audit3.setAllowedOrigins(spec.allowedOrigins);\n      }\n    }\n    var configure_default = configure3;\n    function frameMessenger2(frameHandler) {\n      _respondable.updateMessenger(frameHandler);\n    }\n    function getRules(tags) {\n      tags = tags || [];\n      var matchingRules = !tags.length ? axe._audit.rules : axe._audit.rules.filter(function(item) {\n        return !!tags.filter(function(tag) {\n          return item.tags.indexOf(tag) !== -1;\n        }).length;\n      });\n      var ruleData = axe._audit.data.rules || {};\n      return matchingRules.map(function(matchingRule) {\n        var rd = ruleData[matchingRule.id] || {};\n        return {\n          ruleId: matchingRule.id,\n          description: rd.description,\n          help: rd.help,\n          helpUrl: rd.helpUrl,\n          tags: matchingRule.tags\n        };\n      });\n    }\n    var get_rules_default = getRules;\n    function teardown() {\n      if (cache_default.get('globalDocumentSet')) {\n        document = null;\n      }\n      if (cache_default.get('globalWindowSet')) {\n        window = null;\n      }\n      axe._memoizedFns.forEach(function(fn) {\n        return fn.clear();\n      });\n      cache_default.clear();\n      axe._tree = void 0;\n      axe._selectorData = void 0;\n      axe._selectCache = void 0;\n    }\n    var teardown_default = teardown;\n    function runRules(context3, options, resolve, reject) {\n      try {\n        context3 = new context_default(context3);\n        axe._tree = context3.flatTree;\n        axe._selectorData = _getSelectorData(context3.flatTree);\n      } catch (e) {\n        teardown_default();\n        return reject(e);\n      }\n      var q = queue_default();\n      var audit3 = axe._audit;\n      if (options.performanceTimer) {\n        performance_timer_default.auditStart();\n      }\n      if (context3.frames.length && options.iframes !== false) {\n        q.defer(function(res, rej) {\n          collect_results_from_frames_default(context3, options, 'rules', null, res, rej);\n        });\n      }\n      q.defer(function(res, rej) {\n        audit3.run(context3, options, res, rej);\n      });\n      q.then(function(data2) {\n        try {\n          if (options.performanceTimer) {\n            performance_timer_default.auditEnd();\n          }\n          var results = merge_results_default(data2.map(function(results2) {\n            return {\n              results: results2\n            };\n          }));\n          if (context3.initiator) {\n            results = audit3.after(results, options);\n            results.forEach(publish_metadata_default);\n            results = results.map(finalize_result_default);\n          }\n          try {\n            resolve(results, teardown_default);\n          } catch (e) {\n            teardown_default();\n            log_default(e);\n          }\n        } catch (e) {\n          teardown_default();\n          reject(e);\n        }\n      })['catch'](function(e) {\n        teardown_default();\n        reject(e);\n      });\n    }\n    var run_rules_default = runRules;\n    function runCommand(data2, keepalive, callback) {\n      var resolve = callback;\n      var reject = function reject2(err2) {\n        if (err2 instanceof Error === false) {\n          err2 = new Error(err2);\n        }\n        callback(err2);\n      };\n      var context3 = data2 && data2.context || {};\n      if (context3.hasOwnProperty('include') && !context3.include.length) {\n        context3.include = [ document ];\n      }\n      var options = data2 && data2.options || {};\n      switch (data2.command) {\n       case 'rules':\n        return run_rules_default(context3, options, function(results, cleanup5) {\n          resolve(results);\n          cleanup5();\n        }, reject);\n\n       case 'cleanup-plugin':\n        return cleanup_default(resolve, reject);\n\n       default:\n        if (axe._audit && axe._audit.commands && axe._audit.commands[data2.command]) {\n          return axe._audit.commands[data2.command](data2, callback);\n        }\n      }\n    }\n    if (window.top !== window) {\n      _respondable.subscribe('axe.start', runCommand);\n      _respondable.subscribe('axe.ping', function(data2, keepalive, respond) {\n        respond({\n          axe: true\n        });\n      });\n    }\n    function load(audit3) {\n      axe._audit = new audit_default(audit3);\n    }\n    var load_default = load;\n    function Plugin(spec) {\n      this._run = spec.run;\n      this._collect = spec.collect;\n      this._registry = {};\n      spec.commands.forEach(function(command) {\n        axe._audit.registerCommand(command);\n      });\n    }\n    Plugin.prototype.run = function run3() {\n      return this._run.apply(this, arguments);\n    };\n    Plugin.prototype.collect = function collect() {\n      return this._collect.apply(this, arguments);\n    };\n    Plugin.prototype.cleanup = function cleanup3(done) {\n      var q = axe.utils.queue();\n      var that = this;\n      Object.keys(this._registry).forEach(function(key) {\n        q.defer(function(_done) {\n          that._registry[key].cleanup(_done);\n        });\n      });\n      q.then(done);\n    };\n    Plugin.prototype.add = function add(impl) {\n      this._registry[impl.id] = impl;\n    };\n    function registerPlugin(plugin) {\n      axe.plugins[plugin.id] = new Plugin(plugin);\n    }\n    var plugins_default = registerPlugin;\n    function reset() {\n      var audit3 = axe._audit;\n      if (!audit3) {\n        throw new Error('No audit configured');\n      }\n      audit3.resetRulesAndChecks();\n      resetStandards();\n    }\n    var reset_default = reset;\n    function runVirtualRule(ruleId, vNode) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      options.reporter = options.reporter || axe._audit.reporter || 'v1';\n      axe._selectorData = {};\n      if (!(vNode instanceof abstract_virtual_node_default)) {\n        vNode = new serial_virtual_node_default(vNode);\n      }\n      var rule3 = get_rule_default(ruleId);\n      if (!rule3) {\n        throw new Error('unknown rule `' + ruleId + '`');\n      }\n      rule3 = Object.create(rule3, {\n        excludeHidden: {\n          value: false\n        }\n      });\n      var context3 = {\n        initiator: true,\n        include: [ vNode ]\n      };\n      var rawResults = rule3.runSync(context3, options);\n      publish_metadata_default(rawResults);\n      finalize_result_default(rawResults);\n      var results = aggregate_result_default([ rawResults ]);\n      results.violations.forEach(function(result) {\n        return result.nodes.forEach(function(nodeResult) {\n          nodeResult.failureSummary = failure_summary_default(nodeResult);\n        });\n      });\n      return _extends({}, get_environment_data_default(), results, {\n        toolOptions: options\n      });\n    }\n    var run_virtual_rule_default = runVirtualRule;\n    function isContext(potential) {\n      switch (true) {\n       case typeof potential === 'string':\n       case Array.isArray(potential):\n       case window.Node && potential instanceof window.Node:\n       case window.NodeList && potential instanceof window.NodeList:\n        return true;\n\n       case _typeof(potential) !== 'object':\n        return false;\n\n       case potential.include !== void 0:\n       case potential.exclude !== void 0:\n       case typeof potential.length === 'number':\n        return true;\n\n       default:\n        return false;\n      }\n    }\n    var noop2 = function noop3() {};\n    function normalizeRunParams(context3, options, callback) {\n      var typeErr = new TypeError('axe.run arguments are invalid');\n      if (!isContext(context3)) {\n        if (callback !== void 0) {\n          throw typeErr;\n        }\n        callback = options;\n        options = context3;\n        context3 = document;\n      }\n      if (_typeof(options) !== 'object') {\n        if (callback !== void 0) {\n          throw typeErr;\n        }\n        callback = options;\n        options = {};\n      }\n      if (typeof callback !== 'function' && callback !== void 0) {\n        throw typeErr;\n      }\n      return {\n        context: context3,\n        options: options,\n        callback: callback || noop2\n      };\n    }\n    function run4(context3, options, callback) {\n      if (!axe._audit) {\n        throw new Error('No audit configured');\n      }\n      var hasWindow = window && 'Node' in window && 'NodeList' in window;\n      var hasDoc = !!document;\n      if (!hasWindow || !hasDoc) {\n        if (!context3 || !context3.ownerDocument) {\n          throw new Error('Required \"window\" or \"document\" globals not defined and cannot be deduced from the context. Either set the globals before running or pass in a valid Element.');\n        }\n        if (!hasDoc) {\n          cache_default.set('globalDocumentSet', true);\n          document = context3.ownerDocument;\n        }\n        if (!hasWindow) {\n          cache_default.set('globalWindowSet', true);\n          window = document.defaultView;\n        }\n      }\n      var args = normalizeRunParams(context3, options, callback);\n      context3 = args.context;\n      options = args.options;\n      callback = args.callback;\n      options.reporter = options.reporter || axe._audit.reporter || 'v1';\n      if (options.performanceTimer) {\n        axe.utils.performanceTimer.start();\n      }\n      var p;\n      var reject = noop2;\n      var resolve = noop2;\n      if (typeof Promise === 'function' && callback === noop2) {\n        p = new Promise(function(_resolve, _reject) {\n          reject = _reject;\n          resolve = _resolve;\n        });\n      }\n      if (axe._running) {\n        var err2 = 'Axe is already running. Use `await axe.run()` to wait for the previous run to finish before starting a new run.';\n        callback(err2);\n        reject(err2);\n        return p;\n      }\n      axe._running = true;\n      axe._runRules(context3, options, function(rawResults, cleanup5) {\n        var respond = function respond(results) {\n          axe._running = false;\n          cleanup5();\n          try {\n            callback(null, results);\n          } catch (e) {\n            axe.log(e);\n          }\n          resolve(results);\n        };\n        if (options.performanceTimer) {\n          axe.utils.performanceTimer.end();\n        }\n        try {\n          var reporter4 = getReporter(options.reporter);\n          var results = reporter4(rawResults, options, respond);\n          if (results !== void 0) {\n            respond(results);\n          }\n        } catch (err2) {\n          axe._running = false;\n          cleanup5();\n          callback(err2);\n          reject(err2);\n        }\n      }, function(err2) {\n        axe._running = false;\n        callback(err2);\n        reject(err2);\n      });\n      return p;\n    }\n    var run_default = run4;\n    function setup(node) {\n      if (axe._tree) {\n        throw new Error('Axe is already setup. Call `axe.teardown()` before calling `axe.setup` again.');\n      }\n      axe._tree = get_flattened_tree_default(node);\n      axe._selectorData = _getSelectorData(axe._tree);\n      return axe._tree[0];\n    }\n    var setup_default = setup;\n    var naReporter = function naReporter(results, options, callback) {\n      console.warn('\"na\" reporter will be deprecated in axe v4.0. Use the \"v2\" reporter instead.');\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n      var out = process_aggregate_default(results, options);\n      callback(_extends({}, get_environment_data_default(), {\n        toolOptions: options,\n        violations: out.violations,\n        passes: out.passes,\n        incomplete: out.incomplete,\n        inapplicable: out.inapplicable\n      }));\n    };\n    var na_default = naReporter;\n    var noPassesReporter = function noPassesReporter(results, options, callback) {\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n      options.resultTypes = [ 'violations' ];\n      var out = process_aggregate_default(results, options);\n      callback(_extends({}, get_environment_data_default(), {\n        toolOptions: options,\n        violations: out.violations\n      }));\n    };\n    var no_passes_default = noPassesReporter;\n    var rawReporter = function rawReporter(results, options, callback) {\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n      if (!results || !Array.isArray(results)) {\n        return callback(results);\n      }\n      var transformedResults = results.map(function(result) {\n        var transformedResult = _extends({}, result);\n        var types = [ 'passes', 'violations', 'incomplete', 'inapplicable' ];\n        for (var _i30 = 0, _types = types; _i30 < _types.length; _i30++) {\n          var type = _types[_i30];\n          if (transformedResult[type] && Array.isArray(transformedResult[type])) {\n            transformedResult[type] = transformedResult[type].map(function(typeResult) {\n              return _extends({}, typeResult, {\n                node: typeResult.node.toJSON()\n              });\n            });\n          }\n        }\n        return transformedResult;\n      });\n      callback(transformedResults);\n    };\n    var raw_default = rawReporter;\n    var rawEnvReporter = function rawEnvReporter(results, options, callback) {\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n      function rawCallback(raw3) {\n        var env = get_environment_data_default();\n        callback({\n          raw: raw3,\n          env: env\n        });\n      }\n      raw_default(results, options, rawCallback);\n    };\n    var raw_env_default = rawEnvReporter;\n    var v1Reporter = function v1Reporter(results, options, callback) {\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n      var out = process_aggregate_default(results, options);\n      var addFailureSummaries = function addFailureSummaries(result) {\n        result.nodes.forEach(function(nodeResult) {\n          nodeResult.failureSummary = failure_summary_default(nodeResult);\n        });\n      };\n      out.incomplete.forEach(addFailureSummaries);\n      out.violations.forEach(addFailureSummaries);\n      callback(_extends({}, get_environment_data_default(), {\n        toolOptions: options,\n        violations: out.violations,\n        passes: out.passes,\n        incomplete: out.incomplete,\n        inapplicable: out.inapplicable\n      }));\n    };\n    var v1_default = v1Reporter;\n    var v2Reporter = function v2Reporter(results, options, callback) {\n      if (typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n      var out = process_aggregate_default(results, options);\n      callback(_extends({}, get_environment_data_default(), {\n        toolOptions: options,\n        violations: out.violations,\n        passes: out.passes,\n        incomplete: out.incomplete,\n        inapplicable: out.inapplicable\n      }));\n    };\n    var v2_default = v2Reporter;\n    axe.constants = constants_default;\n    axe.log = log_default;\n    axe.AbstractVirtualNode = abstract_virtual_node_default;\n    axe.SerialVirtualNode = serial_virtual_node_default;\n    axe.VirtualNode = virtual_node_default;\n    axe._cache = cache_default;\n    axe._thisWillBeDeletedDoNotUse = axe._thisWillBeDeletedDoNotUse || {};\n    axe._thisWillBeDeletedDoNotUse.base = {\n      Audit: audit_default,\n      CheckResult: check_result_default,\n      Check: check_default,\n      Context: context_default,\n      RuleResult: rule_result_default,\n      Rule: rule_default,\n      metadataFunctionMap: metadata_function_map_default\n    };\n    axe.imports = imports_exports;\n    axe.cleanup = cleanup_default;\n    axe.configure = configure_default;\n    axe.frameMessenger = frameMessenger2;\n    axe.getRules = get_rules_default;\n    axe._load = load_default;\n    axe.plugins = {};\n    axe.registerPlugin = plugins_default;\n    axe.hasReporter = hasReporter;\n    axe.getReporter = getReporter;\n    axe.addReporter = addReporter;\n    axe.reset = reset_default;\n    axe._runRules = run_rules_default;\n    axe.runVirtualRule = run_virtual_rule_default;\n    axe.run = run_default;\n    axe.setup = setup_default;\n    axe.teardown = teardown_default;\n    axe.commons = commons_exports;\n    axe.utils = utils_exports;\n    axe.addReporter('na', na_default);\n    axe.addReporter('no-passes', no_passes_default);\n    axe.addReporter('rawEnv', raw_env_default);\n    axe.addReporter('raw', raw_default);\n    axe.addReporter('v1', v1_default);\n    axe.addReporter('v2', v2_default, true);\n  })();\n  'use strict';\n  axe._load({\n    lang: 'en',\n    data: {\n      rules: {\n        accesskeys: {\n          description: 'Ensures every accesskey attribute value is unique',\n          help: 'accesskey attribute value should be unique'\n        },\n        'area-alt': {\n          description: 'Ensures <area> elements of image maps have alternate text',\n          help: 'Active <area> elements must have alternate text'\n        },\n        'aria-allowed-attr': {\n          description: 'Ensures ARIA attributes are allowed for an element\\'s role',\n          help: 'Elements must only use allowed ARIA attributes'\n        },\n        'aria-allowed-role': {\n          description: 'Ensures role attribute has an appropriate value for the element',\n          help: 'ARIA role should be appropriate for the element'\n        },\n        'aria-command-name': {\n          description: 'Ensures every ARIA button, link and menuitem has an accessible name',\n          help: 'ARIA commands must have an accessible name'\n        },\n        'aria-dialog-name': {\n          description: 'Ensures every ARIA dialog and alertdialog node has an accessible name',\n          help: 'ARIA dialog and alertdialog nodes should have an accessible name'\n        },\n        'aria-hidden-body': {\n          description: 'Ensures aria-hidden=\\'true\\' is not present on the document body.',\n          help: 'aria-hidden=\\'true\\' must not be present on the document body'\n        },\n        'aria-hidden-focus': {\n          description: 'Ensures aria-hidden elements do not contain focusable elements',\n          help: 'ARIA hidden element must not contain focusable elements'\n        },\n        'aria-input-field-name': {\n          description: 'Ensures every ARIA input field has an accessible name',\n          help: 'ARIA input fields must have an accessible name'\n        },\n        'aria-meter-name': {\n          description: 'Ensures every ARIA meter node has an accessible name',\n          help: 'ARIA meter nodes must have an accessible name'\n        },\n        'aria-progressbar-name': {\n          description: 'Ensures every ARIA progressbar node has an accessible name',\n          help: 'ARIA progressbar nodes must have an accessible name'\n        },\n        'aria-required-attr': {\n          description: 'Ensures elements with ARIA roles have all required ARIA attributes',\n          help: 'Required ARIA attributes must be provided'\n        },\n        'aria-required-children': {\n          description: 'Ensures elements with an ARIA role that require child roles contain them',\n          help: 'Certain ARIA roles must contain particular children'\n        },\n        'aria-required-parent': {\n          description: 'Ensures elements with an ARIA role that require parent roles are contained by them',\n          help: 'Certain ARIA roles must be contained by particular parents'\n        },\n        'aria-roledescription': {\n          description: 'Ensure aria-roledescription is only used on elements with an implicit or explicit role',\n          help: 'Use aria-roledescription on elements with a semantic role'\n        },\n        'aria-roles': {\n          description: 'Ensures all elements with a role attribute use a valid value',\n          help: 'ARIA roles used must conform to valid values'\n        },\n        'aria-text': {\n          description: 'Ensures \"role=text\" is used on elements with no focusable descendants',\n          help: '\"role=text\" should have no focusable descendants'\n        },\n        'aria-toggle-field-name': {\n          description: 'Ensures every ARIA toggle field has an accessible name',\n          help: 'ARIA toggle fields have an accessible name'\n        },\n        'aria-tooltip-name': {\n          description: 'Ensures every ARIA tooltip node has an accessible name',\n          help: 'ARIA tooltip nodes must have an accessible name'\n        },\n        'aria-treeitem-name': {\n          description: 'Ensures every ARIA treeitem node has an accessible name',\n          help: 'ARIA treeitem nodes should have an accessible name'\n        },\n        'aria-valid-attr-value': {\n          description: 'Ensures all ARIA attributes have valid values',\n          help: 'ARIA attributes must conform to valid values'\n        },\n        'aria-valid-attr': {\n          description: 'Ensures attributes that begin with aria- are valid ARIA attributes',\n          help: 'ARIA attributes must conform to valid names'\n        },\n        'audio-caption': {\n          description: 'Ensures <audio> elements have captions',\n          help: '<audio> elements must have a captions track'\n        },\n        'autocomplete-valid': {\n          description: 'Ensure the autocomplete attribute is correct and suitable for the form field',\n          help: 'autocomplete attribute must be used correctly'\n        },\n        'avoid-inline-spacing': {\n          description: 'Ensure that text spacing set through style attributes can be adjusted with custom stylesheets',\n          help: 'Inline text spacing must be adjustable with custom stylesheets'\n        },\n        blink: {\n          description: 'Ensures <blink> elements are not used',\n          help: '<blink> elements are deprecated and must not be used'\n        },\n        'button-name': {\n          description: 'Ensures buttons have discernible text',\n          help: 'Buttons must have discernible text'\n        },\n        bypass: {\n          description: 'Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content',\n          help: 'Page must have means to bypass repeated blocks'\n        },\n        'color-contrast': {\n          description: 'Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds',\n          help: 'Elements must have sufficient color contrast'\n        },\n        'css-orientation-lock': {\n          description: 'Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations',\n          help: 'CSS Media queries are not used to lock display orientation'\n        },\n        'definition-list': {\n          description: 'Ensures <dl> elements are structured correctly',\n          help: '<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements'\n        },\n        dlitem: {\n          description: 'Ensures <dt> and <dd> elements are contained by a <dl>',\n          help: '<dt> and <dd> elements must be contained by a <dl>'\n        },\n        'document-title': {\n          description: 'Ensures each HTML document contains a non-empty <title> element',\n          help: 'Documents must have <title> element to aid in navigation'\n        },\n        'duplicate-id-active': {\n          description: 'Ensures every id attribute value of active elements is unique',\n          help: 'IDs of active elements must be unique'\n        },\n        'duplicate-id-aria': {\n          description: 'Ensures every id attribute value used in ARIA and in labels is unique',\n          help: 'IDs used in ARIA and labels must be unique'\n        },\n        'duplicate-id': {\n          description: 'Ensures every id attribute value is unique',\n          help: 'id attribute value must be unique'\n        },\n        'empty-heading': {\n          description: 'Ensures headings have discernible text',\n          help: 'Headings should not be empty'\n        },\n        'empty-table-header': {\n          description: 'Ensures table headers have discernible text',\n          help: 'Table header text must not be empty'\n        },\n        'focus-order-semantics': {\n          description: 'Ensures elements in the focus order have an appropriate role',\n          help: 'Elements in the focus order need a role appropriate for interactive content'\n        },\n        'form-field-multiple-labels': {\n          description: 'Ensures form field does not have multiple label elements',\n          help: 'Form field must not have multiple label elements'\n        },\n        'frame-focusable-content': {\n          description: 'Ensures <frame> and <iframe> elements with focusable content do not have tabindex=-1',\n          help: 'Frames with focusable content must not have tabindex=-1'\n        },\n        'frame-tested': {\n          description: 'Ensures <iframe> and <frame> elements contain the axe-core script',\n          help: 'Frames should be tested with axe-core'\n        },\n        'frame-title-unique': {\n          description: 'Ensures <iframe> and <frame> elements contain a unique title attribute',\n          help: 'Frames should have a unique title attribute'\n        },\n        'frame-title': {\n          description: 'Ensures <iframe> and <frame> elements have an accessible name',\n          help: 'Frames must have an accessible name'\n        },\n        'heading-order': {\n          description: 'Ensures the order of headings is semantically correct',\n          help: 'Heading levels should only increase by one'\n        },\n        'hidden-content': {\n          description: 'Informs users about hidden content.',\n          help: 'Hidden content on the page cannot be analyzed'\n        },\n        'html-has-lang': {\n          description: 'Ensures every HTML document has a lang attribute',\n          help: '<html> element must have a lang attribute'\n        },\n        'html-lang-valid': {\n          description: 'Ensures the lang attribute of the <html> element has a valid value',\n          help: '<html> element must have a valid value for the lang attribute'\n        },\n        'html-xml-lang-mismatch': {\n          description: 'Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page',\n          help: 'HTML elements with lang and xml:lang must have the same base language'\n        },\n        'identical-links-same-purpose': {\n          description: 'Ensure that links with the same accessible name serve a similar purpose',\n          help: 'Links with the same name have a similar purpose'\n        },\n        'image-alt': {\n          description: 'Ensures <img> elements have alternate text or a role of none or presentation',\n          help: 'Images must have alternate text'\n        },\n        'image-redundant-alt': {\n          description: 'Ensure image alternative is not repeated as text',\n          help: 'Alternative text of images should not be repeated as text'\n        },\n        'input-button-name': {\n          description: 'Ensures input buttons have discernible text',\n          help: 'Input buttons must have discernible text'\n        },\n        'input-image-alt': {\n          description: 'Ensures <input type=\"image\"> elements have alternate text',\n          help: 'Image buttons must have alternate text'\n        },\n        'label-content-name-mismatch': {\n          description: 'Ensures that elements labelled through their content must have their visible text as part of their accessible name',\n          help: 'Elements must have their visible text as part of their accessible name'\n        },\n        'label-title-only': {\n          description: 'Ensures that every form element is not solely labeled using the title or aria-describedby attributes',\n          help: 'Form elements should have a visible label'\n        },\n        label: {\n          description: 'Ensures every form element has a label',\n          help: 'Form elements must have labels'\n        },\n        'landmark-banner-is-top-level': {\n          description: 'Ensures the banner landmark is at top level',\n          help: 'Banner landmark should not be contained in another landmark'\n        },\n        'landmark-complementary-is-top-level': {\n          description: 'Ensures the complementary landmark or aside is at top level',\n          help: 'Aside should not be contained in another landmark'\n        },\n        'landmark-contentinfo-is-top-level': {\n          description: 'Ensures the contentinfo landmark is at top level',\n          help: 'Contentinfo landmark should not be contained in another landmark'\n        },\n        'landmark-main-is-top-level': {\n          description: 'Ensures the main landmark is at top level',\n          help: 'Main landmark should not be contained in another landmark'\n        },\n        'landmark-no-duplicate-banner': {\n          description: 'Ensures the document has at most one banner landmark',\n          help: 'Document should not have more than one banner landmark'\n        },\n        'landmark-no-duplicate-contentinfo': {\n          description: 'Ensures the document has at most one contentinfo landmark',\n          help: 'Document should not have more than one contentinfo landmark'\n        },\n        'landmark-no-duplicate-main': {\n          description: 'Ensures the document has at most one main landmark',\n          help: 'Document should not have more than one main landmark'\n        },\n        'landmark-one-main': {\n          description: 'Ensures the document has a main landmark',\n          help: 'Document should have one main landmark'\n        },\n        'landmark-unique': {\n          help: 'Ensures landmarks are unique',\n          description: 'Landmarks should have a unique role or role/label/title (i.e. accessible name) combination'\n        },\n        'link-in-text-block': {\n          description: 'Links can be distinguished without relying on color',\n          help: 'Links must be distinguished from surrounding text in a way that does not rely on color'\n        },\n        'link-name': {\n          description: 'Ensures links have discernible text',\n          help: 'Links must have discernible text'\n        },\n        list: {\n          description: 'Ensures that lists are structured correctly',\n          help: '<ul> and <ol> must only directly contain <li>, <script> or <template> elements'\n        },\n        listitem: {\n          description: 'Ensures <li> elements are used semantically',\n          help: '<li> elements must be contained in a <ul> or <ol>'\n        },\n        marquee: {\n          description: 'Ensures <marquee> elements are not used',\n          help: '<marquee> elements are deprecated and must not be used'\n        },\n        'meta-refresh': {\n          description: 'Ensures <meta http-equiv=\"refresh\"> is not used',\n          help: 'Timed refresh must not exist'\n        },\n        'meta-viewport-large': {\n          description: 'Ensures <meta name=\"viewport\"> can scale a significant amount',\n          help: 'Users should be able to zoom and scale the text up to 500%'\n        },\n        'meta-viewport': {\n          description: 'Ensures <meta name=\"viewport\"> does not disable text scaling and zooming',\n          help: 'Zooming and scaling should not be disabled'\n        },\n        'nested-interactive': {\n          description: 'Nested interactive controls are not announced by screen readers',\n          help: 'Ensure interactive controls are not nested'\n        },\n        'no-autoplay-audio': {\n          description: 'Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio',\n          help: '<video> or <audio> elements do not autoplay audio'\n        },\n        'object-alt': {\n          description: 'Ensures <object> elements have alternate text',\n          help: '<object> elements must have alternate text'\n        },\n        'p-as-heading': {\n          description: 'Ensure p elements are not used to style headings',\n          help: 'Bold, italic text and font-size are not used to style p elements as a heading'\n        },\n        'page-has-heading-one': {\n          description: 'Ensure that the page, or at least one of its frames contains a level-one heading',\n          help: 'Page should contain a level-one heading'\n        },\n        'presentation-role-conflict': {\n          description: 'Flags elements whose role is none or presentation and which cause the role conflict resolution to trigger.',\n          help: 'Elements of role none or presentation should be flagged'\n        },\n        region: {\n          description: 'Ensures all page content is contained by landmarks',\n          help: 'All page content should be contained by landmarks'\n        },\n        'role-img-alt': {\n          description: 'Ensures [role=\\'img\\'] elements have alternate text',\n          help: '[role=\\'img\\'] elements have an alternative text'\n        },\n        'scope-attr-valid': {\n          description: 'Ensures the scope attribute is used correctly on tables',\n          help: 'scope attribute should be used correctly'\n        },\n        'scrollable-region-focusable': {\n          description: 'Elements that have scrollable content must be accessible by keyboard',\n          help: 'Ensure that scrollable region has keyboard access'\n        },\n        'select-name': {\n          description: 'Ensures select element has an accessible name',\n          help: 'Select element must have an accessible name'\n        },\n        'server-side-image-map': {\n          description: 'Ensures that server-side image maps are not used',\n          help: 'Server-side image maps must not be used'\n        },\n        'skip-link': {\n          description: 'Ensure all skip links have a focusable target',\n          help: 'The skip-link target should exist and be focusable'\n        },\n        'svg-img-alt': {\n          description: 'Ensures svg elements with an img, graphics-document or graphics-symbol role have an accessible text',\n          help: 'svg elements with an img role have an alternative text'\n        },\n        tabindex: {\n          description: 'Ensures tabindex attribute values are not greater than 0',\n          help: 'Elements should not have tabindex greater than zero'\n        },\n        'table-duplicate-name': {\n          description: 'Ensure that tables do not have the same summary and caption',\n          help: 'The <caption> element should not contain the same text as the summary attribute'\n        },\n        'table-fake-caption': {\n          description: 'Ensure that tables with a caption use the <caption> element.',\n          help: 'Data or header cells must not be used to give caption to a data table.'\n        },\n        'td-has-header': {\n          description: 'Ensure that each non-empty data cell in a large table has one or more table headers',\n          help: 'All non-empty td element in table larger than 3 by 3 must have an associated table header'\n        },\n        'td-headers-attr': {\n          description: 'Ensure that each cell in a table using the headers refers to another cell in that table',\n          help: 'All cells in a table element that use the headers attribute must only refer to other cells of that same table'\n        },\n        'th-has-data-cells': {\n          description: 'Ensure that each table header in a data table refers to data cells',\n          help: 'All th elements and elements with role=columnheader/rowheader must have data cells they describe'\n        },\n        'valid-lang': {\n          description: 'Ensures lang attributes have valid values',\n          help: 'lang attribute must have a valid value'\n        },\n        'video-caption': {\n          description: 'Ensures <video> elements have captions',\n          help: '<video> elements must have captions'\n        }\n      },\n      checks: {\n        abstractrole: {\n          impact: 'serious',\n          messages: {\n            pass: 'Abstract roles are not used',\n            fail: {\n              singular: 'Abstract role cannot be directly used: ${data.values}',\n              plural: 'Abstract roles cannot be directly used: ${data.values}'\n            }\n          }\n        },\n        'aria-allowed-attr': {\n          impact: 'critical',\n          messages: {\n            pass: 'ARIA attributes are used correctly for the defined role',\n            fail: {\n              singular: 'ARIA attribute is not allowed: ${data.values}',\n              plural: 'ARIA attributes are not allowed: ${data.values}'\n            }\n          }\n        },\n        'aria-allowed-role': {\n          impact: 'minor',\n          messages: {\n            pass: 'ARIA role is allowed for given element',\n            fail: {\n              singular: 'ARIA role ${data.values} is not allowed for given element',\n              plural: 'ARIA roles ${data.values} are not allowed for given element'\n            },\n            incomplete: {\n              singular: 'ARIA role ${data.values} must be removed when the element is made visible, as it is not allowed for the element',\n              plural: 'ARIA roles ${data.values} must be removed when the element is made visible, as they are not allowed for the element'\n            }\n          }\n        },\n        'aria-errormessage': {\n          impact: 'critical',\n          messages: {\n            pass: 'aria-errormessage exists and references elements visible to screen readers that use a supported aria-errormessage technique',\n            fail: {\n              singular: 'aria-errormessage value `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)',\n              plural: 'aria-errormessage values `${data.values}` must use a technique to announce the message (e.g., aria-live, aria-describedby, role=alert, etc.)'\n            },\n            incomplete: {\n              singular: 'ensure aria-errormessage value `${data.values}` references an existing element',\n              plural: 'ensure aria-errormessage values `${data.values}` reference existing elements'\n            }\n          }\n        },\n        'aria-hidden-body': {\n          impact: 'critical',\n          messages: {\n            pass: 'No aria-hidden attribute is present on document body',\n            fail: 'aria-hidden=true should not be present on the document body'\n          }\n        },\n        'aria-prohibited-attr': {\n          impact: 'serious',\n          messages: {\n            pass: 'ARIA attribute is allowed',\n            fail: 'ARIA attribute cannot be used, add a role attribute or use a different element: ${data.values}',\n            incomplete: 'ARIA attribute is not well supported on the element and the text content will be used instead: ${data.values}'\n          }\n        },\n        'aria-required-attr': {\n          impact: 'critical',\n          messages: {\n            pass: 'All required ARIA attributes are present',\n            fail: {\n              singular: 'Required ARIA attribute not present: ${data.values}',\n              plural: 'Required ARIA attributes not present: ${data.values}'\n            }\n          }\n        },\n        'aria-required-children': {\n          impact: 'critical',\n          messages: {\n            pass: 'Required ARIA children are present',\n            fail: {\n              singular: 'Required ARIA child role not present: ${data.values}',\n              plural: 'Required ARIA children role not present: ${data.values}'\n            },\n            incomplete: {\n              singular: 'Expecting ARIA child role to be added: ${data.values}',\n              plural: 'Expecting ARIA children role to be added: ${data.values}'\n            }\n          }\n        },\n        'aria-required-parent': {\n          impact: 'critical',\n          messages: {\n            pass: 'Required ARIA parent role present',\n            fail: {\n              singular: 'Required ARIA parent role not present: ${data.values}',\n              plural: 'Required ARIA parents role not present: ${data.values}'\n            }\n          }\n        },\n        'aria-roledescription': {\n          impact: 'serious',\n          messages: {\n            pass: 'aria-roledescription used on a supported semantic role',\n            incomplete: 'Check that the aria-roledescription is announced by supported screen readers',\n            fail: 'Give the element a role that supports aria-roledescription'\n          }\n        },\n        'aria-unsupported-attr': {\n          impact: 'critical',\n          messages: {\n            pass: 'ARIA attribute is supported',\n            fail: 'ARIA attribute is not widely supported in screen readers and assistive technologies: ${data.values}'\n          }\n        },\n        'aria-valid-attr-value': {\n          impact: 'critical',\n          messages: {\n            pass: 'ARIA attribute values are valid',\n            fail: {\n              singular: 'Invalid ARIA attribute value: ${data.values}',\n              plural: 'Invalid ARIA attribute values: ${data.values}'\n            },\n            incomplete: {\n              noId: 'ARIA attribute element ID does not exist on the page: ${data.needsReview}',\n              ariaCurrent: 'ARIA attribute value is invalid and will be treated as \"aria-current=true\": ${data.needsReview}'\n            }\n          }\n        },\n        'aria-valid-attr': {\n          impact: 'critical',\n          messages: {\n            pass: 'ARIA attribute name is valid',\n            fail: {\n              singular: 'Invalid ARIA attribute name: ${data.values}',\n              plural: 'Invalid ARIA attribute names: ${data.values}'\n            }\n          }\n        },\n        fallbackrole: {\n          impact: 'serious',\n          messages: {\n            pass: 'Only one role value used',\n            fail: 'Use only one role value, since fallback roles are not supported in older browsers'\n          }\n        },\n        'has-global-aria-attribute': {\n          impact: 'minor',\n          messages: {\n            pass: {\n              singular: 'Element has global ARIA attribute: ${data.values}',\n              plural: 'Element has global ARIA attributes: ${data.values}'\n            },\n            fail: 'Element does not have global ARIA attribute'\n          }\n        },\n        'has-widget-role': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element has a widget role.',\n            fail: 'Element does not have a widget role.'\n          }\n        },\n        invalidrole: {\n          impact: 'critical',\n          messages: {\n            pass: 'ARIA role is valid',\n            fail: {\n              singular: 'Role must be one of the valid ARIA roles: ${data.values}',\n              plural: 'Roles must be one of the valid ARIA roles: ${data.values}'\n            }\n          }\n        },\n        'is-element-focusable': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element is focusable.',\n            fail: 'Element is not focusable.'\n          }\n        },\n        'no-implicit-explicit-label': {\n          impact: 'moderate',\n          messages: {\n            pass: 'There is no mismatch between a <label> and accessible name',\n            incomplete: 'Check that the <label> does not need be part of the ARIA ${data} field\\'s name'\n          }\n        },\n        unsupportedrole: {\n          impact: 'critical',\n          messages: {\n            pass: 'ARIA role is supported',\n            fail: 'The role used is not widely supported in screen readers and assistive technologies: ${data.values}'\n          }\n        },\n        'valid-scrollable-semantics': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element has valid semantics for an element in the focus order.',\n            fail: 'Element has invalid semantics for an element in the focus order.'\n          }\n        },\n        'color-contrast': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element has sufficient color contrast of ${data.contrastRatio}',\n            fail: 'Element has insufficient color contrast of ${data.contrastRatio} (foreground color: ${data.fgColor}, background color: ${data.bgColor}, font size: ${data.fontSize}, font weight: ${data.fontWeight}). Expected contrast ratio of ${data.expectedContrastRatio}',\n            incomplete: {\n              default: 'Unable to determine contrast ratio',\n              bgImage: 'Element\\'s background color could not be determined due to a background image',\n              bgGradient: 'Element\\'s background color could not be determined due to a background gradient',\n              imgNode: 'Element\\'s background color could not be determined because element contains an image node',\n              bgOverlap: 'Element\\'s background color could not be determined because it is overlapped by another element',\n              fgAlpha: 'Element\\'s foreground color could not be determined because of alpha transparency',\n              elmPartiallyObscured: 'Element\\'s background color could not be determined because it\\'s partially obscured by another element',\n              elmPartiallyObscuring: 'Element\\'s background color could not be determined because it partially overlaps other elements',\n              outsideViewport: 'Element\\'s background color could not be determined because it\\'s outside the viewport',\n              equalRatio: 'Element has a 1:1 contrast ratio with the background',\n              shortTextContent: 'Element content is too short to determine if it is actual text content',\n              nonBmp: 'Element content contains only non-text characters',\n              pseudoContent: 'Element\\'s background color could not be determined due to a pseudo element'\n            }\n          }\n        },\n        'link-in-text-block': {\n          impact: 'serious',\n          messages: {\n            pass: 'Links can be distinguished from surrounding text in some way other than by color',\n            fail: 'Links need to be distinguished from surrounding text in some way other than by color',\n            incomplete: {\n              default: 'Unable to determine contrast ratio',\n              bgContrast: 'Element\\'s contrast ratio could not be determined. Check for a distinct hover/focus style',\n              bgImage: 'Element\\'s contrast ratio could not be determined due to a background image',\n              bgGradient: 'Element\\'s contrast ratio could not be determined due to a background gradient',\n              imgNode: 'Element\\'s contrast ratio could not be determined because element contains an image node',\n              bgOverlap: 'Element\\'s contrast ratio could not be determined because of element overlap'\n            }\n          }\n        },\n        'autocomplete-appropriate': {\n          impact: 'serious',\n          messages: {\n            pass: 'the autocomplete value is on an appropriate element',\n            fail: 'the autocomplete value is inappropriate for this type of input'\n          }\n        },\n        'autocomplete-valid': {\n          impact: 'serious',\n          messages: {\n            pass: 'the autocomplete attribute is correctly formatted',\n            fail: 'the autocomplete attribute is incorrectly formatted'\n          }\n        },\n        accesskeys: {\n          impact: 'serious',\n          messages: {\n            pass: 'Accesskey attribute value is unique',\n            fail: 'Document has multiple elements with the same accesskey'\n          }\n        },\n        'focusable-content': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Element contains focusable elements',\n            fail: 'Element should have focusable content'\n          }\n        },\n        'focusable-disabled': {\n          impact: 'serious',\n          messages: {\n            pass: 'No focusable elements contained within element',\n            fail: 'Focusable content should be disabled or be removed from the DOM'\n          }\n        },\n        'focusable-element': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Element is focusable',\n            fail: 'Element should be focusable'\n          }\n        },\n        'focusable-modal-open': {\n          impact: 'serious',\n          messages: {\n            pass: 'No focusable elements while a modal is open',\n            incomplete: 'Check that focusable elements are not tabbable in the current state'\n          }\n        },\n        'focusable-no-name': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element is not in tab order or has accessible text',\n            fail: 'Element is in tab order and does not have accessible text',\n            incomplete: 'Unable to determine if element has an accessible name'\n          }\n        },\n        'focusable-not-tabbable': {\n          impact: 'serious',\n          messages: {\n            pass: 'No focusable elements contained within element',\n            fail: 'Focusable content should have tabindex=\\'-1\\' or be removed from the DOM'\n          }\n        },\n        'frame-focusable-content': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element does not have focusable descendants',\n            fail: 'Element has focusable descendants',\n            incomplete: 'Could not determine if element has descendants'\n          }\n        },\n        'landmark-is-top-level': {\n          impact: 'moderate',\n          messages: {\n            pass: 'The ${data.role} landmark is at the top level.',\n            fail: 'The ${data.role} landmark is contained in another landmark.'\n          }\n        },\n        'no-focusable-content': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element does not have focusable descendants',\n            fail: 'Element has focusable descendants',\n            incomplete: 'Could not determine if element has descendants'\n          }\n        },\n        'page-has-heading-one': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Page has at least one level-one heading',\n            fail: 'Page must have a level-one heading'\n          }\n        },\n        'page-has-main': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Document has at least one main landmark',\n            fail: 'Document does not have a main landmark'\n          }\n        },\n        'page-no-duplicate-banner': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Document does not have more than one banner landmark',\n            fail: 'Document has more than one banner landmark'\n          }\n        },\n        'page-no-duplicate-contentinfo': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Document does not have more than one contentinfo landmark',\n            fail: 'Document has more than one contentinfo landmark'\n          }\n        },\n        'page-no-duplicate-main': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Document does not have more than one main landmark',\n            fail: 'Document has more than one main landmark'\n          }\n        },\n        tabindex: {\n          impact: 'serious',\n          messages: {\n            pass: 'Element does not have a tabindex greater than 0',\n            fail: 'Element has a tabindex greater than 0'\n          }\n        },\n        'alt-space-value': {\n          impact: 'critical',\n          messages: {\n            pass: 'Element has a valid alt attribute value',\n            fail: 'Element has an alt attribute containing only a space character, which is not ignored by all screen readers'\n          }\n        },\n        'duplicate-img-label': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element does not duplicate existing text in <img> alt text',\n            fail: 'Element contains <img> element with alt text that duplicates existing text'\n          }\n        },\n        'explicit-label': {\n          impact: 'critical',\n          messages: {\n            pass: 'Form element has an explicit <label>',\n            fail: 'Form element does not have an explicit <label>',\n            incomplete: 'Unable to determine if form element has an explicit <label>'\n          }\n        },\n        'help-same-as-label': {\n          impact: 'minor',\n          messages: {\n            pass: 'Help text (title or aria-describedby) does not duplicate label text',\n            fail: 'Help text (title or aria-describedby) text is the same as the label text'\n          }\n        },\n        'hidden-explicit-label': {\n          impact: 'critical',\n          messages: {\n            pass: 'Form element has a visible explicit <label>',\n            fail: 'Form element has explicit <label> that is hidden',\n            incomplete: 'Unable to determine if form element has explicit <label> that is hidden'\n          }\n        },\n        'implicit-label': {\n          impact: 'critical',\n          messages: {\n            pass: 'Form element has an implicit (wrapped) <label>',\n            fail: 'Form element does not have an implicit (wrapped) <label>',\n            incomplete: 'Unable to determine if form element has an implicit (wrapped} <label>'\n          }\n        },\n        'label-content-name-mismatch': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element contains visible text as part of it\\'s accessible name',\n            fail: 'Text inside the element is not included in the accessible name'\n          }\n        },\n        'multiple-label': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Form field does not have multiple label elements',\n            incomplete: 'Multiple label elements is not widely supported in assistive technologies. Ensure the first label contains all necessary information.'\n          }\n        },\n        'title-only': {\n          impact: 'serious',\n          messages: {\n            pass: 'Form element does not solely use title attribute for its label',\n            fail: 'Only title used to generate label for form element'\n          }\n        },\n        'landmark-is-unique': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Landmarks must have a unique role or role/label/title (i.e. accessible name) combination',\n            fail: 'The landmark must have a unique aria-label, aria-labelledby, or title to make landmarks distinguishable'\n          }\n        },\n        'has-lang': {\n          impact: 'serious',\n          messages: {\n            pass: 'The <html> element has a lang attribute',\n            fail: {\n              noXHTML: 'The xml:lang attribute is not valid on HTML pages, use the lang attribute.',\n              noLang: 'The <html> element does not have a lang attribute'\n            }\n          }\n        },\n        'valid-lang': {\n          impact: 'serious',\n          messages: {\n            pass: 'Value of lang attribute is included in the list of valid languages',\n            fail: 'Value of lang attribute not included in the list of valid languages'\n          }\n        },\n        'xml-lang-mismatch': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Lang and xml:lang attributes have the same base language',\n            fail: 'Lang and xml:lang attributes do not have the same base language'\n          }\n        },\n        dlitem: {\n          impact: 'serious',\n          messages: {\n            pass: 'Description list item has a <dl> parent element',\n            fail: 'Description list item does not have a <dl> parent element'\n          }\n        },\n        listitem: {\n          impact: 'serious',\n          messages: {\n            pass: 'List item has a <ul>, <ol> or role=\"list\" parent element',\n            fail: {\n              default: 'List item does not have a <ul>, <ol> parent element',\n              roleNotValid: 'List item does not have a <ul>, <ol> parent element without a role, or a role=\"list\"'\n            }\n          }\n        },\n        'only-dlitems': {\n          impact: 'serious',\n          messages: {\n            pass: 'List element only has direct children that are allowed inside <dt> or <dd> elements',\n            fail: 'List element has direct children that are not allowed inside <dt> or <dd> elements'\n          }\n        },\n        'only-listitems': {\n          impact: 'serious',\n          messages: {\n            pass: 'List element only has direct children that are allowed inside <li> elements',\n            fail: {\n              default: 'List element has direct children that are not allowed inside <li> elements',\n              roleNotValid: 'List element has direct children with a role that is not allowed: ${data.roles}'\n            }\n          }\n        },\n        'structured-dlitems': {\n          impact: 'serious',\n          messages: {\n            pass: 'When not empty, element has both <dt> and <dd> elements',\n            fail: 'When not empty, element does not have at least one <dt> element followed by at least one <dd> element'\n          }\n        },\n        caption: {\n          impact: 'critical',\n          messages: {\n            pass: 'The multimedia element has a captions track',\n            incomplete: 'Check that captions is available for the element'\n          }\n        },\n        'frame-tested': {\n          impact: 'critical',\n          messages: {\n            pass: 'The iframe was tested with axe-core',\n            fail: 'The iframe could not be tested with axe-core',\n            incomplete: 'The iframe still has to be tested with axe-core'\n          }\n        },\n        'no-autoplay-audio': {\n          impact: 'moderate',\n          messages: {\n            pass: '<video> or <audio> does not output audio for more than allowed duration or has controls mechanism',\n            fail: '<video> or <audio> outputs audio for more than allowed duration and does not have a controls mechanism',\n            incomplete: 'Check that the <video> or <audio> does not output audio for more than allowed duration or provides a controls mechanism'\n          }\n        },\n        'css-orientation-lock': {\n          impact: 'serious',\n          messages: {\n            pass: 'Display is operable, and orientation lock does not exist',\n            fail: 'CSS Orientation lock is applied, and makes display inoperable',\n            incomplete: 'CSS Orientation lock cannot be determined'\n          }\n        },\n        'meta-viewport-large': {\n          impact: 'minor',\n          messages: {\n            pass: '<meta> tag does not prevent significant zooming on mobile devices',\n            fail: '<meta> tag limits zooming on mobile devices'\n          }\n        },\n        'meta-viewport': {\n          impact: 'critical',\n          messages: {\n            pass: '<meta> tag does not disable zooming on mobile devices',\n            fail: '${data} on <meta> tag disables zooming on mobile devices'\n          }\n        },\n        'header-present': {\n          impact: 'serious',\n          messages: {\n            pass: 'Page has a heading',\n            fail: 'Page does not have a heading'\n          }\n        },\n        'heading-order': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Heading order valid',\n            fail: 'Heading order invalid'\n          }\n        },\n        'identical-links-same-purpose': {\n          impact: 'minor',\n          messages: {\n            pass: 'There are no other links with the same name, that go to a different URL',\n            incomplete: 'Check that links have the same purpose, or are intentionally ambiguous.'\n          }\n        },\n        'internal-link-present': {\n          impact: 'serious',\n          messages: {\n            pass: 'Valid skip link found',\n            fail: 'No valid skip link found'\n          }\n        },\n        landmark: {\n          impact: 'serious',\n          messages: {\n            pass: 'Page has a landmark region',\n            fail: 'Page does not have a landmark region'\n          }\n        },\n        'meta-refresh': {\n          impact: 'critical',\n          messages: {\n            pass: '<meta> tag does not immediately refresh the page',\n            fail: '<meta> tag forces timed refresh of page'\n          }\n        },\n        'p-as-heading': {\n          impact: 'serious',\n          messages: {\n            pass: '<p> elements are not styled as headings',\n            fail: 'Heading elements should be used instead of styled p elements'\n          }\n        },\n        region: {\n          impact: 'moderate',\n          messages: {\n            pass: 'All page content is contained by landmarks',\n            fail: 'Some page content is not contained by landmarks'\n          }\n        },\n        'skip-link': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Skip link target exists',\n            incomplete: 'Skip link target should become visible on activation',\n            fail: 'No skip link target'\n          }\n        },\n        'unique-frame-title': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element\\'s title attribute is unique',\n            fail: 'Element\\'s title attribute is not unique'\n          }\n        },\n        'duplicate-id-active': {\n          impact: 'serious',\n          messages: {\n            pass: 'Document has no active elements that share the same id attribute',\n            fail: 'Document has active elements with the same id attribute: ${data}'\n          }\n        },\n        'duplicate-id-aria': {\n          impact: 'critical',\n          messages: {\n            pass: 'Document has no elements referenced with ARIA or labels that share the same id attribute',\n            fail: 'Document has multiple elements referenced with ARIA with the same id attribute: ${data}'\n          }\n        },\n        'duplicate-id': {\n          impact: 'minor',\n          messages: {\n            pass: 'Document has no static elements that share the same id attribute',\n            fail: 'Document has multiple static elements with the same id attribute: ${data}'\n          }\n        },\n        'aria-label': {\n          impact: 'serious',\n          messages: {\n            pass: 'aria-label attribute exists and is not empty',\n            fail: 'aria-label attribute does not exist or is empty'\n          }\n        },\n        'aria-labelledby': {\n          impact: 'serious',\n          messages: {\n            pass: 'aria-labelledby attribute exists and references elements that are visible to screen readers',\n            fail: 'aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty',\n            incomplete: 'ensure aria-labelledby references an existing element'\n          }\n        },\n        'avoid-inline-spacing': {\n          impact: 'serious',\n          messages: {\n            pass: 'No inline styles with \\'!important\\' that affect text spacing has been specified',\n            fail: {\n              singular: 'Remove \\'!important\\' from inline style ${data.values}, as overriding this is not supported by most browsers',\n              plural: 'Remove \\'!important\\' from inline styles ${data.values}, as overriding this is not supported by most browsers'\n            }\n          }\n        },\n        'button-has-visible-text': {\n          impact: 'critical',\n          messages: {\n            pass: 'Element has inner text that is visible to screen readers',\n            fail: 'Element does not have inner text that is visible to screen readers',\n            incomplete: 'Unable to determine if element has children'\n          }\n        },\n        'doc-has-title': {\n          impact: 'serious',\n          messages: {\n            pass: 'Document has a non-empty <title> element',\n            fail: 'Document does not have a non-empty <title> element'\n          }\n        },\n        exists: {\n          impact: 'minor',\n          messages: {\n            pass: 'Element does not exist',\n            incomplete: 'Element exists'\n          }\n        },\n        'has-alt': {\n          impact: 'critical',\n          messages: {\n            pass: 'Element has an alt attribute',\n            fail: 'Element does not have an alt attribute'\n          }\n        },\n        'has-visible-text': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element has text that is visible to screen readers',\n            fail: 'Element does not have text that is visible to screen readers',\n            incomplete: 'Unable to determine if element has children'\n          }\n        },\n        'is-on-screen': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element is not visible',\n            fail: 'Element is visible'\n          }\n        },\n        'non-empty-alt': {\n          impact: 'critical',\n          messages: {\n            pass: 'Element has a non-empty alt attribute',\n            fail: {\n              noAttr: 'Element has no alt attribute',\n              emptyAttr: 'Element has an empty alt attribute'\n            }\n          }\n        },\n        'non-empty-if-present': {\n          impact: 'critical',\n          messages: {\n            pass: {\n              default: 'Element does not have a value attribute',\n              'has-label': 'Element has a non-empty value attribute'\n            },\n            fail: 'Element has a value attribute and the value attribute is empty'\n          }\n        },\n        'non-empty-placeholder': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element has a placeholder attribute',\n            fail: {\n              noAttr: 'Element has no placeholder attribute',\n              emptyAttr: 'Element has an empty placeholder attribute'\n            }\n          }\n        },\n        'non-empty-title': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element has a title attribute',\n            fail: {\n              noAttr: 'Element has no title attribute',\n              emptyAttr: 'Element has an empty title attribute'\n            }\n          }\n        },\n        'non-empty-value': {\n          impact: 'critical',\n          messages: {\n            pass: 'Element has a non-empty value attribute',\n            fail: {\n              noAttr: 'Element has no value attribute',\n              emptyAttr: 'Element has an empty value attribute'\n            }\n          }\n        },\n        'presentational-role': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element\\'s default semantics were overriden with role=\"${data.role}\"',\n            fail: {\n              default: 'Element\\'s default semantics were not overridden with role=\"none\" or role=\"presentation\"',\n              globalAria: 'Element\\'s role is not presentational because it has a global ARIA attribute',\n              focusable: 'Element\\'s role is not presentational because it is focusable',\n              both: 'Element\\'s role is not presentational because it has a global ARIA attribute and is focusable'\n            }\n          }\n        },\n        'role-none': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element\\'s default semantics were overriden with role=\"none\"',\n            fail: 'Element\\'s default semantics were not overridden with role=\"none\"'\n          }\n        },\n        'role-presentation': {\n          impact: 'minor',\n          messages: {\n            pass: 'Element\\'s default semantics were overriden with role=\"presentation\"',\n            fail: 'Element\\'s default semantics were not overridden with role=\"presentation\"'\n          }\n        },\n        'svg-non-empty-title': {\n          impact: 'serious',\n          messages: {\n            pass: 'Element has a child that is a title',\n            fail: {\n              noTitle: 'Element has no child that is a title',\n              emptyTitle: 'Element child title is empty'\n            },\n            incomplete: 'Unable to determine element has a child that is a title'\n          }\n        },\n        'caption-faked': {\n          impact: 'serious',\n          messages: {\n            pass: 'The first row of a table is not used as a caption',\n            fail: 'The first child of the table should be a caption instead of a table cell'\n          }\n        },\n        'html5-scope': {\n          impact: 'moderate',\n          messages: {\n            pass: 'Scope attribute is only used on table header elements (<th>)',\n            fail: 'In HTML 5, scope attributes may only be used on table header elements (<th>)'\n          }\n        },\n        'same-caption-summary': {\n          impact: 'minor',\n          messages: {\n            pass: 'Content of summary attribute and <caption> are not duplicated',\n            fail: 'Content of summary attribute and <caption> element are identical'\n          }\n        },\n        'scope-value': {\n          impact: 'critical',\n          messages: {\n            pass: 'Scope attribute is used correctly',\n            fail: 'The value of the scope attribute may only be \\'row\\' or \\'col\\''\n          }\n        },\n        'td-has-header': {\n          impact: 'critical',\n          messages: {\n            pass: 'All non-empty data cells have table headers',\n            fail: 'Some non-empty data cells do not have table headers'\n          }\n        },\n        'td-headers-attr': {\n          impact: 'serious',\n          messages: {\n            pass: 'The headers attribute is exclusively used to refer to other cells in the table',\n            incomplete: 'The headers attribute is empty',\n            fail: 'The headers attribute is not exclusively used to refer to other cells in the table'\n          }\n        },\n        'th-has-data-cells': {\n          impact: 'serious',\n          messages: {\n            pass: 'All table header cells refer to data cells',\n            fail: 'Not all table header cells refer to data cells',\n            incomplete: 'Table data cells are missing or empty'\n          }\n        },\n        'hidden-content': {\n          impact: 'minor',\n          messages: {\n            pass: 'All content on the page has been analyzed.',\n            fail: 'There were problems analyzing the content on this page.',\n            incomplete: 'There is hidden content on the page that was not analyzed. You will need to trigger the display of this content in order to analyze it.'\n          }\n        }\n      },\n      failureSummaries: {\n        any: {\n          failureMessage: function anonymous(it) {\n            var out = 'Fix any of the following:';\n            var arr1 = it;\n            if (arr1) {\n              var value, i1 = -1, l1 = arr1.length - 1;\n              while (i1 < l1) {\n                value = arr1[i1 += 1];\n                out += '\\n  ' + value.split('\\n').join('\\n  ');\n              }\n            }\n            return out;\n          }\n        },\n        none: {\n          failureMessage: function anonymous(it) {\n            var out = 'Fix all of the following:';\n            var arr1 = it;\n            if (arr1) {\n              var value, i1 = -1, l1 = arr1.length - 1;\n              while (i1 < l1) {\n                value = arr1[i1 += 1];\n                out += '\\n  ' + value.split('\\n').join('\\n  ');\n              }\n            }\n            return out;\n          }\n        }\n      },\n      incompleteFallbackMessage: {}\n    },\n    rules: [ {\n      id: 'accesskeys',\n      selector: '[accesskey]',\n      excludeHidden: false,\n      tags: [ 'cat.keyboard', 'best-practice' ],\n      all: [],\n      any: [],\n      none: [ 'accesskeys' ]\n    }, {\n      id: 'area-alt',\n      selector: 'map area[href]',\n      excludeHidden: false,\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'wcag244', 'wcag412', 'section508', 'section508.22.a', 'ACT' ],\n      all: [],\n      any: [ {\n        options: {\n          attribute: 'alt'\n        },\n        id: 'non-empty-alt'\n      }, 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'aria-allowed-attr',\n      matches: 'aria-allowed-attr-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ 'aria-allowed-attr' ],\n      none: [ 'aria-unsupported-attr', {\n        options: {\n          elementsAllowedAriaLabel: [ 'audio', 'applet', 'canvas', 'dl', 'embed', 'iframe', 'input', 'label', 'meter', 'object', 'svg', 'video' ]\n        },\n        id: 'aria-prohibited-attr'\n      } ]\n    }, {\n      id: 'aria-allowed-role',\n      excludeHidden: false,\n      selector: '[role]',\n      matches: 'aria-allowed-role-matches',\n      tags: [ 'cat.aria', 'best-practice' ],\n      all: [],\n      any: [ {\n        options: {\n          allowImplicit: true,\n          ignoredTags: []\n        },\n        id: 'aria-allowed-role'\n      } ],\n      none: []\n    }, {\n      id: 'aria-command-name',\n      selector: '[role=\"link\"], [role=\"button\"], [role=\"menuitem\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'aria-dialog-name',\n      selector: '[role=\"dialog\"], [role=\"alertdialog\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'best-practice' ],\n      all: [],\n      any: [ 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'aria-hidden-body',\n      selector: 'body',\n      excludeHidden: false,\n      matches: 'is-initiator-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ 'aria-hidden-body' ],\n      none: []\n    }, {\n      id: 'aria-hidden-focus',\n      selector: '[aria-hidden=\"true\"]',\n      matches: 'aria-hidden-focus-matches',\n      excludeHidden: false,\n      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'wcag131' ],\n      all: [ 'focusable-modal-open', 'focusable-disabled', 'focusable-not-tabbable' ],\n      any: [],\n      none: []\n    }, {\n      id: 'aria-input-field-name',\n      selector: '[role=\"combobox\"], [role=\"listbox\"], [role=\"searchbox\"], [role=\"slider\"], [role=\"spinbutton\"], [role=\"textbox\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412', 'ACT' ],\n      all: [],\n      any: [ 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: [ 'no-implicit-explicit-label' ]\n    }, {\n      id: 'aria-meter-name',\n      selector: '[role=\"meter\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag111' ],\n      all: [],\n      any: [ 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'aria-progressbar-name',\n      selector: '[role=\"progressbar\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag111' ],\n      all: [],\n      any: [ 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'aria-required-attr',\n      selector: '[role]',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ 'aria-required-attr' ],\n      none: []\n    }, {\n      id: 'aria-required-children',\n      selector: '[role]',\n      matches: 'aria-required-children-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag131' ],\n      all: [],\n      any: [ {\n        options: {\n          reviewEmpty: [ 'doc-bibliography', 'doc-endnotes', 'grid', 'list', 'listbox', 'table', 'tablist', 'tree', 'treegrid', 'rowgroup' ]\n        },\n        id: 'aria-required-children'\n      } ],\n      none: []\n    }, {\n      id: 'aria-required-parent',\n      selector: '[role]',\n      matches: 'aria-required-parent-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag131' ],\n      all: [],\n      any: [ {\n        options: {\n          ownGroupRoles: [ 'listitem', 'treeitem' ]\n        },\n        id: 'aria-required-parent'\n      } ],\n      none: []\n    }, {\n      id: 'aria-roledescription',\n      selector: '[aria-roledescription]',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ {\n        options: {\n          supportedRoles: [ 'button', 'img', 'checkbox', 'radio', 'combobox', 'menuitemcheckbox', 'menuitemradio' ]\n        },\n        id: 'aria-roledescription'\n      } ],\n      none: []\n    }, {\n      id: 'aria-roles',\n      selector: '[role]',\n      matches: 'no-empty-role-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [],\n      none: [ 'fallbackrole', 'invalidrole', 'abstractrole', 'unsupportedrole' ]\n    }, {\n      id: 'aria-text',\n      selector: '[role=text]',\n      tags: [ 'cat.aria', 'best-practice' ],\n      all: [],\n      any: [ 'no-focusable-content' ],\n      none: []\n    }, {\n      id: 'aria-toggle-field-name',\n      selector: '[role=\"checkbox\"], [role=\"menuitemcheckbox\"], [role=\"menuitemradio\"], [role=\"radio\"], [role=\"switch\"], [role=\"option\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412', 'ACT' ],\n      all: [],\n      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: [ 'no-implicit-explicit-label' ]\n    }, {\n      id: 'aria-tooltip-name',\n      selector: '[role=\"tooltip\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'aria-treeitem-name',\n      selector: '[role=\"treeitem\"]',\n      matches: 'no-naming-method-matches',\n      tags: [ 'cat.aria', 'best-practice' ],\n      all: [],\n      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'aria-valid-attr-value',\n      matches: 'aria-has-attr-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [ {\n        options: [],\n        id: 'aria-valid-attr-value'\n      }, 'aria-errormessage' ],\n      any: [],\n      none: []\n    }, {\n      id: 'aria-valid-attr',\n      matches: 'aria-has-attr-matches',\n      tags: [ 'cat.aria', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ {\n        options: [],\n        id: 'aria-valid-attr'\n      } ],\n      none: []\n    }, {\n      id: 'audio-caption',\n      selector: 'audio',\n      enabled: false,\n      excludeHidden: false,\n      tags: [ 'cat.time-and-media', 'wcag2a', 'wcag121', 'section508', 'section508.22.a' ],\n      all: [],\n      any: [],\n      none: [ 'caption' ]\n    }, {\n      id: 'autocomplete-valid',\n      matches: 'autocomplete-matches',\n      tags: [ 'cat.forms', 'wcag21aa', 'wcag135' ],\n      all: [ 'autocomplete-valid', 'autocomplete-appropriate' ],\n      any: [],\n      none: []\n    }, {\n      id: 'avoid-inline-spacing',\n      selector: '[style]',\n      tags: [ 'cat.structure', 'wcag21aa', 'wcag1412' ],\n      all: [ {\n        options: {\n          cssProperties: [ 'line-height', 'letter-spacing', 'word-spacing' ]\n        },\n        id: 'avoid-inline-spacing'\n      } ],\n      any: [],\n      none: []\n    }, {\n      id: 'blink',\n      selector: 'blink',\n      excludeHidden: false,\n      tags: [ 'cat.time-and-media', 'wcag2a', 'wcag222', 'section508', 'section508.22.j' ],\n      all: [],\n      any: [],\n      none: [ 'is-on-screen' ]\n    }, {\n      id: 'button-name',\n      selector: 'button',\n      matches: 'no-explicit-name-required-matches',\n      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'section508', 'section508.22.a', 'ACT' ],\n      all: [],\n      any: [ 'button-has-visible-text', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      }, 'presentational-role' ],\n      none: []\n    }, {\n      id: 'bypass',\n      selector: 'html',\n      pageLevel: true,\n      matches: 'bypass-matches',\n      reviewOnFail: true,\n      tags: [ 'cat.keyboard', 'wcag2a', 'wcag241', 'section508', 'section508.22.o' ],\n      all: [],\n      any: [ 'internal-link-present', {\n        options: {\n          selector: ':is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]'\n        },\n        id: 'header-present'\n      }, {\n        options: {\n          selector: 'main, [role=main]'\n        },\n        id: 'landmark'\n      } ],\n      none: []\n    }, {\n      id: 'color-contrast',\n      matches: 'color-contrast-matches',\n      excludeHidden: false,\n      tags: [ 'cat.color', 'wcag2aa', 'wcag143' ],\n      all: [],\n      any: [ {\n        options: {\n          ignoreUnicode: true,\n          ignoreLength: false,\n          boldValue: 700,\n          boldTextPt: 14,\n          largeTextPt: 18,\n          contrastRatio: {\n            normal: {\n              expected: 4.5\n            },\n            large: {\n              expected: 3\n            }\n          },\n          shadowOutlineEmMax: .1\n        },\n        id: 'color-contrast'\n      } ],\n      none: []\n    }, {\n      id: 'css-orientation-lock',\n      selector: 'html',\n      tags: [ 'cat.structure', 'wcag134', 'wcag21aa', 'experimental' ],\n      all: [ {\n        options: {\n          degreeThreshold: 2\n        },\n        id: 'css-orientation-lock'\n      } ],\n      any: [],\n      none: [],\n      preload: true\n    }, {\n      id: 'definition-list',\n      selector: 'dl',\n      matches: 'no-role-matches',\n      tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],\n      all: [],\n      any: [],\n      none: [ 'structured-dlitems', 'only-dlitems' ]\n    }, {\n      id: 'dlitem',\n      selector: 'dd, dt',\n      matches: 'no-role-matches',\n      tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],\n      all: [],\n      any: [ 'dlitem' ],\n      none: []\n    }, {\n      id: 'document-title',\n      selector: 'html',\n      matches: 'is-initiator-matches',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag242', 'ACT' ],\n      all: [],\n      any: [ 'doc-has-title' ],\n      none: []\n    }, {\n      id: 'duplicate-id-active',\n      selector: '[id]',\n      matches: 'duplicate-id-active-matches',\n      excludeHidden: false,\n      tags: [ 'cat.parsing', 'wcag2a', 'wcag411' ],\n      all: [],\n      any: [ 'duplicate-id-active' ],\n      none: []\n    }, {\n      id: 'duplicate-id-aria',\n      selector: '[id]',\n      matches: 'duplicate-id-aria-matches',\n      excludeHidden: false,\n      tags: [ 'cat.parsing', 'wcag2a', 'wcag411' ],\n      all: [],\n      any: [ 'duplicate-id-aria' ],\n      none: []\n    }, {\n      id: 'duplicate-id',\n      selector: '[id]',\n      matches: 'duplicate-id-misc-matches',\n      excludeHidden: false,\n      tags: [ 'cat.parsing', 'wcag2a', 'wcag411' ],\n      all: [],\n      any: [ 'duplicate-id' ],\n      none: []\n    }, {\n      id: 'empty-heading',\n      selector: 'h1, h2, h3, h4, h5, h6, [role=\"heading\"]',\n      matches: 'heading-matches',\n      tags: [ 'cat.name-role-value', 'best-practice' ],\n      impact: 'minor',\n      all: [],\n      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'empty-table-header',\n      selector: 'th, [role=\"rowheader\"], [role=\"columnheader\"]',\n      tags: [ 'wcag131', 'cat.aria' ],\n      reviewOnFail: true,\n      all: [],\n      any: [ 'has-visible-text' ],\n      none: []\n    }, {\n      id: 'focus-order-semantics',\n      selector: 'div, h1, h2, h3, h4, h5, h6, [role=heading], p, span',\n      matches: 'inserted-into-focus-order-matches',\n      tags: [ 'cat.keyboard', 'best-practice', 'experimental' ],\n      all: [],\n      any: [ {\n        options: [],\n        id: 'has-widget-role'\n      }, {\n        options: {\n          roles: [ 'tooltip' ]\n        },\n        id: 'valid-scrollable-semantics'\n      } ],\n      none: []\n    }, {\n      id: 'form-field-multiple-labels',\n      selector: 'input, select, textarea',\n      matches: 'label-matches',\n      tags: [ 'cat.forms', 'wcag2a', 'wcag332' ],\n      all: [],\n      any: [],\n      none: [ 'multiple-label' ]\n    }, {\n      id: 'frame-focusable-content',\n      selector: 'html',\n      matches: 'frame-focusable-content-matches',\n      tags: [ 'cat.keyboard', 'wcag2a', 'wcag211' ],\n      all: [],\n      any: [ 'frame-focusable-content' ],\n      none: []\n    }, {\n      id: 'frame-tested',\n      selector: 'frame, iframe',\n      tags: [ 'cat.structure', 'review-item', 'best-practice' ],\n      all: [ {\n        options: {\n          isViolation: false\n        },\n        id: 'frame-tested'\n      } ],\n      any: [],\n      none: []\n    }, {\n      id: 'frame-title-unique',\n      selector: 'frame[title], iframe[title]',\n      matches: 'frame-title-has-text-matches',\n      tags: [ 'cat.text-alternatives', 'best-practice' ],\n      all: [],\n      any: [],\n      none: [ 'unique-frame-title' ]\n    }, {\n      id: 'frame-title',\n      selector: 'frame, iframe',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag241', 'wcag412', 'section508', 'section508.22.i' ],\n      all: [],\n      any: [ {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      }, 'aria-label', 'aria-labelledby', 'presentational-role' ],\n      none: []\n    }, {\n      id: 'heading-order',\n      selector: 'h1, h2, h3, h4, h5, h6, [role=heading]',\n      matches: 'heading-matches',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ 'heading-order' ],\n      none: []\n    }, {\n      id: 'hidden-content',\n      selector: '*',\n      excludeHidden: false,\n      tags: [ 'cat.structure', 'experimental', 'review-item', 'best-practice' ],\n      all: [],\n      any: [ 'hidden-content' ],\n      none: []\n    }, {\n      id: 'html-has-lang',\n      selector: 'html',\n      matches: 'is-initiator-matches',\n      tags: [ 'cat.language', 'wcag2a', 'wcag311', 'ACT' ],\n      all: [],\n      any: [ {\n        options: {\n          attributes: [ 'lang', 'xml:lang' ]\n        },\n        id: 'has-lang'\n      } ],\n      none: []\n    }, {\n      id: 'html-lang-valid',\n      selector: 'html[lang], html[xml\\\\:lang]',\n      tags: [ 'cat.language', 'wcag2a', 'wcag311', 'ACT' ],\n      all: [],\n      any: [],\n      none: [ {\n        options: {\n          attributes: [ 'lang', 'xml:lang' ]\n        },\n        id: 'valid-lang'\n      } ]\n    }, {\n      id: 'html-xml-lang-mismatch',\n      selector: 'html[lang][xml\\\\:lang]',\n      matches: 'xml-lang-mismatch-matches',\n      tags: [ 'cat.language', 'wcag2a', 'wcag311', 'ACT' ],\n      all: [ 'xml-lang-mismatch' ],\n      any: [],\n      none: []\n    }, {\n      id: 'identical-links-same-purpose',\n      selector: 'a[href], area[href], [role=\"link\"]',\n      excludeHidden: false,\n      matches: 'identical-links-same-purpose-matches',\n      tags: [ 'cat.semantics', 'wcag2aaa', 'wcag249', 'best-practice' ],\n      all: [ 'identical-links-same-purpose' ],\n      any: [],\n      none: []\n    }, {\n      id: 'image-alt',\n      selector: 'img',\n      matches: 'no-explicit-name-required-matches',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a', 'ACT' ],\n      all: [],\n      any: [ 'has-alt', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      }, 'presentational-role' ],\n      none: [ 'alt-space-value' ]\n    }, {\n      id: 'image-redundant-alt',\n      selector: 'img',\n      tags: [ 'cat.text-alternatives', 'best-practice' ],\n      all: [],\n      any: [],\n      none: [ {\n        options: {\n          parentSelector: 'button, [role=button], a[href], p, li, td, th'\n        },\n        id: 'duplicate-img-label'\n      } ]\n    }, {\n      id: 'input-button-name',\n      selector: 'input[type=\"button\"], input[type=\"submit\"], input[type=\"reset\"]',\n      matches: 'no-explicit-name-required-matches',\n      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'section508', 'section508.22.a' ],\n      all: [],\n      any: [ 'non-empty-if-present', {\n        options: {\n          attribute: 'value'\n        },\n        id: 'non-empty-value'\n      }, 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      }, 'presentational-role' ],\n      none: []\n    }, {\n      id: 'input-image-alt',\n      selector: 'input[type=\"image\"]',\n      matches: 'no-explicit-name-required-matches',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a', 'ACT' ],\n      all: [],\n      any: [ {\n        options: {\n          attribute: 'alt'\n        },\n        id: 'non-empty-alt'\n      }, 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'label-content-name-mismatch',\n      matches: 'label-content-name-mismatch-matches',\n      tags: [ 'cat.semantics', 'wcag21a', 'wcag253', 'experimental' ],\n      all: [],\n      any: [ {\n        options: {\n          pixelThreshold: .1,\n          occuranceThreshold: 3\n        },\n        id: 'label-content-name-mismatch'\n      } ],\n      none: []\n    }, {\n      id: 'label-title-only',\n      selector: 'input, select, textarea',\n      matches: 'label-matches',\n      tags: [ 'cat.forms', 'best-practice' ],\n      all: [],\n      any: [],\n      none: [ 'title-only' ]\n    }, {\n      id: 'label',\n      selector: 'input, textarea',\n      matches: 'label-matches',\n      tags: [ 'cat.forms', 'wcag2a', 'wcag412', 'wcag131', 'section508', 'section508.22.n', 'ACT' ],\n      all: [],\n      any: [ 'implicit-label', 'explicit-label', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      }, {\n        options: {\n          attribute: 'placeholder'\n        },\n        id: 'non-empty-placeholder'\n      }, 'presentational-role' ],\n      none: [ 'help-same-as-label', 'hidden-explicit-label' ]\n    }, {\n      id: 'landmark-banner-is-top-level',\n      selector: 'header:not([role]), [role=banner]',\n      matches: 'landmark-has-body-context-matches',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ 'landmark-is-top-level' ],\n      none: []\n    }, {\n      id: 'landmark-complementary-is-top-level',\n      selector: 'aside:not([role]), [role=complementary]',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ 'landmark-is-top-level' ],\n      none: []\n    }, {\n      id: 'landmark-contentinfo-is-top-level',\n      selector: 'footer:not([role]), [role=contentinfo]',\n      matches: 'landmark-has-body-context-matches',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ 'landmark-is-top-level' ],\n      none: []\n    }, {\n      id: 'landmark-main-is-top-level',\n      selector: 'main:not([role]), [role=main]',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ 'landmark-is-top-level' ],\n      none: []\n    }, {\n      id: 'landmark-no-duplicate-banner',\n      selector: 'header:not([role]), [role=banner]',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ {\n        options: {\n          selector: 'header:not([role]), [role=banner]',\n          nativeScopeFilter: 'article, aside, main, nav, section'\n        },\n        id: 'page-no-duplicate-banner'\n      } ],\n      none: []\n    }, {\n      id: 'landmark-no-duplicate-contentinfo',\n      selector: 'footer:not([role]), [role=contentinfo]',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ {\n        options: {\n          selector: 'footer:not([role]), [role=contentinfo]',\n          nativeScopeFilter: 'article, aside, main, nav, section'\n        },\n        id: 'page-no-duplicate-contentinfo'\n      } ],\n      none: []\n    }, {\n      id: 'landmark-no-duplicate-main',\n      selector: 'main:not([role]), [role=main]',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [],\n      any: [ {\n        options: {\n          selector: 'main:not([role]), [role=\\'main\\']'\n        },\n        id: 'page-no-duplicate-main'\n      } ],\n      none: []\n    }, {\n      id: 'landmark-one-main',\n      selector: 'html',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [ {\n        options: {\n          selector: 'main:not([role]), [role=\\'main\\']'\n        },\n        id: 'page-has-main'\n      } ],\n      any: [],\n      none: []\n    }, {\n      id: 'landmark-unique',\n      selector: '[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      matches: 'landmark-unique-matches',\n      all: [],\n      any: [ 'landmark-is-unique' ],\n      none: []\n    }, {\n      id: 'link-in-text-block',\n      selector: 'a[href], [role=link]',\n      matches: 'link-in-text-block-matches',\n      excludeHidden: false,\n      tags: [ 'cat.color', 'experimental', 'wcag2a', 'wcag141' ],\n      all: [ 'link-in-text-block' ],\n      any: [],\n      none: []\n    }, {\n      id: 'link-name',\n      selector: 'a[href]',\n      tags: [ 'cat.name-role-value', 'wcag2a', 'wcag412', 'wcag244', 'section508', 'section508.22.a', 'ACT' ],\n      all: [],\n      any: [ 'has-visible-text', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: [ 'focusable-no-name' ]\n    }, {\n      id: 'list',\n      selector: 'ul, ol',\n      matches: 'no-role-matches',\n      tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],\n      all: [],\n      any: [],\n      none: [ 'only-listitems' ]\n    }, {\n      id: 'listitem',\n      selector: 'li',\n      matches: 'no-role-matches',\n      tags: [ 'cat.structure', 'wcag2a', 'wcag131' ],\n      all: [],\n      any: [ 'listitem' ],\n      none: []\n    }, {\n      id: 'marquee',\n      selector: 'marquee',\n      excludeHidden: false,\n      tags: [ 'cat.parsing', 'wcag2a', 'wcag222' ],\n      all: [],\n      any: [],\n      none: [ 'is-on-screen' ]\n    }, {\n      id: 'meta-refresh',\n      selector: 'meta[http-equiv=\"refresh\"]',\n      excludeHidden: false,\n      tags: [ 'cat.time-and-media', 'wcag2a', 'wcag2aaa', 'wcag221', 'wcag224', 'wcag325' ],\n      all: [],\n      any: [ 'meta-refresh' ],\n      none: []\n    }, {\n      id: 'meta-viewport-large',\n      selector: 'meta[name=\"viewport\"]',\n      excludeHidden: false,\n      tags: [ 'cat.sensory-and-visual-cues', 'best-practice' ],\n      all: [],\n      any: [ {\n        options: {\n          scaleMinimum: 5,\n          lowerBound: 2\n        },\n        id: 'meta-viewport-large'\n      } ],\n      none: []\n    }, {\n      id: 'meta-viewport',\n      selector: 'meta[name=\"viewport\"]',\n      excludeHidden: false,\n      tags: [ 'cat.sensory-and-visual-cues', 'best-practice', 'ACT' ],\n      all: [],\n      any: [ {\n        options: {\n          scaleMinimum: 2\n        },\n        id: 'meta-viewport'\n      } ],\n      none: []\n    }, {\n      id: 'nested-interactive',\n      matches: 'nested-interactive-matches',\n      tags: [ 'cat.keyboard', 'wcag2a', 'wcag412' ],\n      all: [],\n      any: [ 'no-focusable-content' ],\n      none: []\n    }, {\n      id: 'no-autoplay-audio',\n      excludeHidden: false,\n      selector: 'audio[autoplay], video[autoplay]',\n      matches: 'no-autoplay-audio-matches',\n      tags: [ 'cat.time-and-media', 'wcag2a', 'wcag142', 'experimental' ],\n      preload: true,\n      all: [ {\n        options: {\n          allowedDuration: 3\n        },\n        id: 'no-autoplay-audio'\n      } ],\n      any: [],\n      none: []\n    }, {\n      id: 'object-alt',\n      selector: 'object',\n      matches: 'no-explicit-name-required-matches',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a' ],\n      all: [],\n      any: [ 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      }, 'presentational-role' ],\n      none: []\n    }, {\n      id: 'p-as-heading',\n      selector: 'p',\n      matches: 'p-as-heading-matches',\n      tags: [ 'cat.semantics', 'wcag2a', 'wcag131', 'experimental' ],\n      all: [ {\n        options: {\n          margins: [ {\n            weight: 150,\n            italic: true\n          }, {\n            weight: 150,\n            size: 1.15\n          }, {\n            italic: true,\n            size: 1.15\n          }, {\n            size: 1.4\n          } ]\n        },\n        id: 'p-as-heading'\n      } ],\n      any: [],\n      none: []\n    }, {\n      id: 'page-has-heading-one',\n      selector: 'html',\n      tags: [ 'cat.semantics', 'best-practice' ],\n      all: [ {\n        options: {\n          selector: 'h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]'\n        },\n        id: 'page-has-heading-one'\n      } ],\n      any: [],\n      none: []\n    }, {\n      id: 'presentation-role-conflict',\n      selector: '[role=\"none\"], [role=\"presentation\"]',\n      tags: [ 'cat.aria', 'best-practice' ],\n      all: [],\n      any: [],\n      none: [ 'is-element-focusable', 'has-global-aria-attribute' ]\n    }, {\n      id: 'region',\n      selector: 'body *',\n      tags: [ 'cat.keyboard', 'best-practice' ],\n      all: [],\n      any: [ {\n        options: {\n          regionMatcher: 'dialog, [role=dialog], [role=alertdialog], svg, iframe'\n        },\n        id: 'region'\n      } ],\n      none: []\n    }, {\n      id: 'role-img-alt',\n      selector: '[role=\\'img\\']:not(img, area, input, object)',\n      matches: 'html-namespace-matches',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a', 'ACT' ],\n      all: [],\n      any: [ 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'scope-attr-valid',\n      selector: 'td[scope], th[scope]',\n      tags: [ 'cat.tables', 'best-practice' ],\n      all: [ 'html5-scope', {\n        options: {\n          values: [ 'row', 'col', 'rowgroup', 'colgroup' ]\n        },\n        id: 'scope-value'\n      } ],\n      any: [],\n      none: []\n    }, {\n      id: 'scrollable-region-focusable',\n      matches: 'scrollable-region-focusable-matches',\n      tags: [ 'cat.keyboard', 'wcag2a', 'wcag211' ],\n      all: [],\n      any: [ 'focusable-content', 'focusable-element' ],\n      none: []\n    }, {\n      id: 'select-name',\n      selector: 'select',\n      tags: [ 'cat.forms', 'wcag2a', 'wcag412', 'wcag131', 'section508', 'section508.22.n', 'ACT' ],\n      all: [],\n      any: [ 'implicit-label', 'explicit-label', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      }, 'presentational-role' ],\n      none: [ 'help-same-as-label', 'hidden-explicit-label' ]\n    }, {\n      id: 'server-side-image-map',\n      selector: 'img[ismap]',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag211', 'section508', 'section508.22.f' ],\n      all: [],\n      any: [],\n      none: [ 'exists' ]\n    }, {\n      id: 'skip-link',\n      selector: 'a[href^=\"#\"], a[href^=\"/#\"]',\n      matches: 'skip-link-matches',\n      tags: [ 'cat.keyboard', 'best-practice' ],\n      all: [],\n      any: [ 'skip-link' ],\n      none: []\n    }, {\n      id: 'svg-img-alt',\n      selector: '[role=\"img\"], [role=\"graphics-symbol\"], svg[role=\"graphics-document\"]',\n      matches: 'svg-namespace-matches',\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag111', 'section508', 'section508.22.a', 'ACT' ],\n      all: [],\n      any: [ 'svg-non-empty-title', 'aria-label', 'aria-labelledby', {\n        options: {\n          attribute: 'title'\n        },\n        id: 'non-empty-title'\n      } ],\n      none: []\n    }, {\n      id: 'tabindex',\n      selector: '[tabindex]',\n      tags: [ 'cat.keyboard', 'best-practice' ],\n      all: [],\n      any: [ 'tabindex' ],\n      none: []\n    }, {\n      id: 'table-duplicate-name',\n      selector: 'table',\n      tags: [ 'cat.tables', 'best-practice' ],\n      all: [],\n      any: [],\n      none: [ 'same-caption-summary' ]\n    }, {\n      id: 'table-fake-caption',\n      selector: 'table',\n      matches: 'data-table-matches',\n      tags: [ 'cat.tables', 'experimental', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ],\n      all: [ 'caption-faked' ],\n      any: [],\n      none: []\n    }, {\n      id: 'td-has-header',\n      selector: 'table',\n      matches: 'data-table-large-matches',\n      tags: [ 'cat.tables', 'experimental', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ],\n      all: [ 'td-has-header' ],\n      any: [],\n      none: []\n    }, {\n      id: 'td-headers-attr',\n      selector: 'table',\n      tags: [ 'cat.tables', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ],\n      all: [ 'td-headers-attr' ],\n      any: [],\n      none: []\n    }, {\n      id: 'th-has-data-cells',\n      selector: 'table',\n      matches: 'data-table-matches',\n      tags: [ 'cat.tables', 'wcag2a', 'wcag131', 'section508', 'section508.22.g' ],\n      all: [ 'th-has-data-cells' ],\n      any: [],\n      none: []\n    }, {\n      id: 'valid-lang',\n      selector: '[lang], [xml\\\\:lang]',\n      matches: 'not-html-matches',\n      tags: [ 'cat.language', 'wcag2aa', 'wcag312' ],\n      all: [],\n      any: [],\n      none: [ {\n        options: {\n          attributes: [ 'lang', 'xml:lang' ]\n        },\n        id: 'valid-lang'\n      } ]\n    }, {\n      id: 'video-caption',\n      selector: 'video',\n      excludeHidden: false,\n      tags: [ 'cat.text-alternatives', 'wcag2a', 'wcag122', 'section508', 'section508.22.a' ],\n      all: [],\n      any: [],\n      none: [ 'caption' ]\n    } ],\n    checks: [ {\n      id: 'abstractrole',\n      evaluate: 'abstractrole-evaluate'\n    }, {\n      id: 'aria-allowed-attr',\n      evaluate: 'aria-allowed-attr-evaluate'\n    }, {\n      id: 'aria-allowed-role',\n      evaluate: 'aria-allowed-role-evaluate',\n      options: {\n        allowImplicit: true,\n        ignoredTags: []\n      }\n    }, {\n      id: 'aria-errormessage',\n      evaluate: 'aria-errormessage-evaluate'\n    }, {\n      id: 'aria-hidden-body',\n      evaluate: 'aria-hidden-body-evaluate'\n    }, {\n      id: 'aria-prohibited-attr',\n      evaluate: 'aria-prohibited-attr-evaluate',\n      options: {\n        elementsAllowedAriaLabel: [ 'audio', 'applet', 'canvas', 'dl', 'embed', 'iframe', 'input', 'label', 'meter', 'object', 'svg', 'video' ]\n      }\n    }, {\n      id: 'aria-required-attr',\n      evaluate: 'aria-required-attr-evaluate'\n    }, {\n      id: 'aria-required-children',\n      evaluate: 'aria-required-children-evaluate',\n      options: {\n        reviewEmpty: [ 'doc-bibliography', 'doc-endnotes', 'grid', 'list', 'listbox', 'table', 'tablist', 'tree', 'treegrid', 'rowgroup' ]\n      }\n    }, {\n      id: 'aria-required-parent',\n      evaluate: 'aria-required-parent-evaluate',\n      options: {\n        ownGroupRoles: [ 'listitem', 'treeitem' ]\n      }\n    }, {\n      id: 'aria-roledescription',\n      evaluate: 'aria-roledescription-evaluate',\n      options: {\n        supportedRoles: [ 'button', 'img', 'checkbox', 'radio', 'combobox', 'menuitemcheckbox', 'menuitemradio' ]\n      }\n    }, {\n      id: 'aria-unsupported-attr',\n      evaluate: 'aria-unsupported-attr-evaluate'\n    }, {\n      id: 'aria-valid-attr-value',\n      evaluate: 'aria-valid-attr-value-evaluate',\n      options: []\n    }, {\n      id: 'aria-valid-attr',\n      evaluate: 'aria-valid-attr-evaluate',\n      options: []\n    }, {\n      id: 'fallbackrole',\n      evaluate: 'fallbackrole-evaluate'\n    }, {\n      id: 'has-global-aria-attribute',\n      evaluate: 'has-global-aria-attribute-evaluate'\n    }, {\n      id: 'has-widget-role',\n      evaluate: 'has-widget-role-evaluate',\n      options: []\n    }, {\n      id: 'invalidrole',\n      evaluate: 'invalidrole-evaluate'\n    }, {\n      id: 'is-element-focusable',\n      evaluate: 'is-element-focusable-evaluate'\n    }, {\n      id: 'no-implicit-explicit-label',\n      evaluate: 'no-implicit-explicit-label-evaluate'\n    }, {\n      id: 'unsupportedrole',\n      evaluate: 'unsupportedrole-evaluate'\n    }, {\n      id: 'valid-scrollable-semantics',\n      evaluate: 'valid-scrollable-semantics-evaluate',\n      options: {\n        roles: [ 'tooltip' ]\n      }\n    }, {\n      id: 'color-contrast',\n      evaluate: 'color-contrast-evaluate',\n      options: {\n        ignoreUnicode: true,\n        ignoreLength: false,\n        boldValue: 700,\n        boldTextPt: 14,\n        largeTextPt: 18,\n        contrastRatio: {\n          normal: {\n            expected: 4.5\n          },\n          large: {\n            expected: 3\n          }\n        },\n        shadowOutlineEmMax: .1\n      }\n    }, {\n      id: 'link-in-text-block',\n      evaluate: 'link-in-text-block-evaluate'\n    }, {\n      id: 'autocomplete-appropriate',\n      evaluate: 'autocomplete-appropriate-evaluate'\n    }, {\n      id: 'autocomplete-valid',\n      evaluate: 'autocomplete-valid-evaluate'\n    }, {\n      id: 'accesskeys',\n      evaluate: 'accesskeys-evaluate',\n      after: 'accesskeys-after'\n    }, {\n      id: 'focusable-content',\n      evaluate: 'focusable-content-evaluate'\n    }, {\n      id: 'focusable-disabled',\n      evaluate: 'focusable-disabled-evaluate'\n    }, {\n      id: 'focusable-element',\n      evaluate: 'focusable-element-evaluate'\n    }, {\n      id: 'focusable-modal-open',\n      evaluate: 'focusable-modal-open-evaluate'\n    }, {\n      id: 'focusable-no-name',\n      evaluate: 'focusable-no-name-evaluate'\n    }, {\n      id: 'focusable-not-tabbable',\n      evaluate: 'focusable-not-tabbable-evaluate'\n    }, {\n      id: 'frame-focusable-content',\n      evaluate: 'no-focusable-content-evaluate'\n    }, {\n      id: 'landmark-is-top-level',\n      evaluate: 'landmark-is-top-level-evaluate'\n    }, {\n      id: 'no-focusable-content',\n      evaluate: 'no-focusable-content-evaluate'\n    }, {\n      id: 'page-has-heading-one',\n      evaluate: 'has-descendant-evaluate',\n      after: 'has-descendant-after',\n      options: {\n        selector: 'h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]'\n      }\n    }, {\n      id: 'page-has-main',\n      evaluate: 'has-descendant-evaluate',\n      after: 'has-descendant-after',\n      options: {\n        selector: 'main:not([role]), [role=\\'main\\']'\n      }\n    }, {\n      id: 'page-no-duplicate-banner',\n      evaluate: 'page-no-duplicate-evaluate',\n      after: 'page-no-duplicate-after',\n      options: {\n        selector: 'header:not([role]), [role=banner]',\n        nativeScopeFilter: 'article, aside, main, nav, section'\n      }\n    }, {\n      id: 'page-no-duplicate-contentinfo',\n      evaluate: 'page-no-duplicate-evaluate',\n      after: 'page-no-duplicate-after',\n      options: {\n        selector: 'footer:not([role]), [role=contentinfo]',\n        nativeScopeFilter: 'article, aside, main, nav, section'\n      }\n    }, {\n      id: 'page-no-duplicate-main',\n      evaluate: 'page-no-duplicate-evaluate',\n      after: 'page-no-duplicate-after',\n      options: {\n        selector: 'main:not([role]), [role=\\'main\\']'\n      }\n    }, {\n      id: 'tabindex',\n      evaluate: 'tabindex-evaluate'\n    }, {\n      id: 'alt-space-value',\n      evaluate: 'alt-space-value-evaluate'\n    }, {\n      id: 'duplicate-img-label',\n      evaluate: 'duplicate-img-label-evaluate',\n      options: {\n        parentSelector: 'button, [role=button], a[href], p, li, td, th'\n      }\n    }, {\n      id: 'explicit-label',\n      evaluate: 'explicit-evaluate'\n    }, {\n      id: 'help-same-as-label',\n      evaluate: 'help-same-as-label-evaluate',\n      enabled: false\n    }, {\n      id: 'hidden-explicit-label',\n      evaluate: 'hidden-explicit-label-evaluate'\n    }, {\n      id: 'implicit-label',\n      evaluate: 'implicit-evaluate'\n    }, {\n      id: 'label-content-name-mismatch',\n      evaluate: 'label-content-name-mismatch-evaluate',\n      options: {\n        pixelThreshold: .1,\n        occuranceThreshold: 3\n      }\n    }, {\n      id: 'multiple-label',\n      evaluate: 'multiple-label-evaluate'\n    }, {\n      id: 'title-only',\n      evaluate: 'title-only-evaluate'\n    }, {\n      id: 'landmark-is-unique',\n      evaluate: 'landmark-is-unique-evaluate',\n      after: 'landmark-is-unique-after'\n    }, {\n      id: 'has-lang',\n      evaluate: 'has-lang-evaluate',\n      options: {\n        attributes: [ 'lang', 'xml:lang' ]\n      }\n    }, {\n      id: 'valid-lang',\n      evaluate: 'valid-lang-evaluate',\n      options: {\n        attributes: [ 'lang', 'xml:lang' ]\n      }\n    }, {\n      id: 'xml-lang-mismatch',\n      evaluate: 'xml-lang-mismatch-evaluate'\n    }, {\n      id: 'dlitem',\n      evaluate: 'dlitem-evaluate'\n    }, {\n      id: 'listitem',\n      evaluate: 'listitem-evaluate'\n    }, {\n      id: 'only-dlitems',\n      evaluate: 'only-dlitems-evaluate'\n    }, {\n      id: 'only-listitems',\n      evaluate: 'only-listitems-evaluate'\n    }, {\n      id: 'structured-dlitems',\n      evaluate: 'structured-dlitems-evaluate'\n    }, {\n      id: 'caption',\n      evaluate: 'caption-evaluate'\n    }, {\n      id: 'frame-tested',\n      evaluate: 'frame-tested-evaluate',\n      options: {\n        isViolation: false\n      }\n    }, {\n      id: 'no-autoplay-audio',\n      evaluate: 'no-autoplay-audio-evaluate',\n      options: {\n        allowedDuration: 3\n      }\n    }, {\n      id: 'css-orientation-lock',\n      evaluate: 'css-orientation-lock-evaluate',\n      options: {\n        degreeThreshold: 2\n      }\n    }, {\n      id: 'meta-viewport-large',\n      evaluate: 'meta-viewport-scale-evaluate',\n      options: {\n        scaleMinimum: 5,\n        lowerBound: 2\n      }\n    }, {\n      id: 'meta-viewport',\n      evaluate: 'meta-viewport-scale-evaluate',\n      options: {\n        scaleMinimum: 2\n      }\n    }, {\n      id: 'header-present',\n      evaluate: 'has-descendant-evaluate',\n      after: 'has-descendant-after',\n      options: {\n        selector: ':is(h1, h2, h3, h4, h5, h6):not([role]), [role=heading]'\n      }\n    }, {\n      id: 'heading-order',\n      evaluate: 'heading-order-evaluate',\n      after: 'heading-order-after'\n    }, {\n      id: 'identical-links-same-purpose',\n      evaluate: 'identical-links-same-purpose-evaluate',\n      after: 'identical-links-same-purpose-after'\n    }, {\n      id: 'internal-link-present',\n      evaluate: 'internal-link-present-evaluate'\n    }, {\n      id: 'landmark',\n      evaluate: 'has-descendant-evaluate',\n      options: {\n        selector: 'main, [role=main]'\n      }\n    }, {\n      id: 'meta-refresh',\n      evaluate: 'meta-refresh-evaluate'\n    }, {\n      id: 'p-as-heading',\n      evaluate: 'p-as-heading-evaluate',\n      options: {\n        margins: [ {\n          weight: 150,\n          italic: true\n        }, {\n          weight: 150,\n          size: 1.15\n        }, {\n          italic: true,\n          size: 1.15\n        }, {\n          size: 1.4\n        } ]\n      }\n    }, {\n      id: 'region',\n      evaluate: 'region-evaluate',\n      options: {\n        regionMatcher: 'dialog, [role=dialog], [role=alertdialog], svg, iframe'\n      }\n    }, {\n      id: 'skip-link',\n      evaluate: 'skip-link-evaluate'\n    }, {\n      id: 'unique-frame-title',\n      evaluate: 'unique-frame-title-evaluate',\n      after: 'unique-frame-title-after'\n    }, {\n      id: 'duplicate-id-active',\n      evaluate: 'duplicate-id-evaluate',\n      after: 'duplicate-id-after'\n    }, {\n      id: 'duplicate-id-aria',\n      evaluate: 'duplicate-id-evaluate',\n      after: 'duplicate-id-after'\n    }, {\n      id: 'duplicate-id',\n      evaluate: 'duplicate-id-evaluate',\n      after: 'duplicate-id-after'\n    }, {\n      id: 'aria-label',\n      evaluate: 'aria-label-evaluate'\n    }, {\n      id: 'aria-labelledby',\n      evaluate: 'aria-labelledby-evaluate'\n    }, {\n      id: 'avoid-inline-spacing',\n      evaluate: 'avoid-inline-spacing-evaluate',\n      options: {\n        cssProperties: [ 'line-height', 'letter-spacing', 'word-spacing' ]\n      }\n    }, {\n      id: 'button-has-visible-text',\n      evaluate: 'has-text-content-evaluate'\n    }, {\n      id: 'doc-has-title',\n      evaluate: 'doc-has-title-evaluate'\n    }, {\n      id: 'exists',\n      evaluate: 'exists-evaluate'\n    }, {\n      id: 'has-alt',\n      evaluate: 'has-alt-evaluate'\n    }, {\n      id: 'has-visible-text',\n      evaluate: 'has-text-content-evaluate'\n    }, {\n      id: 'is-on-screen',\n      evaluate: 'is-on-screen-evaluate'\n    }, {\n      id: 'non-empty-alt',\n      evaluate: 'attr-non-space-content-evaluate',\n      options: {\n        attribute: 'alt'\n      }\n    }, {\n      id: 'non-empty-if-present',\n      evaluate: 'non-empty-if-present-evaluate'\n    }, {\n      id: 'non-empty-placeholder',\n      evaluate: 'attr-non-space-content-evaluate',\n      options: {\n        attribute: 'placeholder'\n      }\n    }, {\n      id: 'non-empty-title',\n      evaluate: 'attr-non-space-content-evaluate',\n      options: {\n        attribute: 'title'\n      }\n    }, {\n      id: 'non-empty-value',\n      evaluate: 'attr-non-space-content-evaluate',\n      options: {\n        attribute: 'value'\n      }\n    }, {\n      id: 'presentational-role',\n      evaluate: 'presentational-role-evaluate'\n    }, {\n      id: 'role-none',\n      evaluate: 'matches-definition-evaluate',\n      deprecated: true,\n      options: {\n        matcher: {\n          attributes: {\n            role: 'none'\n          }\n        }\n      }\n    }, {\n      id: 'role-presentation',\n      evaluate: 'matches-definition-evaluate',\n      deprecated: true,\n      options: {\n        matcher: {\n          attributes: {\n            role: 'presentation'\n          }\n        }\n      }\n    }, {\n      id: 'svg-non-empty-title',\n      evaluate: 'svg-non-empty-title-evaluate'\n    }, {\n      id: 'caption-faked',\n      evaluate: 'caption-faked-evaluate'\n    }, {\n      id: 'html5-scope',\n      evaluate: 'html5-scope-evaluate'\n    }, {\n      id: 'same-caption-summary',\n      evaluate: 'same-caption-summary-evaluate'\n    }, {\n      id: 'scope-value',\n      evaluate: 'scope-value-evaluate',\n      options: {\n        values: [ 'row', 'col', 'rowgroup', 'colgroup' ]\n      }\n    }, {\n      id: 'td-has-header',\n      evaluate: 'td-has-header-evaluate'\n    }, {\n      id: 'td-headers-attr',\n      evaluate: 'td-headers-attr-evaluate'\n    }, {\n      id: 'th-has-data-cells',\n      evaluate: 'th-has-data-cells-evaluate'\n    }, {\n      id: 'hidden-content',\n      evaluate: 'hidden-content-evaluate'\n    } ]\n  });\n})(typeof window === 'object' ? window : this);", "export default function(url, options) {\n\toptions = options || {};\n\treturn new Promise( (resolve, reject) => {\n\t\tconst request = new XMLHttpRequest();\n\t\tconst keys = [];\n\t\tconst all = [];\n\t\tconst headers = {};\n\n\t\tconst response = () => ({\n\t\t\tok: (request.status/100|0) == 2,\t\t// 200-299\n\t\t\tstatusText: request.statusText,\n\t\t\tstatus: request.status,\n\t\t\turl: request.responseURL,\n\t\t\ttext: () => Promise.resolve(request.responseText),\n\t\t\tjson: () => Promise.resolve(request.responseText).then(JSON.parse),\n\t\t\tblob: () => Promise.resolve(new Blob([request.response])),\n\t\t\tclone: response,\n\t\t\theaders: {\n\t\t\t\tkeys: () => keys,\n\t\t\t\tentries: () => all,\n\t\t\t\tget: n => headers[n.toLowerCase()],\n\t\t\t\thas: n => n.toLowerCase() in headers\n\t\t\t}\n\t\t});\n\n\t\trequest.open(options.method || 'get', url, true);\n\n\t\trequest.onload = () => {\n\t\t\trequest.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm, (m, key, value) => {\n\t\t\t\tkeys.push(key = key.toLowerCase());\n\t\t\t\tall.push([key, value]);\n\t\t\t\theaders[key] = headers[key] ? `${headers[key]},${value}` : value;\n\t\t\t});\n\t\t\tresolve(response());\n\t\t};\n\n\t\trequest.onerror = reject;\n\n\t\trequest.withCredentials = options.credentials=='include';\n\n\t\tfor (const i in options.headers) {\n\t\t\trequest.setRequestHeader(i, options.headers[i]);\n\t\t}\n\n\t\trequest.send(options.body || null);\n\t});\n}\n", "module.exports = self.fetch || (self.fetch = require('unfetch').default || require('unfetch'));\n", "/*! VelocityJS.org (1.5.2). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */\r\n\r\n/*************************\r\n Velocity jQuery Shim\r\n *************************/\r\n\r\n/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */\r\n\r\n/* This file contains the jQuery functions that Velocity relies on, thereby removing Velocity's dependency on a full copy of jQuery, and allowing it to work in any environment. */\r\n/* These shimmed functions are only used if jQuery isn't present. If both this shim and jQuery are loaded, Velocity defaults to jQuery proper. */\r\n/* Browser support: Using this shim instead of jQuery proper removes support for IE8. */\r\n\r\n(function(window) {\r\n\t\"use strict\";\r\n\t/***************\r\n\t Setup\r\n\t ***************/\r\n\r\n\t/* If jQuery is already loaded, there's no point in loading this shim. */\r\n\tif (window.jQuery) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t/* jQuery base. */\r\n\tvar $ = function(selector, context) {\r\n\t\treturn new $.fn.init(selector, context);\r\n\t};\r\n\r\n\t/********************\r\n\t Private Methods\r\n\t ********************/\r\n\r\n\t/* jQuery */\r\n\t$.isWindow = function(obj) {\r\n\t\t/* jshint eqeqeq: false */\r\n\t\treturn obj && obj === obj.window;\r\n\t};\r\n\r\n\t/* jQuery */\r\n\t$.type = function(obj) {\r\n\t\tif (!obj) {\r\n\t\t\treturn obj + \"\";\r\n\t\t}\r\n\r\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\r\n\t\t\t\tclass2type[toString.call(obj)] || \"object\" :\r\n\t\t\t\ttypeof obj;\r\n\t};\r\n\r\n\t/* jQuery */\r\n\t$.isArray = Array.isArray || function(obj) {\r\n\t\treturn $.type(obj) === \"array\";\r\n\t};\r\n\r\n\t/* jQuery */\r\n\tfunction isArraylike(obj) {\r\n\t\tvar length = obj.length,\r\n\t\t\t\ttype = $.type(obj);\r\n\r\n\t\tif (type === \"function\" || $.isWindow(obj)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (obj.nodeType === 1 && length) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && (length - 1) in obj;\r\n\t}\r\n\r\n\t/***************\r\n\t $ Methods\r\n\t ***************/\r\n\r\n\t/* jQuery: Support removed for IE<9. */\r\n\t$.isPlainObject = function(obj) {\r\n\t\tvar key;\r\n\r\n\t\tif (!obj || $.type(obj) !== \"object\" || obj.nodeType || $.isWindow(obj)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tif (obj.constructor &&\r\n\t\t\t\t\t!hasOwn.call(obj, \"constructor\") &&\r\n\t\t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\")) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (key in obj) {\r\n\t\t}\r\n\r\n\t\treturn key === undefined || hasOwn.call(obj, key);\r\n\t};\r\n\r\n\t/* jQuery */\r\n\t$.each = function(obj, callback, args) {\r\n\t\tvar value,\r\n\t\t\t\ti = 0,\r\n\t\t\t\tlength = obj.length,\r\n\t\t\t\tisArray = isArraylike(obj);\r\n\r\n\t\tif (args) {\r\n\t\t\tif (isArray) {\r\n\t\t\t\tfor (; i < length; i++) {\r\n\t\t\t\t\tvalue = callback.apply(obj[i], args);\r\n\r\n\t\t\t\t\tif (value === false) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i in obj) {\r\n\t\t\t\t\tif (!obj.hasOwnProperty(i)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue = callback.apply(obj[i], args);\r\n\r\n\t\t\t\t\tif (value === false) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\tif (isArray) {\r\n\t\t\t\tfor (; i < length; i++) {\r\n\t\t\t\t\tvalue = callback.call(obj[i], i, obj[i]);\r\n\r\n\t\t\t\t\tif (value === false) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i in obj) {\r\n\t\t\t\t\tif (!obj.hasOwnProperty(i)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvalue = callback.call(obj[i], i, obj[i]);\r\n\r\n\t\t\t\t\tif (value === false) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t};\r\n\r\n\t/* Custom */\r\n\t$.data = function(node, key, value) {\r\n\t\t/* $.getData() */\r\n\t\tif (value === undefined) {\r\n\t\t\tvar getId = node[$.expando],\r\n\t\t\t\t\tstore = getId && cache[getId];\r\n\r\n\t\t\tif (key === undefined) {\r\n\t\t\t\treturn store;\r\n\t\t\t} else if (store) {\r\n\t\t\t\tif (key in store) {\r\n\t\t\t\t\treturn store[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t/* $.setData() */\r\n\t\t} else if (key !== undefined) {\r\n\t\t\tvar setId = node[$.expando] || (node[$.expando] = ++$.uuid);\r\n\r\n\t\t\tcache[setId] = cache[setId] || {};\r\n\t\t\tcache[setId][key] = value;\r\n\r\n\t\t\treturn value;\r\n\t\t}\r\n\t};\r\n\r\n\t/* Custom */\r\n\t$.removeData = function(node, keys) {\r\n\t\tvar id = node[$.expando],\r\n\t\t\t\tstore = id && cache[id];\r\n\r\n\t\tif (store) {\r\n\t\t\t// Cleanup the entire store if no keys are provided.\r\n\t\t\tif (!keys) {\r\n\t\t\t\tdelete cache[id];\r\n\t\t\t} else {\r\n\t\t\t\t$.each(keys, function(_, key) {\r\n\t\t\t\t\tdelete store[key];\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/* jQuery */\r\n\t$.extend = function() {\r\n\t\tvar src, copyIsArray, copy, name, options, clone,\r\n\t\t\t\ttarget = arguments[0] || {},\r\n\t\t\t\ti = 1,\r\n\t\t\t\tlength = arguments.length,\r\n\t\t\t\tdeep = false;\r\n\r\n\t\tif (typeof target === \"boolean\") {\r\n\t\t\tdeep = target;\r\n\r\n\t\t\ttarget = arguments[i] || {};\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\tif (typeof target !== \"object\" && $.type(target) !== \"function\") {\r\n\t\t\ttarget = {};\r\n\t\t}\r\n\r\n\t\tif (i === length) {\r\n\t\t\ttarget = this;\r\n\t\t\ti--;\r\n\t\t}\r\n\r\n\t\tfor (; i < length; i++) {\r\n\t\t\tif ((options = arguments[i])) {\r\n\t\t\t\tfor (name in options) {\r\n\t\t\t\t\tif (!options.hasOwnProperty(name)) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsrc = target[name];\r\n\t\t\t\t\tcopy = options[name];\r\n\r\n\t\t\t\t\tif (target === copy) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) {\r\n\t\t\t\t\t\tif (copyIsArray) {\r\n\t\t\t\t\t\t\tcopyIsArray = false;\r\n\t\t\t\t\t\t\tclone = src && $.isArray(src) ? src : [];\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tclone = src && $.isPlainObject(src) ? src : {};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttarget[name] = $.extend(deep, clone, copy);\r\n\r\n\t\t\t\t\t} else if (copy !== undefined) {\r\n\t\t\t\t\t\ttarget[name] = copy;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t};\r\n\r\n\t/* jQuery 1.4.3 */\r\n\t$.queue = function(elem, type, data) {\r\n\t\tfunction $makeArray(arr, results) {\r\n\t\t\tvar ret = results || [];\r\n\r\n\t\t\tif (arr) {\r\n\t\t\t\tif (isArraylike(Object(arr))) {\r\n\t\t\t\t\t/* $.merge */\r\n\t\t\t\t\t(function(first, second) {\r\n\t\t\t\t\t\tvar len = +second.length,\r\n\t\t\t\t\t\t\t\tj = 0,\r\n\t\t\t\t\t\t\t\ti = first.length;\r\n\r\n\t\t\t\t\t\twhile (j < len) {\r\n\t\t\t\t\t\t\tfirst[i++] = second[j++];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (len !== len) {\r\n\t\t\t\t\t\t\twhile (second[j] !== undefined) {\r\n\t\t\t\t\t\t\t\tfirst[i++] = second[j++];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfirst.length = i;\r\n\r\n\t\t\t\t\t\treturn first;\r\n\t\t\t\t\t})(ret, typeof arr === \"string\" ? [arr] : arr);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t[].push.call(ret, arr);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn ret;\r\n\t\t}\r\n\r\n\t\tif (!elem) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttype = (type || \"fx\") + \"queue\";\r\n\r\n\t\tvar q = $.data(elem, type);\r\n\r\n\t\tif (!data) {\r\n\t\t\treturn q || [];\r\n\t\t}\r\n\r\n\t\tif (!q || $.isArray(data)) {\r\n\t\t\tq = $.data(elem, type, $makeArray(data));\r\n\t\t} else {\r\n\t\t\tq.push(data);\r\n\t\t}\r\n\r\n\t\treturn q;\r\n\t};\r\n\r\n\t/* jQuery 1.4.3 */\r\n\t$.dequeue = function(elems, type) {\r\n\t\t/* Custom: Embed element iteration. */\r\n\t\t$.each(elems.nodeType ? [elems] : elems, function(i, elem) {\r\n\t\t\ttype = type || \"fx\";\r\n\r\n\t\t\tvar queue = $.queue(elem, type),\r\n\t\t\t\t\tfn = queue.shift();\r\n\r\n\t\t\tif (fn === \"inprogress\") {\r\n\t\t\t\tfn = queue.shift();\r\n\t\t\t}\r\n\r\n\t\t\tif (fn) {\r\n\t\t\t\tif (type === \"fx\") {\r\n\t\t\t\t\tqueue.unshift(\"inprogress\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfn.call(elem, function() {\r\n\t\t\t\t\t$.dequeue(elem, type);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\t/******************\r\n\t $.fn Methods\r\n\t ******************/\r\n\r\n\t/* jQuery */\r\n\t$.fn = $.prototype = {\r\n\t\tinit: function(selector) {\r\n\t\t\t/* Just return the element wrapped inside an array; don't proceed with the actual jQuery node wrapping process. */\r\n\t\t\tif (selector.nodeType) {\r\n\t\t\t\tthis[0] = selector;\r\n\r\n\t\t\t\treturn this;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error(\"Not a DOM node.\");\r\n\t\t\t}\r\n\t\t},\r\n\t\toffset: function() {\r\n\t\t\t/* jQuery altered code: Dropped disconnected DOM node checking. */\r\n\t\t\tvar box = this[0].getBoundingClientRect ? this[0].getBoundingClientRect() : {top: 0, left: 0};\r\n\r\n\t\t\treturn {\r\n\t\t\t\ttop: box.top + (window.pageYOffset || document.scrollTop || 0) - (document.clientTop || 0),\r\n\t\t\t\tleft: box.left + (window.pageXOffset || document.scrollLeft || 0) - (document.clientLeft || 0)\r\n\t\t\t};\r\n\t\t},\r\n\t\tposition: function() {\r\n\t\t\t/* jQuery */\r\n\t\t\tfunction offsetParentFn(elem) {\r\n\t\t\t\tvar offsetParent = elem.offsetParent;\r\n\r\n\t\t\t\twhile (offsetParent && (offsetParent.nodeName.toLowerCase() !== \"html\" && offsetParent.style && offsetParent.style.position.toLowerCase() === \"static\")) {\r\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn offsetParent || document;\r\n\t\t\t}\r\n\r\n\t\t\t/* Zepto */\r\n\t\t\tvar elem = this[0],\r\n\t\t\t\t\toffsetParent = offsetParentFn(elem),\r\n\t\t\t\t\toffset = this.offset(),\r\n\t\t\t\t\tparentOffset = /^(?:body|html)$/i.test(offsetParent.nodeName) ? {top: 0, left: 0} : $(offsetParent).offset();\r\n\r\n\t\t\toffset.top -= parseFloat(elem.style.marginTop) || 0;\r\n\t\t\toffset.left -= parseFloat(elem.style.marginLeft) || 0;\r\n\r\n\t\t\tif (offsetParent.style) {\r\n\t\t\t\tparentOffset.top += parseFloat(offsetParent.style.borderTopWidth) || 0;\r\n\t\t\t\tparentOffset.left += parseFloat(offsetParent.style.borderLeftWidth) || 0;\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\ttop: offset.top - parentOffset.top,\r\n\t\t\t\tleft: offset.left - parentOffset.left\r\n\t\t\t};\r\n\t\t}\r\n\t};\r\n\r\n\t/**********************\r\n\t Private Variables\r\n\t **********************/\r\n\r\n\t/* For $.data() */\r\n\tvar cache = {};\r\n\t$.expando = \"velocity\" + (new Date().getTime());\r\n\t$.uuid = 0;\r\n\r\n\t/* For $.queue() */\r\n\tvar class2type = {},\r\n\t\t\thasOwn = class2type.hasOwnProperty,\r\n\t\t\ttoString = class2type.toString;\r\n\r\n\tvar types = \"Boolean Number String Function Array Date RegExp Object Error\".split(\" \");\r\n\tfor (var i = 0; i < types.length; i++) {\r\n\t\tclass2type[\"[object \" + types[i] + \"]\"] = types[i].toLowerCase();\r\n\t}\r\n\r\n\t/* Makes $(node) possible, without having to call init. */\r\n\t$.fn.init.prototype = $.fn;\r\n\r\n\t/* Globalize Velocity onto the window, and assign its Utilities property. */\r\n\twindow.Velocity = {Utilities: $};\r\n})(window);\r\n\r\n/******************\r\n Velocity.js\r\n ******************/\r\n\r\n(function(factory) {\r\n\t\"use strict\";\r\n\t/* CommonJS module. */\r\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n\t\tmodule.exports = factory();\r\n\t\t/* AMD module. */\r\n\t} else if (typeof define === \"function\" && define.amd) {\r\n\t\tdefine(factory);\r\n\t\t/* Browser globals. */\r\n\t} else {\r\n\t\tfactory();\r\n\t}\r\n}(function() {\r\n\t\"use strict\";\r\n\treturn function(global, window, document, undefined) {\r\n\r\n\t\t/***************\r\n\t\t Summary\r\n\t\t ***************/\r\n\r\n\t\t/*\r\n\t\t - CSS: CSS stack that works independently from the rest of Velocity.\r\n\t\t - animate(): Core animation method that iterates over the targeted elements and queues the incoming call onto each element individually.\r\n\t\t - Pre-Queueing: Prepare the element for animation by instantiating its data cache and processing the call's options.\r\n\t\t - Queueing: The logic that runs once the call has reached its point of execution in the element's $.queue() stack.\r\n\t\t Most logic is placed here to avoid risking it becoming stale (if the element's properties have changed).\r\n\t\t - Pushing: Consolidation of the tween data followed by its push onto the global in-progress calls container.\r\n\t\t - tick(): The single requestAnimationFrame loop responsible for tweening all in-progress calls.\r\n\t\t - completeCall(): Handles the cleanup process for each Velocity call.\r\n\t\t */\r\n\r\n\t\t/*********************\r\n\t\t Helper Functions\r\n\t\t *********************/\r\n\r\n\t\t/* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\r\n\t\tvar IE = (function() {\r\n\t\t\tif (document.documentMode) {\r\n\t\t\t\treturn document.documentMode;\r\n\t\t\t} else {\r\n\t\t\t\tfor (var i = 7; i > 4; i--) {\r\n\t\t\t\t\tvar div = document.createElement(\"div\");\r\n\r\n\t\t\t\t\tdiv.innerHTML = \"<!--[if IE \" + i + \"]><span></span><![endif]-->\";\r\n\r\n\t\t\t\t\tif (div.getElementsByTagName(\"span\").length) {\r\n\t\t\t\t\t\tdiv = null;\r\n\r\n\t\t\t\t\t\treturn i;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn undefined;\r\n\t\t})();\r\n\r\n\t\t/* rAF shim. Gist: https://gist.github.com/julianshapiro/9497513 */\r\n\t\tvar rAFShim = (function() {\r\n\t\t\tvar timeLast = 0;\r\n\r\n\t\t\treturn window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) {\r\n\t\t\t\tvar timeCurrent = (new Date()).getTime(),\r\n\t\t\t\t\t\ttimeDelta;\r\n\r\n\t\t\t\t/* Dynamically set delay on a per-tick basis to match 60fps. */\r\n\t\t\t\t/* Technique by Erik Moller. MIT license: https://gist.github.com/paulirish/1579671 */\r\n\t\t\t\ttimeDelta = Math.max(0, 16 - (timeCurrent - timeLast));\r\n\t\t\t\ttimeLast = timeCurrent + timeDelta;\r\n\r\n\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\tcallback(timeCurrent + timeDelta);\r\n\t\t\t\t}, timeDelta);\r\n\t\t\t};\r\n\t\t})();\r\n\r\n\t\tvar performance = (function() {\r\n\t\t\tvar perf = window.performance || {};\r\n\r\n\t\t\tif (typeof perf.now !== \"function\") {\r\n\t\t\t\tvar nowOffset = perf.timing && perf.timing.navigationStart ? perf.timing.navigationStart : (new Date()).getTime();\r\n\r\n\t\t\t\tperf.now = function() {\r\n\t\t\t\t\treturn (new Date()).getTime() - nowOffset;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn perf;\r\n\t\t})();\r\n\r\n\t\t/* Array compacting. Copyright Lo-Dash. MIT License: https://github.com/lodash/lodash/blob/master/LICENSE.txt */\r\n\t\tfunction compactSparseArray(array) {\r\n\t\t\tvar index = -1,\r\n\t\t\t\t\tlength = array ? array.length : 0,\r\n\t\t\t\t\tresult = [];\r\n\r\n\t\t\twhile (++index < length) {\r\n\t\t\t\tvar value = array[index];\r\n\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tresult.push(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Shim for \"fixing\" IE's lack of support (IE < 9) for applying slice\r\n\t\t * on host objects like NamedNodeMap, NodeList, and HTMLCollection\r\n\t\t * (technically, since host objects have been implementation-dependent,\r\n\t\t * at least before ES2015, IE hasn't needed to work this way).\r\n\t\t * Also works on strings, fixes IE < 9 to allow an explicit undefined\r\n\t\t * for the 2nd argument (as in Firefox), and prevents errors when\r\n\t\t * called on other DOM objects.\r\n\t\t */\r\n\t\tvar _slice = (function() {\r\n\t\t\tvar slice = Array.prototype.slice;\r\n\r\n\t\t\ttry {\r\n\t\t\t\t// Can't be used with DOM elements in IE < 9\r\n\t\t\t\tslice.call(document.documentElement);\r\n\t\t\t\treturn slice;\r\n\t\t\t} catch (e) { // Fails in IE < 9\r\n\r\n\t\t\t\t// This will work for genuine arrays, array-like objects, \r\n\t\t\t\t// NamedNodeMap (attributes, entities, notations),\r\n\t\t\t\t// NodeList (e.g., getElementsByTagName), HTMLCollection (e.g., childNodes),\r\n\t\t\t\t// and will not fail on other DOM objects (as do DOM elements in IE < 9)\r\n\t\t\t\treturn function(begin, end) {\r\n\t\t\t\t\tvar len = this.length;\r\n\r\n\t\t\t\t\tif (typeof begin !== \"number\") {\r\n\t\t\t\t\t\tbegin = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// IE < 9 gets unhappy with an undefined end argument\r\n\t\t\t\t\tif (typeof end !== \"number\") {\r\n\t\t\t\t\t\tend = len;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// For native Array objects, we use the native slice function\r\n\t\t\t\t\tif (this.slice) {\r\n\t\t\t\t\t\treturn slice.call(this, begin, end);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// For array like object we handle it ourselves.\r\n\t\t\t\t\tvar i,\r\n\t\t\t\t\t\t\tcloned = [],\r\n\t\t\t\t\t\t\t// Handle negative value for \"begin\"\r\n\t\t\t\t\t\t\tstart = (begin >= 0) ? begin : Math.max(0, len + begin),\r\n\t\t\t\t\t\t\t// Handle negative value for \"end\"\r\n\t\t\t\t\t\t\tupTo = end < 0 ? len + end : Math.min(end, len),\r\n\t\t\t\t\t\t\t// Actual expected size of the slice\r\n\t\t\t\t\t\t\tsize = upTo - start;\r\n\r\n\t\t\t\t\tif (size > 0) {\r\n\t\t\t\t\t\tcloned = new Array(size);\r\n\t\t\t\t\t\tif (this.charAt) {\r\n\t\t\t\t\t\t\tfor (i = 0; i < size; i++) {\r\n\t\t\t\t\t\t\t\tcloned[i] = this.charAt(start + i);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tfor (i = 0; i < size; i++) {\r\n\t\t\t\t\t\t\t\tcloned[i] = this[start + i];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn cloned;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t})();\r\n\r\n\t\t/* .indexOf doesn't exist in IE<9 */\r\n\t\tvar _inArray = (function() {\r\n\t\t\tif (Array.prototype.includes) {\r\n\t\t\t\treturn function(arr, val) {\r\n\t\t\t\t\treturn arr.includes(val);\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tif (Array.prototype.indexOf) {\r\n\t\t\t\treturn function(arr, val) {\r\n\t\t\t\t\treturn arr.indexOf(val) >= 0;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn function(arr, val) {\r\n\t\t\t\tfor (var i = 0; i < arr.length; i++) {\r\n\t\t\t\t\tif (arr[i] === val) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\tfunction sanitizeElements(elements) {\r\n\t\t\t/* Unwrap jQuery/Zepto objects. */\r\n\t\t\tif (Type.isWrapped(elements)) {\r\n\t\t\t\telements = _slice.call(elements);\r\n\t\t\t\t/* Wrap a single element in an array so that $.each() can iterate with the element instead of its node's children. */\r\n\t\t\t} else if (Type.isNode(elements)) {\r\n\t\t\t\telements = [elements];\r\n\t\t\t}\r\n\r\n\t\t\treturn elements;\r\n\t\t}\r\n\r\n\t\tvar Type = {\r\n\t\t\tisNumber: function(variable) {\r\n\t\t\t\treturn (typeof variable === \"number\");\r\n\t\t\t},\r\n\t\t\tisString: function(variable) {\r\n\t\t\t\treturn (typeof variable === \"string\");\r\n\t\t\t},\r\n\t\t\tisArray: Array.isArray || function(variable) {\r\n\t\t\t\treturn Object.prototype.toString.call(variable) === \"[object Array]\";\r\n\t\t\t},\r\n\t\t\tisFunction: function(variable) {\r\n\t\t\t\treturn Object.prototype.toString.call(variable) === \"[object Function]\";\r\n\t\t\t},\r\n\t\t\tisNode: function(variable) {\r\n\t\t\t\treturn variable && variable.nodeType;\r\n\t\t\t},\r\n\t\t\t/* Determine if variable is an array-like wrapped jQuery, Zepto or similar element, or even a NodeList etc. */\r\n\t\t\t/* NOTE: HTMLFormElements also have a length. */\r\n\t\t\tisWrapped: function(variable) {\r\n\t\t\t\treturn variable\r\n\t\t\t\t\t\t&& variable !== window\r\n\t\t\t\t\t\t&& Type.isNumber(variable.length)\r\n\t\t\t\t\t\t&& !Type.isString(variable)\r\n\t\t\t\t\t\t&& !Type.isFunction(variable)\r\n\t\t\t\t\t\t&& !Type.isNode(variable)\r\n\t\t\t\t\t\t&& (variable.length === 0 || Type.isNode(variable[0]));\r\n\t\t\t},\r\n\t\t\tisSVG: function(variable) {\r\n\t\t\t\treturn window.SVGElement && (variable instanceof window.SVGElement);\r\n\t\t\t},\r\n\t\t\tisEmptyObject: function(variable) {\r\n\t\t\t\tfor (var name in variable) {\r\n\t\t\t\t\tif (variable.hasOwnProperty(name)) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/*****************\r\n\t\t Dependencies\r\n\t\t *****************/\r\n\r\n\t\tvar $,\r\n\t\t\t\tisJQuery = false;\r\n\r\n\t\tif (global.fn && global.fn.jquery) {\r\n\t\t\t$ = global;\r\n\t\t\tisJQuery = true;\r\n\t\t} else {\r\n\t\t\t$ = window.Velocity.Utilities;\r\n\t\t}\r\n\r\n\t\tif (IE <= 8 && !isJQuery) {\r\n\t\t\tthrow new Error(\"Velocity: IE8 and below require jQuery to be loaded before Velocity.\");\r\n\t\t} else if (IE <= 7) {\r\n\t\t\t/* Revert to jQuery's $.animate(), and lose Velocity's extra features. */\r\n\t\t\tjQuery.fn.velocity = jQuery.fn.animate;\r\n\r\n\t\t\t/* Now that $.fn.velocity is aliased, abort this Velocity declaration. */\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t/*****************\r\n\t\t Constants\r\n\t\t *****************/\r\n\r\n\t\tvar DURATION_DEFAULT = 400,\r\n\t\t\t\tEASING_DEFAULT = \"swing\";\r\n\r\n\t\t/*************\r\n\t\t State\r\n\t\t *************/\r\n\r\n\t\tvar Velocity = {\r\n\t\t\t/* Container for page-wide Velocity state data. */\r\n\t\t\tState: {\r\n\t\t\t\t/* Detect mobile devices to determine if mobileHA should be turned on. */\r\n\t\t\t\tisMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(window.navigator.userAgent),\r\n\t\t\t\t/* The mobileHA option's behavior changes on older Android devices (Gingerbread, versions 2.3.3-2.3.7). */\r\n\t\t\t\tisAndroid: /Android/i.test(window.navigator.userAgent),\r\n\t\t\t\tisGingerbread: /Android 2\\.3\\.[3-7]/i.test(window.navigator.userAgent),\r\n\t\t\t\tisChrome: window.chrome,\r\n\t\t\t\tisFirefox: /Firefox/i.test(window.navigator.userAgent),\r\n\t\t\t\t/* Create a cached element for re-use when checking for CSS property prefixes. */\r\n\t\t\t\tprefixElement: document.createElement(\"div\"),\r\n\t\t\t\t/* Cache every prefix match to avoid repeating lookups. */\r\n\t\t\t\tprefixMatches: {},\r\n\t\t\t\t/* Cache the anchor used for animating window scrolling. */\r\n\t\t\t\tscrollAnchor: null,\r\n\t\t\t\t/* Cache the browser-specific property names associated with the scroll anchor. */\r\n\t\t\t\tscrollPropertyLeft: null,\r\n\t\t\t\tscrollPropertyTop: null,\r\n\t\t\t\t/* Keep track of whether our RAF tick is running. */\r\n\t\t\t\tisTicking: false,\r\n\t\t\t\t/* Container for every in-progress call to Velocity. */\r\n\t\t\t\tcalls: [],\r\n\t\t\t\tdelayedElements: {\r\n\t\t\t\t\tcount: 0\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t/* Velocity's custom CSS stack. Made global for unit testing. */\r\n\t\t\tCSS: {/* Defined below. */},\r\n\t\t\t/* A shim of the jQuery utility functions used by Velocity -- provided by Velocity's optional jQuery shim. */\r\n\t\t\tUtilities: $,\r\n\t\t\t/* Container for the user's custom animation redirects that are referenced by name in place of the properties map argument. */\r\n\t\t\tRedirects: {/* Manually registered by the user. */},\r\n\t\t\tEasings: {/* Defined below. */},\r\n\t\t\t/* Attempt to use ES6 Promises by default. Users can override this with a third-party promises library. */\r\n\t\t\tPromise: window.Promise,\r\n\t\t\t/* Velocity option defaults, which can be overriden by the user. */\r\n\t\t\tdefaults: {\r\n\t\t\t\tqueue: \"\",\r\n\t\t\t\tduration: DURATION_DEFAULT,\r\n\t\t\t\teasing: EASING_DEFAULT,\r\n\t\t\t\tbegin: undefined,\r\n\t\t\t\tcomplete: undefined,\r\n\t\t\t\tprogress: undefined,\r\n\t\t\t\tdisplay: undefined,\r\n\t\t\t\tvisibility: undefined,\r\n\t\t\t\tloop: false,\r\n\t\t\t\tdelay: false,\r\n\t\t\t\tmobileHA: true,\r\n\t\t\t\t/* Advanced: Set to false to prevent property values from being cached between consecutive Velocity-initiated chain calls. */\r\n\t\t\t\t_cacheValues: true,\r\n\t\t\t\t/* Advanced: Set to false if the promise should always resolve on empty element lists. */\r\n\t\t\t\tpromiseRejectEmpty: true\r\n\t\t\t},\r\n\t\t\t/* A design goal of Velocity is to cache data wherever possible in order to avoid DOM requerying. Accordingly, each element has a data cache. */\r\n\t\t\tinit: function(element) {\r\n\t\t\t\t$.data(element, \"velocity\", {\r\n\t\t\t\t\t/* Store whether this is an SVG element, since its properties are retrieved and updated differently than standard HTML elements. */\r\n\t\t\t\t\tisSVG: Type.isSVG(element),\r\n\t\t\t\t\t/* Keep track of whether the element is currently being animated by Velocity.\r\n\t\t\t\t\t This is used to ensure that property values are not transferred between non-consecutive (stale) calls. */\r\n\t\t\t\t\tisAnimating: false,\r\n\t\t\t\t\t/* A reference to the element's live computedStyle object. Learn more here: https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle */\r\n\t\t\t\t\tcomputedStyle: null,\r\n\t\t\t\t\t/* Tween data is cached for each animation on the element so that data can be passed across calls --\r\n\t\t\t\t\t in particular, end values are used as subsequent start values in consecutive Velocity calls. */\r\n\t\t\t\t\ttweensContainer: null,\r\n\t\t\t\t\t/* The full root property values of each CSS hook being animated on this element are cached so that:\r\n\t\t\t\t\t 1) Concurrently-animating hooks sharing the same root can have their root values' merged into one while tweening.\r\n\t\t\t\t\t 2) Post-hook-injection root values can be transferred over to consecutively chained Velocity calls as starting root values. */\r\n\t\t\t\t\trootPropertyValueCache: {},\r\n\t\t\t\t\t/* A cache for transform updates, which must be manually flushed via CSS.flushTransformCache(). */\r\n\t\t\t\t\ttransformCache: {}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t/* A parallel to jQuery's $.css(), used for getting/setting Velocity's hooked CSS properties. */\r\n\t\t\thook: null, /* Defined below. */\r\n\t\t\t/* Velocity-wide animation time remapping for testing purposes. */\r\n\t\t\tmock: false,\r\n\t\t\tversion: {major: 1, minor: 5, patch: 2},\r\n\t\t\t/* Set to 1 or 2 (most verbose) to output debug info to console. */\r\n\t\t\tdebug: false,\r\n\t\t\t/* Use rAF high resolution timestamp when available */\r\n\t\t\ttimestamp: true,\r\n\t\t\t/* Pause all animations */\r\n\t\t\tpauseAll: function(queueName) {\r\n\t\t\t\tvar currentTime = (new Date()).getTime();\r\n\r\n\t\t\t\t$.each(Velocity.State.calls, function(i, activeCall) {\r\n\r\n\t\t\t\t\tif (activeCall) {\r\n\r\n\t\t\t\t\t\t/* If we have a queueName and this call is not on that queue, skip */\r\n\t\t\t\t\t\tif (queueName !== undefined && ((activeCall[2].queue !== queueName) || (activeCall[2].queue === false))) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Set call to paused */\r\n\t\t\t\t\t\tactiveCall[5] = {\r\n\t\t\t\t\t\t\tresume: false\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t/* Pause timers on any currently delayed calls */\r\n\t\t\t\t$.each(Velocity.State.delayedElements, function(k, element) {\r\n\t\t\t\t\tif (!element) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpauseDelayOnElement(element, currentTime);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\t/* Resume all animations */\r\n\t\t\tresumeAll: function(queueName) {\r\n\t\t\t\tvar currentTime = (new Date()).getTime();\r\n\r\n\t\t\t\t$.each(Velocity.State.calls, function(i, activeCall) {\r\n\r\n\t\t\t\t\tif (activeCall) {\r\n\r\n\t\t\t\t\t\t/* If we have a queueName and this call is not on that queue, skip */\r\n\t\t\t\t\t\tif (queueName !== undefined && ((activeCall[2].queue !== queueName) || (activeCall[2].queue === false))) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Set call to resumed if it was paused */\r\n\t\t\t\t\t\tif (activeCall[5]) {\r\n\t\t\t\t\t\t\tactiveCall[5].resume = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t/* Resume timers on any currently delayed calls */\r\n\t\t\t\t$.each(Velocity.State.delayedElements, function(k, element) {\r\n\t\t\t\t\tif (!element) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tresumeDelayOnElement(element, currentTime);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/* Retrieve the appropriate scroll anchor and property name for the browser: https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY */\r\n\t\tif (window.pageYOffset !== undefined) {\r\n\t\t\tVelocity.State.scrollAnchor = window;\r\n\t\t\tVelocity.State.scrollPropertyLeft = \"pageXOffset\";\r\n\t\t\tVelocity.State.scrollPropertyTop = \"pageYOffset\";\r\n\t\t} else {\r\n\t\t\tVelocity.State.scrollAnchor = document.documentElement || document.body.parentNode || document.body;\r\n\t\t\tVelocity.State.scrollPropertyLeft = \"scrollLeft\";\r\n\t\t\tVelocity.State.scrollPropertyTop = \"scrollTop\";\r\n\t\t}\r\n\r\n\t\t/* Shorthand alias for jQuery's $.data() utility. */\r\n\t\tfunction Data(element) {\r\n\t\t\t/* Hardcode a reference to the plugin name. */\r\n\t\t\tvar response = $.data(element, \"velocity\");\r\n\r\n\t\t\t/* jQuery <=1.4.2 returns null instead of undefined when no match is found. We normalize this behavior. */\r\n\t\t\treturn response === null ? undefined : response;\r\n\t\t}\r\n\r\n\t\t/**************\r\n\t\t Delay Timer\r\n\t\t **************/\r\n\r\n\t\tfunction pauseDelayOnElement(element, currentTime) {\r\n\t\t\t/* Check for any delay timers, and pause the set timeouts (while preserving time data)\r\n\t\t\t to be resumed when the \"resume\" command is issued */\r\n\t\t\tvar data = Data(element);\r\n\t\t\tif (data && data.delayTimer && !data.delayPaused) {\r\n\t\t\t\tdata.delayRemaining = data.delay - currentTime + data.delayBegin;\r\n\t\t\t\tdata.delayPaused = true;\r\n\t\t\t\tclearTimeout(data.delayTimer.setTimeout);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction resumeDelayOnElement(element, currentTime) {\r\n\t\t\t/* Check for any paused timers and resume */\r\n\t\t\tvar data = Data(element);\r\n\t\t\tif (data && data.delayTimer && data.delayPaused) {\r\n\t\t\t\t/* If the element was mid-delay, re initiate the timeout with the remaining delay */\r\n\t\t\t\tdata.delayPaused = false;\r\n\t\t\t\tdata.delayTimer.setTimeout = setTimeout(data.delayTimer.next, data.delayRemaining);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\r\n\t\t/**************\r\n\t\t Easing\r\n\t\t **************/\r\n\r\n\t\t/* Step easing generator. */\r\n\t\tfunction generateStep(steps) {\r\n\t\t\treturn function(p) {\r\n\t\t\t\treturn Math.round(p * steps) * (1 / steps);\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t/* Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */\r\n\t\tfunction generateBezier(mX1, mY1, mX2, mY2) {\r\n\t\t\tvar NEWTON_ITERATIONS = 4,\r\n\t\t\t\t\tNEWTON_MIN_SLOPE = 0.001,\r\n\t\t\t\t\tSUBDIVISION_PRECISION = 0.0000001,\r\n\t\t\t\t\tSUBDIVISION_MAX_ITERATIONS = 10,\r\n\t\t\t\t\tkSplineTableSize = 11,\r\n\t\t\t\t\tkSampleStepSize = 1.0 / (kSplineTableSize - 1.0),\r\n\t\t\t\t\tfloat32ArraySupported = \"Float32Array\" in window;\r\n\r\n\t\t\t/* Must contain four arguments. */\r\n\t\t\tif (arguments.length !== 4) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t/* Arguments must be numbers. */\r\n\t\t\tfor (var i = 0; i < 4; ++i) {\r\n\t\t\t\tif (typeof arguments[i] !== \"number\" || isNaN(arguments[i]) || !isFinite(arguments[i])) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/* X values must be in the [0, 1] range. */\r\n\t\t\tmX1 = Math.min(mX1, 1);\r\n\t\t\tmX2 = Math.min(mX2, 1);\r\n\t\t\tmX1 = Math.max(mX1, 0);\r\n\t\t\tmX2 = Math.max(mX2, 0);\r\n\r\n\t\t\tvar mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\r\n\r\n\t\t\tfunction A(aA1, aA2) {\r\n\t\t\t\treturn 1.0 - 3.0 * aA2 + 3.0 * aA1;\r\n\t\t\t}\r\n\t\t\tfunction B(aA1, aA2) {\r\n\t\t\t\treturn 3.0 * aA2 - 6.0 * aA1;\r\n\t\t\t}\r\n\t\t\tfunction C(aA1) {\r\n\t\t\t\treturn 3.0 * aA1;\r\n\t\t\t}\r\n\r\n\t\t\tfunction calcBezier(aT, aA1, aA2) {\r\n\t\t\t\treturn ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\r\n\t\t\t}\r\n\r\n\t\t\tfunction getSlope(aT, aA1, aA2) {\r\n\t\t\t\treturn 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\r\n\t\t\t}\r\n\r\n\t\t\tfunction newtonRaphsonIterate(aX, aGuessT) {\r\n\t\t\t\tfor (var i = 0; i < NEWTON_ITERATIONS; ++i) {\r\n\t\t\t\t\tvar currentSlope = getSlope(aGuessT, mX1, mX2);\r\n\r\n\t\t\t\t\tif (currentSlope === 0.0) {\r\n\t\t\t\t\t\treturn aGuessT;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar currentX = calcBezier(aGuessT, mX1, mX2) - aX;\r\n\t\t\t\t\taGuessT -= currentX / currentSlope;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn aGuessT;\r\n\t\t\t}\r\n\r\n\t\t\tfunction calcSampleValues() {\r\n\t\t\t\tfor (var i = 0; i < kSplineTableSize; ++i) {\r\n\t\t\t\t\tmSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tfunction binarySubdivide(aX, aA, aB) {\r\n\t\t\t\tvar currentX, currentT, i = 0;\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t\tcurrentT = aA + (aB - aA) / 2.0;\r\n\t\t\t\t\tcurrentX = calcBezier(currentT, mX1, mX2) - aX;\r\n\t\t\t\t\tif (currentX > 0.0) {\r\n\t\t\t\t\t\taB = currentT;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\taA = currentT;\r\n\t\t\t\t\t}\r\n\t\t\t\t} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\r\n\r\n\t\t\t\treturn currentT;\r\n\t\t\t}\r\n\r\n\t\t\tfunction getTForX(aX) {\r\n\t\t\t\tvar intervalStart = 0.0,\r\n\t\t\t\t\t\tcurrentSample = 1,\r\n\t\t\t\t\t\tlastSample = kSplineTableSize - 1;\r\n\r\n\t\t\t\tfor (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\r\n\t\t\t\t\tintervalStart += kSampleStepSize;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t--currentSample;\r\n\r\n\t\t\t\tvar dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\r\n\t\t\t\t\t\tguessForT = intervalStart + dist * kSampleStepSize,\r\n\t\t\t\t\t\tinitialSlope = getSlope(guessForT, mX1, mX2);\r\n\r\n\t\t\t\tif (initialSlope >= NEWTON_MIN_SLOPE) {\r\n\t\t\t\t\treturn newtonRaphsonIterate(aX, guessForT);\r\n\t\t\t\t} else if (initialSlope === 0.0) {\r\n\t\t\t\t\treturn guessForT;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar _precomputed = false;\r\n\r\n\t\t\tfunction precompute() {\r\n\t\t\t\t_precomputed = true;\r\n\t\t\t\tif (mX1 !== mY1 || mX2 !== mY2) {\r\n\t\t\t\t\tcalcSampleValues();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar f = function(aX) {\r\n\t\t\t\tif (!_precomputed) {\r\n\t\t\t\t\tprecompute();\r\n\t\t\t\t}\r\n\t\t\t\tif (mX1 === mY1 && mX2 === mY2) {\r\n\t\t\t\t\treturn aX;\r\n\t\t\t\t}\r\n\t\t\t\tif (aX === 0) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\tif (aX === 1) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn calcBezier(getTForX(aX), mY1, mY2);\r\n\t\t\t};\r\n\r\n\t\t\tf.getControlPoints = function() {\r\n\t\t\t\treturn [{x: mX1, y: mY1}, {x: mX2, y: mY2}];\r\n\t\t\t};\r\n\r\n\t\t\tvar str = \"generateBezier(\" + [mX1, mY1, mX2, mY2] + \")\";\r\n\t\t\tf.toString = function() {\r\n\t\t\t\treturn str;\r\n\t\t\t};\r\n\r\n\t\t\treturn f;\r\n\t\t}\r\n\r\n\t\t/* Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\r\n\t\t/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\r\n\t\t then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\r\n\t\tvar generateSpringRK4 = (function() {\r\n\t\t\tfunction springAccelerationForState(state) {\r\n\t\t\t\treturn (-state.tension * state.x) - (state.friction * state.v);\r\n\t\t\t}\r\n\r\n\t\t\tfunction springEvaluateStateWithDerivative(initialState, dt, derivative) {\r\n\t\t\t\tvar state = {\r\n\t\t\t\t\tx: initialState.x + derivative.dx * dt,\r\n\t\t\t\t\tv: initialState.v + derivative.dv * dt,\r\n\t\t\t\t\ttension: initialState.tension,\r\n\t\t\t\t\tfriction: initialState.friction\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn {dx: state.v, dv: springAccelerationForState(state)};\r\n\t\t\t}\r\n\r\n\t\t\tfunction springIntegrateState(state, dt) {\r\n\t\t\t\tvar a = {\r\n\t\t\t\t\tdx: state.v,\r\n\t\t\t\t\tdv: springAccelerationForState(state)\r\n\t\t\t\t},\r\n\t\t\t\t\t\tb = springEvaluateStateWithDerivative(state, dt * 0.5, a),\r\n\t\t\t\t\t\tc = springEvaluateStateWithDerivative(state, dt * 0.5, b),\r\n\t\t\t\t\t\td = springEvaluateStateWithDerivative(state, dt, c),\r\n\t\t\t\t\t\tdxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx),\r\n\t\t\t\t\t\tdvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv);\r\n\r\n\t\t\t\tstate.x = state.x + dxdt * dt;\r\n\t\t\t\tstate.v = state.v + dvdt * dt;\r\n\r\n\t\t\t\treturn state;\r\n\t\t\t}\r\n\r\n\t\t\treturn function springRK4Factory(tension, friction, duration) {\r\n\r\n\t\t\t\tvar initState = {\r\n\t\t\t\t\tx: -1,\r\n\t\t\t\t\tv: 0,\r\n\t\t\t\t\ttension: null,\r\n\t\t\t\t\tfriction: null\r\n\t\t\t\t},\r\n\t\t\t\t\t\tpath = [0],\r\n\t\t\t\t\t\ttime_lapsed = 0,\r\n\t\t\t\t\t\ttolerance = 1 / 10000,\r\n\t\t\t\t\t\tDT = 16 / 1000,\r\n\t\t\t\t\t\thave_duration, dt, last_state;\r\n\r\n\t\t\t\ttension = parseFloat(tension) || 500;\r\n\t\t\t\tfriction = parseFloat(friction) || 20;\r\n\t\t\t\tduration = duration || null;\r\n\r\n\t\t\t\tinitState.tension = tension;\r\n\t\t\t\tinitState.friction = friction;\r\n\r\n\t\t\t\thave_duration = duration !== null;\r\n\r\n\t\t\t\t/* Calculate the actual time it takes for this animation to complete with the provided conditions. */\r\n\t\t\t\tif (have_duration) {\r\n\t\t\t\t\t/* Run the simulation without a duration. */\r\n\t\t\t\t\ttime_lapsed = springRK4Factory(tension, friction);\r\n\t\t\t\t\t/* Compute the adjusted time delta. */\r\n\t\t\t\t\tdt = time_lapsed / duration * DT;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdt = DT;\r\n\t\t\t\t}\r\n\r\n\t\t\t\twhile (true) {\r\n\t\t\t\t\t/* Next/step function .*/\r\n\t\t\t\t\tlast_state = springIntegrateState(last_state || initState, dt);\r\n\t\t\t\t\t/* Store the position. */\r\n\t\t\t\t\tpath.push(1 + last_state.x);\r\n\t\t\t\t\ttime_lapsed += 16;\r\n\t\t\t\t\t/* If the change threshold is reached, break. */\r\n\t\t\t\t\tif (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\r\n\t\t\t\t computed path and returns a snapshot of the position according to a given percentComplete. */\r\n\t\t\t\treturn !have_duration ? time_lapsed : function(percentComplete) {\r\n\t\t\t\t\treturn path[ (percentComplete * (path.length - 1)) | 0 ];\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t}());\r\n\r\n\t\t/* jQuery easings. */\r\n\t\tVelocity.Easings = {\r\n\t\t\tlinear: function(p) {\r\n\t\t\t\treturn p;\r\n\t\t\t},\r\n\t\t\tswing: function(p) {\r\n\t\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\r\n\t\t\t},\r\n\t\t\t/* Bonus \"spring\" easing, which is a less exaggerated version of easeInOutElastic. */\r\n\t\t\tspring: function(p) {\r\n\t\t\t\treturn 1 - (Math.cos(p * 4.5 * Math.PI) * Math.exp(-p * 6));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/* CSS3 and Robert Penner easings. */\r\n\t\t$.each(\r\n\t\t\t\t[\r\n\t\t\t\t\t[\"ease\", [0.25, 0.1, 0.25, 1.0]],\r\n\t\t\t\t\t[\"ease-in\", [0.42, 0.0, 1.00, 1.0]],\r\n\t\t\t\t\t[\"ease-out\", [0.00, 0.0, 0.58, 1.0]],\r\n\t\t\t\t\t[\"ease-in-out\", [0.42, 0.0, 0.58, 1.0]],\r\n\t\t\t\t\t[\"easeInSine\", [0.47, 0, 0.745, 0.715]],\r\n\t\t\t\t\t[\"easeOutSine\", [0.39, 0.575, 0.565, 1]],\r\n\t\t\t\t\t[\"easeInOutSine\", [0.445, 0.05, 0.55, 0.95]],\r\n\t\t\t\t\t[\"easeInQuad\", [0.55, 0.085, 0.68, 0.53]],\r\n\t\t\t\t\t[\"easeOutQuad\", [0.25, 0.46, 0.45, 0.94]],\r\n\t\t\t\t\t[\"easeInOutQuad\", [0.455, 0.03, 0.515, 0.955]],\r\n\t\t\t\t\t[\"easeInCubic\", [0.55, 0.055, 0.675, 0.19]],\r\n\t\t\t\t\t[\"easeOutCubic\", [0.215, 0.61, 0.355, 1]],\r\n\t\t\t\t\t[\"easeInOutCubic\", [0.645, 0.045, 0.355, 1]],\r\n\t\t\t\t\t[\"easeInQuart\", [0.895, 0.03, 0.685, 0.22]],\r\n\t\t\t\t\t[\"easeOutQuart\", [0.165, 0.84, 0.44, 1]],\r\n\t\t\t\t\t[\"easeInOutQuart\", [0.77, 0, 0.175, 1]],\r\n\t\t\t\t\t[\"easeInQuint\", [0.755, 0.05, 0.855, 0.06]],\r\n\t\t\t\t\t[\"easeOutQuint\", [0.23, 1, 0.32, 1]],\r\n\t\t\t\t\t[\"easeInOutQuint\", [0.86, 0, 0.07, 1]],\r\n\t\t\t\t\t[\"easeInExpo\", [0.95, 0.05, 0.795, 0.035]],\r\n\t\t\t\t\t[\"easeOutExpo\", [0.19, 1, 0.22, 1]],\r\n\t\t\t\t\t[\"easeInOutExpo\", [1, 0, 0, 1]],\r\n\t\t\t\t\t[\"easeInCirc\", [0.6, 0.04, 0.98, 0.335]],\r\n\t\t\t\t\t[\"easeOutCirc\", [0.075, 0.82, 0.165, 1]],\r\n\t\t\t\t\t[\"easeInOutCirc\", [0.785, 0.135, 0.15, 0.86]]\r\n\t\t\t\t], function(i, easingArray) {\r\n\t\t\tVelocity.Easings[easingArray[0]] = generateBezier.apply(null, easingArray[1]);\r\n\t\t});\r\n\r\n\t\t/* Determine the appropriate easing type given an easing input. */\r\n\t\tfunction getEasing(value, duration) {\r\n\t\t\tvar easing = value;\r\n\r\n\t\t\t/* The easing option can either be a string that references a pre-registered easing,\r\n\t\t\t or it can be a two-/four-item array of integers to be converted into a bezier/spring function. */\r\n\t\t\tif (Type.isString(value)) {\r\n\t\t\t\t/* Ensure that the easing has been assigned to jQuery's Velocity.Easings object. */\r\n\t\t\t\tif (!Velocity.Easings[value]) {\r\n\t\t\t\t\teasing = false;\r\n\t\t\t\t}\r\n\t\t\t} else if (Type.isArray(value) && value.length === 1) {\r\n\t\t\t\teasing = generateStep.apply(null, value);\r\n\t\t\t} else if (Type.isArray(value) && value.length === 2) {\r\n\t\t\t\t/* springRK4 must be passed the animation's duration. */\r\n\t\t\t\t/* Note: If the springRK4 array contains non-numbers, generateSpringRK4() returns an easing\r\n\t\t\t\t function generated with default tension and friction values. */\r\n\t\t\t\teasing = generateSpringRK4.apply(null, value.concat([duration]));\r\n\t\t\t} else if (Type.isArray(value) && value.length === 4) {\r\n\t\t\t\t/* Note: If the bezier array contains non-numbers, generateBezier() returns false. */\r\n\t\t\t\teasing = generateBezier.apply(null, value);\r\n\t\t\t} else {\r\n\t\t\t\teasing = false;\r\n\t\t\t}\r\n\r\n\t\t\t/* Revert to the Velocity-wide default easing type, or fall back to \"swing\" (which is also jQuery's default)\r\n\t\t\t if the Velocity-wide default has been incorrectly modified. */\r\n\t\t\tif (easing === false) {\r\n\t\t\t\tif (Velocity.Easings[Velocity.defaults.easing]) {\r\n\t\t\t\t\teasing = Velocity.defaults.easing;\r\n\t\t\t\t} else {\r\n\t\t\t\t\teasing = EASING_DEFAULT;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn easing;\r\n\t\t}\r\n\r\n\t\t/*****************\r\n\t\t CSS Stack\r\n\t\t *****************/\r\n\r\n\t\t/* The CSS object is a highly condensed and performant CSS stack that fully replaces jQuery's.\r\n\t\t It handles the validation, getting, and setting of both standard CSS properties and CSS property hooks. */\r\n\t\t/* Note: A \"CSS\" shorthand is aliased so that our code is easier to read. */\r\n\t\tvar CSS = Velocity.CSS = {\r\n\t\t\t/*************\r\n\t\t\t RegEx\r\n\t\t\t *************/\r\n\r\n\t\t\tRegEx: {\r\n\t\t\t\tisHex: /^#([A-f\\d]{3}){1,2}$/i,\r\n\t\t\t\t/* Unwrap a property value's surrounding text, e.g. \"rgba(4, 3, 2, 1)\" ==> \"4, 3, 2, 1\" and \"rect(4px 3px 2px 1px)\" ==> \"4px 3px 2px 1px\". */\r\n\t\t\t\tvalueUnwrap: /^[A-z]+\\((.*)\\)$/i,\r\n\t\t\t\twrappedValueAlreadyExtracted: /[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,\r\n\t\t\t\t/* Split a multi-value property into an array of subvalues, e.g. \"rgba(4, 3, 2, 1) 4px 3px 2px 1px\" ==> [ \"rgba(4, 3, 2, 1)\", \"4px\", \"3px\", \"2px\", \"1px\" ]. */\r\n\t\t\t\tvalueSplit: /([A-z]+\\(.+\\))|(([A-z0-9#-.]+?)(?=\\s|$))/ig\r\n\t\t\t},\r\n\t\t\t/************\r\n\t\t\t Lists\r\n\t\t\t ************/\r\n\r\n\t\t\tLists: {\r\n\t\t\t\tcolors: [\"fill\", \"stroke\", \"stopColor\", \"color\", \"backgroundColor\", \"borderColor\", \"borderTopColor\", \"borderRightColor\", \"borderBottomColor\", \"borderLeftColor\", \"outlineColor\"],\r\n\t\t\t\ttransformsBase: [\"translateX\", \"translateY\", \"scale\", \"scaleX\", \"scaleY\", \"skewX\", \"skewY\", \"rotateZ\"],\r\n\t\t\t\ttransforms3D: [\"transformPerspective\", \"translateZ\", \"scaleZ\", \"rotateX\", \"rotateY\"],\r\n\t\t\t\tunits: [\r\n\t\t\t\t\t\"%\", // relative\r\n\t\t\t\t\t\"em\", \"ex\", \"ch\", \"rem\", // font relative\r\n\t\t\t\t\t\"vw\", \"vh\", \"vmin\", \"vmax\", // viewport relative\r\n\t\t\t\t\t\"cm\", \"mm\", \"Q\", \"in\", \"pc\", \"pt\", \"px\", // absolute lengths\r\n\t\t\t\t\t\"deg\", \"grad\", \"rad\", \"turn\", // angles\r\n\t\t\t\t\t\"s\", \"ms\" // time\r\n\t\t\t\t],\r\n\t\t\t\tcolorNames: {\r\n\t\t\t\t\t\"aliceblue\": \"240,248,255\",\r\n\t\t\t\t\t\"antiquewhite\": \"250,235,215\",\r\n\t\t\t\t\t\"aquamarine\": \"127,255,212\",\r\n\t\t\t\t\t\"aqua\": \"0,255,255\",\r\n\t\t\t\t\t\"azure\": \"240,255,255\",\r\n\t\t\t\t\t\"beige\": \"245,245,220\",\r\n\t\t\t\t\t\"bisque\": \"255,228,196\",\r\n\t\t\t\t\t\"black\": \"0,0,0\",\r\n\t\t\t\t\t\"blanchedalmond\": \"255,235,205\",\r\n\t\t\t\t\t\"blueviolet\": \"138,43,226\",\r\n\t\t\t\t\t\"blue\": \"0,0,255\",\r\n\t\t\t\t\t\"brown\": \"165,42,42\",\r\n\t\t\t\t\t\"burlywood\": \"222,184,135\",\r\n\t\t\t\t\t\"cadetblue\": \"95,158,160\",\r\n\t\t\t\t\t\"chartreuse\": \"127,255,0\",\r\n\t\t\t\t\t\"chocolate\": \"210,105,30\",\r\n\t\t\t\t\t\"coral\": \"255,127,80\",\r\n\t\t\t\t\t\"cornflowerblue\": \"100,149,237\",\r\n\t\t\t\t\t\"cornsilk\": \"255,248,220\",\r\n\t\t\t\t\t\"crimson\": \"220,20,60\",\r\n\t\t\t\t\t\"cyan\": \"0,255,255\",\r\n\t\t\t\t\t\"darkblue\": \"0,0,139\",\r\n\t\t\t\t\t\"darkcyan\": \"0,139,139\",\r\n\t\t\t\t\t\"darkgoldenrod\": \"184,134,11\",\r\n\t\t\t\t\t\"darkgray\": \"169,169,169\",\r\n\t\t\t\t\t\"darkgrey\": \"169,169,169\",\r\n\t\t\t\t\t\"darkgreen\": \"0,100,0\",\r\n\t\t\t\t\t\"darkkhaki\": \"189,183,107\",\r\n\t\t\t\t\t\"darkmagenta\": \"139,0,139\",\r\n\t\t\t\t\t\"darkolivegreen\": \"85,107,47\",\r\n\t\t\t\t\t\"darkorange\": \"255,140,0\",\r\n\t\t\t\t\t\"darkorchid\": \"153,50,204\",\r\n\t\t\t\t\t\"darkred\": \"139,0,0\",\r\n\t\t\t\t\t\"darksalmon\": \"233,150,122\",\r\n\t\t\t\t\t\"darkseagreen\": \"143,188,143\",\r\n\t\t\t\t\t\"darkslateblue\": \"72,61,139\",\r\n\t\t\t\t\t\"darkslategray\": \"47,79,79\",\r\n\t\t\t\t\t\"darkturquoise\": \"0,206,209\",\r\n\t\t\t\t\t\"darkviolet\": \"148,0,211\",\r\n\t\t\t\t\t\"deeppink\": \"255,20,147\",\r\n\t\t\t\t\t\"deepskyblue\": \"0,191,255\",\r\n\t\t\t\t\t\"dimgray\": \"105,105,105\",\r\n\t\t\t\t\t\"dimgrey\": \"105,105,105\",\r\n\t\t\t\t\t\"dodgerblue\": \"30,144,255\",\r\n\t\t\t\t\t\"firebrick\": \"178,34,34\",\r\n\t\t\t\t\t\"floralwhite\": \"255,250,240\",\r\n\t\t\t\t\t\"forestgreen\": \"34,139,34\",\r\n\t\t\t\t\t\"fuchsia\": \"255,0,255\",\r\n\t\t\t\t\t\"gainsboro\": \"220,220,220\",\r\n\t\t\t\t\t\"ghostwhite\": \"248,248,255\",\r\n\t\t\t\t\t\"gold\": \"255,215,0\",\r\n\t\t\t\t\t\"goldenrod\": \"218,165,32\",\r\n\t\t\t\t\t\"gray\": \"128,128,128\",\r\n\t\t\t\t\t\"grey\": \"128,128,128\",\r\n\t\t\t\t\t\"greenyellow\": \"173,255,47\",\r\n\t\t\t\t\t\"green\": \"0,128,0\",\r\n\t\t\t\t\t\"honeydew\": \"240,255,240\",\r\n\t\t\t\t\t\"hotpink\": \"255,105,180\",\r\n\t\t\t\t\t\"indianred\": \"205,92,92\",\r\n\t\t\t\t\t\"indigo\": \"75,0,130\",\r\n\t\t\t\t\t\"ivory\": \"255,255,240\",\r\n\t\t\t\t\t\"khaki\": \"240,230,140\",\r\n\t\t\t\t\t\"lavenderblush\": \"255,240,245\",\r\n\t\t\t\t\t\"lavender\": \"230,230,250\",\r\n\t\t\t\t\t\"lawngreen\": \"124,252,0\",\r\n\t\t\t\t\t\"lemonchiffon\": \"255,250,205\",\r\n\t\t\t\t\t\"lightblue\": \"173,216,230\",\r\n\t\t\t\t\t\"lightcoral\": \"240,128,128\",\r\n\t\t\t\t\t\"lightcyan\": \"224,255,255\",\r\n\t\t\t\t\t\"lightgoldenrodyellow\": \"250,250,210\",\r\n\t\t\t\t\t\"lightgray\": \"211,211,211\",\r\n\t\t\t\t\t\"lightgrey\": \"211,211,211\",\r\n\t\t\t\t\t\"lightgreen\": \"144,238,144\",\r\n\t\t\t\t\t\"lightpink\": \"255,182,193\",\r\n\t\t\t\t\t\"lightsalmon\": \"255,160,122\",\r\n\t\t\t\t\t\"lightseagreen\": \"32,178,170\",\r\n\t\t\t\t\t\"lightskyblue\": \"135,206,250\",\r\n\t\t\t\t\t\"lightslategray\": \"119,136,153\",\r\n\t\t\t\t\t\"lightsteelblue\": \"176,196,222\",\r\n\t\t\t\t\t\"lightyellow\": \"255,255,224\",\r\n\t\t\t\t\t\"limegreen\": \"50,205,50\",\r\n\t\t\t\t\t\"lime\": \"0,255,0\",\r\n\t\t\t\t\t\"linen\": \"250,240,230\",\r\n\t\t\t\t\t\"magenta\": \"255,0,255\",\r\n\t\t\t\t\t\"maroon\": \"128,0,0\",\r\n\t\t\t\t\t\"mediumaquamarine\": \"102,205,170\",\r\n\t\t\t\t\t\"mediumblue\": \"0,0,205\",\r\n\t\t\t\t\t\"mediumorchid\": \"186,85,211\",\r\n\t\t\t\t\t\"mediumpurple\": \"147,112,219\",\r\n\t\t\t\t\t\"mediumseagreen\": \"60,179,113\",\r\n\t\t\t\t\t\"mediumslateblue\": \"123,104,238\",\r\n\t\t\t\t\t\"mediumspringgreen\": \"0,250,154\",\r\n\t\t\t\t\t\"mediumturquoise\": \"72,209,204\",\r\n\t\t\t\t\t\"mediumvioletred\": \"199,21,133\",\r\n\t\t\t\t\t\"midnightblue\": \"25,25,112\",\r\n\t\t\t\t\t\"mintcream\": \"245,255,250\",\r\n\t\t\t\t\t\"mistyrose\": \"255,228,225\",\r\n\t\t\t\t\t\"moccasin\": \"255,228,181\",\r\n\t\t\t\t\t\"navajowhite\": \"255,222,173\",\r\n\t\t\t\t\t\"navy\": \"0,0,128\",\r\n\t\t\t\t\t\"oldlace\": \"253,245,230\",\r\n\t\t\t\t\t\"olivedrab\": \"107,142,35\",\r\n\t\t\t\t\t\"olive\": \"128,128,0\",\r\n\t\t\t\t\t\"orangered\": \"255,69,0\",\r\n\t\t\t\t\t\"orange\": \"255,165,0\",\r\n\t\t\t\t\t\"orchid\": \"218,112,214\",\r\n\t\t\t\t\t\"palegoldenrod\": \"238,232,170\",\r\n\t\t\t\t\t\"palegreen\": \"152,251,152\",\r\n\t\t\t\t\t\"paleturquoise\": \"175,238,238\",\r\n\t\t\t\t\t\"palevioletred\": \"219,112,147\",\r\n\t\t\t\t\t\"papayawhip\": \"255,239,213\",\r\n\t\t\t\t\t\"peachpuff\": \"255,218,185\",\r\n\t\t\t\t\t\"peru\": \"205,133,63\",\r\n\t\t\t\t\t\"pink\": \"255,192,203\",\r\n\t\t\t\t\t\"plum\": \"221,160,221\",\r\n\t\t\t\t\t\"powderblue\": \"176,224,230\",\r\n\t\t\t\t\t\"purple\": \"128,0,128\",\r\n\t\t\t\t\t\"red\": \"255,0,0\",\r\n\t\t\t\t\t\"rosybrown\": \"188,143,143\",\r\n\t\t\t\t\t\"royalblue\": \"65,105,225\",\r\n\t\t\t\t\t\"saddlebrown\": \"139,69,19\",\r\n\t\t\t\t\t\"salmon\": \"250,128,114\",\r\n\t\t\t\t\t\"sandybrown\": \"244,164,96\",\r\n\t\t\t\t\t\"seagreen\": \"46,139,87\",\r\n\t\t\t\t\t\"seashell\": \"255,245,238\",\r\n\t\t\t\t\t\"sienna\": \"160,82,45\",\r\n\t\t\t\t\t\"silver\": \"192,192,192\",\r\n\t\t\t\t\t\"skyblue\": \"135,206,235\",\r\n\t\t\t\t\t\"slateblue\": \"106,90,205\",\r\n\t\t\t\t\t\"slategray\": \"112,128,144\",\r\n\t\t\t\t\t\"snow\": \"255,250,250\",\r\n\t\t\t\t\t\"springgreen\": \"0,255,127\",\r\n\t\t\t\t\t\"steelblue\": \"70,130,180\",\r\n\t\t\t\t\t\"tan\": \"210,180,140\",\r\n\t\t\t\t\t\"teal\": \"0,128,128\",\r\n\t\t\t\t\t\"thistle\": \"216,191,216\",\r\n\t\t\t\t\t\"tomato\": \"255,99,71\",\r\n\t\t\t\t\t\"turquoise\": \"64,224,208\",\r\n\t\t\t\t\t\"violet\": \"238,130,238\",\r\n\t\t\t\t\t\"wheat\": \"245,222,179\",\r\n\t\t\t\t\t\"whitesmoke\": \"245,245,245\",\r\n\t\t\t\t\t\"white\": \"255,255,255\",\r\n\t\t\t\t\t\"yellowgreen\": \"154,205,50\",\r\n\t\t\t\t\t\"yellow\": \"255,255,0\"\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t/************\r\n\t\t\t Hooks\r\n\t\t\t ************/\r\n\r\n\t\t\t/* Hooks allow a subproperty (e.g. \"boxShadowBlur\") of a compound-value CSS property\r\n\t\t\t (e.g. \"boxShadow: X Y Blur Spread Color\") to be animated as if it were a discrete property. */\r\n\t\t\t/* Note: Beyond enabling fine-grained property animation, hooking is necessary since Velocity only\r\n\t\t\t tweens properties with single numeric values; unlike CSS transitions, Velocity does not interpolate compound-values. */\r\n\t\t\tHooks: {\r\n\t\t\t\t/********************\r\n\t\t\t\t Registration\r\n\t\t\t\t ********************/\r\n\r\n\t\t\t\t/* Templates are a concise way of indicating which subproperties must be individually registered for each compound-value CSS property. */\r\n\t\t\t\t/* Each template consists of the compound-value's base name, its constituent subproperty names, and those subproperties' default values. */\r\n\t\t\t\ttemplates: {\r\n\t\t\t\t\t\"textShadow\": [\"Color X Y Blur\", \"black 0px 0px 0px\"],\r\n\t\t\t\t\t\"boxShadow\": [\"Color X Y Blur Spread\", \"black 0px 0px 0px 0px\"],\r\n\t\t\t\t\t\"clip\": [\"Top Right Bottom Left\", \"0px 0px 0px 0px\"],\r\n\t\t\t\t\t\"backgroundPosition\": [\"X Y\", \"0% 0%\"],\r\n\t\t\t\t\t\"transformOrigin\": [\"X Y Z\", \"50% 50% 0px\"],\r\n\t\t\t\t\t\"perspectiveOrigin\": [\"X Y\", \"50% 50%\"]\r\n\t\t\t\t},\r\n\t\t\t\t/* A \"registered\" hook is one that has been converted from its template form into a live,\r\n\t\t\t\t tweenable property. It contains data to associate it with its root property. */\r\n\t\t\t\tregistered: {\r\n\t\t\t\t\t/* Note: A registered hook looks like this ==> textShadowBlur: [ \"textShadow\", 3 ],\r\n\t\t\t\t\t which consists of the subproperty's name, the associated root property's name,\r\n\t\t\t\t\t and the subproperty's position in the root's value. */\r\n\t\t\t\t},\r\n\t\t\t\t/* Convert the templates into individual hooks then append them to the registered object above. */\r\n\t\t\t\tregister: function() {\r\n\t\t\t\t\t/* Color hooks registration: Colors are defaulted to white -- as opposed to black -- since colors that are\r\n\t\t\t\t\t currently set to \"transparent\" default to their respective template below when color-animated,\r\n\t\t\t\t\t and white is typically a closer match to transparent than black is. An exception is made for text (\"color\"),\r\n\t\t\t\t\t which is almost always set closer to black than white. */\r\n\t\t\t\t\tfor (var i = 0; i < CSS.Lists.colors.length; i++) {\r\n\t\t\t\t\t\tvar rgbComponents = (CSS.Lists.colors[i] === \"color\") ? \"0 0 0 1\" : \"255 255 255 1\";\r\n\t\t\t\t\t\tCSS.Hooks.templates[CSS.Lists.colors[i]] = [\"Red Green Blue Alpha\", rgbComponents];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar rootProperty,\r\n\t\t\t\t\t\t\thookTemplate,\r\n\t\t\t\t\t\t\thookNames;\r\n\r\n\t\t\t\t\t/* In IE, color values inside compound-value properties are positioned at the end the value instead of at the beginning.\r\n\t\t\t\t\t Thus, we re-arrange the templates accordingly. */\r\n\t\t\t\t\tif (IE) {\r\n\t\t\t\t\t\tfor (rootProperty in CSS.Hooks.templates) {\r\n\t\t\t\t\t\t\tif (!CSS.Hooks.templates.hasOwnProperty(rootProperty)) {\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\thookTemplate = CSS.Hooks.templates[rootProperty];\r\n\t\t\t\t\t\t\thookNames = hookTemplate[0].split(\" \");\r\n\r\n\t\t\t\t\t\t\tvar defaultValues = hookTemplate[1].match(CSS.RegEx.valueSplit);\r\n\r\n\t\t\t\t\t\t\tif (hookNames[0] === \"Color\") {\r\n\t\t\t\t\t\t\t\t/* Reposition both the hook's name and its default value to the end of their respective strings. */\r\n\t\t\t\t\t\t\t\thookNames.push(hookNames.shift());\r\n\t\t\t\t\t\t\t\tdefaultValues.push(defaultValues.shift());\r\n\r\n\t\t\t\t\t\t\t\t/* Replace the existing template for the hook's root property. */\r\n\t\t\t\t\t\t\t\tCSS.Hooks.templates[rootProperty] = [hookNames.join(\" \"), defaultValues.join(\" \")];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Hook registration. */\r\n\t\t\t\t\tfor (rootProperty in CSS.Hooks.templates) {\r\n\t\t\t\t\t\tif (!CSS.Hooks.templates.hasOwnProperty(rootProperty)) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\thookTemplate = CSS.Hooks.templates[rootProperty];\r\n\t\t\t\t\t\thookNames = hookTemplate[0].split(\" \");\r\n\r\n\t\t\t\t\t\tfor (var j in hookNames) {\r\n\t\t\t\t\t\t\tif (!hookNames.hasOwnProperty(j)) {\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar fullHookName = rootProperty + hookNames[j],\r\n\t\t\t\t\t\t\t\t\thookPosition = j;\r\n\r\n\t\t\t\t\t\t\t/* For each hook, register its full name (e.g. textShadowBlur) with its root property (e.g. textShadow)\r\n\t\t\t\t\t\t\t and the hook's position in its template's default value string. */\r\n\t\t\t\t\t\t\tCSS.Hooks.registered[fullHookName] = [rootProperty, hookPosition];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t/*****************************\r\n\t\t\t\t Injection and Extraction\r\n\t\t\t\t *****************************/\r\n\r\n\t\t\t\t/* Look up the root property associated with the hook (e.g. return \"textShadow\" for \"textShadowBlur\"). */\r\n\t\t\t\t/* Since a hook cannot be set directly (the browser won't recognize it), style updating for hooks is routed through the hook's root property. */\r\n\t\t\t\tgetRoot: function(property) {\r\n\t\t\t\t\tvar hookData = CSS.Hooks.registered[property];\r\n\r\n\t\t\t\t\tif (hookData) {\r\n\t\t\t\t\t\treturn hookData[0];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/* If there was no hook match, return the property name untouched. */\r\n\t\t\t\t\t\treturn property;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tgetUnit: function(str, start) {\r\n\t\t\t\t\tvar unit = (str.substr(start || 0, 5).match(/^[a-z%]+/) || [])[0] || \"\";\r\n\r\n\t\t\t\t\tif (unit && _inArray(CSS.Lists.units, unit)) {\r\n\t\t\t\t\t\treturn unit;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn \"\";\r\n\t\t\t\t},\r\n\t\t\t\tfixColors: function(str) {\r\n\t\t\t\t\treturn str.replace(/(rgba?\\(\\s*)?(\\b[a-z]+\\b)/g, function($0, $1, $2) {\r\n\t\t\t\t\t\tif (CSS.Lists.colorNames.hasOwnProperty($2)) {\r\n\t\t\t\t\t\t\treturn ($1 ? $1 : \"rgba(\") + CSS.Lists.colorNames[$2] + ($1 ? \"\" : \",1)\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn $1 + $2;\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\t/* Convert any rootPropertyValue, null or otherwise, into a space-delimited list of hook values so that\r\n\t\t\t\t the targeted hook can be injected or extracted at its standard position. */\r\n\t\t\t\tcleanRootPropertyValue: function(rootProperty, rootPropertyValue) {\r\n\t\t\t\t\t/* If the rootPropertyValue is wrapped with \"rgb()\", \"clip()\", etc., remove the wrapping to normalize the value before manipulation. */\r\n\t\t\t\t\tif (CSS.RegEx.valueUnwrap.test(rootPropertyValue)) {\r\n\t\t\t\t\t\trootPropertyValue = rootPropertyValue.match(CSS.RegEx.valueUnwrap)[1];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* If rootPropertyValue is a CSS null-value (from which there's inherently no hook value to extract),\r\n\t\t\t\t\t default to the root's default value as defined in CSS.Hooks.templates. */\r\n\t\t\t\t\t/* Note: CSS null-values include \"none\", \"auto\", and \"transparent\". They must be converted into their\r\n\t\t\t\t\t zero-values (e.g. textShadow: \"none\" ==> textShadow: \"0px 0px 0px black\") for hook manipulation to proceed. */\r\n\t\t\t\t\tif (CSS.Values.isCSSNullValue(rootPropertyValue)) {\r\n\t\t\t\t\t\trootPropertyValue = CSS.Hooks.templates[rootProperty][1];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn rootPropertyValue;\r\n\t\t\t\t},\r\n\t\t\t\t/* Extracted the hook's value from its root property's value. This is used to get the starting value of an animating hook. */\r\n\t\t\t\textractValue: function(fullHookName, rootPropertyValue) {\r\n\t\t\t\t\tvar hookData = CSS.Hooks.registered[fullHookName];\r\n\r\n\t\t\t\t\tif (hookData) {\r\n\t\t\t\t\t\tvar hookRoot = hookData[0],\r\n\t\t\t\t\t\t\t\thookPosition = hookData[1];\r\n\r\n\t\t\t\t\t\trootPropertyValue = CSS.Hooks.cleanRootPropertyValue(hookRoot, rootPropertyValue);\r\n\r\n\t\t\t\t\t\t/* Split rootPropertyValue into its constituent hook values then grab the desired hook at its standard position. */\r\n\t\t\t\t\t\treturn rootPropertyValue.toString().match(CSS.RegEx.valueSplit)[hookPosition];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/* If the provided fullHookName isn't a registered hook, return the rootPropertyValue that was passed in. */\r\n\t\t\t\t\t\treturn rootPropertyValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t/* Inject the hook's value into its root property's value. This is used to piece back together the root property\r\n\t\t\t\t once Velocity has updated one of its individually hooked values through tweening. */\r\n\t\t\t\tinjectValue: function(fullHookName, hookValue, rootPropertyValue) {\r\n\t\t\t\t\tvar hookData = CSS.Hooks.registered[fullHookName];\r\n\r\n\t\t\t\t\tif (hookData) {\r\n\t\t\t\t\t\tvar hookRoot = hookData[0],\r\n\t\t\t\t\t\t\t\thookPosition = hookData[1],\r\n\t\t\t\t\t\t\t\trootPropertyValueParts,\r\n\t\t\t\t\t\t\t\trootPropertyValueUpdated;\r\n\r\n\t\t\t\t\t\trootPropertyValue = CSS.Hooks.cleanRootPropertyValue(hookRoot, rootPropertyValue);\r\n\r\n\t\t\t\t\t\t/* Split rootPropertyValue into its individual hook values, replace the targeted value with hookValue,\r\n\t\t\t\t\t\t then reconstruct the rootPropertyValue string. */\r\n\t\t\t\t\t\trootPropertyValueParts = rootPropertyValue.toString().match(CSS.RegEx.valueSplit);\r\n\t\t\t\t\t\trootPropertyValueParts[hookPosition] = hookValue;\r\n\t\t\t\t\t\trootPropertyValueUpdated = rootPropertyValueParts.join(\" \");\r\n\r\n\t\t\t\t\t\treturn rootPropertyValueUpdated;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/* If the provided fullHookName isn't a registered hook, return the rootPropertyValue that was passed in. */\r\n\t\t\t\t\t\treturn rootPropertyValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t/*******************\r\n\t\t\t Normalizations\r\n\t\t\t *******************/\r\n\r\n\t\t\t/* Normalizations standardize CSS property manipulation by pollyfilling browser-specific implementations (e.g. opacity)\r\n\t\t\t and reformatting special properties (e.g. clip, rgba) to look like standard ones. */\r\n\t\t\tNormalizations: {\r\n\t\t\t\t/* Normalizations are passed a normalization target (either the property's name, its extracted value, or its injected value),\r\n\t\t\t\t the targeted element (which may need to be queried), and the targeted property value. */\r\n\t\t\t\tregistered: {\r\n\t\t\t\t\tclip: function(type, element, propertyValue) {\r\n\t\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\t\tcase \"name\":\r\n\t\t\t\t\t\t\t\treturn \"clip\";\r\n\t\t\t\t\t\t\t\t/* Clip needs to be unwrapped and stripped of its commas during extraction. */\r\n\t\t\t\t\t\t\tcase \"extract\":\r\n\t\t\t\t\t\t\t\tvar extracted;\r\n\r\n\t\t\t\t\t\t\t\t/* If Velocity also extracted this value, skip extraction. */\r\n\t\t\t\t\t\t\t\tif (CSS.RegEx.wrappedValueAlreadyExtracted.test(propertyValue)) {\r\n\t\t\t\t\t\t\t\t\textracted = propertyValue;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t/* Remove the \"rect()\" wrapper. */\r\n\t\t\t\t\t\t\t\t\textracted = propertyValue.toString().match(CSS.RegEx.valueUnwrap);\r\n\r\n\t\t\t\t\t\t\t\t\t/* Strip off commas. */\r\n\t\t\t\t\t\t\t\t\textracted = extracted ? extracted[1].replace(/,(\\s+)?/g, \" \") : propertyValue;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\treturn extracted;\r\n\t\t\t\t\t\t\t\t/* Clip needs to be re-wrapped during injection. */\r\n\t\t\t\t\t\t\tcase \"inject\":\r\n\t\t\t\t\t\t\t\treturn \"rect(\" + propertyValue + \")\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tblur: function(type, element, propertyValue) {\r\n\t\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\t\tcase \"name\":\r\n\t\t\t\t\t\t\t\treturn Velocity.State.isFirefox ? \"filter\" : \"-webkit-filter\";\r\n\t\t\t\t\t\t\tcase \"extract\":\r\n\t\t\t\t\t\t\t\tvar extracted = parseFloat(propertyValue);\r\n\r\n\t\t\t\t\t\t\t\t/* If extracted is NaN, meaning the value isn't already extracted. */\r\n\t\t\t\t\t\t\t\tif (!(extracted || extracted === 0)) {\r\n\t\t\t\t\t\t\t\t\tvar blurComponent = propertyValue.toString().match(/blur\\(([0-9]+[A-z]+)\\)/i);\r\n\r\n\t\t\t\t\t\t\t\t\t/* If the filter string had a blur component, return just the blur value and unit type. */\r\n\t\t\t\t\t\t\t\t\tif (blurComponent) {\r\n\t\t\t\t\t\t\t\t\t\textracted = blurComponent[1];\r\n\t\t\t\t\t\t\t\t\t\t/* If the component doesn't exist, default blur to 0. */\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\textracted = 0;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\treturn extracted;\r\n\t\t\t\t\t\t\t\t/* Blur needs to be re-wrapped during injection. */\r\n\t\t\t\t\t\t\tcase \"inject\":\r\n\t\t\t\t\t\t\t\t/* For the blur effect to be fully de-applied, it needs to be set to \"none\" instead of 0. */\r\n\t\t\t\t\t\t\t\tif (!parseFloat(propertyValue)) {\r\n\t\t\t\t\t\t\t\t\treturn \"none\";\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\treturn \"blur(\" + propertyValue + \")\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t/* <=IE8 do not support the standard opacity property. They use filter:alpha(opacity=INT) instead. */\r\n\t\t\t\t\topacity: function(type, element, propertyValue) {\r\n\t\t\t\t\t\tif (IE <= 8) {\r\n\t\t\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\t\t\tcase \"name\":\r\n\t\t\t\t\t\t\t\t\treturn \"filter\";\r\n\t\t\t\t\t\t\t\tcase \"extract\":\r\n\t\t\t\t\t\t\t\t\t/* <=IE8 return a \"filter\" value of \"alpha(opacity=\\d{1,3})\".\r\n\t\t\t\t\t\t\t\t\t Extract the value and convert it to a decimal value to match the standard CSS opacity property's formatting. */\r\n\t\t\t\t\t\t\t\t\tvar extracted = propertyValue.toString().match(/alpha\\(opacity=(.*)\\)/i);\r\n\r\n\t\t\t\t\t\t\t\t\tif (extracted) {\r\n\t\t\t\t\t\t\t\t\t\t/* Convert to decimal value. */\r\n\t\t\t\t\t\t\t\t\t\tpropertyValue = extracted[1] / 100;\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t/* When extracting opacity, default to 1 since a null value means opacity hasn't been set. */\r\n\t\t\t\t\t\t\t\t\t\tpropertyValue = 1;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\treturn propertyValue;\r\n\t\t\t\t\t\t\t\tcase \"inject\":\r\n\t\t\t\t\t\t\t\t\t/* Opacified elements are required to have their zoom property set to a non-zero value. */\r\n\t\t\t\t\t\t\t\t\telement.style.zoom = 1;\r\n\r\n\t\t\t\t\t\t\t\t\t/* Setting the filter property on elements with certain font property combinations can result in a\r\n\t\t\t\t\t\t\t\t\t highly unappealing ultra-bolding effect. There's no way to remedy this throughout a tween, but dropping the\r\n\t\t\t\t\t\t\t\t\t value altogether (when opacity hits 1) at leasts ensures that the glitch is gone post-tweening. */\r\n\t\t\t\t\t\t\t\t\tif (parseFloat(propertyValue) >= 1) {\r\n\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t/* As per the filter property's spec, convert the decimal value to a whole number and wrap the value. */\r\n\t\t\t\t\t\t\t\t\t\treturn \"alpha(opacity=\" + parseInt(parseFloat(propertyValue) * 100, 10) + \")\";\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/* With all other browsers, normalization is not required; return the same values that were passed in. */\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\t\t\tcase \"name\":\r\n\t\t\t\t\t\t\t\t\treturn \"opacity\";\r\n\t\t\t\t\t\t\t\tcase \"extract\":\r\n\t\t\t\t\t\t\t\t\treturn propertyValue;\r\n\t\t\t\t\t\t\t\tcase \"inject\":\r\n\t\t\t\t\t\t\t\t\treturn propertyValue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t/*****************************\r\n\t\t\t\t Batched Registrations\r\n\t\t\t\t *****************************/\r\n\r\n\t\t\t\t/* Note: Batched normalizations extend the CSS.Normalizations.registered object. */\r\n\t\t\t\tregister: function() {\r\n\r\n\t\t\t\t\t/*****************\r\n\t\t\t\t\t Transforms\r\n\t\t\t\t\t *****************/\r\n\r\n\t\t\t\t\t/* Transforms are the subproperties contained by the CSS \"transform\" property. Transforms must undergo normalization\r\n\t\t\t\t\t so that they can be referenced in a properties map by their individual names. */\r\n\t\t\t\t\t/* Note: When transforms are \"set\", they are actually assigned to a per-element transformCache. When all transform\r\n\t\t\t\t\t setting is complete complete, CSS.flushTransformCache() must be manually called to flush the values to the DOM.\r\n\t\t\t\t\t Transform setting is batched in this way to improve performance: the transform style only needs to be updated\r\n\t\t\t\t\t once when multiple transform subproperties are being animated simultaneously. */\r\n\t\t\t\t\t/* Note: IE9 and Android Gingerbread have support for 2D -- but not 3D -- transforms. Since animating unsupported\r\n\t\t\t\t\t transform properties results in the browser ignoring the *entire* transform string, we prevent these 3D values\r\n\t\t\t\t\t from being normalized for these browsers so that tweening skips these properties altogether\r\n\t\t\t\t\t (since it will ignore them as being unsupported by the browser.) */\r\n\t\t\t\t\tif ((!IE || IE > 9) && !Velocity.State.isGingerbread) {\r\n\t\t\t\t\t\t/* Note: Since the standalone CSS \"perspective\" property and the CSS transform \"perspective\" subproperty\r\n\t\t\t\t\t\t share the same name, the latter is given a unique token within Velocity: \"transformPerspective\". */\r\n\t\t\t\t\t\tCSS.Lists.transformsBase = CSS.Lists.transformsBase.concat(CSS.Lists.transforms3D);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var i = 0; i < CSS.Lists.transformsBase.length; i++) {\r\n\t\t\t\t\t\t/* Wrap the dynamically generated normalization function in a new scope so that transformName's value is\r\n\t\t\t\t\t\t paired with its respective function. (Otherwise, all functions would take the final for loop's transformName.) */\r\n\t\t\t\t\t\t(function() {\r\n\t\t\t\t\t\t\tvar transformName = CSS.Lists.transformsBase[i];\r\n\r\n\t\t\t\t\t\t\tCSS.Normalizations.registered[transformName] = function(type, element, propertyValue) {\r\n\t\t\t\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\t\t\t\t/* The normalized property name is the parent \"transform\" property -- the property that is actually set in CSS. */\r\n\t\t\t\t\t\t\t\t\tcase \"name\":\r\n\t\t\t\t\t\t\t\t\t\treturn \"transform\";\r\n\t\t\t\t\t\t\t\t\t\t/* Transform values are cached onto a per-element transformCache object. */\r\n\t\t\t\t\t\t\t\t\tcase \"extract\":\r\n\t\t\t\t\t\t\t\t\t\t/* If this transform has yet to be assigned a value, return its null value. */\r\n\t\t\t\t\t\t\t\t\t\tif (Data(element) === undefined || Data(element).transformCache[transformName] === undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t/* Scale CSS.Lists.transformsBase default to 1 whereas all other transform properties default to 0. */\r\n\t\t\t\t\t\t\t\t\t\t\treturn /^scale/i.test(transformName) ? 1 : 0;\r\n\t\t\t\t\t\t\t\t\t\t\t/* When transform values are set, they are wrapped in parentheses as per the CSS spec.\r\n\t\t\t\t\t\t\t\t\t\t\t Thus, when extracting their values (for tween calculations), we strip off the parentheses. */\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\treturn Data(element).transformCache[transformName].replace(/[()]/g, \"\");\r\n\t\t\t\t\t\t\t\t\tcase \"inject\":\r\n\t\t\t\t\t\t\t\t\t\tvar invalid = false;\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* If an individual transform property contains an unsupported unit type, the browser ignores the *entire* transform property.\r\n\t\t\t\t\t\t\t\t\t\t Thus, protect users from themselves by skipping setting for transform values supplied with invalid unit types. */\r\n\t\t\t\t\t\t\t\t\t\t/* Switch on the base transform type; ignore the axis by removing the last letter from the transform's name. */\r\n\t\t\t\t\t\t\t\t\t\tswitch (transformName.substr(0, transformName.length - 1)) {\r\n\t\t\t\t\t\t\t\t\t\t\t/* Whitelist unit types for each transform. */\r\n\t\t\t\t\t\t\t\t\t\t\tcase \"translate\":\r\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid = !/(%|px|em|rem|vw|vh|\\d)$/i.test(propertyValue);\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t\t/* Since an axis-free \"scale\" property is supported as well, a little hack is used here to detect it by chopping off its last letter. */\r\n\t\t\t\t\t\t\t\t\t\t\tcase \"scal\":\r\n\t\t\t\t\t\t\t\t\t\t\tcase \"scale\":\r\n\t\t\t\t\t\t\t\t\t\t\t\t/* Chrome on Android has a bug in which scaled elements blur if their initial scale\r\n\t\t\t\t\t\t\t\t\t\t\t\t value is below 1 (which can happen with forcefeeding). Thus, we detect a yet-unset scale property\r\n\t\t\t\t\t\t\t\t\t\t\t\t and ensure that its first value is always 1. More info: http://stackoverflow.com/questions/10417890/css3-animations-with-transform-causes-blurred-elements-on-webkit/10417962#10417962 */\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (Velocity.State.isAndroid && Data(element).transformCache[transformName] === undefined && propertyValue < 1) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tpropertyValue = 1;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid = !/(\\d)$/i.test(propertyValue);\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\tcase \"skew\":\r\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid = !/(deg|\\d)$/i.test(propertyValue);\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\tcase \"rotate\":\r\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid = !/(deg|\\d)$/i.test(propertyValue);\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (!invalid) {\r\n\t\t\t\t\t\t\t\t\t\t\t/* As per the CSS spec, wrap the value in parentheses. */\r\n\t\t\t\t\t\t\t\t\t\t\tData(element).transformCache[transformName] = \"(\" + propertyValue + \")\";\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* Although the value is set on the transformCache object, return the newly-updated value for the calling code to process as normal. */\r\n\t\t\t\t\t\t\t\t\t\treturn Data(element).transformCache[transformName];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t})();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/*************\r\n\t\t\t\t\t Colors\r\n\t\t\t\t\t *************/\r\n\r\n\t\t\t\t\t/* Since Velocity only animates a single numeric value per property, color animation is achieved by hooking the individual RGBA components of CSS color properties.\r\n\t\t\t\t\t Accordingly, color values must be normalized (e.g. \"#ff0000\", \"red\", and \"rgb(255, 0, 0)\" ==> \"255 0 0 1\") so that their components can be injected/extracted by CSS.Hooks logic. */\r\n\t\t\t\t\tfor (var j = 0; j < CSS.Lists.colors.length; j++) {\r\n\t\t\t\t\t\t/* Wrap the dynamically generated normalization function in a new scope so that colorName's value is paired with its respective function.\r\n\t\t\t\t\t\t (Otherwise, all functions would take the final for loop's colorName.) */\r\n\t\t\t\t\t\t(function() {\r\n\t\t\t\t\t\t\tvar colorName = CSS.Lists.colors[j];\r\n\r\n\t\t\t\t\t\t\t/* Note: In IE<=8, which support rgb but not rgba, color properties are reverted to rgb by stripping off the alpha component. */\r\n\t\t\t\t\t\t\tCSS.Normalizations.registered[colorName] = function(type, element, propertyValue) {\r\n\t\t\t\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\t\t\t\tcase \"name\":\r\n\t\t\t\t\t\t\t\t\t\treturn colorName;\r\n\t\t\t\t\t\t\t\t\t\t/* Convert all color values into the rgb format. (Old IE can return hex values and color names instead of rgb/rgba.) */\r\n\t\t\t\t\t\t\t\t\tcase \"extract\":\r\n\t\t\t\t\t\t\t\t\t\tvar extracted;\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* If the color is already in its hookable form (e.g. \"255 255 255 1\") due to having been previously extracted, skip extraction. */\r\n\t\t\t\t\t\t\t\t\t\tif (CSS.RegEx.wrappedValueAlreadyExtracted.test(propertyValue)) {\r\n\t\t\t\t\t\t\t\t\t\t\textracted = propertyValue;\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\tvar converted,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tcolorNames = {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tblack: \"rgb(0, 0, 0)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tblue: \"rgb(0, 0, 255)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgray: \"rgb(128, 128, 128)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgreen: \"rgb(0, 128, 0)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tred: \"rgb(255, 0, 0)\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\twhite: \"rgb(255, 255, 255)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t/* Convert color names to rgb. */\r\n\t\t\t\t\t\t\t\t\t\t\tif (/^[A-z]+$/i.test(propertyValue)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (colorNames[propertyValue] !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconverted = colorNames[propertyValue];\r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/* If an unmatched color name is provided, default to black. */\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconverted = colorNames.black;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/* Convert hex values to rgb. */\r\n\t\t\t\t\t\t\t\t\t\t\t} else if (CSS.RegEx.isHex.test(propertyValue)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconverted = \"rgb(\" + CSS.Values.hexToRgb(propertyValue).join(\" \") + \")\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t/* If the provided color doesn't match any of the accepted color formats, default to black. */\r\n\t\t\t\t\t\t\t\t\t\t\t} else if (!(/^rgba?\\(/i.test(propertyValue))) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconverted = colorNames.black;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t/* Remove the surrounding \"rgb/rgba()\" string then replace commas with spaces and strip\r\n\t\t\t\t\t\t\t\t\t\t\t repeated spaces (in case the value included spaces to begin with). */\r\n\t\t\t\t\t\t\t\t\t\t\textracted = (converted || propertyValue).toString().match(CSS.RegEx.valueUnwrap)[1].replace(/,(\\s+)?/g, \" \");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* So long as this isn't <=IE8, add a fourth (alpha) component if it's missing and default it to 1 (visible). */\r\n\t\t\t\t\t\t\t\t\t\tif ((!IE || IE > 8) && extracted.split(\" \").length === 3) {\r\n\t\t\t\t\t\t\t\t\t\t\textracted += \" 1\";\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn extracted;\r\n\t\t\t\t\t\t\t\t\tcase \"inject\":\r\n\t\t\t\t\t\t\t\t\t\t/* If we have a pattern then it might already have the right values */\r\n\t\t\t\t\t\t\t\t\t\tif (/^rgb/.test(propertyValue)) {\r\n\t\t\t\t\t\t\t\t\t\t\treturn propertyValue;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* If this is IE<=8 and an alpha component exists, strip it off. */\r\n\t\t\t\t\t\t\t\t\t\tif (IE <= 8) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (propertyValue.split(\" \").length === 4) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tpropertyValue = propertyValue.split(/\\s+/).slice(0, 3).join(\" \");\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t/* Otherwise, add a fourth (alpha) component if it's missing and default it to 1 (visible). */\r\n\t\t\t\t\t\t\t\t\t\t} else if (propertyValue.split(\" \").length === 3) {\r\n\t\t\t\t\t\t\t\t\t\t\tpropertyValue += \" 1\";\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* Re-insert the browser-appropriate wrapper(\"rgb/rgba()\"), insert commas, and strip off decimal units\r\n\t\t\t\t\t\t\t\t\t\t on all values but the fourth (R, G, and B only accept whole numbers). */\r\n\t\t\t\t\t\t\t\t\t\treturn (IE <= 8 ? \"rgb\" : \"rgba\") + \"(\" + propertyValue.replace(/\\s+/g, \",\").replace(/\\.(\\d)+(?=,)/g, \"\") + \")\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t})();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/**************\r\n\t\t\t\t\t Dimensions\r\n\t\t\t\t\t **************/\r\n\t\t\t\t\tfunction augmentDimension(name, element, wantInner) {\r\n\t\t\t\t\t\tvar isBorderBox = CSS.getPropertyValue(element, \"boxSizing\").toString().toLowerCase() === \"border-box\";\r\n\r\n\t\t\t\t\t\tif (isBorderBox === (wantInner || false)) {\r\n\t\t\t\t\t\t\t/* in box-sizing mode, the CSS width / height accessors already give the outerWidth / outerHeight. */\r\n\t\t\t\t\t\t\tvar i,\r\n\t\t\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t\t\t\taugment = 0,\r\n\t\t\t\t\t\t\t\t\tsides = name === \"width\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"],\r\n\t\t\t\t\t\t\t\t\tfields = [\"padding\" + sides[0], \"padding\" + sides[1], \"border\" + sides[0] + \"Width\", \"border\" + sides[1] + \"Width\"];\r\n\r\n\t\t\t\t\t\t\tfor (i = 0; i < fields.length; i++) {\r\n\t\t\t\t\t\t\t\tvalue = parseFloat(CSS.getPropertyValue(element, fields[i]));\r\n\t\t\t\t\t\t\t\tif (!isNaN(value)) {\r\n\t\t\t\t\t\t\t\t\taugment += value;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn wantInner ? -augment : augment;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfunction getDimension(name, wantInner) {\r\n\t\t\t\t\t\treturn function(type, element, propertyValue) {\r\n\t\t\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\t\t\tcase \"name\":\r\n\t\t\t\t\t\t\t\t\treturn name;\r\n\t\t\t\t\t\t\t\tcase \"extract\":\r\n\t\t\t\t\t\t\t\t\treturn parseFloat(propertyValue) + augmentDimension(name, element, wantInner);\r\n\t\t\t\t\t\t\t\tcase \"inject\":\r\n\t\t\t\t\t\t\t\t\treturn (parseFloat(propertyValue) - augmentDimension(name, element, wantInner)) + \"px\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tCSS.Normalizations.registered.innerWidth = getDimension(\"width\", true);\r\n\t\t\t\t\tCSS.Normalizations.registered.innerHeight = getDimension(\"height\", true);\r\n\t\t\t\t\tCSS.Normalizations.registered.outerWidth = getDimension(\"width\");\r\n\t\t\t\t\tCSS.Normalizations.registered.outerHeight = getDimension(\"height\");\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t/************************\r\n\t\t\t CSS Property Names\r\n\t\t\t ************************/\r\n\r\n\t\t\tNames: {\r\n\t\t\t\t/* Camelcase a property name into its JavaScript notation (e.g. \"background-color\" ==> \"backgroundColor\").\r\n\t\t\t\t Camelcasing is used to normalize property names between and across calls. */\r\n\t\t\t\tcamelCase: function(property) {\r\n\t\t\t\t\treturn property.replace(/-(\\w)/g, function(match, subMatch) {\r\n\t\t\t\t\t\treturn subMatch.toUpperCase();\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t\t/* For SVG elements, some properties (namely, dimensional ones) are GET/SET via the element's HTML attributes (instead of via CSS styles). */\r\n\t\t\t\tSVGAttribute: function(property) {\r\n\t\t\t\t\tvar SVGAttributes = \"width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2\";\r\n\r\n\t\t\t\t\t/* Certain browsers require an SVG transform to be applied as an attribute. (Otherwise, application via CSS is preferable due to 3D support.) */\r\n\t\t\t\t\tif (IE || (Velocity.State.isAndroid && !Velocity.State.isChrome)) {\r\n\t\t\t\t\t\tSVGAttributes += \"|transform\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn new RegExp(\"^(\" + SVGAttributes + \")$\", \"i\").test(property);\r\n\t\t\t\t},\r\n\t\t\t\t/* Determine whether a property should be set with a vendor prefix. */\r\n\t\t\t\t/* If a prefixed version of the property exists, return it. Otherwise, return the original property name.\r\n\t\t\t\t If the property is not at all supported by the browser, return a false flag. */\r\n\t\t\t\tprefixCheck: function(property) {\r\n\t\t\t\t\t/* If this property has already been checked, return the cached value. */\r\n\t\t\t\t\tif (Velocity.State.prefixMatches[property]) {\r\n\t\t\t\t\t\treturn [Velocity.State.prefixMatches[property], true];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar vendors = [\"\", \"Webkit\", \"Moz\", \"ms\", \"O\"];\r\n\r\n\t\t\t\t\t\tfor (var i = 0, vendorsLength = vendors.length; i < vendorsLength; i++) {\r\n\t\t\t\t\t\t\tvar propertyPrefixed;\r\n\r\n\t\t\t\t\t\t\tif (i === 0) {\r\n\t\t\t\t\t\t\t\tpropertyPrefixed = property;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t/* Capitalize the first letter of the property to conform to JavaScript vendor prefix notation (e.g. webkitFilter). */\r\n\t\t\t\t\t\t\t\tpropertyPrefixed = vendors[i] + property.replace(/^\\w/, function(match) {\r\n\t\t\t\t\t\t\t\t\treturn match.toUpperCase();\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Check if the browser supports this property as prefixed. */\r\n\t\t\t\t\t\t\tif (Type.isString(Velocity.State.prefixElement.style[propertyPrefixed])) {\r\n\t\t\t\t\t\t\t\t/* Cache the match. */\r\n\t\t\t\t\t\t\t\tVelocity.State.prefixMatches[property] = propertyPrefixed;\r\n\r\n\t\t\t\t\t\t\t\treturn [propertyPrefixed, true];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* If the browser doesn't support this property in any form, include a false flag so that the caller can decide how to proceed. */\r\n\t\t\t\t\t\treturn [property, false];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t/************************\r\n\t\t\t CSS Property Values\r\n\t\t\t ************************/\r\n\r\n\t\t\tValues: {\r\n\t\t\t\t/* Hex to RGB conversion. Copyright Tim Down: http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb */\r\n\t\t\t\thexToRgb: function(hex) {\r\n\t\t\t\t\tvar shortformRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,\r\n\t\t\t\t\t\t\tlongformRegex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,\r\n\t\t\t\t\t\t\trgbParts;\r\n\r\n\t\t\t\t\thex = hex.replace(shortformRegex, function(m, r, g, b) {\r\n\t\t\t\t\t\treturn r + r + g + g + b + b;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\trgbParts = longformRegex.exec(hex);\r\n\r\n\t\t\t\t\treturn rgbParts ? [parseInt(rgbParts[1], 16), parseInt(rgbParts[2], 16), parseInt(rgbParts[3], 16)] : [0, 0, 0];\r\n\t\t\t\t},\r\n\t\t\t\tisCSSNullValue: function(value) {\r\n\t\t\t\t\t/* The browser defaults CSS values that have not been set to either 0 or one of several possible null-value strings.\r\n\t\t\t\t\t Thus, we check for both falsiness and these special strings. */\r\n\t\t\t\t\t/* Null-value checking is performed to default the special strings to 0 (for the sake of tweening) or their hook\r\n\t\t\t\t\t templates as defined as CSS.Hooks (for the sake of hook injection/extraction). */\r\n\t\t\t\t\t/* Note: Chrome returns \"rgba(0, 0, 0, 0)\" for an undefined color whereas IE returns \"transparent\". */\r\n\t\t\t\t\treturn (!value || /^(none|auto|transparent|(rgba\\(0, ?0, ?0, ?0\\)))$/i.test(value));\r\n\t\t\t\t},\r\n\t\t\t\t/* Retrieve a property's default unit type. Used for assigning a unit type when one is not supplied by the user. */\r\n\t\t\t\tgetUnitType: function(property) {\r\n\t\t\t\t\tif (/^(rotate|skew)/i.test(property)) {\r\n\t\t\t\t\t\treturn \"deg\";\r\n\t\t\t\t\t} else if (/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(property)) {\r\n\t\t\t\t\t\t/* The above properties are unitless. */\r\n\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/* Default to px for all other properties. */\r\n\t\t\t\t\t\treturn \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t/* HTML elements default to an associated display type when they're not set to display:none. */\r\n\t\t\t\t/* Note: This function is used for correctly setting the non-\"none\" display value in certain Velocity redirects, such as fadeIn/Out. */\r\n\t\t\t\tgetDisplayType: function(element) {\r\n\t\t\t\t\tvar tagName = element && element.tagName.toString().toLowerCase();\r\n\r\n\t\t\t\t\tif (/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(tagName)) {\r\n\t\t\t\t\t\treturn \"inline\";\r\n\t\t\t\t\t} else if (/^(li)$/i.test(tagName)) {\r\n\t\t\t\t\t\treturn \"list-item\";\r\n\t\t\t\t\t} else if (/^(tr)$/i.test(tagName)) {\r\n\t\t\t\t\t\treturn \"table-row\";\r\n\t\t\t\t\t} else if (/^(table)$/i.test(tagName)) {\r\n\t\t\t\t\t\treturn \"table\";\r\n\t\t\t\t\t} else if (/^(tbody)$/i.test(tagName)) {\r\n\t\t\t\t\t\treturn \"table-row-group\";\r\n\t\t\t\t\t\t/* Default to \"block\" when no match is found. */\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn \"block\";\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t/* The class add/remove functions are used to temporarily apply a \"velocity-animating\" class to elements while they're animating. */\r\n\t\t\t\taddClass: function(element, className) {\r\n\t\t\t\t\tif (element) {\r\n\t\t\t\t\t\tif (element.classList) {\r\n\t\t\t\t\t\t\telement.classList.add(className);\r\n\t\t\t\t\t\t} else if (Type.isString(element.className)) {\r\n\t\t\t\t\t\t\t// Element.className is around 15% faster then set/getAttribute\r\n\t\t\t\t\t\t\telement.className += (element.className.length ? \" \" : \"\") + className;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Work around for IE strict mode animating SVG - and anything else that doesn't behave correctly - the same way jQuery does it\r\n\t\t\t\t\t\t\tvar currentClass = element.getAttribute(IE <= 7 ? \"className\" : \"class\") || \"\";\r\n\r\n\t\t\t\t\t\t\telement.setAttribute(\"class\", currentClass + (currentClass ? \" \" : \"\") + className);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tremoveClass: function(element, className) {\r\n\t\t\t\t\tif (element) {\r\n\t\t\t\t\t\tif (element.classList) {\r\n\t\t\t\t\t\t\telement.classList.remove(className);\r\n\t\t\t\t\t\t} else if (Type.isString(element.className)) {\r\n\t\t\t\t\t\t\t// Element.className is around 15% faster then set/getAttribute\r\n\t\t\t\t\t\t\t// TODO: Need some jsperf tests on performance - can we get rid of the regex and maybe use split / array manipulation?\r\n\t\t\t\t\t\t\telement.className = element.className.toString().replace(new RegExp(\"(^|\\\\s)\" + className.split(\" \").join(\"|\") + \"(\\\\s|$)\", \"gi\"), \" \");\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Work around for IE strict mode animating SVG - and anything else that doesn't behave correctly - the same way jQuery does it\r\n\t\t\t\t\t\t\tvar currentClass = element.getAttribute(IE <= 7 ? \"className\" : \"class\") || \"\";\r\n\r\n\t\t\t\t\t\t\telement.setAttribute(\"class\", currentClass.replace(new RegExp(\"(^|\\s)\" + className.split(\" \").join(\"|\") + \"(\\s|$)\", \"gi\"), \" \"));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t/****************************\r\n\t\t\t Style Getting & Setting\r\n\t\t\t ****************************/\r\n\r\n\t\t\t/* The singular getPropertyValue, which routes the logic for all normalizations, hooks, and standard CSS properties. */\r\n\t\t\tgetPropertyValue: function(element, property, rootPropertyValue, forceStyleLookup) {\r\n\t\t\t\t/* Get an element's computed property value. */\r\n\t\t\t\t/* Note: Retrieving the value of a CSS property cannot simply be performed by checking an element's\r\n\t\t\t\t style attribute (which only reflects user-defined values). Instead, the browser must be queried for a property's\r\n\t\t\t\t *computed* value. You can read more about getComputedStyle here: https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle */\r\n\t\t\t\tfunction computePropertyValue(element, property) {\r\n\t\t\t\t\t/* When box-sizing isn't set to border-box, height and width style values are incorrectly computed when an\r\n\t\t\t\t\t element's scrollbars are visible (which expands the element's dimensions). Thus, we defer to the more accurate\r\n\t\t\t\t\t offsetHeight/Width property, which includes the total dimensions for interior, border, padding, and scrollbar.\r\n\t\t\t\t\t We subtract border and padding to get the sum of interior + scrollbar. */\r\n\t\t\t\t\tvar computedValue = 0;\r\n\r\n\t\t\t\t\t/* IE<=8 doesn't support window.getComputedStyle, thus we defer to jQuery, which has an extensive array\r\n\t\t\t\t\t of hacks to accurately retrieve IE8 property values. Re-implementing that logic here is not worth bloating the\r\n\t\t\t\t\t codebase for a dying browser. The performance repercussions of using jQuery here are minimal since\r\n\t\t\t\t\t Velocity is optimized to rarely (and sometimes never) query the DOM. Further, the $.css() codepath isn't that slow. */\r\n\t\t\t\t\tif (IE <= 8) {\r\n\t\t\t\t\t\tcomputedValue = $.css(element, property); /* GET */\r\n\t\t\t\t\t\t/* All other browsers support getComputedStyle. The returned live object reference is cached onto its\r\n\t\t\t\t\t\t associated element so that it does not need to be refetched upon every GET. */\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/* Browsers do not return height and width values for elements that are set to display:\"none\". Thus, we temporarily\r\n\t\t\t\t\t\t toggle display to the element type's default value. */\r\n\t\t\t\t\t\tvar toggleDisplay = false;\r\n\r\n\t\t\t\t\t\tif (/^(width|height)$/.test(property) && CSS.getPropertyValue(element, \"display\") === 0) {\r\n\t\t\t\t\t\t\ttoggleDisplay = true;\r\n\t\t\t\t\t\t\tCSS.setPropertyValue(element, \"display\", CSS.Values.getDisplayType(element));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar revertDisplay = function() {\r\n\t\t\t\t\t\t\tif (toggleDisplay) {\r\n\t\t\t\t\t\t\t\tCSS.setPropertyValue(element, \"display\", \"none\");\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (!forceStyleLookup) {\r\n\t\t\t\t\t\t\tif (property === \"height\" && CSS.getPropertyValue(element, \"boxSizing\").toString().toLowerCase() !== \"border-box\") {\r\n\t\t\t\t\t\t\t\tvar contentBoxHeight = element.offsetHeight - (parseFloat(CSS.getPropertyValue(element, \"borderTopWidth\")) || 0) - (parseFloat(CSS.getPropertyValue(element, \"borderBottomWidth\")) || 0) - (parseFloat(CSS.getPropertyValue(element, \"paddingTop\")) || 0) - (parseFloat(CSS.getPropertyValue(element, \"paddingBottom\")) || 0);\r\n\t\t\t\t\t\t\t\trevertDisplay();\r\n\r\n\t\t\t\t\t\t\t\treturn contentBoxHeight;\r\n\t\t\t\t\t\t\t} else if (property === \"width\" && CSS.getPropertyValue(element, \"boxSizing\").toString().toLowerCase() !== \"border-box\") {\r\n\t\t\t\t\t\t\t\tvar contentBoxWidth = element.offsetWidth - (parseFloat(CSS.getPropertyValue(element, \"borderLeftWidth\")) || 0) - (parseFloat(CSS.getPropertyValue(element, \"borderRightWidth\")) || 0) - (parseFloat(CSS.getPropertyValue(element, \"paddingLeft\")) || 0) - (parseFloat(CSS.getPropertyValue(element, \"paddingRight\")) || 0);\r\n\t\t\t\t\t\t\t\trevertDisplay();\r\n\r\n\t\t\t\t\t\t\t\treturn contentBoxWidth;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar computedStyle;\r\n\r\n\t\t\t\t\t\t/* For elements that Velocity hasn't been called on directly (e.g. when Velocity queries the DOM on behalf\r\n\t\t\t\t\t\t of a parent of an element its animating), perform a direct getComputedStyle lookup since the object isn't cached. */\r\n\t\t\t\t\t\tif (Data(element) === undefined) {\r\n\t\t\t\t\t\t\tcomputedStyle = window.getComputedStyle(element, null); /* GET */\r\n\t\t\t\t\t\t\t/* If the computedStyle object has yet to be cached, do so now. */\r\n\t\t\t\t\t\t} else if (!Data(element).computedStyle) {\r\n\t\t\t\t\t\t\tcomputedStyle = Data(element).computedStyle = window.getComputedStyle(element, null); /* GET */\r\n\t\t\t\t\t\t\t/* If computedStyle is cached, use it. */\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcomputedStyle = Data(element).computedStyle;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* IE and Firefox do not return a value for the generic borderColor -- they only return individual values for each border side's color.\r\n\t\t\t\t\t\t Also, in all browsers, when border colors aren't all the same, a compound value is returned that Velocity isn't setup to parse.\r\n\t\t\t\t\t\t So, as a polyfill for querying individual border side colors, we just return the top border's color and animate all borders from that value. */\r\n\t\t\t\t\t\tif (property === \"borderColor\") {\r\n\t\t\t\t\t\t\tproperty = \"borderTopColor\";\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* IE9 has a bug in which the \"filter\" property must be accessed from computedStyle using the getPropertyValue method\r\n\t\t\t\t\t\t instead of a direct property lookup. The getPropertyValue method is slower than a direct lookup, which is why we avoid it by default. */\r\n\t\t\t\t\t\tif (IE === 9 && property === \"filter\") {\r\n\t\t\t\t\t\t\tcomputedValue = computedStyle.getPropertyValue(property); /* GET */\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcomputedValue = computedStyle[property];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Fall back to the property's style value (if defined) when computedValue returns nothing,\r\n\t\t\t\t\t\t which can happen when the element hasn't been painted. */\r\n\t\t\t\t\t\tif (computedValue === \"\" || computedValue === null) {\r\n\t\t\t\t\t\t\tcomputedValue = element.style[property];\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trevertDisplay();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* For top, right, bottom, and left (TRBL) values that are set to \"auto\" on elements of \"fixed\" or \"absolute\" position,\r\n\t\t\t\t\t defer to jQuery for converting \"auto\" to a numeric value. (For elements with a \"static\" or \"relative\" position, \"auto\" has the same\r\n\t\t\t\t\t effect as being set to 0, so no conversion is necessary.) */\r\n\t\t\t\t\t/* An example of why numeric conversion is necessary: When an element with \"position:absolute\" has an untouched \"left\"\r\n\t\t\t\t\t property, which reverts to \"auto\", left's value is 0 relative to its parent element, but is often non-zero relative\r\n\t\t\t\t\t to its *containing* (not parent) element, which is the nearest \"position:relative\" ancestor or the viewport (and always the viewport in the case of \"position:fixed\"). */\r\n\t\t\t\t\tif (computedValue === \"auto\" && /^(top|right|bottom|left)$/i.test(property)) {\r\n\t\t\t\t\t\tvar position = computePropertyValue(element, \"position\"); /* GET */\r\n\r\n\t\t\t\t\t\t/* For absolute positioning, jQuery's $.position() only returns values for top and left;\r\n\t\t\t\t\t\t right and bottom will have their \"auto\" value reverted to 0. */\r\n\t\t\t\t\t\t/* Note: A jQuery object must be created here since jQuery doesn't have a low-level alias for $.position().\r\n\t\t\t\t\t\t Not a big deal since we're currently in a GET batch anyway. */\r\n\t\t\t\t\t\tif (position === \"fixed\" || (position === \"absolute\" && /top|left/i.test(property))) {\r\n\t\t\t\t\t\t\t/* Note: jQuery strips the pixel unit from its returned values; we re-add it here to conform with computePropertyValue's behavior. */\r\n\t\t\t\t\t\t\tcomputedValue = $(element).position()[property] + \"px\"; /* GET */\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn computedValue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar propertyValue;\r\n\r\n\t\t\t\t/* If this is a hooked property (e.g. \"clipLeft\" instead of the root property of \"clip\"),\r\n\t\t\t\t extract the hook's value from a normalized rootPropertyValue using CSS.Hooks.extractValue(). */\r\n\t\t\t\tif (CSS.Hooks.registered[property]) {\r\n\t\t\t\t\tvar hook = property,\r\n\t\t\t\t\t\t\thookRoot = CSS.Hooks.getRoot(hook);\r\n\r\n\t\t\t\t\t/* If a cached rootPropertyValue wasn't passed in (which Velocity always attempts to do in order to avoid requerying the DOM),\r\n\t\t\t\t\t query the DOM for the root property's value. */\r\n\t\t\t\t\tif (rootPropertyValue === undefined) {\r\n\t\t\t\t\t\t/* Since the browser is now being directly queried, use the official post-prefixing property name for this lookup. */\r\n\t\t\t\t\t\trootPropertyValue = CSS.getPropertyValue(element, CSS.Names.prefixCheck(hookRoot)[0]); /* GET */\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* If this root has a normalization registered, peform the associated normalization extraction. */\r\n\t\t\t\t\tif (CSS.Normalizations.registered[hookRoot]) {\r\n\t\t\t\t\t\trootPropertyValue = CSS.Normalizations.registered[hookRoot](\"extract\", element, rootPropertyValue);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Extract the hook's value. */\r\n\t\t\t\t\tpropertyValue = CSS.Hooks.extractValue(hook, rootPropertyValue);\r\n\r\n\t\t\t\t\t/* If this is a normalized property (e.g. \"opacity\" becomes \"filter\" in <=IE8) or \"translateX\" becomes \"transform\"),\r\n\t\t\t\t\t normalize the property's name and value, and handle the special case of transforms. */\r\n\t\t\t\t\t/* Note: Normalizing a property is mutually exclusive from hooking a property since hook-extracted values are strictly\r\n\t\t\t\t\t numerical and therefore do not require normalization extraction. */\r\n\t\t\t\t} else if (CSS.Normalizations.registered[property]) {\r\n\t\t\t\t\tvar normalizedPropertyName,\r\n\t\t\t\t\t\t\tnormalizedPropertyValue;\r\n\r\n\t\t\t\t\tnormalizedPropertyName = CSS.Normalizations.registered[property](\"name\", element);\r\n\r\n\t\t\t\t\t/* Transform values are calculated via normalization extraction (see below), which checks against the element's transformCache.\r\n\t\t\t\t\t At no point do transform GETs ever actually query the DOM; initial stylesheet values are never processed.\r\n\t\t\t\t\t This is because parsing 3D transform matrices is not always accurate and would bloat our codebase;\r\n\t\t\t\t\t thus, normalization extraction defaults initial transform values to their zero-values (e.g. 1 for scaleX and 0 for translateX). */\r\n\t\t\t\t\tif (normalizedPropertyName !== \"transform\") {\r\n\t\t\t\t\t\tnormalizedPropertyValue = computePropertyValue(element, CSS.Names.prefixCheck(normalizedPropertyName)[0]); /* GET */\r\n\r\n\t\t\t\t\t\t/* If the value is a CSS null-value and this property has a hook template, use that zero-value template so that hooks can be extracted from it. */\r\n\t\t\t\t\t\tif (CSS.Values.isCSSNullValue(normalizedPropertyValue) && CSS.Hooks.templates[property]) {\r\n\t\t\t\t\t\t\tnormalizedPropertyValue = CSS.Hooks.templates[property][1];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tpropertyValue = CSS.Normalizations.registered[property](\"extract\", element, normalizedPropertyValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* If a (numeric) value wasn't produced via hook extraction or normalization, query the DOM. */\r\n\t\t\t\tif (!/^[\\d-]/.test(propertyValue)) {\r\n\t\t\t\t\t/* For SVG elements, dimensional properties (which SVGAttribute() detects) are tweened via\r\n\t\t\t\t\t their HTML attribute values instead of their CSS style values. */\r\n\t\t\t\t\tvar data = Data(element);\r\n\r\n\t\t\t\t\tif (data && data.isSVG && CSS.Names.SVGAttribute(property)) {\r\n\t\t\t\t\t\t/* Since the height/width attribute values must be set manually, they don't reflect computed values.\r\n\t\t\t\t\t\t Thus, we use use getBBox() to ensure we always get values for elements with undefined height/width attributes. */\r\n\t\t\t\t\t\tif (/^(height|width)$/i.test(property)) {\r\n\t\t\t\t\t\t\t/* Firefox throws an error if .getBBox() is called on an SVG that isn't attached to the DOM. */\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tpropertyValue = element.getBBox()[property];\r\n\t\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\t\tpropertyValue = 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/* Otherwise, access the attribute value directly. */\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tpropertyValue = element.getAttribute(property);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tpropertyValue = computePropertyValue(element, CSS.Names.prefixCheck(property)[0]); /* GET */\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Since property lookups are for animation purposes (which entails computing the numeric delta between start and end values),\r\n\t\t\t\t convert CSS null-values to an integer of value 0. */\r\n\t\t\t\tif (CSS.Values.isCSSNullValue(propertyValue)) {\r\n\t\t\t\t\tpropertyValue = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (Velocity.debug >= 2) {\r\n\t\t\t\t\tconsole.log(\"Get \" + property + \": \" + propertyValue);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn propertyValue;\r\n\t\t\t},\r\n\t\t\t/* The singular setPropertyValue, which routes the logic for all normalizations, hooks, and standard CSS properties. */\r\n\t\t\tsetPropertyValue: function(element, property, propertyValue, rootPropertyValue, scrollData) {\r\n\t\t\t\tvar propertyName = property;\r\n\r\n\t\t\t\t/* In order to be subjected to call options and element queueing, scroll animation is routed through Velocity as if it were a standard CSS property. */\r\n\t\t\t\tif (property === \"scroll\") {\r\n\t\t\t\t\t/* If a container option is present, scroll the container instead of the browser window. */\r\n\t\t\t\t\tif (scrollData.container) {\r\n\t\t\t\t\t\tscrollData.container[\"scroll\" + scrollData.direction] = propertyValue;\r\n\t\t\t\t\t\t/* Otherwise, Velocity defaults to scrolling the browser window. */\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (scrollData.direction === \"Left\") {\r\n\t\t\t\t\t\t\twindow.scrollTo(propertyValue, scrollData.alternateValue);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\twindow.scrollTo(scrollData.alternateValue, propertyValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t/* Transforms (translateX, rotateZ, etc.) are applied to a per-element transformCache object, which is manually flushed via flushTransformCache().\r\n\t\t\t\t\t Thus, for now, we merely cache transforms being SET. */\r\n\t\t\t\t\tif (CSS.Normalizations.registered[property] && CSS.Normalizations.registered[property](\"name\", element) === \"transform\") {\r\n\t\t\t\t\t\t/* Perform a normalization injection. */\r\n\t\t\t\t\t\t/* Note: The normalization logic handles the transformCache updating. */\r\n\t\t\t\t\t\tCSS.Normalizations.registered[property](\"inject\", element, propertyValue);\r\n\r\n\t\t\t\t\t\tpropertyName = \"transform\";\r\n\t\t\t\t\t\tpropertyValue = Data(element).transformCache[property];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t/* Inject hooks. */\r\n\t\t\t\t\t\tif (CSS.Hooks.registered[property]) {\r\n\t\t\t\t\t\t\tvar hookName = property,\r\n\t\t\t\t\t\t\t\t\thookRoot = CSS.Hooks.getRoot(property);\r\n\r\n\t\t\t\t\t\t\t/* If a cached rootPropertyValue was not provided, query the DOM for the hookRoot's current value. */\r\n\t\t\t\t\t\t\trootPropertyValue = rootPropertyValue || CSS.getPropertyValue(element, hookRoot); /* GET */\r\n\r\n\t\t\t\t\t\t\tpropertyValue = CSS.Hooks.injectValue(hookName, propertyValue, rootPropertyValue);\r\n\t\t\t\t\t\t\tproperty = hookRoot;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Normalize names and values. */\r\n\t\t\t\t\t\tif (CSS.Normalizations.registered[property]) {\r\n\t\t\t\t\t\t\tpropertyValue = CSS.Normalizations.registered[property](\"inject\", element, propertyValue);\r\n\t\t\t\t\t\t\tproperty = CSS.Normalizations.registered[property](\"name\", element);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Assign the appropriate vendor prefix before performing an official style update. */\r\n\t\t\t\t\t\tpropertyName = CSS.Names.prefixCheck(property)[0];\r\n\r\n\t\t\t\t\t\t/* A try/catch is used for IE<=8, which throws an error when \"invalid\" CSS values are set, e.g. a negative width.\r\n\t\t\t\t\t\t Try/catch is avoided for other browsers since it incurs a performance overhead. */\r\n\t\t\t\t\t\tif (IE <= 8) {\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\telement.style[propertyName] = propertyValue;\r\n\t\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\t\tif (Velocity.debug) {\r\n\t\t\t\t\t\t\t\t\tconsole.log(\"Browser does not support [\" + propertyValue + \"] for [\" + propertyName + \"]\");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/* SVG elements have their dimensional properties (width, height, x, y, cx, etc.) applied directly as attributes instead of as styles. */\r\n\t\t\t\t\t\t\t/* Note: IE8 does not support SVG elements, so it's okay that we skip it for SVG animation. */\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tvar data = Data(element);\r\n\r\n\t\t\t\t\t\t\tif (data && data.isSVG && CSS.Names.SVGAttribute(property)) {\r\n\t\t\t\t\t\t\t\t/* Note: For SVG attributes, vendor-prefixed property names are never used. */\r\n\t\t\t\t\t\t\t\t/* Note: Not all CSS properties can be animated via attributes, but the browser won't throw an error for unsupported properties. */\r\n\t\t\t\t\t\t\t\telement.setAttribute(property, propertyValue);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\telement.style[propertyName] = propertyValue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (Velocity.debug >= 2) {\r\n\t\t\t\t\t\t\tconsole.log(\"Set \" + property + \" (\" + propertyName + \"): \" + propertyValue);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Return the normalized property name and value in case the caller wants to know how these values were modified before being applied to the DOM. */\r\n\t\t\t\treturn [propertyName, propertyValue];\r\n\t\t\t},\r\n\t\t\t/* To increase performance by batching transform updates into a single SET, transforms are not directly applied to an element until flushTransformCache() is called. */\r\n\t\t\t/* Note: Velocity applies transform properties in the same order that they are chronogically introduced to the element's CSS styles. */\r\n\t\t\tflushTransformCache: function(element) {\r\n\t\t\t\tvar transformString = \"\",\r\n\t\t\t\t\t\tdata = Data(element);\r\n\r\n\t\t\t\t/* Certain browsers require that SVG transforms be applied as an attribute. However, the SVG transform attribute takes a modified version of CSS's transform string\r\n\t\t\t\t (units are dropped and, except for skewX/Y, subproperties are merged into their master property -- e.g. scaleX and scaleY are merged into scale(X Y). */\r\n\t\t\t\tif ((IE || (Velocity.State.isAndroid && !Velocity.State.isChrome)) && data && data.isSVG) {\r\n\t\t\t\t\t/* Since transform values are stored in their parentheses-wrapped form, we use a helper function to strip out their numeric values.\r\n\t\t\t\t\t Further, SVG transform properties only take unitless (representing pixels) values, so it's okay that parseFloat() strips the unit suffixed to the float value. */\r\n\t\t\t\t\tvar getTransformFloat = function(transformProperty) {\r\n\t\t\t\t\t\treturn parseFloat(CSS.getPropertyValue(element, transformProperty));\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t/* Create an object to organize all the transforms that we'll apply to the SVG element. To keep the logic simple,\r\n\t\t\t\t\t we process *all* transform properties -- even those that may not be explicitly applied (since they default to their zero-values anyway). */\r\n\t\t\t\t\tvar SVGTransforms = {\r\n\t\t\t\t\t\ttranslate: [getTransformFloat(\"translateX\"), getTransformFloat(\"translateY\")],\r\n\t\t\t\t\t\tskewX: [getTransformFloat(\"skewX\")], skewY: [getTransformFloat(\"skewY\")],\r\n\t\t\t\t\t\t/* If the scale property is set (non-1), use that value for the scaleX and scaleY values\r\n\t\t\t\t\t\t (this behavior mimics the result of animating all these properties at once on HTML elements). */\r\n\t\t\t\t\t\tscale: getTransformFloat(\"scale\") !== 1 ? [getTransformFloat(\"scale\"), getTransformFloat(\"scale\")] : [getTransformFloat(\"scaleX\"), getTransformFloat(\"scaleY\")],\r\n\t\t\t\t\t\t/* Note: SVG's rotate transform takes three values: rotation degrees followed by the X and Y values\r\n\t\t\t\t\t\t defining the rotation's origin point. We ignore the origin values (default them to 0). */\r\n\t\t\t\t\t\trotate: [getTransformFloat(\"rotateZ\"), 0, 0]\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t/* Iterate through the transform properties in the user-defined property map order.\r\n\t\t\t\t\t (This mimics the behavior of non-SVG transform animation.) */\r\n\t\t\t\t\t$.each(Data(element).transformCache, function(transformName) {\r\n\t\t\t\t\t\t/* Except for with skewX/Y, revert the axis-specific transform subproperties to their axis-free master\r\n\t\t\t\t\t\t properties so that they match up with SVG's accepted transform properties. */\r\n\t\t\t\t\t\tif (/^translate/i.test(transformName)) {\r\n\t\t\t\t\t\t\ttransformName = \"translate\";\r\n\t\t\t\t\t\t} else if (/^scale/i.test(transformName)) {\r\n\t\t\t\t\t\t\ttransformName = \"scale\";\r\n\t\t\t\t\t\t} else if (/^rotate/i.test(transformName)) {\r\n\t\t\t\t\t\t\ttransformName = \"rotate\";\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Check that we haven't yet deleted the property from the SVGTransforms container. */\r\n\t\t\t\t\t\tif (SVGTransforms[transformName]) {\r\n\t\t\t\t\t\t\t/* Append the transform property in the SVG-supported transform format. As per the spec, surround the space-delimited values in parentheses. */\r\n\t\t\t\t\t\t\ttransformString += transformName + \"(\" + SVGTransforms[transformName].join(\" \") + \")\" + \" \";\r\n\r\n\t\t\t\t\t\t\t/* After processing an SVG transform property, delete it from the SVGTransforms container so we don't\r\n\t\t\t\t\t\t\t re-insert the same master property if we encounter another one of its axis-specific properties. */\r\n\t\t\t\t\t\t\tdelete SVGTransforms[transformName];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar transformValue,\r\n\t\t\t\t\t\t\tperspective;\r\n\r\n\t\t\t\t\t/* Transform properties are stored as members of the transformCache object. Concatenate all the members into a string. */\r\n\t\t\t\t\t$.each(Data(element).transformCache, function(transformName) {\r\n\t\t\t\t\t\ttransformValue = Data(element).transformCache[transformName];\r\n\r\n\t\t\t\t\t\t/* Transform's perspective subproperty must be set first in order to take effect. Store it temporarily. */\r\n\t\t\t\t\t\tif (transformName === \"transformPerspective\") {\r\n\t\t\t\t\t\t\tperspective = transformValue;\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* IE9 only supports one rotation type, rotateZ, which it refers to as \"rotate\". */\r\n\t\t\t\t\t\tif (IE === 9 && transformName === \"rotateZ\") {\r\n\t\t\t\t\t\t\ttransformName = \"rotate\";\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttransformString += transformName + transformValue + \" \";\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t/* If present, set the perspective subproperty first. */\r\n\t\t\t\t\tif (perspective) {\r\n\t\t\t\t\t\ttransformString = \"perspective\" + perspective + \" \" + transformString;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tCSS.setPropertyValue(element, \"transform\", transformString);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/* Register hooks and normalizations. */\r\n\t\tCSS.Hooks.register();\r\n\t\tCSS.Normalizations.register();\r\n\r\n\t\t/* Allow hook setting in the same fashion as jQuery's $.css(). */\r\n\t\tVelocity.hook = function(elements, arg2, arg3) {\r\n\t\t\tvar value;\r\n\r\n\t\t\telements = sanitizeElements(elements);\r\n\r\n\t\t\t$.each(elements, function(i, element) {\r\n\t\t\t\t/* Initialize Velocity's per-element data cache if this element hasn't previously been animated. */\r\n\t\t\t\tif (Data(element) === undefined) {\r\n\t\t\t\t\tVelocity.init(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Get property value. If an element set was passed in, only return the value for the first element. */\r\n\t\t\t\tif (arg3 === undefined) {\r\n\t\t\t\t\tif (value === undefined) {\r\n\t\t\t\t\t\tvalue = CSS.getPropertyValue(element, arg2);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t/* Set property value. */\r\n\t\t\t\t} else {\r\n\t\t\t\t\t/* sPV returns an array of the normalized propertyName/propertyValue pair used to update the DOM. */\r\n\t\t\t\t\tvar adjustedSet = CSS.setPropertyValue(element, arg2, arg3);\r\n\r\n\t\t\t\t\t/* Transform properties don't automatically set. They have to be flushed to the DOM. */\r\n\t\t\t\t\tif (adjustedSet[0] === \"transform\") {\r\n\t\t\t\t\t\tVelocity.CSS.flushTransformCache(element);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvalue = adjustedSet;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t};\r\n\r\n\t\t/*****************\r\n\t\t Animation\r\n\t\t *****************/\r\n\r\n\t\tvar animate = function() {\r\n\t\t\tvar opts;\r\n\r\n\t\t\t/******************\r\n\t\t\t Call Chain\r\n\t\t\t ******************/\r\n\r\n\t\t\t/* Logic for determining what to return to the call stack when exiting out of Velocity. */\r\n\t\t\tfunction getChain() {\r\n\t\t\t\t/* If we are using the utility function, attempt to return this call's promise. If no promise library was detected,\r\n\t\t\t\t default to null instead of returning the targeted elements so that utility function's return value is standardized. */\r\n\t\t\t\tif (isUtility) {\r\n\t\t\t\t\treturn promiseData.promise || null;\r\n\t\t\t\t\t/* Otherwise, if we're using $.fn, return the jQuery-/Zepto-wrapped element set. */\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn elementsWrapped;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/*************************\r\n\t\t\t Arguments Assignment\r\n\t\t\t *************************/\r\n\r\n\t\t\t/* To allow for expressive CoffeeScript code, Velocity supports an alternative syntax in which \"elements\" (or \"e\"), \"properties\" (or \"p\"), and \"options\" (or \"o\")\r\n\t\t\t objects are defined on a container object that's passed in as Velocity's sole argument. */\r\n\t\t\t/* Note: Some browsers automatically populate arguments with a \"properties\" object. We detect it by checking for its default \"names\" property. */\r\n\t\t\tvar syntacticSugar = (arguments[0] && (arguments[0].p || (($.isPlainObject(arguments[0].properties) && !arguments[0].properties.names) || Type.isString(arguments[0].properties)))),\r\n\t\t\t\t\t/* Whether Velocity was called via the utility function (as opposed to on a jQuery/Zepto object). */\r\n\t\t\t\t\tisUtility,\r\n\t\t\t\t\t/* When Velocity is called via the utility function ($.Velocity()/Velocity()), elements are explicitly\r\n\t\t\t\t\t passed in as the first parameter. Thus, argument positioning varies. We normalize them here. */\r\n\t\t\t\t\telementsWrapped,\r\n\t\t\t\t\targumentIndex;\r\n\r\n\t\t\tvar elements,\r\n\t\t\t\t\tpropertiesMap,\r\n\t\t\t\t\toptions;\r\n\r\n\t\t\t/* Detect jQuery/Zepto elements being animated via the $.fn method. */\r\n\t\t\tif (Type.isWrapped(this)) {\r\n\t\t\t\tisUtility = false;\r\n\r\n\t\t\t\targumentIndex = 0;\r\n\t\t\t\telements = this;\r\n\t\t\t\telementsWrapped = this;\r\n\t\t\t\t/* Otherwise, raw elements are being animated via the utility function. */\r\n\t\t\t} else {\r\n\t\t\t\tisUtility = true;\r\n\r\n\t\t\t\targumentIndex = 1;\r\n\t\t\t\telements = syntacticSugar ? (arguments[0].elements || arguments[0].e) : arguments[0];\r\n\t\t\t}\r\n\r\n\t\t\t/***************\r\n\t\t\t Promises\r\n\t\t\t ***************/\r\n\r\n\t\t\tvar promiseData = {\r\n\t\t\t\tpromise: null,\r\n\t\t\t\tresolver: null,\r\n\t\t\t\trejecter: null\r\n\t\t\t};\r\n\r\n\t\t\t/* If this call was made via the utility function (which is the default method of invocation when jQuery/Zepto are not being used), and if\r\n\t\t\t promise support was detected, create a promise object for this call and store references to its resolver and rejecter methods. The resolve\r\n\t\t\t method is used when a call completes naturally or is prematurely stopped by the user. In both cases, completeCall() handles the associated\r\n\t\t\t call cleanup and promise resolving logic. The reject method is used when an invalid set of arguments is passed into a Velocity call. */\r\n\t\t\t/* Note: Velocity employs a call-based queueing architecture, which means that stopping an animating element actually stops the full call that\r\n\t\t\t triggered it -- not that one element exclusively. Similarly, there is one promise per call, and all elements targeted by a Velocity call are\r\n\t\t\t grouped together for the purposes of resolving and rejecting a promise. */\r\n\t\t\tif (isUtility && Velocity.Promise) {\r\n\t\t\t\tpromiseData.promise = new Velocity.Promise(function(resolve, reject) {\r\n\t\t\t\t\tpromiseData.resolver = resolve;\r\n\t\t\t\t\tpromiseData.rejecter = reject;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (syntacticSugar) {\r\n\t\t\t\tpropertiesMap = arguments[0].properties || arguments[0].p;\r\n\t\t\t\toptions = arguments[0].options || arguments[0].o;\r\n\t\t\t} else {\r\n\t\t\t\tpropertiesMap = arguments[argumentIndex];\r\n\t\t\t\toptions = arguments[argumentIndex + 1];\r\n\t\t\t}\r\n\r\n\t\t\telements = sanitizeElements(elements);\r\n\r\n\t\t\tif (!elements) {\r\n\t\t\t\tif (promiseData.promise) {\r\n\t\t\t\t\tif (!propertiesMap || !options || options.promiseRejectEmpty !== false) {\r\n\t\t\t\t\t\tpromiseData.rejecter();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tpromiseData.resolver();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t/* The length of the element set (in the form of a nodeList or an array of elements) is defaulted to 1 in case a\r\n\t\t\t single raw DOM element is passed in (which doesn't contain a length property). */\r\n\t\t\tvar elementsLength = elements.length,\r\n\t\t\t\t\telementsIndex = 0;\r\n\r\n\t\t\t/***************************\r\n\t\t\t Argument Overloading\r\n\t\t\t ***************************/\r\n\r\n\t\t\t/* Support is included for jQuery's argument overloading: $.animate(propertyMap [, duration] [, easing] [, complete]).\r\n\t\t\t Overloading is detected by checking for the absence of an object being passed into options. */\r\n\t\t\t/* Note: The stop/finish/pause/resume actions do not accept animation options, and are therefore excluded from this check. */\r\n\t\t\tif (!/^(stop|finish|finishAll|pause|resume)$/i.test(propertiesMap) && !$.isPlainObject(options)) {\r\n\t\t\t\t/* The utility function shifts all arguments one position to the right, so we adjust for that offset. */\r\n\t\t\t\tvar startingArgumentPosition = argumentIndex + 1;\r\n\r\n\t\t\t\toptions = {};\r\n\r\n\t\t\t\t/* Iterate through all options arguments */\r\n\t\t\t\tfor (var i = startingArgumentPosition; i < arguments.length; i++) {\r\n\t\t\t\t\t/* Treat a number as a duration. Parse it out. */\r\n\t\t\t\t\t/* Note: The following RegEx will return true if passed an array with a number as its first item.\r\n\t\t\t\t\t Thus, arrays are skipped from this check. */\r\n\t\t\t\t\tif (!Type.isArray(arguments[i]) && (/^(fast|normal|slow)$/i.test(arguments[i]) || /^\\d/.test(arguments[i]))) {\r\n\t\t\t\t\t\toptions.duration = arguments[i];\r\n\t\t\t\t\t\t/* Treat strings and arrays as easings. */\r\n\t\t\t\t\t} else if (Type.isString(arguments[i]) || Type.isArray(arguments[i])) {\r\n\t\t\t\t\t\toptions.easing = arguments[i];\r\n\t\t\t\t\t\t/* Treat a function as a complete callback. */\r\n\t\t\t\t\t} else if (Type.isFunction(arguments[i])) {\r\n\t\t\t\t\t\toptions.complete = arguments[i];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/*********************\r\n\t\t\t Action Detection\r\n\t\t\t *********************/\r\n\r\n\t\t\t/* Velocity's behavior is categorized into \"actions\": Elements can either be specially scrolled into view,\r\n\t\t\t or they can be started, stopped, paused, resumed, or reversed . If a literal or referenced properties map is passed in as Velocity's\r\n\t\t\t first argument, the associated action is \"start\". Alternatively, \"scroll\", \"reverse\", \"pause\", \"resume\" or \"stop\" can be passed in \r\n\t\t\t instead of a properties map. */\r\n\t\t\tvar action;\r\n\r\n\t\t\tswitch (propertiesMap) {\r\n\t\t\t\tcase \"scroll\":\r\n\t\t\t\t\taction = \"scroll\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"reverse\":\r\n\t\t\t\t\taction = \"reverse\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pause\":\r\n\r\n\t\t\t\t\t/*******************\r\n\t\t\t\t\t Action: Pause\r\n\t\t\t\t\t *******************/\r\n\r\n\t\t\t\t\tvar currentTime = (new Date()).getTime();\r\n\r\n\t\t\t\t\t/* Handle delay timers */\r\n\t\t\t\t\t$.each(elements, function(i, element) {\r\n\t\t\t\t\t\tpauseDelayOnElement(element, currentTime);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t/* Pause and Resume are call-wide (not on a per element basis). Thus, calling pause or resume on a \r\n\t\t\t\t\t single element will cause any calls that containt tweens for that element to be paused/resumed\r\n\t\t\t\t\t as well. */\r\n\r\n\t\t\t\t\t/* Iterate through all calls and pause any that contain any of our elements */\r\n\t\t\t\t\t$.each(Velocity.State.calls, function(i, activeCall) {\r\n\r\n\t\t\t\t\t\tvar found = false;\r\n\t\t\t\t\t\t/* Inactive calls are set to false by the logic inside completeCall(). Skip them. */\r\n\t\t\t\t\t\tif (activeCall) {\r\n\t\t\t\t\t\t\t/* Iterate through the active call's targeted elements. */\r\n\t\t\t\t\t\t\t$.each(activeCall[1], function(k, activeElement) {\r\n\t\t\t\t\t\t\t\tvar queueName = (options === undefined) ? \"\" : options;\r\n\r\n\t\t\t\t\t\t\t\tif (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t/* Iterate through the calls targeted by the stop command. */\r\n\t\t\t\t\t\t\t\t$.each(elements, function(l, element) {\r\n\t\t\t\t\t\t\t\t\t/* Check that this call was applied to the target element. */\r\n\t\t\t\t\t\t\t\t\tif (element === activeElement) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* Set call to paused */\r\n\t\t\t\t\t\t\t\t\t\tactiveCall[5] = {\r\n\t\t\t\t\t\t\t\t\t\t\tresume: false\r\n\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* Once we match an element, we can bounce out to the next call entirely */\r\n\t\t\t\t\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t/* Proceed to check next call if we have already matched */\r\n\t\t\t\t\t\t\t\tif (found) {\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t/* Since pause creates no new tweens, exit out of Velocity. */\r\n\t\t\t\t\treturn getChain();\r\n\r\n\t\t\t\tcase \"resume\":\r\n\r\n\t\t\t\t\t/*******************\r\n\t\t\t\t\t Action: Resume\r\n\t\t\t\t\t *******************/\r\n\r\n\t\t\t\t\t/* Handle delay timers */\r\n\t\t\t\t\t$.each(elements, function(i, element) {\r\n\t\t\t\t\t\tresumeDelayOnElement(element, currentTime);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t/* Pause and Resume are call-wide (not on a per elemnt basis). Thus, calling pause or resume on a \r\n\t\t\t\t\t single element will cause any calls that containt tweens for that element to be paused/resumed\r\n\t\t\t\t\t as well. */\r\n\r\n\t\t\t\t\t/* Iterate through all calls and pause any that contain any of our elements */\r\n\t\t\t\t\t$.each(Velocity.State.calls, function(i, activeCall) {\r\n\t\t\t\t\t\tvar found = false;\r\n\t\t\t\t\t\t/* Inactive calls are set to false by the logic inside completeCall(). Skip them. */\r\n\t\t\t\t\t\tif (activeCall) {\r\n\t\t\t\t\t\t\t/* Iterate through the active call's targeted elements. */\r\n\t\t\t\t\t\t\t$.each(activeCall[1], function(k, activeElement) {\r\n\t\t\t\t\t\t\t\tvar queueName = (options === undefined) ? \"\" : options;\r\n\r\n\t\t\t\t\t\t\t\tif (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t/* Skip any calls that have never been paused */\r\n\t\t\t\t\t\t\t\tif (!activeCall[5]) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t/* Iterate through the calls targeted by the stop command. */\r\n\t\t\t\t\t\t\t\t$.each(elements, function(l, element) {\r\n\t\t\t\t\t\t\t\t\t/* Check that this call was applied to the target element. */\r\n\t\t\t\t\t\t\t\t\tif (element === activeElement) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* Flag a pause object to be resumed, which will occur during the next tick. In\r\n\t\t\t\t\t\t\t\t\t\t addition, the pause object will at that time be deleted */\r\n\t\t\t\t\t\t\t\t\t\tactiveCall[5].resume = true;\r\n\r\n\t\t\t\t\t\t\t\t\t\t/* Once we match an element, we can bounce out to the next call entirely */\r\n\t\t\t\t\t\t\t\t\t\tfound = true;\r\n\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t/* Proceed to check next call if we have already matched */\r\n\t\t\t\t\t\t\t\tif (found) {\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t/* Since resume creates no new tweens, exit out of Velocity. */\r\n\t\t\t\t\treturn getChain();\r\n\r\n\t\t\t\tcase \"finish\":\r\n\t\t\t\tcase \"finishAll\":\r\n\t\t\t\tcase \"stop\":\r\n\t\t\t\t\t/*******************\r\n\t\t\t\t\t Action: Stop\r\n\t\t\t\t\t *******************/\r\n\r\n\t\t\t\t\t/* Clear the currently-active delay on each targeted element. */\r\n\t\t\t\t\t$.each(elements, function(i, element) {\r\n\t\t\t\t\t\tif (Data(element) && Data(element).delayTimer) {\r\n\t\t\t\t\t\t\t/* Stop the timer from triggering its cached next() function. */\r\n\t\t\t\t\t\t\tclearTimeout(Data(element).delayTimer.setTimeout);\r\n\r\n\t\t\t\t\t\t\t/* Manually call the next() function so that the subsequent queue items can progress. */\r\n\t\t\t\t\t\t\tif (Data(element).delayTimer.next) {\r\n\t\t\t\t\t\t\t\tData(element).delayTimer.next();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdelete Data(element).delayTimer;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* If we want to finish everything in the queue, we have to iterate through it\r\n\t\t\t\t\t\t and call each function. This will make them active calls below, which will\r\n\t\t\t\t\t\t cause them to be applied via the duration setting. */\r\n\t\t\t\t\t\tif (propertiesMap === \"finishAll\" && (options === true || Type.isString(options))) {\r\n\t\t\t\t\t\t\t/* Iterate through the items in the element's queue. */\r\n\t\t\t\t\t\t\t$.each($.queue(element, Type.isString(options) ? options : \"\"), function(_, item) {\r\n\t\t\t\t\t\t\t\t/* The queue array can contain an \"inprogress\" string, which we skip. */\r\n\t\t\t\t\t\t\t\tif (Type.isFunction(item)) {\r\n\t\t\t\t\t\t\t\t\titem();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t/* Clearing the $.queue() array is achieved by resetting it to []. */\r\n\t\t\t\t\t\t\t$.queue(element, Type.isString(options) ? options : \"\", []);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar callsToStop = [];\r\n\r\n\t\t\t\t\t/* When the stop action is triggered, the elements' currently active call is immediately stopped. The active call might have\r\n\t\t\t\t\t been applied to multiple elements, in which case all of the call's elements will be stopped. When an element\r\n\t\t\t\t\t is stopped, the next item in its animation queue is immediately triggered. */\r\n\t\t\t\t\t/* An additional argument may be passed in to clear an element's remaining queued calls. Either true (which defaults to the \"fx\" queue)\r\n\t\t\t\t\t or a custom queue string can be passed in. */\r\n\t\t\t\t\t/* Note: The stop command runs prior to Velocity's Queueing phase since its behavior is intended to take effect *immediately*,\r\n\t\t\t\t\t regardless of the element's current queue state. */\r\n\r\n\t\t\t\t\t/* Iterate through every active call. */\r\n\t\t\t\t\t$.each(Velocity.State.calls, function(i, activeCall) {\r\n\t\t\t\t\t\t/* Inactive calls are set to false by the logic inside completeCall(). Skip them. */\r\n\t\t\t\t\t\tif (activeCall) {\r\n\t\t\t\t\t\t\t/* Iterate through the active call's targeted elements. */\r\n\t\t\t\t\t\t\t$.each(activeCall[1], function(k, activeElement) {\r\n\t\t\t\t\t\t\t\t/* If true was passed in as a secondary argument, clear absolutely all calls on this element. Otherwise, only\r\n\t\t\t\t\t\t\t\t clear calls associated with the relevant queue. */\r\n\t\t\t\t\t\t\t\t/* Call stopping logic works as follows:\r\n\t\t\t\t\t\t\t\t - options === true --> stop current default queue calls (and queue:false calls), including remaining queued ones.\r\n\t\t\t\t\t\t\t\t - options === undefined --> stop current queue:\"\" call and all queue:false calls.\r\n\t\t\t\t\t\t\t\t - options === false --> stop only queue:false calls.\r\n\t\t\t\t\t\t\t\t - options === \"custom\" --> stop current queue:\"custom\" call, including remaining queued ones (there is no functionality to only clear the currently-running queue:\"custom\" call). */\r\n\t\t\t\t\t\t\t\tvar queueName = (options === undefined) ? \"\" : options;\r\n\r\n\t\t\t\t\t\t\t\tif (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t/* Iterate through the calls targeted by the stop command. */\r\n\t\t\t\t\t\t\t\t$.each(elements, function(l, element) {\r\n\t\t\t\t\t\t\t\t\t/* Check that this call was applied to the target element. */\r\n\t\t\t\t\t\t\t\t\tif (element === activeElement) {\r\n\t\t\t\t\t\t\t\t\t\t/* Optionally clear the remaining queued calls. If we're doing \"finishAll\" this won't find anything,\r\n\t\t\t\t\t\t\t\t\t\t due to the queue-clearing above. */\r\n\t\t\t\t\t\t\t\t\t\tif (options === true || Type.isString(options)) {\r\n\t\t\t\t\t\t\t\t\t\t\t/* Iterate through the items in the element's queue. */\r\n\t\t\t\t\t\t\t\t\t\t\t$.each($.queue(element, Type.isString(options) ? options : \"\"), function(_, item) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t/* The queue array can contain an \"inprogress\" string, which we skip. */\r\n\t\t\t\t\t\t\t\t\t\t\t\tif (Type.isFunction(item)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t/* Pass the item's callback a flag indicating that we want to abort from the queue call.\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t (Specifically, the queue will resolve the call's associated promise then abort.)  */\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem(null, true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t/* Clearing the $.queue() array is achieved by resetting it to []. */\r\n\t\t\t\t\t\t\t\t\t\t\t$.queue(element, Type.isString(options) ? options : \"\", []);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (propertiesMap === \"stop\") {\r\n\t\t\t\t\t\t\t\t\t\t\t/* Since \"reverse\" uses cached start values (the previous call's endValues), these values must be\r\n\t\t\t\t\t\t\t\t\t\t\t changed to reflect the final value that the elements were actually tweened to. */\r\n\t\t\t\t\t\t\t\t\t\t\t/* Note: If only queue:false/queue:\"custom\" animations are currently running on an element, it won't have a tweensContainer\r\n\t\t\t\t\t\t\t\t\t\t\t object. Also, queue:false/queue:\"custom\" animations can't be reversed. */\r\n\t\t\t\t\t\t\t\t\t\t\tvar data = Data(element);\r\n\t\t\t\t\t\t\t\t\t\t\tif (data && data.tweensContainer && (queueName === true || queueName === \"\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t$.each(data.tweensContainer, function(m, activeTween) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tactiveTween.endValue = activeTween.currentValue;\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tcallsToStop.push(i);\r\n\t\t\t\t\t\t\t\t\t\t} else if (propertiesMap === \"finish\" || propertiesMap === \"finishAll\") {\r\n\t\t\t\t\t\t\t\t\t\t\t/* To get active tweens to finish immediately, we forcefully shorten their durations to 1ms so that\r\n\t\t\t\t\t\t\t\t\t\t\t they finish upon the next rAf tick then proceed with normal call completion logic. */\r\n\t\t\t\t\t\t\t\t\t\t\tactiveCall[2].duration = 1;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t/* Prematurely call completeCall() on each matched active call. Pass an additional flag for \"stop\" to indicate\r\n\t\t\t\t\t that the complete callback and display:none setting should be skipped since we're completing prematurely. */\r\n\t\t\t\t\tif (propertiesMap === \"stop\") {\r\n\t\t\t\t\t\t$.each(callsToStop, function(i, j) {\r\n\t\t\t\t\t\t\tcompleteCall(j, true);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif (promiseData.promise) {\r\n\t\t\t\t\t\t\t/* Immediately resolve the promise associated with this stop call since stop runs synchronously. */\r\n\t\t\t\t\t\t\tpromiseData.resolver(elements);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Since we're stopping, and not proceeding with queueing, exit out of Velocity. */\r\n\t\t\t\t\treturn getChain();\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t/* Treat a non-empty plain object as a literal properties map. */\r\n\t\t\t\t\tif ($.isPlainObject(propertiesMap) && !Type.isEmptyObject(propertiesMap)) {\r\n\t\t\t\t\t\taction = \"start\";\r\n\r\n\t\t\t\t\t\t/****************\r\n\t\t\t\t\t\t Redirects\r\n\t\t\t\t\t\t ****************/\r\n\r\n\t\t\t\t\t\t/* Check if a string matches a registered redirect (see Redirects above). */\r\n\t\t\t\t\t} else if (Type.isString(propertiesMap) && Velocity.Redirects[propertiesMap]) {\r\n\t\t\t\t\t\topts = $.extend({}, options);\r\n\r\n\t\t\t\t\t\tvar durationOriginal = opts.duration,\r\n\t\t\t\t\t\t\t\tdelayOriginal = opts.delay || 0;\r\n\r\n\t\t\t\t\t\t/* If the backwards option was passed in, reverse the element set so that elements animate from the last to the first. */\r\n\t\t\t\t\t\tif (opts.backwards === true) {\r\n\t\t\t\t\t\t\telements = $.extend(true, [], elements).reverse();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Individually trigger the redirect for each element in the set to prevent users from having to handle iteration logic in their redirect. */\r\n\t\t\t\t\t\t$.each(elements, function(elementIndex, element) {\r\n\t\t\t\t\t\t\t/* If the stagger option was passed in, successively delay each element by the stagger value (in ms). Retain the original delay value. */\r\n\t\t\t\t\t\t\tif (parseFloat(opts.stagger)) {\r\n\t\t\t\t\t\t\t\topts.delay = delayOriginal + (parseFloat(opts.stagger) * elementIndex);\r\n\t\t\t\t\t\t\t} else if (Type.isFunction(opts.stagger)) {\r\n\t\t\t\t\t\t\t\topts.delay = delayOriginal + opts.stagger.call(element, elementIndex, elementsLength);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* If the drag option was passed in, successively increase/decrease (depending on the presense of opts.backwards)\r\n\t\t\t\t\t\t\t the duration of each element's animation, using floors to prevent producing very short durations. */\r\n\t\t\t\t\t\t\tif (opts.drag) {\r\n\t\t\t\t\t\t\t\t/* Default the duration of UI pack effects (callouts and transitions) to 1000ms instead of the usual default duration of 400ms. */\r\n\t\t\t\t\t\t\t\topts.duration = parseFloat(durationOriginal) || (/^(callout|transition)/.test(propertiesMap) ? 1000 : DURATION_DEFAULT);\r\n\r\n\t\t\t\t\t\t\t\t/* For each element, take the greater duration of: A) animation completion percentage relative to the original duration,\r\n\t\t\t\t\t\t\t\t B) 75% of the original duration, or C) a 200ms fallback (in case duration is already set to a low value).\r\n\t\t\t\t\t\t\t\t The end result is a baseline of 75% of the redirect's duration that increases/decreases as the end of the element set is approached. */\r\n\t\t\t\t\t\t\t\topts.duration = Math.max(opts.duration * (opts.backwards ? 1 - elementIndex / elementsLength : (elementIndex + 1) / elementsLength), opts.duration * 0.75, 200);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Pass in the call's opts object so that the redirect can optionally extend it. It defaults to an empty object instead of null to\r\n\t\t\t\t\t\t\t reduce the opts checking logic required inside the redirect. */\r\n\t\t\t\t\t\t\tVelocity.Redirects[propertiesMap].call(element, element, opts || {}, elementIndex, elementsLength, elements, promiseData.promise ? promiseData : undefined);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t/* Since the animation logic resides within the redirect's own code, abort the remainder of this call.\r\n\t\t\t\t\t\t (The performance overhead up to this point is virtually non-existant.) */\r\n\t\t\t\t\t\t/* Note: The jQuery call chain is kept intact by returning the complete element set. */\r\n\t\t\t\t\t\treturn getChain();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvar abortError = \"Velocity: First argument (\" + propertiesMap + \") was not a property map, a known action, or a registered redirect. Aborting.\";\r\n\r\n\t\t\t\t\t\tif (promiseData.promise) {\r\n\t\t\t\t\t\t\tpromiseData.rejecter(new Error(abortError));\r\n\t\t\t\t\t\t} else if (window.console) {\r\n\t\t\t\t\t\t\tconsole.log(abortError);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn getChain();\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/**************************\r\n\t\t\t Call-Wide Variables\r\n\t\t\t **************************/\r\n\r\n\t\t\t/* A container for CSS unit conversion ratios (e.g. %, rem, and em ==> px) that is used to cache ratios across all elements\r\n\t\t\t being animated in a single Velocity call. Calculating unit ratios necessitates DOM querying and updating, and is therefore\r\n\t\t\t avoided (via caching) wherever possible. This container is call-wide instead of page-wide to avoid the risk of using stale\r\n\t\t\t conversion metrics across Velocity animations that are not immediately consecutively chained. */\r\n\t\t\tvar callUnitConversionData = {\r\n\t\t\t\tlastParent: null,\r\n\t\t\t\tlastPosition: null,\r\n\t\t\t\tlastFontSize: null,\r\n\t\t\t\tlastPercentToPxWidth: null,\r\n\t\t\t\tlastPercentToPxHeight: null,\r\n\t\t\t\tlastEmToPx: null,\r\n\t\t\t\tremToPx: null,\r\n\t\t\t\tvwToPx: null,\r\n\t\t\t\tvhToPx: null\r\n\t\t\t};\r\n\r\n\t\t\t/* A container for all the ensuing tween data and metadata associated with this call. This container gets pushed to the page-wide\r\n\t\t\t Velocity.State.calls array that is processed during animation ticking. */\r\n\t\t\tvar call = [];\r\n\r\n\t\t\t/************************\r\n\t\t\t Element Processing\r\n\t\t\t ************************/\r\n\r\n\t\t\t/* Element processing consists of three parts -- data processing that cannot go stale and data processing that *can* go stale (i.e. third-party style modifications):\r\n\t\t\t 1) Pre-Queueing: Element-wide variables, including the element's data storage, are instantiated. Call options are prepared. If triggered, the Stop action is executed.\r\n\t\t\t 2) Queueing: The logic that runs once this call has reached its point of execution in the element's $.queue() stack. Most logic is placed here to avoid risking it becoming stale.\r\n\t\t\t 3) Pushing: Consolidation of the tween data followed by its push onto the global in-progress calls container.\r\n\t\t\t `elementArrayIndex` allows passing index of the element in the original array to value functions.\r\n\t\t\t If `elementsIndex` were used instead the index would be determined by the elements' per-element queue.\r\n\t\t\t */\r\n\t\t\tfunction processElement(element, elementArrayIndex) {\r\n\r\n\t\t\t\t/*************************\r\n\t\t\t\t Part I: Pre-Queueing\r\n\t\t\t\t *************************/\r\n\r\n\t\t\t\t/***************************\r\n\t\t\t\t Element-Wide Variables\r\n\t\t\t\t ***************************/\r\n\r\n\t\t\t\tvar /* The runtime opts object is the extension of the current call's options and Velocity's page-wide option defaults. */\r\n\t\t\t\t\t\topts = $.extend({}, Velocity.defaults, options),\r\n\t\t\t\t\t\t/* A container for the processed data associated with each property in the propertyMap.\r\n\t\t\t\t\t\t (Each property in the map produces its own \"tween\".) */\r\n\t\t\t\t\t\ttweensContainer = {},\r\n\t\t\t\t\t\telementUnitConversionData;\r\n\r\n\t\t\t\t/******************\r\n\t\t\t\t Element Init\r\n\t\t\t\t ******************/\r\n\r\n\t\t\t\tif (Data(element) === undefined) {\r\n\t\t\t\t\tVelocity.init(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/******************\r\n\t\t\t\t Option: Delay\r\n\t\t\t\t ******************/\r\n\r\n\t\t\t\t/* Since queue:false doesn't respect the item's existing queue, we avoid injecting its delay here (it's set later on). */\r\n\t\t\t\t/* Note: Velocity rolls its own delay function since jQuery doesn't have a utility alias for $.fn.delay()\r\n\t\t\t\t (and thus requires jQuery element creation, which we avoid since its overhead includes DOM querying). */\r\n\t\t\t\tif (parseFloat(opts.delay) && opts.queue !== false) {\r\n\t\t\t\t\t$.queue(element, opts.queue, function(next, clearQueue) {\r\n\t\t\t\t\t\tif (clearQueue === true) {\r\n\t\t\t\t\t\t\t/* Do not continue with animation queueing. */\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* This is a flag used to indicate to the upcoming completeCall() function that this queue entry was initiated by Velocity. See completeCall() for further details. */\r\n\t\t\t\t\t\tVelocity.velocityQueueEntryFlag = true;\r\n\r\n\t\t\t\t\t\t/* The ensuing queue item (which is assigned to the \"next\" argument that $.queue() automatically passes in) will be triggered after a setTimeout delay.\r\n\t\t\t\t\t\t The setTimeout is stored so that it can be subjected to clearTimeout() if this animation is prematurely stopped via Velocity's \"stop\" command, and\r\n\t\t\t\t\t\t delayBegin/delayTime is used to ensure we can \"pause\" and \"resume\" a tween that is still mid-delay. */\r\n\r\n\t\t\t\t\t\t/* Temporarily store delayed elements to facilite access for global pause/resume */\r\n\t\t\t\t\t\tvar callIndex = Velocity.State.delayedElements.count++;\r\n\t\t\t\t\t\tVelocity.State.delayedElements[callIndex] = element;\r\n\r\n\t\t\t\t\t\tvar delayComplete = (function(index) {\r\n\t\t\t\t\t\t\treturn function() {\r\n\t\t\t\t\t\t\t\t/* Clear the temporary element */\r\n\t\t\t\t\t\t\t\tVelocity.State.delayedElements[index] = false;\r\n\r\n\t\t\t\t\t\t\t\t/* Finally, issue the call */\r\n\t\t\t\t\t\t\t\tnext();\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t})(callIndex);\r\n\r\n\r\n\t\t\t\t\t\tData(element).delayBegin = (new Date()).getTime();\r\n\t\t\t\t\t\tData(element).delay = parseFloat(opts.delay);\r\n\t\t\t\t\t\tData(element).delayTimer = {\r\n\t\t\t\t\t\t\tsetTimeout: setTimeout(next, parseFloat(opts.delay)),\r\n\t\t\t\t\t\t\tnext: delayComplete\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*********************\r\n\t\t\t\t Option: Duration\r\n\t\t\t\t *********************/\r\n\r\n\t\t\t\t/* Support for jQuery's named durations. */\r\n\t\t\t\tswitch (opts.duration.toString().toLowerCase()) {\r\n\t\t\t\t\tcase \"fast\":\r\n\t\t\t\t\t\topts.duration = 200;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"normal\":\r\n\t\t\t\t\t\topts.duration = DURATION_DEFAULT;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"slow\":\r\n\t\t\t\t\t\topts.duration = 600;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t/* Remove the potential \"ms\" suffix and default to 1 if the user is attempting to set a duration of 0 (in order to produce an immediate style change). */\r\n\t\t\t\t\t\topts.duration = parseFloat(opts.duration) || 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/************************\r\n\t\t\t\t Global Option: Mock\r\n\t\t\t\t ************************/\r\n\r\n\t\t\t\tif (Velocity.mock !== false) {\r\n\t\t\t\t\t/* In mock mode, all animations are forced to 1ms so that they occur immediately upon the next rAF tick.\r\n\t\t\t\t\t Alternatively, a multiplier can be passed in to time remap all delays and durations. */\r\n\t\t\t\t\tif (Velocity.mock === true) {\r\n\t\t\t\t\t\topts.duration = opts.delay = 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\topts.duration *= parseFloat(Velocity.mock) || 1;\r\n\t\t\t\t\t\topts.delay *= parseFloat(Velocity.mock) || 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*******************\r\n\t\t\t\t Option: Easing\r\n\t\t\t\t *******************/\r\n\r\n\t\t\t\topts.easing = getEasing(opts.easing, opts.duration);\r\n\r\n\t\t\t\t/**********************\r\n\t\t\t\t Option: Callbacks\r\n\t\t\t\t **********************/\r\n\r\n\t\t\t\t/* Callbacks must functions. Otherwise, default to null. */\r\n\t\t\t\tif (opts.begin && !Type.isFunction(opts.begin)) {\r\n\t\t\t\t\topts.begin = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (opts.progress && !Type.isFunction(opts.progress)) {\r\n\t\t\t\t\topts.progress = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (opts.complete && !Type.isFunction(opts.complete)) {\r\n\t\t\t\t\topts.complete = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*********************************\r\n\t\t\t\t Option: Display & Visibility\r\n\t\t\t\t *********************************/\r\n\r\n\t\t\t\t/* Refer to Velocity's documentation (VelocityJS.org/#displayAndVisibility) for a description of the display and visibility options' behavior. */\r\n\t\t\t\t/* Note: We strictly check for undefined instead of falsiness because display accepts an empty string value. */\r\n\t\t\t\tif (opts.display !== undefined && opts.display !== null) {\r\n\t\t\t\t\topts.display = opts.display.toString().toLowerCase();\r\n\r\n\t\t\t\t\t/* Users can pass in a special \"auto\" value to instruct Velocity to set the element to its default display value. */\r\n\t\t\t\t\tif (opts.display === \"auto\") {\r\n\t\t\t\t\t\topts.display = Velocity.CSS.Values.getDisplayType(element);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (opts.visibility !== undefined && opts.visibility !== null) {\r\n\t\t\t\t\topts.visibility = opts.visibility.toString().toLowerCase();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**********************\r\n\t\t\t\t Option: mobileHA\r\n\t\t\t\t **********************/\r\n\r\n\t\t\t\t/* When set to true, and if this is a mobile device, mobileHA automatically enables hardware acceleration (via a null transform hack)\r\n\t\t\t\t on animating elements. HA is removed from the element at the completion of its animation. */\r\n\t\t\t\t/* Note: Android Gingerbread doesn't support HA. If a null transform hack (mobileHA) is in fact set, it will prevent other tranform subproperties from taking effect. */\r\n\t\t\t\t/* Note: You can read more about the use of mobileHA in Velocity's documentation: VelocityJS.org/#mobileHA. */\r\n\t\t\t\topts.mobileHA = (opts.mobileHA && Velocity.State.isMobile && !Velocity.State.isGingerbread);\r\n\r\n\t\t\t\t/***********************\r\n\t\t\t\t Part II: Queueing\r\n\t\t\t\t ***********************/\r\n\r\n\t\t\t\t/* When a set of elements is targeted by a Velocity call, the set is broken up and each element has the current Velocity call individually queued onto it.\r\n\t\t\t\t In this way, each element's existing queue is respected; some elements may already be animating and accordingly should not have this current Velocity call triggered immediately. */\r\n\t\t\t\t/* In each queue, tween data is processed for each animating property then pushed onto the call-wide calls array. When the last element in the set has had its tweens processed,\r\n\t\t\t\t the call array is pushed to Velocity.State.calls for live processing by the requestAnimationFrame tick. */\r\n\t\t\t\tfunction buildQueue(next) {\r\n\t\t\t\t\tvar data, lastTweensContainer;\r\n\r\n\t\t\t\t\t/*******************\r\n\t\t\t\t\t Option: Begin\r\n\t\t\t\t\t *******************/\r\n\r\n\t\t\t\t\t/* The begin callback is fired once per call -- not once per elemenet -- and is passed the full raw DOM element set as both its context and its first argument. */\r\n\t\t\t\t\tif (opts.begin && elementsIndex === 0) {\r\n\t\t\t\t\t\t/* We throw callbacks in a setTimeout so that thrown errors don't halt the execution of Velocity itself. */\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\topts.begin.call(elements, elements);\r\n\t\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\tthrow error;\r\n\t\t\t\t\t\t\t}, 1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/*****************************************\r\n\t\t\t\t\t Tween Data Construction (for Scroll)\r\n\t\t\t\t\t *****************************************/\r\n\r\n\t\t\t\t\t/* Note: In order to be subjected to chaining and animation options, scroll's tweening is routed through Velocity as if it were a standard CSS property animation. */\r\n\t\t\t\t\tif (action === \"scroll\") {\r\n\t\t\t\t\t\t/* The scroll action uniquely takes an optional \"offset\" option -- specified in pixels -- that offsets the targeted scroll position. */\r\n\t\t\t\t\t\tvar scrollDirection = (/^x$/i.test(opts.axis) ? \"Left\" : \"Top\"),\r\n\t\t\t\t\t\t\t\tscrollOffset = parseFloat(opts.offset) || 0,\r\n\t\t\t\t\t\t\t\tscrollPositionCurrent,\r\n\t\t\t\t\t\t\t\tscrollPositionCurrentAlternate,\r\n\t\t\t\t\t\t\t\tscrollPositionEnd;\r\n\r\n\t\t\t\t\t\t/* Scroll also uniquely takes an optional \"container\" option, which indicates the parent element that should be scrolled --\r\n\t\t\t\t\t\t as opposed to the browser window itself. This is useful for scrolling toward an element that's inside an overflowing parent element. */\r\n\t\t\t\t\t\tif (opts.container) {\r\n\t\t\t\t\t\t\t/* Ensure that either a jQuery object or a raw DOM element was passed in. */\r\n\t\t\t\t\t\t\tif (Type.isWrapped(opts.container) || Type.isNode(opts.container)) {\r\n\t\t\t\t\t\t\t\t/* Extract the raw DOM element from the jQuery wrapper. */\r\n\t\t\t\t\t\t\t\topts.container = opts.container[0] || opts.container;\r\n\t\t\t\t\t\t\t\t/* Note: Unlike other properties in Velocity, the browser's scroll position is never cached since it so frequently changes\r\n\t\t\t\t\t\t\t\t (due to the user's natural interaction with the page). */\r\n\t\t\t\t\t\t\t\tscrollPositionCurrent = opts.container[\"scroll\" + scrollDirection]; /* GET */\r\n\r\n\t\t\t\t\t\t\t\t/* $.position() values are relative to the container's currently viewable area (without taking into account the container's true dimensions\r\n\t\t\t\t\t\t\t\t -- say, for example, if the container was not overflowing). Thus, the scroll end value is the sum of the child element's position *and*\r\n\t\t\t\t\t\t\t\t the scroll container's current scroll position. */\r\n\t\t\t\t\t\t\t\tscrollPositionEnd = (scrollPositionCurrent + $(element).position()[scrollDirection.toLowerCase()]) + scrollOffset; /* GET */\r\n\t\t\t\t\t\t\t\t/* If a value other than a jQuery object or a raw DOM element was passed in, default to null so that this option is ignored. */\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\topts.container = null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t/* If the window itself is being scrolled -- not a containing element -- perform a live scroll position lookup using\r\n\t\t\t\t\t\t\t the appropriate cached property names (which differ based on browser type). */\r\n\t\t\t\t\t\t\tscrollPositionCurrent = Velocity.State.scrollAnchor[Velocity.State[\"scrollProperty\" + scrollDirection]]; /* GET */\r\n\t\t\t\t\t\t\t/* When scrolling the browser window, cache the alternate axis's current value since window.scrollTo() doesn't let us change only one value at a time. */\r\n\t\t\t\t\t\t\tscrollPositionCurrentAlternate = Velocity.State.scrollAnchor[Velocity.State[\"scrollProperty\" + (scrollDirection === \"Left\" ? \"Top\" : \"Left\")]]; /* GET */\r\n\r\n\t\t\t\t\t\t\t/* Unlike $.position(), $.offset() values are relative to the browser window's true dimensions -- not merely its currently viewable area --\r\n\t\t\t\t\t\t\t and therefore end values do not need to be compounded onto current values. */\r\n\t\t\t\t\t\t\tscrollPositionEnd = $(element).offset()[scrollDirection.toLowerCase()] + scrollOffset; /* GET */\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Since there's only one format that scroll's associated tweensContainer can take, we create it manually. */\r\n\t\t\t\t\t\ttweensContainer = {\r\n\t\t\t\t\t\t\tscroll: {\r\n\t\t\t\t\t\t\t\trootPropertyValue: false,\r\n\t\t\t\t\t\t\t\tstartValue: scrollPositionCurrent,\r\n\t\t\t\t\t\t\t\tcurrentValue: scrollPositionCurrent,\r\n\t\t\t\t\t\t\t\tendValue: scrollPositionEnd,\r\n\t\t\t\t\t\t\t\tunitType: \"\",\r\n\t\t\t\t\t\t\t\teasing: opts.easing,\r\n\t\t\t\t\t\t\t\tscrollData: {\r\n\t\t\t\t\t\t\t\t\tcontainer: opts.container,\r\n\t\t\t\t\t\t\t\t\tdirection: scrollDirection,\r\n\t\t\t\t\t\t\t\t\talternateValue: scrollPositionCurrentAlternate\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\telement: element\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tif (Velocity.debug) {\r\n\t\t\t\t\t\t\tconsole.log(\"tweensContainer (scroll): \", tweensContainer.scroll, element);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/******************************************\r\n\t\t\t\t\t\t Tween Data Construction (for Reverse)\r\n\t\t\t\t\t\t ******************************************/\r\n\r\n\t\t\t\t\t\t/* Reverse acts like a \"start\" action in that a property map is animated toward. The only difference is\r\n\t\t\t\t\t\t that the property map used for reverse is the inverse of the map used in the previous call. Thus, we manipulate\r\n\t\t\t\t\t\t the previous call to construct our new map: use the previous map's end values as our new map's start values. Copy over all other data. */\r\n\t\t\t\t\t\t/* Note: Reverse can be directly called via the \"reverse\" parameter, or it can be indirectly triggered via the loop option. (Loops are composed of multiple reverses.) */\r\n\t\t\t\t\t\t/* Note: Reverse calls do not need to be consecutively chained onto a currently-animating element in order to operate on cached values;\r\n\t\t\t\t\t\t there is no harm to reverse being called on a potentially stale data cache since reverse's behavior is simply defined\r\n\t\t\t\t\t\t as reverting to the element's values as they were prior to the previous *Velocity* call. */\r\n\t\t\t\t\t} else if (action === \"reverse\") {\r\n\t\t\t\t\t\tdata = Data(element);\r\n\r\n\t\t\t\t\t\t/* Abort if there is no prior animation data to reverse to. */\r\n\t\t\t\t\t\tif (!data) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!data.tweensContainer) {\r\n\t\t\t\t\t\t\t/* Dequeue the element so that this queue entry releases itself immediately, allowing subsequent queue entries to run. */\r\n\t\t\t\t\t\t\t$.dequeue(element, opts.queue);\r\n\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t/*********************\r\n\t\t\t\t\t\t\t Options Parsing\r\n\t\t\t\t\t\t\t *********************/\r\n\r\n\t\t\t\t\t\t\t/* If the element was hidden via the display option in the previous call,\r\n\t\t\t\t\t\t\t revert display to \"auto\" prior to reversal so that the element is visible again. */\r\n\t\t\t\t\t\t\tif (data.opts.display === \"none\") {\r\n\t\t\t\t\t\t\t\tdata.opts.display = \"auto\";\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (data.opts.visibility === \"hidden\") {\r\n\t\t\t\t\t\t\t\tdata.opts.visibility = \"visible\";\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* If the loop option was set in the previous call, disable it so that \"reverse\" calls aren't recursively generated.\r\n\t\t\t\t\t\t\t Further, remove the previous call's callback options; typically, users do not want these to be refired. */\r\n\t\t\t\t\t\t\tdata.opts.loop = false;\r\n\t\t\t\t\t\t\tdata.opts.begin = null;\r\n\t\t\t\t\t\t\tdata.opts.complete = null;\r\n\r\n\t\t\t\t\t\t\t/* Since we're extending an opts object that has already been extended with the defaults options object,\r\n\t\t\t\t\t\t\t we remove non-explicitly-defined properties that are auto-assigned values. */\r\n\t\t\t\t\t\t\tif (!options.easing) {\r\n\t\t\t\t\t\t\t\tdelete opts.easing;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (!options.duration) {\r\n\t\t\t\t\t\t\t\tdelete opts.duration;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* The opts object used for reversal is an extension of the options object optionally passed into this\r\n\t\t\t\t\t\t\t reverse call plus the options used in the previous Velocity call. */\r\n\t\t\t\t\t\t\topts = $.extend({}, data.opts, opts);\r\n\r\n\t\t\t\t\t\t\t/*************************************\r\n\t\t\t\t\t\t\t Tweens Container Reconstruction\r\n\t\t\t\t\t\t\t *************************************/\r\n\r\n\t\t\t\t\t\t\t/* Create a deepy copy (indicated via the true flag) of the previous call's tweensContainer. */\r\n\t\t\t\t\t\t\tlastTweensContainer = $.extend(true, {}, data ? data.tweensContainer : null);\r\n\r\n\t\t\t\t\t\t\t/* Manipulate the previous tweensContainer by replacing its end values and currentValues with its start values. */\r\n\t\t\t\t\t\t\tfor (var lastTween in lastTweensContainer) {\r\n\t\t\t\t\t\t\t\t/* In addition to tween data, tweensContainers contain an element property that we ignore here. */\r\n\t\t\t\t\t\t\t\tif (lastTweensContainer.hasOwnProperty(lastTween) && lastTween !== \"element\") {\r\n\t\t\t\t\t\t\t\t\tvar lastStartValue = lastTweensContainer[lastTween].startValue;\r\n\r\n\t\t\t\t\t\t\t\t\tlastTweensContainer[lastTween].startValue = lastTweensContainer[lastTween].currentValue = lastTweensContainer[lastTween].endValue;\r\n\t\t\t\t\t\t\t\t\tlastTweensContainer[lastTween].endValue = lastStartValue;\r\n\r\n\t\t\t\t\t\t\t\t\t/* Easing is the only option that embeds into the individual tween data (since it can be defined on a per-property basis).\r\n\t\t\t\t\t\t\t\t\t Accordingly, every property's easing value must be updated when an options object is passed in with a reverse call.\r\n\t\t\t\t\t\t\t\t\t The side effect of this extensibility is that all per-property easing values are forcefully reset to the new value. */\r\n\t\t\t\t\t\t\t\t\tif (!Type.isEmptyObject(options)) {\r\n\t\t\t\t\t\t\t\t\t\tlastTweensContainer[lastTween].easing = opts.easing;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tif (Velocity.debug) {\r\n\t\t\t\t\t\t\t\t\t\tconsole.log(\"reverse tweensContainer (\" + lastTween + \"): \" + JSON.stringify(lastTweensContainer[lastTween]), element);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttweensContainer = lastTweensContainer;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/*****************************************\r\n\t\t\t\t\t\t Tween Data Construction (for Start)\r\n\t\t\t\t\t\t *****************************************/\r\n\r\n\t\t\t\t\t} else if (action === \"start\") {\r\n\r\n\t\t\t\t\t\t/*************************\r\n\t\t\t\t\t\t Value Transferring\r\n\t\t\t\t\t\t *************************/\r\n\r\n\t\t\t\t\t\t/* If this queue entry follows a previous Velocity-initiated queue entry *and* if this entry was created\r\n\t\t\t\t\t\t while the element was in the process of being animated by Velocity, then this current call is safe to use\r\n\t\t\t\t\t\t the end values from the prior call as its start values. Velocity attempts to perform this value transfer\r\n\t\t\t\t\t\t process whenever possible in order to avoid requerying the DOM. */\r\n\t\t\t\t\t\t/* If values aren't transferred from a prior call and start values were not forcefed by the user (more on this below),\r\n\t\t\t\t\t\t then the DOM is queried for the element's current values as a last resort. */\r\n\t\t\t\t\t\t/* Note: Conversely, animation reversal (and looping) *always* perform inter-call value transfers; they never requery the DOM. */\r\n\r\n\t\t\t\t\t\tdata = Data(element);\r\n\r\n\t\t\t\t\t\t/* The per-element isAnimating flag is used to indicate whether it's safe (i.e. the data isn't stale)\r\n\t\t\t\t\t\t to transfer over end values to use as start values. If it's set to true and there is a previous\r\n\t\t\t\t\t\t Velocity call to pull values from, do so. */\r\n\t\t\t\t\t\tif (data && data.tweensContainer && data.isAnimating === true) {\r\n\t\t\t\t\t\t\tlastTweensContainer = data.tweensContainer;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/***************************\r\n\t\t\t\t\t\t Tween Data Calculation\r\n\t\t\t\t\t\t ***************************/\r\n\r\n\t\t\t\t\t\t/* This function parses property data and defaults endValue, easing, and startValue as appropriate. */\r\n\t\t\t\t\t\t/* Property map values can either take the form of 1) a single value representing the end value,\r\n\t\t\t\t\t\t or 2) an array in the form of [ endValue, [, easing] [, startValue] ].\r\n\t\t\t\t\t\t The optional third parameter is a forcefed startValue to be used instead of querying the DOM for\r\n\t\t\t\t\t\t the element's current value. Read Velocity's docmentation to learn more about forcefeeding: VelocityJS.org/#forcefeeding */\r\n\t\t\t\t\t\tvar parsePropertyValue = function(valueData, skipResolvingEasing) {\r\n\t\t\t\t\t\t\tvar endValue, easing, startValue;\r\n\r\n\t\t\t\t\t\t\t/* If we have a function as the main argument then resolve it first, in case it returns an array that needs to be split */\r\n\t\t\t\t\t\t\tif (Type.isFunction(valueData)) {\r\n\t\t\t\t\t\t\t\tvalueData = valueData.call(element, elementArrayIndex, elementsLength);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Handle the array format, which can be structured as one of three potential overloads:\r\n\t\t\t\t\t\t\t A) [ endValue, easing, startValue ], B) [ endValue, easing ], or C) [ endValue, startValue ] */\r\n\t\t\t\t\t\t\tif (Type.isArray(valueData)) {\r\n\t\t\t\t\t\t\t\t/* endValue is always the first item in the array. Don't bother validating endValue's value now\r\n\t\t\t\t\t\t\t\t since the ensuing property cycling logic does that. */\r\n\t\t\t\t\t\t\t\tendValue = valueData[0];\r\n\r\n\t\t\t\t\t\t\t\t/* Two-item array format: If the second item is a number, function, or hex string, treat it as a\r\n\t\t\t\t\t\t\t\t start value since easings can only be non-hex strings or arrays. */\r\n\t\t\t\t\t\t\t\tif ((!Type.isArray(valueData[1]) && /^[\\d-]/.test(valueData[1])) || Type.isFunction(valueData[1]) || CSS.RegEx.isHex.test(valueData[1])) {\r\n\t\t\t\t\t\t\t\t\tstartValue = valueData[1];\r\n\t\t\t\t\t\t\t\t\t/* Two or three-item array: If the second item is a non-hex string easing name or an array, treat it as an easing. */\r\n\t\t\t\t\t\t\t\t} else if ((Type.isString(valueData[1]) && !CSS.RegEx.isHex.test(valueData[1]) && Velocity.Easings[valueData[1]]) || Type.isArray(valueData[1])) {\r\n\t\t\t\t\t\t\t\t\teasing = skipResolvingEasing ? valueData[1] : getEasing(valueData[1], opts.duration);\r\n\r\n\t\t\t\t\t\t\t\t\t/* Don't bother validating startValue's value now since the ensuing property cycling logic inherently does that. */\r\n\t\t\t\t\t\t\t\t\tstartValue = valueData[2];\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tstartValue = valueData[1] || valueData[2];\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t/* Handle the single-value format. */\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tendValue = valueData;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Default to the call's easing if a per-property easing type was not defined. */\r\n\t\t\t\t\t\t\tif (!skipResolvingEasing) {\r\n\t\t\t\t\t\t\t\teasing = easing || opts.easing;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* If functions were passed in as values, pass the function the current element as its context,\r\n\t\t\t\t\t\t\t plus the element's index and the element set's size as arguments. Then, assign the returned value. */\r\n\t\t\t\t\t\t\tif (Type.isFunction(endValue)) {\r\n\t\t\t\t\t\t\t\tendValue = endValue.call(element, elementArrayIndex, elementsLength);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (Type.isFunction(startValue)) {\r\n\t\t\t\t\t\t\t\tstartValue = startValue.call(element, elementArrayIndex, elementsLength);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Allow startValue to be left as undefined to indicate to the ensuing code that its value was not forcefed. */\r\n\t\t\t\t\t\t\treturn [endValue || 0, easing, startValue];\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tvar fixPropertyValue = function(property, valueData) {\r\n\t\t\t\t\t\t\t/* In case this property is a hook, there are circumstances where we will intend to work on the hook's root property and not the hooked subproperty. */\r\n\t\t\t\t\t\t\tvar rootProperty = CSS.Hooks.getRoot(property),\r\n\t\t\t\t\t\t\t\t\trootPropertyValue = false,\r\n\t\t\t\t\t\t\t\t\t/* Parse out endValue, easing, and startValue from the property's data. */\r\n\t\t\t\t\t\t\t\t\tendValue = valueData[0],\r\n\t\t\t\t\t\t\t\t\teasing = valueData[1],\r\n\t\t\t\t\t\t\t\t\tstartValue = valueData[2],\r\n\t\t\t\t\t\t\t\t\tpattern;\r\n\r\n\t\t\t\t\t\t\t/**************************\r\n\t\t\t\t\t\t\t Start Value Sourcing\r\n\t\t\t\t\t\t\t **************************/\r\n\r\n\t\t\t\t\t\t\t/* Other than for the dummy tween property, properties that are not supported by the browser (and do not have an associated normalization) will\r\n\t\t\t\t\t\t\t inherently produce no style changes when set, so they are skipped in order to decrease animation tick overhead.\r\n\t\t\t\t\t\t\t Property support is determined via prefixCheck(), which returns a false flag when no supported is detected. */\r\n\t\t\t\t\t\t\t/* Note: Since SVG elements have some of their properties directly applied as HTML attributes,\r\n\t\t\t\t\t\t\t there is no way to check for their explicit browser support, and so we skip skip this check for them. */\r\n\t\t\t\t\t\t\tif ((!data || !data.isSVG) && rootProperty !== \"tween\" && CSS.Names.prefixCheck(rootProperty)[1] === false && CSS.Normalizations.registered[rootProperty] === undefined) {\r\n\t\t\t\t\t\t\t\tif (Velocity.debug) {\r\n\t\t\t\t\t\t\t\t\tconsole.log(\"Skipping [\" + rootProperty + \"] due to a lack of browser support.\");\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* If the display option is being set to a non-\"none\" (e.g. \"block\") and opacity (filter on IE<=8) is being\r\n\t\t\t\t\t\t\t animated to an endValue of non-zero, the user's intention is to fade in from invisible, thus we forcefeed opacity\r\n\t\t\t\t\t\t\t a startValue of 0 if its startValue hasn't already been sourced by value transferring or prior forcefeeding. */\r\n\t\t\t\t\t\t\tif (((opts.display !== undefined && opts.display !== null && opts.display !== \"none\") || (opts.visibility !== undefined && opts.visibility !== \"hidden\")) && /opacity|filter/.test(property) && !startValue && endValue !== 0) {\r\n\t\t\t\t\t\t\t\tstartValue = 0;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* If values have been transferred from the previous Velocity call, extract the endValue and rootPropertyValue\r\n\t\t\t\t\t\t\t for all of the current call's properties that were *also* animated in the previous call. */\r\n\t\t\t\t\t\t\t/* Note: Value transferring can optionally be disabled by the user via the _cacheValues option. */\r\n\t\t\t\t\t\t\tif (opts._cacheValues && lastTweensContainer && lastTweensContainer[property]) {\r\n\t\t\t\t\t\t\t\tif (startValue === undefined) {\r\n\t\t\t\t\t\t\t\t\tstartValue = lastTweensContainer[property].endValue + lastTweensContainer[property].unitType;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t/* The previous call's rootPropertyValue is extracted from the element's data cache since that's the\r\n\t\t\t\t\t\t\t\t instance of rootPropertyValue that gets freshly updated by the tweening process, whereas the rootPropertyValue\r\n\t\t\t\t\t\t\t\t attached to the incoming lastTweensContainer is equal to the root property's value prior to any tweening. */\r\n\t\t\t\t\t\t\t\trootPropertyValue = data.rootPropertyValueCache[rootProperty];\r\n\t\t\t\t\t\t\t\t/* If values were not transferred from a previous Velocity call, query the DOM as needed. */\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t/* Handle hooked properties. */\r\n\t\t\t\t\t\t\t\tif (CSS.Hooks.registered[property]) {\r\n\t\t\t\t\t\t\t\t\tif (startValue === undefined) {\r\n\t\t\t\t\t\t\t\t\t\trootPropertyValue = CSS.getPropertyValue(element, rootProperty); /* GET */\r\n\t\t\t\t\t\t\t\t\t\t/* Note: The following getPropertyValue() call does not actually trigger a DOM query;\r\n\t\t\t\t\t\t\t\t\t\t getPropertyValue() will extract the hook from rootPropertyValue. */\r\n\t\t\t\t\t\t\t\t\t\tstartValue = CSS.getPropertyValue(element, property, rootPropertyValue);\r\n\t\t\t\t\t\t\t\t\t\t/* If startValue is already defined via forcefeeding, do not query the DOM for the root property's value;\r\n\t\t\t\t\t\t\t\t\t\t just grab rootProperty's zero-value template from CSS.Hooks. This overwrites the element's actual\r\n\t\t\t\t\t\t\t\t\t\t root property value (if one is set), but this is acceptable since the primary reason users forcefeed is\r\n\t\t\t\t\t\t\t\t\t\t to avoid DOM queries, and thus we likewise avoid querying the DOM for the root property's value. */\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t/* Grab this hook's zero-value template, e.g. \"0px 0px 0px black\". */\r\n\t\t\t\t\t\t\t\t\t\trootPropertyValue = CSS.Hooks.templates[rootProperty][1];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/* Handle non-hooked properties that haven't already been defined via forcefeeding. */\r\n\t\t\t\t\t\t\t\t} else if (startValue === undefined) {\r\n\t\t\t\t\t\t\t\t\tstartValue = CSS.getPropertyValue(element, property); /* GET */\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/**************************\r\n\t\t\t\t\t\t\t Value Data Extraction\r\n\t\t\t\t\t\t\t **************************/\r\n\r\n\t\t\t\t\t\t\tvar separatedValue,\r\n\t\t\t\t\t\t\t\t\tendValueUnitType,\r\n\t\t\t\t\t\t\t\t\tstartValueUnitType,\r\n\t\t\t\t\t\t\t\t\toperator = false;\r\n\r\n\t\t\t\t\t\t\t/* Separates a property value into its numeric value and its unit type. */\r\n\t\t\t\t\t\t\tvar separateValue = function(property, value) {\r\n\t\t\t\t\t\t\t\tvar unitType,\r\n\t\t\t\t\t\t\t\t\t\tnumericValue;\r\n\r\n\t\t\t\t\t\t\t\tnumericValue = (value || \"0\")\r\n\t\t\t\t\t\t\t\t\t\t.toString()\r\n\t\t\t\t\t\t\t\t\t\t.toLowerCase()\r\n\t\t\t\t\t\t\t\t\t\t/* Match the unit type at the end of the value. */\r\n\t\t\t\t\t\t\t\t\t\t.replace(/[%A-z]+$/, function(match) {\r\n\t\t\t\t\t\t\t\t\t\t\t/* Grab the unit type. */\r\n\t\t\t\t\t\t\t\t\t\t\tunitType = match;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t/* Strip the unit type off of value. */\r\n\t\t\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t/* If no unit type was supplied, assign one that is appropriate for this property (e.g. \"deg\" for rotateZ or \"px\" for width). */\r\n\t\t\t\t\t\t\t\tif (!unitType) {\r\n\t\t\t\t\t\t\t\t\tunitType = CSS.Values.getUnitType(property);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\treturn [numericValue, unitType];\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tif (startValue !== endValue && Type.isString(startValue) && Type.isString(endValue)) {\r\n\t\t\t\t\t\t\t\tpattern = \"\";\r\n\t\t\t\t\t\t\t\tvar iStart = 0, // index in startValue\r\n\t\t\t\t\t\t\t\t\t\tiEnd = 0, // index in endValue\r\n\t\t\t\t\t\t\t\t\t\taStart = [], // array of startValue numbers\r\n\t\t\t\t\t\t\t\t\t\taEnd = [], // array of endValue numbers\r\n\t\t\t\t\t\t\t\t\t\tinCalc = 0, // Keep track of being inside a \"calc()\" so we don't duplicate it\r\n\t\t\t\t\t\t\t\t\t\tinRGB = 0, // Keep track of being inside an RGB as we can't use fractional values\r\n\t\t\t\t\t\t\t\t\t\tinRGBA = 0; // Keep track of being inside an RGBA as we must pass fractional for the alpha channel\r\n\r\n\t\t\t\t\t\t\t\tstartValue = CSS.Hooks.fixColors(startValue);\r\n\t\t\t\t\t\t\t\tendValue = CSS.Hooks.fixColors(endValue);\r\n\t\t\t\t\t\t\t\twhile (iStart < startValue.length && iEnd < endValue.length) {\r\n\t\t\t\t\t\t\t\t\tvar cStart = startValue[iStart],\r\n\t\t\t\t\t\t\t\t\t\t\tcEnd = endValue[iEnd];\r\n\r\n\t\t\t\t\t\t\t\t\tif (/[\\d\\.-]/.test(cStart) && /[\\d\\.-]/.test(cEnd)) {\r\n\t\t\t\t\t\t\t\t\t\tvar tStart = cStart, // temporary character buffer\r\n\t\t\t\t\t\t\t\t\t\t\t\ttEnd = cEnd, // temporary character buffer\r\n\t\t\t\t\t\t\t\t\t\t\t\tdotStart = \".\", // Make sure we can only ever match a single dot in a decimal\r\n\t\t\t\t\t\t\t\t\t\t\t\tdotEnd = \".\"; // Make sure we can only ever match a single dot in a decimal\r\n\r\n\t\t\t\t\t\t\t\t\t\twhile (++iStart < startValue.length) {\r\n\t\t\t\t\t\t\t\t\t\t\tcStart = startValue[iStart];\r\n\t\t\t\t\t\t\t\t\t\t\tif (cStart === dotStart) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tdotStart = \"..\"; // Can never match two characters\r\n\t\t\t\t\t\t\t\t\t\t\t} else if (!/\\d/.test(cStart)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\ttStart += cStart;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\twhile (++iEnd < endValue.length) {\r\n\t\t\t\t\t\t\t\t\t\t\tcEnd = endValue[iEnd];\r\n\t\t\t\t\t\t\t\t\t\t\tif (cEnd === dotEnd) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tdotEnd = \"..\"; // Can never match two characters\r\n\t\t\t\t\t\t\t\t\t\t\t} else if (!/\\d/.test(cEnd)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\ttEnd += cEnd;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tvar uStart = CSS.Hooks.getUnit(startValue, iStart), // temporary unit type\r\n\t\t\t\t\t\t\t\t\t\t\t\tuEnd = CSS.Hooks.getUnit(endValue, iEnd); // temporary unit type\r\n\r\n\t\t\t\t\t\t\t\t\t\tiStart += uStart.length;\r\n\t\t\t\t\t\t\t\t\t\tiEnd += uEnd.length;\r\n\t\t\t\t\t\t\t\t\t\tif (uStart === uEnd) {\r\n\t\t\t\t\t\t\t\t\t\t\t// Same units\r\n\t\t\t\t\t\t\t\t\t\t\tif (tStart === tEnd) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// Same numbers, so just copy over\r\n\t\t\t\t\t\t\t\t\t\t\t\tpattern += tStart + uStart;\r\n\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t// Different numbers, so store them\r\n\t\t\t\t\t\t\t\t\t\t\t\tpattern += \"{\" + aStart.length + (inRGB ? \"!\" : \"\") + \"}\" + uStart;\r\n\t\t\t\t\t\t\t\t\t\t\t\taStart.push(parseFloat(tStart));\r\n\t\t\t\t\t\t\t\t\t\t\t\taEnd.push(parseFloat(tEnd));\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t// Different units, so put into a \"calc(from + to)\" and animate each side to/from zero\r\n\t\t\t\t\t\t\t\t\t\t\tvar nStart = parseFloat(tStart),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tnEnd = parseFloat(tEnd);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tpattern += (inCalc < 5 ? \"calc\" : \"\") + \"(\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (nStart ? \"{\" + aStart.length + (inRGB ? \"!\" : \"\") + \"}\" : \"0\") + uStart\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ \" + \"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ (nEnd ? \"{\" + (aStart.length + (nStart ? 1 : 0)) + (inRGB ? \"!\" : \"\") + \"}\" : \"0\") + uEnd\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t+ \")\";\r\n\t\t\t\t\t\t\t\t\t\t\tif (nStart) {\r\n\t\t\t\t\t\t\t\t\t\t\t\taStart.push(nStart);\r\n\t\t\t\t\t\t\t\t\t\t\t\taEnd.push(0);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (nEnd) {\r\n\t\t\t\t\t\t\t\t\t\t\t\taStart.push(0);\r\n\t\t\t\t\t\t\t\t\t\t\t\taEnd.push(nEnd);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t} else if (cStart === cEnd) {\r\n\t\t\t\t\t\t\t\t\t\tpattern += cStart;\r\n\t\t\t\t\t\t\t\t\t\tiStart++;\r\n\t\t\t\t\t\t\t\t\t\tiEnd++;\r\n\t\t\t\t\t\t\t\t\t\t// Keep track of being inside a calc()\r\n\t\t\t\t\t\t\t\t\t\tif (inCalc === 0 && cStart === \"c\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inCalc === 1 && cStart === \"a\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inCalc === 2 && cStart === \"l\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inCalc === 3 && cStart === \"c\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inCalc >= 4 && cStart === \"(\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tinCalc++;\r\n\t\t\t\t\t\t\t\t\t\t} else if ((inCalc && inCalc < 5)\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inCalc >= 4 && cStart === \")\" && --inCalc < 5) {\r\n\t\t\t\t\t\t\t\t\t\t\tinCalc = 0;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t// Keep track of being inside an rgb() / rgba()\r\n\t\t\t\t\t\t\t\t\t\tif (inRGB === 0 && cStart === \"r\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inRGB === 1 && cStart === \"g\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inRGB === 2 && cStart === \"b\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inRGB === 3 && cStart === \"a\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inRGB >= 3 && cStart === \"(\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (inRGB === 3 && cStart === \"a\") {\r\n\t\t\t\t\t\t\t\t\t\t\t\tinRGBA = 1;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tinRGB++;\r\n\t\t\t\t\t\t\t\t\t\t} else if (inRGBA && cStart === \",\") {\r\n\t\t\t\t\t\t\t\t\t\t\tif (++inRGBA > 3) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tinRGB = inRGBA = 0;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} else if ((inRGBA && inRGB < (inRGBA ? 5 : 4))\r\n\t\t\t\t\t\t\t\t\t\t\t\t|| inRGB >= (inRGBA ? 4 : 3) && cStart === \")\" && --inRGB < (inRGBA ? 5 : 4)) {\r\n\t\t\t\t\t\t\t\t\t\t\tinRGB = inRGBA = 0;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tinCalc = 0;\r\n\t\t\t\t\t\t\t\t\t\t// TODO: changing units, fixing colours\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (iStart !== startValue.length || iEnd !== endValue.length) {\r\n\t\t\t\t\t\t\t\t\tif (Velocity.debug) {\r\n\t\t\t\t\t\t\t\t\t\tconsole.error(\"Trying to pattern match mis-matched strings [\\\"\" + endValue + \"\\\", \\\"\" + startValue + \"\\\"]\");\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tpattern = undefined;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (pattern) {\r\n\t\t\t\t\t\t\t\t\tif (aStart.length) {\r\n\t\t\t\t\t\t\t\t\t\tif (Velocity.debug) {\r\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"Pattern found \\\"\" + pattern + \"\\\" -> \", aStart, aEnd, \"[\" + startValue + \",\" + endValue + \"]\");\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tstartValue = aStart;\r\n\t\t\t\t\t\t\t\t\t\tendValue = aEnd;\r\n\t\t\t\t\t\t\t\t\t\tendValueUnitType = startValueUnitType = \"\";\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tpattern = undefined;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (!pattern) {\r\n\t\t\t\t\t\t\t\t/* Separate startValue. */\r\n\t\t\t\t\t\t\t\tseparatedValue = separateValue(property, startValue);\r\n\t\t\t\t\t\t\t\tstartValue = separatedValue[0];\r\n\t\t\t\t\t\t\t\tstartValueUnitType = separatedValue[1];\r\n\r\n\t\t\t\t\t\t\t\t/* Separate endValue, and extract a value operator (e.g. \"+=\", \"-=\") if one exists. */\r\n\t\t\t\t\t\t\t\tseparatedValue = separateValue(property, endValue);\r\n\t\t\t\t\t\t\t\tendValue = separatedValue[0].replace(/^([+-\\/*])=/, function(match, subMatch) {\r\n\t\t\t\t\t\t\t\t\toperator = subMatch;\r\n\r\n\t\t\t\t\t\t\t\t\t/* Strip the operator off of the value. */\r\n\t\t\t\t\t\t\t\t\treturn \"\";\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tendValueUnitType = separatedValue[1];\r\n\r\n\t\t\t\t\t\t\t\t/* Parse float values from endValue and startValue. Default to 0 if NaN is returned. */\r\n\t\t\t\t\t\t\t\tstartValue = parseFloat(startValue) || 0;\r\n\t\t\t\t\t\t\t\tendValue = parseFloat(endValue) || 0;\r\n\r\n\t\t\t\t\t\t\t\t/***************************************\r\n\t\t\t\t\t\t\t\t Property-Specific Value Conversion\r\n\t\t\t\t\t\t\t\t ***************************************/\r\n\r\n\t\t\t\t\t\t\t\t/* Custom support for properties that don't actually accept the % unit type, but where pollyfilling is trivial and relatively foolproof. */\r\n\t\t\t\t\t\t\t\tif (endValueUnitType === \"%\") {\r\n\t\t\t\t\t\t\t\t\t/* A %-value fontSize/lineHeight is relative to the parent's fontSize (as opposed to the parent's dimensions),\r\n\t\t\t\t\t\t\t\t\t which is identical to the em unit's behavior, so we piggyback off of that. */\r\n\t\t\t\t\t\t\t\t\tif (/^(fontSize|lineHeight)$/.test(property)) {\r\n\t\t\t\t\t\t\t\t\t\t/* Convert % into an em decimal value. */\r\n\t\t\t\t\t\t\t\t\t\tendValue = endValue / 100;\r\n\t\t\t\t\t\t\t\t\t\tendValueUnitType = \"em\";\r\n\t\t\t\t\t\t\t\t\t\t/* For scaleX and scaleY, convert the value into its decimal format and strip off the unit type. */\r\n\t\t\t\t\t\t\t\t\t} else if (/^scale/.test(property)) {\r\n\t\t\t\t\t\t\t\t\t\tendValue = endValue / 100;\r\n\t\t\t\t\t\t\t\t\t\tendValueUnitType = \"\";\r\n\t\t\t\t\t\t\t\t\t\t/* For RGB components, take the defined percentage of 255 and strip off the unit type. */\r\n\t\t\t\t\t\t\t\t\t} else if (/(Red|Green|Blue)$/i.test(property)) {\r\n\t\t\t\t\t\t\t\t\t\tendValue = (endValue / 100) * 255;\r\n\t\t\t\t\t\t\t\t\t\tendValueUnitType = \"\";\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/***************************\r\n\t\t\t\t\t\t\t Unit Ratio Calculation\r\n\t\t\t\t\t\t\t ***************************/\r\n\r\n\t\t\t\t\t\t\t/* When queried, the browser returns (most) CSS property values in pixels. Therefore, if an endValue with a unit type of\r\n\t\t\t\t\t\t\t %, em, or rem is animated toward, startValue must be converted from pixels into the same unit type as endValue in order\r\n\t\t\t\t\t\t\t for value manipulation logic (increment/decrement) to proceed. Further, if the startValue was forcefed or transferred\r\n\t\t\t\t\t\t\t from a previous call, startValue may also not be in pixels. Unit conversion logic therefore consists of two steps:\r\n\t\t\t\t\t\t\t 1) Calculating the ratio of %/em/rem/vh/vw relative to pixels\r\n\t\t\t\t\t\t\t 2) Converting startValue into the same unit of measurement as endValue based on these ratios. */\r\n\t\t\t\t\t\t\t/* Unit conversion ratios are calculated by inserting a sibling node next to the target node, copying over its position property,\r\n\t\t\t\t\t\t\t setting values with the target unit type then comparing the returned pixel value. */\r\n\t\t\t\t\t\t\t/* Note: Even if only one of these unit types is being animated, all unit ratios are calculated at once since the overhead\r\n\t\t\t\t\t\t\t of batching the SETs and GETs together upfront outweights the potential overhead\r\n\t\t\t\t\t\t\t of layout thrashing caused by re-querying for uncalculated ratios for subsequently-processed properties. */\r\n\t\t\t\t\t\t\t/* Todo: Shift this logic into the calls' first tick instance so that it's synced with RAF. */\r\n\t\t\t\t\t\t\tvar calculateUnitRatios = function() {\r\n\r\n\t\t\t\t\t\t\t\t/************************\r\n\t\t\t\t\t\t\t\t Same Ratio Checks\r\n\t\t\t\t\t\t\t\t ************************/\r\n\r\n\t\t\t\t\t\t\t\t/* The properties below are used to determine whether the element differs sufficiently from this call's\r\n\t\t\t\t\t\t\t\t previously iterated element to also differ in its unit conversion ratios. If the properties match up with those\r\n\t\t\t\t\t\t\t\t of the prior element, the prior element's conversion ratios are used. Like most optimizations in Velocity,\r\n\t\t\t\t\t\t\t\t this is done to minimize DOM querying. */\r\n\t\t\t\t\t\t\t\tvar sameRatioIndicators = {\r\n\t\t\t\t\t\t\t\t\tmyParent: element.parentNode || document.body, /* GET */\r\n\t\t\t\t\t\t\t\t\tposition: CSS.getPropertyValue(element, \"position\"), /* GET */\r\n\t\t\t\t\t\t\t\t\tfontSize: CSS.getPropertyValue(element, \"fontSize\") /* GET */\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t/* Determine if the same % ratio can be used. % is based on the element's position value and its parent's width and height dimensions. */\r\n\t\t\t\t\t\t\t\t\t\tsamePercentRatio = ((sameRatioIndicators.position === callUnitConversionData.lastPosition) && (sameRatioIndicators.myParent === callUnitConversionData.lastParent)),\r\n\t\t\t\t\t\t\t\t\t\t/* Determine if the same em ratio can be used. em is relative to the element's fontSize. */\r\n\t\t\t\t\t\t\t\t\t\tsameEmRatio = (sameRatioIndicators.fontSize === callUnitConversionData.lastFontSize);\r\n\r\n\t\t\t\t\t\t\t\t/* Store these ratio indicators call-wide for the next element to compare against. */\r\n\t\t\t\t\t\t\t\tcallUnitConversionData.lastParent = sameRatioIndicators.myParent;\r\n\t\t\t\t\t\t\t\tcallUnitConversionData.lastPosition = sameRatioIndicators.position;\r\n\t\t\t\t\t\t\t\tcallUnitConversionData.lastFontSize = sameRatioIndicators.fontSize;\r\n\r\n\t\t\t\t\t\t\t\t/***************************\r\n\t\t\t\t\t\t\t\t Element-Specific Units\r\n\t\t\t\t\t\t\t\t ***************************/\r\n\r\n\t\t\t\t\t\t\t\t/* Note: IE8 rounds to the nearest pixel when returning CSS values, thus we perform conversions using a measurement\r\n\t\t\t\t\t\t\t\t of 100 (instead of 1) to give our ratios a precision of at least 2 decimal values. */\r\n\t\t\t\t\t\t\t\tvar measurement = 100,\r\n\t\t\t\t\t\t\t\t\t\tunitRatios = {};\r\n\r\n\t\t\t\t\t\t\t\tif (!sameEmRatio || !samePercentRatio) {\r\n\t\t\t\t\t\t\t\t\tvar dummy = data && data.isSVG ? document.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\") : document.createElement(\"div\");\r\n\r\n\t\t\t\t\t\t\t\t\tVelocity.init(dummy);\r\n\t\t\t\t\t\t\t\t\tsameRatioIndicators.myParent.appendChild(dummy);\r\n\r\n\t\t\t\t\t\t\t\t\t/* To accurately and consistently calculate conversion ratios, the element's cascaded overflow and box-sizing are stripped.\r\n\t\t\t\t\t\t\t\t\t Similarly, since width/height can be artificially constrained by their min-/max- equivalents, these are controlled for as well. */\r\n\t\t\t\t\t\t\t\t\t/* Note: Overflow must be also be controlled for per-axis since the overflow property overwrites its per-axis values. */\r\n\t\t\t\t\t\t\t\t\t$.each([\"overflow\", \"overflowX\", \"overflowY\"], function(i, property) {\r\n\t\t\t\t\t\t\t\t\t\tVelocity.CSS.setPropertyValue(dummy, property, \"hidden\");\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tVelocity.CSS.setPropertyValue(dummy, \"position\", sameRatioIndicators.position);\r\n\t\t\t\t\t\t\t\t\tVelocity.CSS.setPropertyValue(dummy, \"fontSize\", sameRatioIndicators.fontSize);\r\n\t\t\t\t\t\t\t\t\tVelocity.CSS.setPropertyValue(dummy, \"boxSizing\", \"content-box\");\r\n\r\n\t\t\t\t\t\t\t\t\t/* width and height act as our proxy properties for measuring the horizontal and vertical % ratios. */\r\n\t\t\t\t\t\t\t\t\t$.each([\"minWidth\", \"maxWidth\", \"width\", \"minHeight\", \"maxHeight\", \"height\"], function(i, property) {\r\n\t\t\t\t\t\t\t\t\t\tVelocity.CSS.setPropertyValue(dummy, property, measurement + \"%\");\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t/* paddingLeft arbitrarily acts as our proxy property for the em ratio. */\r\n\t\t\t\t\t\t\t\t\tVelocity.CSS.setPropertyValue(dummy, \"paddingLeft\", measurement + \"em\");\r\n\r\n\t\t\t\t\t\t\t\t\t/* Divide the returned value by the measurement to get the ratio between 1% and 1px. Default to 1 since working with 0 can produce Infinite. */\r\n\t\t\t\t\t\t\t\t\tunitRatios.percentToPxWidth = callUnitConversionData.lastPercentToPxWidth = (parseFloat(CSS.getPropertyValue(dummy, \"width\", null, true)) || 1) / measurement; /* GET */\r\n\t\t\t\t\t\t\t\t\tunitRatios.percentToPxHeight = callUnitConversionData.lastPercentToPxHeight = (parseFloat(CSS.getPropertyValue(dummy, \"height\", null, true)) || 1) / measurement; /* GET */\r\n\t\t\t\t\t\t\t\t\tunitRatios.emToPx = callUnitConversionData.lastEmToPx = (parseFloat(CSS.getPropertyValue(dummy, \"paddingLeft\")) || 1) / measurement; /* GET */\r\n\r\n\t\t\t\t\t\t\t\t\tsameRatioIndicators.myParent.removeChild(dummy);\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tunitRatios.emToPx = callUnitConversionData.lastEmToPx;\r\n\t\t\t\t\t\t\t\t\tunitRatios.percentToPxWidth = callUnitConversionData.lastPercentToPxWidth;\r\n\t\t\t\t\t\t\t\t\tunitRatios.percentToPxHeight = callUnitConversionData.lastPercentToPxHeight;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t/***************************\r\n\t\t\t\t\t\t\t\t Element-Agnostic Units\r\n\t\t\t\t\t\t\t\t ***************************/\r\n\r\n\t\t\t\t\t\t\t\t/* Whereas % and em ratios are determined on a per-element basis, the rem unit only needs to be checked\r\n\t\t\t\t\t\t\t\t once per call since it's exclusively dependant upon document.body's fontSize. If this is the first time\r\n\t\t\t\t\t\t\t\t that calculateUnitRatios() is being run during this call, remToPx will still be set to its default value of null,\r\n\t\t\t\t\t\t\t\t so we calculate it now. */\r\n\t\t\t\t\t\t\t\tif (callUnitConversionData.remToPx === null) {\r\n\t\t\t\t\t\t\t\t\t/* Default to browsers' default fontSize of 16px in the case of 0. */\r\n\t\t\t\t\t\t\t\t\tcallUnitConversionData.remToPx = parseFloat(CSS.getPropertyValue(document.body, \"fontSize\")) || 16; /* GET */\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t/* Similarly, viewport units are %-relative to the window's inner dimensions. */\r\n\t\t\t\t\t\t\t\tif (callUnitConversionData.vwToPx === null) {\r\n\t\t\t\t\t\t\t\t\tcallUnitConversionData.vwToPx = parseFloat(window.innerWidth) / 100; /* GET */\r\n\t\t\t\t\t\t\t\t\tcallUnitConversionData.vhToPx = parseFloat(window.innerHeight) / 100; /* GET */\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tunitRatios.remToPx = callUnitConversionData.remToPx;\r\n\t\t\t\t\t\t\t\tunitRatios.vwToPx = callUnitConversionData.vwToPx;\r\n\t\t\t\t\t\t\t\tunitRatios.vhToPx = callUnitConversionData.vhToPx;\r\n\r\n\t\t\t\t\t\t\t\tif (Velocity.debug >= 1) {\r\n\t\t\t\t\t\t\t\t\tconsole.log(\"Unit ratios: \" + JSON.stringify(unitRatios), element);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn unitRatios;\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t/********************\r\n\t\t\t\t\t\t\t Unit Conversion\r\n\t\t\t\t\t\t\t ********************/\r\n\r\n\t\t\t\t\t\t\t/* The * and / operators, which are not passed in with an associated unit, inherently use startValue's unit. Skip value and unit conversion. */\r\n\t\t\t\t\t\t\tif (/[\\/*]/.test(operator)) {\r\n\t\t\t\t\t\t\t\tendValueUnitType = startValueUnitType;\r\n\t\t\t\t\t\t\t\t/* If startValue and endValue differ in unit type, convert startValue into the same unit type as endValue so that if endValueUnitType\r\n\t\t\t\t\t\t\t\t is a relative unit (%, em, rem), the values set during tweening will continue to be accurately relative even if the metrics they depend\r\n\t\t\t\t\t\t\t\t on are dynamically changing during the course of the animation. Conversely, if we always normalized into px and used px for setting values, the px ratio\r\n\t\t\t\t\t\t\t\t would become stale if the original unit being animated toward was relative and the underlying metrics change during the animation. */\r\n\t\t\t\t\t\t\t\t/* Since 0 is 0 in any unit type, no conversion is necessary when startValue is 0 -- we just start at 0 with endValueUnitType. */\r\n\t\t\t\t\t\t\t} else if ((startValueUnitType !== endValueUnitType) && startValue !== 0) {\r\n\t\t\t\t\t\t\t\t/* Unit conversion is also skipped when endValue is 0, but *startValueUnitType* must be used for tween values to remain accurate. */\r\n\t\t\t\t\t\t\t\t/* Note: Skipping unit conversion here means that if endValueUnitType was originally a relative unit, the animation won't relatively\r\n\t\t\t\t\t\t\t\t match the underlying metrics if they change, but this is acceptable since we're animating toward invisibility instead of toward visibility,\r\n\t\t\t\t\t\t\t\t which remains past the point of the animation's completion. */\r\n\t\t\t\t\t\t\t\tif (endValue === 0) {\r\n\t\t\t\t\t\t\t\t\tendValueUnitType = startValueUnitType;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t/* By this point, we cannot avoid unit conversion (it's undesirable since it causes layout thrashing).\r\n\t\t\t\t\t\t\t\t\t If we haven't already, we trigger calculateUnitRatios(), which runs once per element per call. */\r\n\t\t\t\t\t\t\t\t\telementUnitConversionData = elementUnitConversionData || calculateUnitRatios();\r\n\r\n\t\t\t\t\t\t\t\t\t/* The following RegEx matches CSS properties that have their % values measured relative to the x-axis. */\r\n\t\t\t\t\t\t\t\t\t/* Note: W3C spec mandates that all of margin and padding's properties (even top and bottom) are %-relative to the *width* of the parent element. */\r\n\t\t\t\t\t\t\t\t\tvar axis = (/margin|padding|left|right|width|text|word|letter/i.test(property) || /X$/.test(property) || property === \"x\") ? \"x\" : \"y\";\r\n\r\n\t\t\t\t\t\t\t\t\t/* In order to avoid generating n^2 bespoke conversion functions, unit conversion is a two-step process:\r\n\t\t\t\t\t\t\t\t\t 1) Convert startValue into pixels. 2) Convert this new pixel value into endValue's unit type. */\r\n\t\t\t\t\t\t\t\t\tswitch (startValueUnitType) {\r\n\t\t\t\t\t\t\t\t\t\tcase \"%\":\r\n\t\t\t\t\t\t\t\t\t\t\t/* Note: translateX and translateY are the only properties that are %-relative to an element's own dimensions -- not its parent's dimensions.\r\n\t\t\t\t\t\t\t\t\t\t\t Velocity does not include a special conversion process to account for this behavior. Therefore, animating translateX/Y from a % value\r\n\t\t\t\t\t\t\t\t\t\t\t to a non-% value will produce an incorrect start value. Fortunately, this sort of cross-unit conversion is rarely done by users in practice. */\r\n\t\t\t\t\t\t\t\t\t\t\tstartValue *= (axis === \"x\" ? elementUnitConversionData.percentToPxWidth : elementUnitConversionData.percentToPxHeight);\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\t\t\tcase \"px\":\r\n\t\t\t\t\t\t\t\t\t\t\t/* px acts as our midpoint in the unit conversion process; do nothing. */\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\t\tstartValue *= elementUnitConversionData[startValueUnitType + \"ToPx\"];\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t/* Invert the px ratios to convert into to the target unit. */\r\n\t\t\t\t\t\t\t\t\tswitch (endValueUnitType) {\r\n\t\t\t\t\t\t\t\t\t\tcase \"%\":\r\n\t\t\t\t\t\t\t\t\t\t\tstartValue *= 1 / (axis === \"x\" ? elementUnitConversionData.percentToPxWidth : elementUnitConversionData.percentToPxHeight);\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\t\t\tcase \"px\":\r\n\t\t\t\t\t\t\t\t\t\t\t/* startValue is already in px, do nothing; we're done. */\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\t\t\tstartValue *= 1 / elementUnitConversionData[endValueUnitType + \"ToPx\"];\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/*********************\r\n\t\t\t\t\t\t\t Relative Values\r\n\t\t\t\t\t\t\t *********************/\r\n\r\n\t\t\t\t\t\t\t/* Operator logic must be performed last since it requires unit-normalized start and end values. */\r\n\t\t\t\t\t\t\t/* Note: Relative *percent values* do not behave how most people think; while one would expect \"+=50%\"\r\n\t\t\t\t\t\t\t to increase the property 1.5x its current value, it in fact increases the percent units in absolute terms:\r\n\t\t\t\t\t\t\t 50 points is added on top of the current % value. */\r\n\t\t\t\t\t\t\tswitch (operator) {\r\n\t\t\t\t\t\t\t\tcase \"+\":\r\n\t\t\t\t\t\t\t\t\tendValue = startValue + endValue;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"-\":\r\n\t\t\t\t\t\t\t\t\tendValue = startValue - endValue;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"*\":\r\n\t\t\t\t\t\t\t\t\tendValue = startValue * endValue;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase \"/\":\r\n\t\t\t\t\t\t\t\t\tendValue = startValue / endValue;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/**************************\r\n\t\t\t\t\t\t\t tweensContainer Push\r\n\t\t\t\t\t\t\t **************************/\r\n\r\n\t\t\t\t\t\t\t/* Construct the per-property tween object, and push it to the element's tweensContainer. */\r\n\t\t\t\t\t\t\ttweensContainer[property] = {\r\n\t\t\t\t\t\t\t\trootPropertyValue: rootPropertyValue,\r\n\t\t\t\t\t\t\t\tstartValue: startValue,\r\n\t\t\t\t\t\t\t\tcurrentValue: startValue,\r\n\t\t\t\t\t\t\t\tendValue: endValue,\r\n\t\t\t\t\t\t\t\tunitType: endValueUnitType,\r\n\t\t\t\t\t\t\t\teasing: easing\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\tif (pattern) {\r\n\t\t\t\t\t\t\t\ttweensContainer[property].pattern = pattern;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (Velocity.debug) {\r\n\t\t\t\t\t\t\t\tconsole.log(\"tweensContainer (\" + property + \"): \" + JSON.stringify(tweensContainer[property]), element);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t/* Create a tween out of each property, and append its associated data to tweensContainer. */\r\n\t\t\t\t\t\tfor (var property in propertiesMap) {\r\n\r\n\t\t\t\t\t\t\tif (!propertiesMap.hasOwnProperty(property)) {\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t/* The original property name's format must be used for the parsePropertyValue() lookup,\r\n\t\t\t\t\t\t\t but we then use its camelCase styling to normalize it for manipulation. */\r\n\t\t\t\t\t\t\tvar propertyName = CSS.Names.camelCase(property),\r\n\t\t\t\t\t\t\t\t\tvalueData = parsePropertyValue(propertiesMap[property]);\r\n\r\n\t\t\t\t\t\t\t/* Find shorthand color properties that have been passed a hex string. */\r\n\t\t\t\t\t\t\t/* Would be quicker to use CSS.Lists.colors.includes() if possible */\r\n\t\t\t\t\t\t\tif (_inArray(CSS.Lists.colors, propertyName)) {\r\n\t\t\t\t\t\t\t\t/* Parse the value data for each shorthand. */\r\n\t\t\t\t\t\t\t\tvar endValue = valueData[0],\r\n\t\t\t\t\t\t\t\t\t\teasing = valueData[1],\r\n\t\t\t\t\t\t\t\t\t\tstartValue = valueData[2];\r\n\r\n\t\t\t\t\t\t\t\tif (CSS.RegEx.isHex.test(endValue)) {\r\n\t\t\t\t\t\t\t\t\t/* Convert the hex strings into their RGB component arrays. */\r\n\t\t\t\t\t\t\t\t\tvar colorComponents = [\"Red\", \"Green\", \"Blue\"],\r\n\t\t\t\t\t\t\t\t\t\t\tendValueRGB = CSS.Values.hexToRgb(endValue),\r\n\t\t\t\t\t\t\t\t\t\t\tstartValueRGB = startValue ? CSS.Values.hexToRgb(startValue) : undefined;\r\n\r\n\t\t\t\t\t\t\t\t\t/* Inject the RGB component tweens into propertiesMap. */\r\n\t\t\t\t\t\t\t\t\tfor (var i = 0; i < colorComponents.length; i++) {\r\n\t\t\t\t\t\t\t\t\t\tvar dataArray = [endValueRGB[i]];\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (easing) {\r\n\t\t\t\t\t\t\t\t\t\t\tdataArray.push(easing);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (startValueRGB !== undefined) {\r\n\t\t\t\t\t\t\t\t\t\t\tdataArray.push(startValueRGB[i]);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tfixPropertyValue(propertyName + colorComponents[i], dataArray);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t/* If we have replaced a shortcut color value then don't update the standard property name */\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfixPropertyValue(propertyName, valueData);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Along with its property data, store a reference to the element itself onto tweensContainer. */\r\n\t\t\t\t\t\ttweensContainer.element = element;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/*****************\r\n\t\t\t\t\t Call Push\r\n\t\t\t\t\t *****************/\r\n\r\n\t\t\t\t\t/* Note: tweensContainer can be empty if all of the properties in this call's property map were skipped due to not\r\n\t\t\t\t\t being supported by the browser. The element property is used for checking that the tweensContainer has been appended to. */\r\n\t\t\t\t\tif (tweensContainer.element) {\r\n\t\t\t\t\t\t/* Apply the \"velocity-animating\" indicator class. */\r\n\t\t\t\t\t\tCSS.Values.addClass(element, \"velocity-animating\");\r\n\r\n\t\t\t\t\t\t/* The call array houses the tweensContainers for each element being animated in the current call. */\r\n\t\t\t\t\t\tcall.push(tweensContainer);\r\n\r\n\t\t\t\t\t\tdata = Data(element);\r\n\r\n\t\t\t\t\t\tif (data) {\r\n\t\t\t\t\t\t\t/* Store the tweensContainer and options if we're working on the default effects queue, so that they can be used by the reverse command. */\r\n\t\t\t\t\t\t\tif (opts.queue === \"\") {\r\n\r\n\t\t\t\t\t\t\t\tdata.tweensContainer = tweensContainer;\r\n\t\t\t\t\t\t\t\tdata.opts = opts;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Switch on the element's animating flag. */\r\n\t\t\t\t\t\t\tdata.isAnimating = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Once the final element in this call's element set has been processed, push the call array onto\r\n\t\t\t\t\t\t Velocity.State.calls for the animation tick to immediately begin processing. */\r\n\t\t\t\t\t\tif (elementsIndex === elementsLength - 1) {\r\n\t\t\t\t\t\t\t/* Add the current call plus its associated metadata (the element set and the call's options) onto the global call container.\r\n\t\t\t\t\t\t\t Anything on this call container is subjected to tick() processing. */\r\n\t\t\t\t\t\t\tVelocity.State.calls.push([call, elements, opts, null, promiseData.resolver, null, 0]);\r\n\r\n\t\t\t\t\t\t\t/* If the animation tick isn't running, start it. (Velocity shuts it off when there are no active calls to process.) */\r\n\t\t\t\t\t\t\tif (Velocity.State.isTicking === false) {\r\n\t\t\t\t\t\t\t\tVelocity.State.isTicking = true;\r\n\r\n\t\t\t\t\t\t\t\t/* Start the tick loop. */\r\n\t\t\t\t\t\t\t\ttick();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\telementsIndex++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* When the queue option is set to false, the call skips the element's queue and fires immediately. */\r\n\t\t\t\tif (opts.queue === false) {\r\n\t\t\t\t\t/* Since this buildQueue call doesn't respect the element's existing queue (which is where a delay option would have been appended),\r\n\t\t\t\t\t we manually inject the delay property here with an explicit setTimeout. */\r\n\t\t\t\t\tif (opts.delay) {\r\n\r\n\t\t\t\t\t\t/* Temporarily store delayed elements to facilitate access for global pause/resume */\r\n\t\t\t\t\t\tvar callIndex = Velocity.State.delayedElements.count++;\r\n\t\t\t\t\t\tVelocity.State.delayedElements[callIndex] = element;\r\n\r\n\t\t\t\t\t\tvar delayComplete = (function(index) {\r\n\t\t\t\t\t\t\treturn function() {\r\n\t\t\t\t\t\t\t\t/* Clear the temporary element */\r\n\t\t\t\t\t\t\t\tVelocity.State.delayedElements[index] = false;\r\n\r\n\t\t\t\t\t\t\t\t/* Finally, issue the call */\r\n\t\t\t\t\t\t\t\tbuildQueue();\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t})(callIndex);\r\n\r\n\t\t\t\t\t\tData(element).delayBegin = (new Date()).getTime();\r\n\t\t\t\t\t\tData(element).delay = parseFloat(opts.delay);\r\n\t\t\t\t\t\tData(element).delayTimer = {\r\n\t\t\t\t\t\t\tsetTimeout: setTimeout(buildQueue, parseFloat(opts.delay)),\r\n\t\t\t\t\t\t\tnext: delayComplete\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbuildQueue();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t/* Otherwise, the call undergoes element queueing as normal. */\r\n\t\t\t\t\t/* Note: To interoperate with jQuery, Velocity uses jQuery's own $.queue() stack for queuing logic. */\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$.queue(element, opts.queue, function(next, clearQueue) {\r\n\t\t\t\t\t\t/* If the clearQueue flag was passed in by the stop command, resolve this call's promise. (Promises can only be resolved once,\r\n\t\t\t\t\t\t so it's fine if this is repeatedly triggered for each element in the associated call.) */\r\n\t\t\t\t\t\tif (clearQueue === true) {\r\n\t\t\t\t\t\t\tif (promiseData.promise) {\r\n\t\t\t\t\t\t\t\tpromiseData.resolver(elements);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t/* Do not continue with animation queueing. */\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* This flag indicates to the upcoming completeCall() function that this queue entry was initiated by Velocity.\r\n\t\t\t\t\t\t See completeCall() for further details. */\r\n\t\t\t\t\t\tVelocity.velocityQueueEntryFlag = true;\r\n\r\n\t\t\t\t\t\tbuildQueue(next);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*********************\r\n\t\t\t\t Auto-Dequeuing\r\n\t\t\t\t *********************/\r\n\r\n\t\t\t\t/* As per jQuery's $.queue() behavior, to fire the first non-custom-queue entry on an element, the element\r\n\t\t\t\t must be dequeued if its queue stack consists *solely* of the current call. (This can be determined by checking\r\n\t\t\t\t for the \"inprogress\" item that jQuery prepends to active queue stack arrays.) Regardless, whenever the element's\r\n\t\t\t\t queue is further appended with additional items -- including $.delay()'s or even $.animate() calls, the queue's\r\n\t\t\t\t first entry is automatically fired. This behavior contrasts that of custom queues, which never auto-fire. */\r\n\t\t\t\t/* Note: When an element set is being subjected to a non-parallel Velocity call, the animation will not begin until\r\n\t\t\t\t each one of the elements in the set has reached the end of its individually pre-existing queue chain. */\r\n\t\t\t\t/* Note: Unfortunately, most people don't fully grasp jQuery's powerful, yet quirky, $.queue() function.\r\n\t\t\t\t Lean more here: http://stackoverflow.com/questions/1058158/can-somebody-explain-jquery-queue-to-me */\r\n\t\t\t\tif ((opts.queue === \"\" || opts.queue === \"fx\") && $.queue(element)[0] !== \"inprogress\") {\r\n\t\t\t\t\t$.dequeue(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/**************************\r\n\t\t\t Element Set Iteration\r\n\t\t\t **************************/\r\n\r\n\t\t\t/* If the \"nodeType\" property exists on the elements variable, we're animating a single element.\r\n\t\t\t Place it in an array so that $.each() can iterate over it. */\r\n\t\t\t$.each(elements, function(i, element) {\r\n\t\t\t\t/* Ensure each element in a set has a nodeType (is a real element) to avoid throwing errors. */\r\n\t\t\t\tif (Type.isNode(element)) {\r\n\t\t\t\t\tprocessElement(element, i);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t/******************\r\n\t\t\t Option: Loop\r\n\t\t\t ******************/\r\n\r\n\t\t\t/* The loop option accepts an integer indicating how many times the element should loop between the values in the\r\n\t\t\t current call's properties map and the element's property values prior to this call. */\r\n\t\t\t/* Note: The loop option's logic is performed here -- after element processing -- because the current call needs\r\n\t\t\t to undergo its queue insertion prior to the loop option generating its series of constituent \"reverse\" calls,\r\n\t\t\t which chain after the current call. Two reverse calls (two \"alternations\") constitute one loop. */\r\n\t\t\topts = $.extend({}, Velocity.defaults, options);\r\n\t\t\topts.loop = parseInt(opts.loop, 10);\r\n\t\t\tvar reverseCallsCount = (opts.loop * 2) - 1;\r\n\r\n\t\t\tif (opts.loop) {\r\n\t\t\t\t/* Double the loop count to convert it into its appropriate number of \"reverse\" calls.\r\n\t\t\t\t Subtract 1 from the resulting value since the current call is included in the total alternation count. */\r\n\t\t\t\tfor (var x = 0; x < reverseCallsCount; x++) {\r\n\t\t\t\t\t/* Since the logic for the reverse action occurs inside Queueing and therefore this call's options object\r\n\t\t\t\t\t isn't parsed until then as well, the current call's delay option must be explicitly passed into the reverse\r\n\t\t\t\t\t call so that the delay logic that occurs inside *Pre-Queueing* can process it. */\r\n\t\t\t\t\tvar reverseOptions = {\r\n\t\t\t\t\t\tdelay: opts.delay,\r\n\t\t\t\t\t\tprogress: opts.progress\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t/* If a complete callback was passed into this call, transfer it to the loop redirect's final \"reverse\" call\r\n\t\t\t\t\t so that it's triggered when the entire redirect is complete (and not when the very first animation is complete). */\r\n\t\t\t\t\tif (x === reverseCallsCount - 1) {\r\n\t\t\t\t\t\treverseOptions.display = opts.display;\r\n\t\t\t\t\t\treverseOptions.visibility = opts.visibility;\r\n\t\t\t\t\t\treverseOptions.complete = opts.complete;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tanimate(elements, \"reverse\", reverseOptions);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/***************\r\n\t\t\t Chaining\r\n\t\t\t ***************/\r\n\r\n\t\t\t/* Return the elements back to the call chain, with wrapped elements taking precedence in case Velocity was called via the $.fn. extension. */\r\n\t\t\treturn getChain();\r\n\t\t};\r\n\r\n\t\t/* Turn Velocity into the animation function, extended with the pre-existing Velocity object. */\r\n\t\tVelocity = $.extend(animate, Velocity);\r\n\t\t/* For legacy support, also expose the literal animate method. */\r\n\t\tVelocity.animate = animate;\r\n\r\n\t\t/**************\r\n\t\t Timing\r\n\t\t **************/\r\n\r\n\t\t/* Ticker function. */\r\n\t\tvar ticker = window.requestAnimationFrame || rAFShim;\r\n\r\n\t\t/* Inactive browser tabs pause rAF, which results in all active animations immediately sprinting to their completion states when the tab refocuses.\r\n\t\t To get around this, we dynamically switch rAF to setTimeout (which the browser *doesn't* pause) when the tab loses focus. We skip this for mobile\r\n\t\t devices to avoid wasting battery power on inactive tabs. */\r\n\t\t/* Note: Tab focus detection doesn't work on older versions of IE, but that's okay since they don't support rAF to begin with. */\r\n\t\tif (!Velocity.State.isMobile && document.hidden !== undefined) {\r\n\t\t\tvar updateTicker = function() {\r\n\t\t\t\t/* Reassign the rAF function (which the global tick() function uses) based on the tab's focus state. */\r\n\t\t\t\tif (document.hidden) {\r\n\t\t\t\t\tticker = function(callback) {\r\n\t\t\t\t\t\t/* The tick function needs a truthy first argument in order to pass its internal timestamp check. */\r\n\t\t\t\t\t\treturn setTimeout(function() {\r\n\t\t\t\t\t\t\tcallback(true);\r\n\t\t\t\t\t\t}, 16);\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t/* The rAF loop has been paused by the browser, so we manually restart the tick. */\r\n\t\t\t\t\ttick();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tticker = window.requestAnimationFrame || rAFShim;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t/* Page could be sitting in the background at this time (i.e. opened as new tab) so making sure we use correct ticker from the start */\r\n\t\t\tupdateTicker();\r\n\r\n\t\t\t/* And then run check again every time visibility changes */\r\n\t\t\tdocument.addEventListener(\"visibilitychange\", updateTicker);\r\n\t\t}\r\n\r\n\t\t/************\r\n\t\t Tick\r\n\t\t ************/\r\n\r\n\t\t/* Note: All calls to Velocity are pushed to the Velocity.State.calls array, which is fully iterated through upon each tick. */\r\n\t\tfunction tick(timestamp) {\r\n\t\t\t/* An empty timestamp argument indicates that this is the first tick occurence since ticking was turned on.\r\n\t\t\t We leverage this metadata to fully ignore the first tick pass since RAF's initial pass is fired whenever\r\n\t\t\t the browser's next tick sync time occurs, which results in the first elements subjected to Velocity\r\n\t\t\t calls being animated out of sync with any elements animated immediately thereafter. In short, we ignore\r\n\t\t\t the first RAF tick pass so that elements being immediately consecutively animated -- instead of simultaneously animated\r\n\t\t\t by the same Velocity call -- are properly batched into the same initial RAF tick and consequently remain in sync thereafter. */\r\n\t\t\tif (timestamp) {\r\n\t\t\t\t/* We normally use RAF's high resolution timestamp but as it can be significantly offset when the browser is\r\n\t\t\t\t under high stress we give the option for choppiness over allowing the browser to drop huge chunks of frames.\r\n\t\t\t\t We use performance.now() and shim it if it doesn't exist for when the tab is hidden. */\r\n\t\t\t\tvar timeCurrent = Velocity.timestamp && timestamp !== true ? timestamp : performance.now();\r\n\r\n\t\t\t\t/********************\r\n\t\t\t\t Call Iteration\r\n\t\t\t\t ********************/\r\n\r\n\t\t\t\tvar callsLength = Velocity.State.calls.length;\r\n\r\n\t\t\t\t/* To speed up iterating over this array, it is compacted (falsey items -- calls that have completed -- are removed)\r\n\t\t\t\t when its length has ballooned to a point that can impact tick performance. This only becomes necessary when animation\r\n\t\t\t\t has been continuous with many elements over a long period of time; whenever all active calls are completed, completeCall() clears Velocity.State.calls. */\r\n\t\t\t\tif (callsLength > 10000) {\r\n\t\t\t\t\tVelocity.State.calls = compactSparseArray(Velocity.State.calls);\r\n\t\t\t\t\tcallsLength = Velocity.State.calls.length;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* Iterate through each active call. */\r\n\t\t\t\tfor (var i = 0; i < callsLength; i++) {\r\n\t\t\t\t\t/* When a Velocity call is completed, its Velocity.State.calls entry is set to false. Continue on to the next call. */\r\n\t\t\t\t\tif (!Velocity.State.calls[i]) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/************************\r\n\t\t\t\t\t Call-Wide Variables\r\n\t\t\t\t\t ************************/\r\n\r\n\t\t\t\t\tvar callContainer = Velocity.State.calls[i],\r\n\t\t\t\t\t\t\tcall = callContainer[0],\r\n\t\t\t\t\t\t\topts = callContainer[2],\r\n\t\t\t\t\t\t\ttimeStart = callContainer[3],\r\n\t\t\t\t\t\t\tfirstTick = !timeStart,\r\n\t\t\t\t\t\t\ttweenDummyValue = null,\r\n\t\t\t\t\t\t\tpauseObject = callContainer[5],\r\n\t\t\t\t\t\t\tmillisecondsEllapsed = callContainer[6];\r\n\r\n\r\n\r\n\t\t\t\t\t/* If timeStart is undefined, then this is the first time that this call has been processed by tick().\r\n\t\t\t\t\t We assign timeStart now so that its value is as close to the real animation start time as possible.\r\n\t\t\t\t\t (Conversely, had timeStart been defined when this call was added to Velocity.State.calls, the delay\r\n\t\t\t\t\t between that time and now would cause the first few frames of the tween to be skipped since\r\n\t\t\t\t\t percentComplete is calculated relative to timeStart.) */\r\n\t\t\t\t\t/* Further, subtract 16ms (the approximate resolution of RAF) from the current time value so that the\r\n\t\t\t\t\t first tick iteration isn't wasted by animating at 0% tween completion, which would produce the\r\n\t\t\t\t\t same style value as the element's current value. */\r\n\t\t\t\t\tif (!timeStart) {\r\n\t\t\t\t\t\ttimeStart = Velocity.State.calls[i][3] = timeCurrent - 16;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* If a pause object is present, skip processing unless it has been set to resume */\r\n\t\t\t\t\tif (pauseObject) {\r\n\t\t\t\t\t\tif (pauseObject.resume === true) {\r\n\t\t\t\t\t\t\t/* Update the time start to accomodate the paused completion amount */\r\n\t\t\t\t\t\t\ttimeStart = callContainer[3] = Math.round(timeCurrent - millisecondsEllapsed - 16);\r\n\r\n\t\t\t\t\t\t\t/* Remove pause object after processing */\r\n\t\t\t\t\t\t\tcallContainer[5] = null;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmillisecondsEllapsed = callContainer[6] = timeCurrent - timeStart;\r\n\r\n\t\t\t\t\t/* The tween's completion percentage is relative to the tween's start time, not the tween's start value\r\n\t\t\t\t\t (which would result in unpredictable tween durations since JavaScript's timers are not particularly accurate).\r\n\t\t\t\t\t Accordingly, we ensure that percentComplete does not exceed 1. */\r\n\t\t\t\t\tvar percentComplete = Math.min((millisecondsEllapsed) / opts.duration, 1);\r\n\r\n\t\t\t\t\t/**********************\r\n\t\t\t\t\t Element Iteration\r\n\t\t\t\t\t **********************/\r\n\r\n\t\t\t\t\t/* For every call, iterate through each of the elements in its set. */\r\n\t\t\t\t\tfor (var j = 0, callLength = call.length; j < callLength; j++) {\r\n\t\t\t\t\t\tvar tweensContainer = call[j],\r\n\t\t\t\t\t\t\t\telement = tweensContainer.element;\r\n\r\n\t\t\t\t\t\t/* Check to see if this element has been deleted midway through the animation by checking for the\r\n\t\t\t\t\t\t continued existence of its data cache. If it's gone, or the element is currently paused, skip animating this element. */\r\n\t\t\t\t\t\tif (!Data(element)) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tvar transformPropertyExists = false;\r\n\r\n\t\t\t\t\t\t/**********************************\r\n\t\t\t\t\t\t Display & Visibility Toggling\r\n\t\t\t\t\t\t **********************************/\r\n\r\n\t\t\t\t\t\t/* If the display option is set to non-\"none\", set it upfront so that the element can become visible before tweening begins.\r\n\t\t\t\t\t\t (Otherwise, display's \"none\" value is set in completeCall() once the animation has completed.) */\r\n\t\t\t\t\t\tif (opts.display !== undefined && opts.display !== null && opts.display !== \"none\") {\r\n\t\t\t\t\t\t\tif (opts.display === \"flex\") {\r\n\t\t\t\t\t\t\t\tvar flexValues = [\"-webkit-box\", \"-moz-box\", \"-ms-flexbox\", \"-webkit-flex\"];\r\n\r\n\t\t\t\t\t\t\t\t$.each(flexValues, function(i, flexValue) {\r\n\t\t\t\t\t\t\t\t\tCSS.setPropertyValue(element, \"display\", flexValue);\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tCSS.setPropertyValue(element, \"display\", opts.display);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Same goes with the visibility option, but its \"none\" equivalent is \"hidden\". */\r\n\t\t\t\t\t\tif (opts.visibility !== undefined && opts.visibility !== \"hidden\") {\r\n\t\t\t\t\t\t\tCSS.setPropertyValue(element, \"visibility\", opts.visibility);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/************************\r\n\t\t\t\t\t\t Property Iteration\r\n\t\t\t\t\t\t ************************/\r\n\r\n\t\t\t\t\t\t/* For every element, iterate through each property. */\r\n\t\t\t\t\t\tfor (var property in tweensContainer) {\r\n\t\t\t\t\t\t\t/* Note: In addition to property tween data, tweensContainer contains a reference to its associated element. */\r\n\t\t\t\t\t\t\tif (tweensContainer.hasOwnProperty(property) && property !== \"element\") {\r\n\t\t\t\t\t\t\t\tvar tween = tweensContainer[property],\r\n\t\t\t\t\t\t\t\t\t\tcurrentValue,\r\n\t\t\t\t\t\t\t\t\t\t/* Easing can either be a pre-genereated function or a string that references a pre-registered easing\r\n\t\t\t\t\t\t\t\t\t\t on the Velocity.Easings object. In either case, return the appropriate easing *function*. */\r\n\t\t\t\t\t\t\t\t\t\teasing = Type.isString(tween.easing) ? Velocity.Easings[tween.easing] : tween.easing;\r\n\r\n\t\t\t\t\t\t\t\t/******************************\r\n\t\t\t\t\t\t\t\t Current Value Calculation\r\n\t\t\t\t\t\t\t\t ******************************/\r\n\r\n\t\t\t\t\t\t\t\tif (Type.isString(tween.pattern)) {\r\n\t\t\t\t\t\t\t\t\tvar patternReplace = percentComplete === 1 ?\r\n\t\t\t\t\t\t\t\t\t\t\tfunction($0, index, round) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar result = tween.endValue[index];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn round ? Math.round(result) : result;\r\n\t\t\t\t\t\t\t\t\t\t\t} :\r\n\t\t\t\t\t\t\t\t\t\t\tfunction($0, index, round) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar startValue = tween.startValue[index],\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttweenDelta = tween.endValue[index] - startValue,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tresult = startValue + (tweenDelta * easing(percentComplete, opts, tweenDelta));\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn round ? Math.round(result) : result;\r\n\t\t\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\tcurrentValue = tween.pattern.replace(/{(\\d+)(!)?}/g, patternReplace);\r\n\t\t\t\t\t\t\t\t} else if (percentComplete === 1) {\r\n\t\t\t\t\t\t\t\t\t/* If this is the last tick pass (if we've reached 100% completion for this tween),\r\n\t\t\t\t\t\t\t\t\t ensure that currentValue is explicitly set to its target endValue so that it's not subjected to any rounding. */\r\n\t\t\t\t\t\t\t\t\tcurrentValue = tween.endValue;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t/* Otherwise, calculate currentValue based on the current delta from startValue. */\r\n\t\t\t\t\t\t\t\t\tvar tweenDelta = tween.endValue - tween.startValue;\r\n\r\n\t\t\t\t\t\t\t\t\tcurrentValue = tween.startValue + (tweenDelta * easing(percentComplete, opts, tweenDelta));\r\n\t\t\t\t\t\t\t\t\t/* If no value change is occurring, don't proceed with DOM updating. */\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (!firstTick && (currentValue === tween.currentValue)) {\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\ttween.currentValue = currentValue;\r\n\r\n\t\t\t\t\t\t\t\t/* If we're tweening a fake 'tween' property in order to log transition values, update the one-per-call variable so that\r\n\t\t\t\t\t\t\t\t it can be passed into the progress callback. */\r\n\t\t\t\t\t\t\t\tif (property === \"tween\") {\r\n\t\t\t\t\t\t\t\t\ttweenDummyValue = currentValue;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t/******************\r\n\t\t\t\t\t\t\t\t\t Hooks: Part I\r\n\t\t\t\t\t\t\t\t\t ******************/\r\n\t\t\t\t\t\t\t\t\tvar hookRoot;\r\n\r\n\t\t\t\t\t\t\t\t\t/* For hooked properties, the newly-updated rootPropertyValueCache is cached onto the element so that it can be used\r\n\t\t\t\t\t\t\t\t\t for subsequent hooks in this call that are associated with the same root property. If we didn't cache the updated\r\n\t\t\t\t\t\t\t\t\t rootPropertyValue, each subsequent update to the root property in this tick pass would reset the previous hook's\r\n\t\t\t\t\t\t\t\t\t updates to rootPropertyValue prior to injection. A nice performance byproduct of rootPropertyValue caching is that\r\n\t\t\t\t\t\t\t\t\t subsequently chained animations using the same hookRoot but a different hook can use this cached rootPropertyValue. */\r\n\t\t\t\t\t\t\t\t\tif (CSS.Hooks.registered[property]) {\r\n\t\t\t\t\t\t\t\t\t\thookRoot = CSS.Hooks.getRoot(property);\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar rootPropertyValueCache = Data(element).rootPropertyValueCache[hookRoot];\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (rootPropertyValueCache) {\r\n\t\t\t\t\t\t\t\t\t\t\ttween.rootPropertyValue = rootPropertyValueCache;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t/*****************\r\n\t\t\t\t\t\t\t\t\t DOM Update\r\n\t\t\t\t\t\t\t\t\t *****************/\r\n\r\n\t\t\t\t\t\t\t\t\t/* setPropertyValue() returns an array of the property name and property value post any normalization that may have been performed. */\r\n\t\t\t\t\t\t\t\t\t/* Note: To solve an IE<=8 positioning bug, the unit type is dropped when setting a property value of 0. */\r\n\t\t\t\t\t\t\t\t\tvar adjustedSetData = CSS.setPropertyValue(element, /* SET */\r\n\t\t\t\t\t\t\t\t\t\t\tproperty,\r\n\t\t\t\t\t\t\t\t\t\t\ttween.currentValue + (IE < 9 && parseFloat(currentValue) === 0 ? \"\" : tween.unitType),\r\n\t\t\t\t\t\t\t\t\t\t\ttween.rootPropertyValue,\r\n\t\t\t\t\t\t\t\t\t\t\ttween.scrollData);\r\n\r\n\t\t\t\t\t\t\t\t\t/*******************\r\n\t\t\t\t\t\t\t\t\t Hooks: Part II\r\n\t\t\t\t\t\t\t\t\t *******************/\r\n\r\n\t\t\t\t\t\t\t\t\t/* Now that we have the hook's updated rootPropertyValue (the post-processed value provided by adjustedSetData), cache it onto the element. */\r\n\t\t\t\t\t\t\t\t\tif (CSS.Hooks.registered[property]) {\r\n\t\t\t\t\t\t\t\t\t\t/* Since adjustedSetData contains normalized data ready for DOM updating, the rootPropertyValue needs to be re-extracted from its normalized form. ?? */\r\n\t\t\t\t\t\t\t\t\t\tif (CSS.Normalizations.registered[hookRoot]) {\r\n\t\t\t\t\t\t\t\t\t\t\tData(element).rootPropertyValueCache[hookRoot] = CSS.Normalizations.registered[hookRoot](\"extract\", null, adjustedSetData[1]);\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\tData(element).rootPropertyValueCache[hookRoot] = adjustedSetData[1];\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t/***************\r\n\t\t\t\t\t\t\t\t\t Transforms\r\n\t\t\t\t\t\t\t\t\t ***************/\r\n\r\n\t\t\t\t\t\t\t\t\t/* Flag whether a transform property is being animated so that flushTransformCache() can be triggered once this tick pass is complete. */\r\n\t\t\t\t\t\t\t\t\tif (adjustedSetData[0] === \"transform\") {\r\n\t\t\t\t\t\t\t\t\t\ttransformPropertyExists = true;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/****************\r\n\t\t\t\t\t\t mobileHA\r\n\t\t\t\t\t\t ****************/\r\n\r\n\t\t\t\t\t\t/* If mobileHA is enabled, set the translate3d transform to null to force hardware acceleration.\r\n\t\t\t\t\t\t It's safe to override this property since Velocity doesn't actually support its animation (hooks are used in its place). */\r\n\t\t\t\t\t\tif (opts.mobileHA) {\r\n\t\t\t\t\t\t\t/* Don't set the null transform hack if we've already done so. */\r\n\t\t\t\t\t\t\tif (Data(element).transformCache.translate3d === undefined) {\r\n\t\t\t\t\t\t\t\t/* All entries on the transformCache object are later concatenated into a single transform string via flushTransformCache(). */\r\n\t\t\t\t\t\t\t\tData(element).transformCache.translate3d = \"(0px, 0px, 0px)\";\r\n\r\n\t\t\t\t\t\t\t\ttransformPropertyExists = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (transformPropertyExists) {\r\n\t\t\t\t\t\t\tCSS.flushTransformCache(element);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* The non-\"none\" display value is only applied to an element once -- when its associated call is first ticked through.\r\n\t\t\t\t\t Accordingly, it's set to false so that it isn't re-processed by this call in the next tick. */\r\n\t\t\t\t\tif (opts.display !== undefined && opts.display !== \"none\") {\r\n\t\t\t\t\t\tVelocity.State.calls[i][2].display = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (opts.visibility !== undefined && opts.visibility !== \"hidden\") {\r\n\t\t\t\t\t\tVelocity.State.calls[i][2].visibility = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Pass the elements and the timing data (percentComplete, msRemaining, timeStart, tweenDummyValue) into the progress callback. */\r\n\t\t\t\t\tif (opts.progress) {\r\n\t\t\t\t\t\topts.progress.call(callContainer[1],\r\n\t\t\t\t\t\t\t\tcallContainer[1],\r\n\t\t\t\t\t\t\t\tpercentComplete,\r\n\t\t\t\t\t\t\t\tMath.max(0, (timeStart + opts.duration) - timeCurrent),\r\n\t\t\t\t\t\t\t\ttimeStart,\r\n\t\t\t\t\t\t\t\ttweenDummyValue);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* If this call has finished tweening, pass its index to completeCall() to handle call cleanup. */\r\n\t\t\t\t\tif (percentComplete === 1) {\r\n\t\t\t\t\t\tcompleteCall(i);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/* Note: completeCall() sets the isTicking flag to false when the last call on Velocity.State.calls has completed. */\r\n\t\t\tif (Velocity.State.isTicking) {\r\n\t\t\t\tticker(tick);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**********************\r\n\t\t Call Completion\r\n\t\t **********************/\r\n\r\n\t\t/* Note: Unlike tick(), which processes all active calls at once, call completion is handled on a per-call basis. */\r\n\t\tfunction completeCall(callIndex, isStopped) {\r\n\t\t\t/* Ensure the call exists. */\r\n\t\t\tif (!Velocity.State.calls[callIndex]) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t/* Pull the metadata from the call. */\r\n\t\t\tvar call = Velocity.State.calls[callIndex][0],\r\n\t\t\t\t\telements = Velocity.State.calls[callIndex][1],\r\n\t\t\t\t\topts = Velocity.State.calls[callIndex][2],\r\n\t\t\t\t\tresolver = Velocity.State.calls[callIndex][4];\r\n\r\n\t\t\tvar remainingCallsExist = false;\r\n\r\n\t\t\t/*************************\r\n\t\t\t Element Finalization\r\n\t\t\t *************************/\r\n\r\n\t\t\tfor (var i = 0, callLength = call.length; i < callLength; i++) {\r\n\t\t\t\tvar element = call[i].element;\r\n\r\n\t\t\t\t/* If the user set display to \"none\" (intending to hide the element), set it now that the animation has completed. */\r\n\t\t\t\t/* Note: display:none isn't set when calls are manually stopped (via Velocity(\"stop\"). */\r\n\t\t\t\t/* Note: Display gets ignored with \"reverse\" calls and infinite loops, since this behavior would be undesirable. */\r\n\t\t\t\tif (!isStopped && !opts.loop) {\r\n\t\t\t\t\tif (opts.display === \"none\") {\r\n\t\t\t\t\t\tCSS.setPropertyValue(element, \"display\", opts.display);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (opts.visibility === \"hidden\") {\r\n\t\t\t\t\t\tCSS.setPropertyValue(element, \"visibility\", opts.visibility);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* If the element's queue is empty (if only the \"inprogress\" item is left at position 0) or if its queue is about to run\r\n\t\t\t\t a non-Velocity-initiated entry, turn off the isAnimating flag. A non-Velocity-initiatied queue entry's logic might alter\r\n\t\t\t\t an element's CSS values and thereby cause Velocity's cached value data to go stale. To detect if a queue entry was initiated by Velocity,\r\n\t\t\t\t we check for the existence of our special Velocity.queueEntryFlag declaration, which minifiers won't rename since the flag\r\n\t\t\t\t is assigned to jQuery's global $ object and thus exists out of Velocity's own scope. */\r\n\t\t\t\tvar data = Data(element);\r\n\r\n\t\t\t\tif (opts.loop !== true && ($.queue(element)[1] === undefined || !/\\.velocityQueueEntryFlag/i.test($.queue(element)[1]))) {\r\n\t\t\t\t\t/* The element may have been deleted. Ensure that its data cache still exists before acting on it. */\r\n\t\t\t\t\tif (data) {\r\n\t\t\t\t\t\tdata.isAnimating = false;\r\n\t\t\t\t\t\t/* Clear the element's rootPropertyValueCache, which will become stale. */\r\n\t\t\t\t\t\tdata.rootPropertyValueCache = {};\r\n\r\n\t\t\t\t\t\tvar transformHAPropertyExists = false;\r\n\t\t\t\t\t\t/* If any 3D transform subproperty is at its default value (regardless of unit type), remove it. */\r\n\t\t\t\t\t\t$.each(CSS.Lists.transforms3D, function(i, transformName) {\r\n\t\t\t\t\t\t\tvar defaultValue = /^scale/.test(transformName) ? 1 : 0,\r\n\t\t\t\t\t\t\t\t\tcurrentValue = data.transformCache[transformName];\r\n\r\n\t\t\t\t\t\t\tif (data.transformCache[transformName] !== undefined && new RegExp(\"^\\\\(\" + defaultValue + \"[^.]\").test(currentValue)) {\r\n\t\t\t\t\t\t\t\ttransformHAPropertyExists = true;\r\n\r\n\t\t\t\t\t\t\t\tdelete data.transformCache[transformName];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t/* Mobile devices have hardware acceleration removed at the end of the animation in order to avoid hogging the GPU's memory. */\r\n\t\t\t\t\t\tif (opts.mobileHA) {\r\n\t\t\t\t\t\t\ttransformHAPropertyExists = true;\r\n\t\t\t\t\t\t\tdelete data.transformCache.translate3d;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Flush the subproperty removals to the DOM. */\r\n\t\t\t\t\t\tif (transformHAPropertyExists) {\r\n\t\t\t\t\t\t\tCSS.flushTransformCache(element);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t/* Remove the \"velocity-animating\" indicator class. */\r\n\t\t\t\t\t\tCSS.Values.removeClass(element, \"velocity-animating\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*********************\r\n\t\t\t\t Option: Complete\r\n\t\t\t\t *********************/\r\n\r\n\t\t\t\t/* Complete is fired once per call (not once per element) and is passed the full raw DOM element set as both its context and its first argument. */\r\n\t\t\t\t/* Note: Callbacks aren't fired when calls are manually stopped (via Velocity(\"stop\"). */\r\n\t\t\t\tif (!isStopped && opts.complete && !opts.loop && (i === callLength - 1)) {\r\n\t\t\t\t\t/* We throw callbacks in a setTimeout so that thrown errors don't halt the execution of Velocity itself. */\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\topts.complete.call(elements, elements);\r\n\t\t\t\t\t} catch (error) {\r\n\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\tthrow error;\r\n\t\t\t\t\t\t}, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/**********************\r\n\t\t\t\t Promise Resolving\r\n\t\t\t\t **********************/\r\n\r\n\t\t\t\t/* Note: Infinite loops don't return promises. */\r\n\t\t\t\tif (resolver && opts.loop !== true) {\r\n\t\t\t\t\tresolver(elements);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/****************************\r\n\t\t\t\t Option: Loop (Infinite)\r\n\t\t\t\t ****************************/\r\n\r\n\t\t\t\tif (data && opts.loop === true && !isStopped) {\r\n\t\t\t\t\t/* If a rotateX/Y/Z property is being animated by 360 deg with loop:true, swap tween start/end values to enable\r\n\t\t\t\t\t continuous iterative rotation looping. (Otherise, the element would just rotate back and forth.) */\r\n\t\t\t\t\t$.each(data.tweensContainer, function(propertyName, tweenContainer) {\r\n\t\t\t\t\t\tif (/^rotate/.test(propertyName) && ((parseFloat(tweenContainer.startValue) - parseFloat(tweenContainer.endValue)) % 360 === 0)) {\r\n\t\t\t\t\t\t\tvar oldStartValue = tweenContainer.startValue;\r\n\r\n\t\t\t\t\t\t\ttweenContainer.startValue = tweenContainer.endValue;\r\n\t\t\t\t\t\t\ttweenContainer.endValue = oldStartValue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (/^backgroundPosition/.test(propertyName) && parseFloat(tweenContainer.endValue) === 100 && tweenContainer.unitType === \"%\") {\r\n\t\t\t\t\t\t\ttweenContainer.endValue = 0;\r\n\t\t\t\t\t\t\ttweenContainer.startValue = 100;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tVelocity(element, \"reverse\", {loop: true, delay: opts.delay});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/***************\r\n\t\t\t\t Dequeueing\r\n\t\t\t\t ***************/\r\n\r\n\t\t\t\t/* Fire the next call in the queue so long as this call's queue wasn't set to false (to trigger a parallel animation),\r\n\t\t\t\t which would have already caused the next call to fire. Note: Even if the end of the animation queue has been reached,\r\n\t\t\t\t $.dequeue() must still be called in order to completely clear jQuery's animation queue. */\r\n\t\t\t\tif (opts.queue !== false) {\r\n\t\t\t\t\t$.dequeue(element, opts.queue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t/************************\r\n\t\t\t Calls Array Cleanup\r\n\t\t\t ************************/\r\n\r\n\t\t\t/* Since this call is complete, set it to false so that the rAF tick skips it. This array is later compacted via compactSparseArray().\r\n\t\t\t (For performance reasons, the call is set to false instead of being deleted from the array: http://www.html5rocks.com/en/tutorials/speed/v8/) */\r\n\t\t\tVelocity.State.calls[callIndex] = false;\r\n\r\n\t\t\t/* Iterate through the calls array to determine if this was the final in-progress animation.\r\n\t\t\t If so, set a flag to end ticking and clear the calls array. */\r\n\t\t\tfor (var j = 0, callsLength = Velocity.State.calls.length; j < callsLength; j++) {\r\n\t\t\t\tif (Velocity.State.calls[j] !== false) {\r\n\t\t\t\t\tremainingCallsExist = true;\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (remainingCallsExist === false) {\r\n\t\t\t\t/* tick() will detect this flag upon its next iteration and subsequently turn itself off. */\r\n\t\t\t\tVelocity.State.isTicking = false;\r\n\r\n\t\t\t\t/* Clear the calls array so that its length is reset. */\r\n\t\t\t\tdelete Velocity.State.calls;\r\n\t\t\t\tVelocity.State.calls = [];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/******************\r\n\t\t Frameworks\r\n\t\t ******************/\r\n\r\n\t\t/* Both jQuery and Zepto allow their $.fn object to be extended to allow wrapped elements to be subjected to plugin calls.\r\n\t\t If either framework is loaded, register a \"velocity\" extension pointing to Velocity's core animate() method.  Velocity\r\n\t\t also registers itself onto a global container (window.jQuery || window.Zepto || window) so that certain features are\r\n\t\t accessible beyond just a per-element scope. This master object contains an .animate() method, which is later assigned to $.fn\r\n\t\t (if jQuery or Zepto are present). Accordingly, Velocity can both act on wrapped DOM elements and stand alone for targeting raw DOM elements. */\r\n\t\tglobal.Velocity = Velocity;\r\n\r\n\t\tif (global !== window) {\r\n\t\t\t/* Assign the element function to Velocity's core animate() method. */\r\n\t\t\tglobal.fn.velocity = animate;\r\n\t\t\t/* Assign the object function's defaults to Velocity's global defaults object. */\r\n\t\t\tglobal.fn.velocity.defaults = Velocity.defaults;\r\n\t\t}\r\n\r\n\t\t/***********************\r\n\t\t Packaged Redirects\r\n\t\t ***********************/\r\n\r\n\t\t/* slideUp, slideDown */\r\n\t\t$.each([\"Down\", \"Up\"], function(i, direction) {\r\n\t\t\tVelocity.Redirects[\"slide\" + direction] = function(element, options, elementsIndex, elementsSize, elements, promiseData) {\r\n\t\t\t\tvar opts = $.extend({}, options),\r\n\t\t\t\t\t\tbegin = opts.begin,\r\n\t\t\t\t\t\tcomplete = opts.complete,\r\n\t\t\t\t\t\tinlineValues = {},\r\n\t\t\t\t\t\tcomputedValues = {height: \"\", marginTop: \"\", marginBottom: \"\", paddingTop: \"\", paddingBottom: \"\"};\r\n\r\n\t\t\t\tif (opts.display === undefined) {\r\n\t\t\t\t\t/* Show the element before slideDown begins and hide the element after slideUp completes. */\r\n\t\t\t\t\t/* Note: Inline elements cannot have dimensions animated, so they're reverted to inline-block. */\r\n\t\t\t\t\topts.display = (direction === \"Down\" ? (Velocity.CSS.Values.getDisplayType(element) === \"inline\" ? \"inline-block\" : \"block\") : \"none\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\topts.begin = function() {\r\n\t\t\t\t\t/* If the user passed in a begin callback, fire it now. */\r\n\t\t\t\t\tif (elementsIndex === 0 && begin) {\r\n\t\t\t\t\t\tbegin.call(elements, elements);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Cache the elements' original vertical dimensional property values so that we can animate back to them. */\r\n\t\t\t\t\tfor (var property in computedValues) {\r\n\t\t\t\t\t\tif (!computedValues.hasOwnProperty(property)) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tinlineValues[property] = element.style[property];\r\n\r\n\t\t\t\t\t\t/* For slideDown, use forcefeeding to animate all vertical properties from 0. For slideUp,\r\n\t\t\t\t\t\t use forcefeeding to start from computed values and animate down to 0. */\r\n\t\t\t\t\t\tvar propertyValue = CSS.getPropertyValue(element, property);\r\n\t\t\t\t\t\tcomputedValues[property] = (direction === \"Down\") ? [propertyValue, 0] : [0, propertyValue];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* Force vertical overflow content to clip so that sliding works as expected. */\r\n\t\t\t\t\tinlineValues.overflow = element.style.overflow;\r\n\t\t\t\t\telement.style.overflow = \"hidden\";\r\n\t\t\t\t};\r\n\r\n\t\t\t\topts.complete = function() {\r\n\t\t\t\t\t/* Reset element to its pre-slide inline values once its slide animation is complete. */\r\n\t\t\t\t\tfor (var property in inlineValues) {\r\n\t\t\t\t\t\tif (inlineValues.hasOwnProperty(property)) {\r\n\t\t\t\t\t\t\telement.style[property] = inlineValues[property];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t/* If the user passed in a complete callback, fire it now. */\r\n\t\t\t\t\tif (elementsIndex === elementsSize - 1) {\r\n\t\t\t\t\t\tif (complete) {\r\n\t\t\t\t\t\t\tcomplete.call(elements, elements);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (promiseData) {\r\n\t\t\t\t\t\t\tpromiseData.resolver(elements);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tVelocity(element, computedValues, opts);\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\t/* fadeIn, fadeOut */\r\n\t\t$.each([\"In\", \"Out\"], function(i, direction) {\r\n\t\t\tVelocity.Redirects[\"fade\" + direction] = function(element, options, elementsIndex, elementsSize, elements, promiseData) {\r\n\t\t\t\tvar opts = $.extend({}, options),\r\n\t\t\t\t\t\tcomplete = opts.complete,\r\n\t\t\t\t\t\tpropertiesMap = {opacity: (direction === \"In\") ? 1 : 0};\r\n\r\n\t\t\t\t/* Since redirects are triggered individually for each element in the animated set, avoid repeatedly triggering\r\n\t\t\t\t callbacks by firing them only when the final element has been reached. */\r\n\t\t\t\tif (elementsIndex !== 0) {\r\n\t\t\t\t\topts.begin = null;\r\n\t\t\t\t}\r\n\t\t\t\tif (elementsIndex !== elementsSize - 1) {\r\n\t\t\t\t\topts.complete = null;\r\n\t\t\t\t} else {\r\n\t\t\t\t\topts.complete = function() {\r\n\t\t\t\t\t\tif (complete) {\r\n\t\t\t\t\t\t\tcomplete.call(elements, elements);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (promiseData) {\r\n\t\t\t\t\t\t\tpromiseData.resolver(elements);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* If a display was passed in, use it. Otherwise, default to \"none\" for fadeOut or the element-specific default for fadeIn. */\r\n\t\t\t\t/* Note: We allow users to pass in \"null\" to skip display setting altogether. */\r\n\t\t\t\tif (opts.display === undefined) {\r\n\t\t\t\t\topts.display = (direction === \"In\" ? \"auto\" : \"none\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tVelocity(this, propertiesMap, opts);\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\treturn Velocity;\r\n\t}((window.jQuery || window.Zepto || window), window, (window ? window.document : undefined));\r\n}));\r\n\r\n/******************\r\n Known Issues\r\n ******************/\r\n\r\n/* The CSS spec mandates that the translateX/Y/Z transforms are %-relative to the element itself -- not its parent.\r\n Velocity, however, doesn't make this distinction. Thus, converting to or from the % unit with these subproperties\r\n will produce an inaccurate conversion value. The same issue exists with the cx/cy attributes of SVG circles and ellipses. */\r\n", "/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (typeof define === 'function' && define.amd) { \n // AMD. Register as an anonymous module. \n define(['jquery'], factory); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param  data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n            if(mfp._hasScrollBar(windowHeight)){\n                var s = mfp._getScrollbarSize();\n                if(s) {\n                    windowStyles.marginRight = s;\n                }\n            }\n        }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition )  {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param  {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif(  (target !== mfp.content[0] && !$.contains(mfp.content[0], target))  ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn (  (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('<img>').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">&#215;</button>',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('<div>');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: '<a href=\"%url%\">The content</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-figure\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<figure>'+\n\t\t\t\t\t\t'<div class=\"mfp-img\"></div>'+\n\t\t\t\t\t\t'<figcaption>'+\n\t\t\t\t\t\t\t'<div class=\"mfp-bottom-bar\">'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-title\"></div>'+\n\t\t\t\t\t\t\t\t'<div class=\"mfp-counter\"></div>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</figcaption>'+\n\t\t\t\t\t'</figure>'+\n\t\t\t\t'</div>',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: '<a href=\"%url%\">The image</a> could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\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// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '<div class=\"mfp-iframe-scaler\">'+\n\t\t\t\t\t'<div class=\"mfp-close\"></div>'+\n\t\t\t\t\t'<iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe>'+\n\t\t\t\t'</div>',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else  if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('<img class=\"mfp-img\" />').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number.  Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));", "/**********************\n   Velocity UI Pack\n**********************/\n\n/* VelocityJS.org UI Pack (5.0.4). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License. Portions copyright Daniel Eden, Christian Pucci. */\n\n;(function (factory) {\n    /* CommonJS module. */\n    if (typeof require === \"function\" && typeof exports === \"object\" ) {\n        module.exports = factory();\n    /* AMD module. */\n    } else if (typeof define === \"function\" && define.amd) {\n        define([ \"velocity\" ], factory);\n    /* Browser globals. */\n    } else {\n        factory();\n    }\n}(function() {\nreturn function (global, window, document, undefined) {\n\n    /*************\n        Checks\n    *************/\n\n    if (!global.Velocity || !global.Velocity.Utilities) {\n        window.console && console.log(\"Velocity UI Pack: Velocity must be loaded first. Aborting.\");\n        return;\n    } else {\n        var Velocity = global.Velocity,\n            $ = Velocity.Utilities;\n    }\n\n    var velocityVersion = Velocity.version,\n        requiredVersion = { major: 1, minor: 1, patch: 0 };\n\n    function greaterSemver (primary, secondary) {\n        var versionInts = [];\n\n        if (!primary || !secondary) { return false; }\n\n        $.each([ primary, secondary ], function(i, versionObject) {\n            var versionIntsComponents = [];\n\n            $.each(versionObject, function(component, value) {\n                while (value.toString().length < 5) {\n                    value = \"0\" + value;\n                }\n                versionIntsComponents.push(value);\n            });\n\n            versionInts.push(versionIntsComponents.join(\"\"))\n        });\n\n        return (parseFloat(versionInts[0]) > parseFloat(versionInts[1]));\n    }\n\n    if (greaterSemver(requiredVersion, velocityVersion)){\n        var abortError = \"Velocity UI Pack: You need to update Velocity (jquery.velocity.js) to a newer version. Visit http://github.com/julianshapiro/velocity.\";\n        alert(abortError);\n        throw new Error(abortError);\n    }\n\n    /************************\n       Effect Registration\n    ************************/\n\n    /* Note: RegisterUI is a legacy name. */\n    Velocity.RegisterEffect = Velocity.RegisterUI = function (effectName, properties) {\n        /* Animate the expansion/contraction of the elements' parent's height for In/Out effects. */\n        function animateParentHeight (elements, direction, totalDuration, stagger) {\n            var totalHeightDelta = 0,\n                parentNode;\n\n            /* Sum the total height (including padding and margin) of all targeted elements. */\n            $.each(elements.nodeType ? [ elements ] : elements, function(i, element) {\n                if (stagger) {\n                    /* Increase the totalDuration by the successive delay amounts produced by the stagger option. */\n                    totalDuration += i * stagger;\n                }\n\n                parentNode = element.parentNode;\n\n                $.each([ \"height\", \"paddingTop\", \"paddingBottom\", \"marginTop\", \"marginBottom\"], function(i, property) {\n                    totalHeightDelta += parseFloat(Velocity.CSS.getPropertyValue(element, property));\n                });\n            });\n\n            /* Animate the parent element's height adjustment (with a varying duration multiplier for aesthetic benefits). */\n            Velocity.animate(\n                parentNode,\n                { height: (direction === \"In\" ? \"+\" : \"-\") + \"=\" + totalHeightDelta },\n                { queue: false, easing: \"ease-in-out\", duration: totalDuration * (direction === \"In\" ? 0.6 : 1) }\n            );\n        }\n\n        /* Register a custom redirect for each effect. */\n        Velocity.Redirects[effectName] = function (element, redirectOptions, elementsIndex, elementsSize, elements, promiseData) {\n            var finalElement = (elementsIndex === elementsSize - 1);\n\n            if (typeof properties.defaultDuration === \"function\") {\n                properties.defaultDuration = properties.defaultDuration.call(elements, elements);\n            } else {\n                properties.defaultDuration = parseFloat(properties.defaultDuration);\n            }\n\n            /* Iterate through each effect's call array. */\n            for (var callIndex = 0; callIndex < properties.calls.length; callIndex++) {\n                var call = properties.calls[callIndex],\n                    propertyMap = call[0],\n                    redirectDuration = (redirectOptions.duration || properties.defaultDuration || 1000),\n                    durationPercentage = call[1],\n                    callOptions = call[2] || {},\n                    opts = {};\n\n                /* Assign the whitelisted per-call options. */\n                opts.duration = redirectDuration * (durationPercentage || 1);\n                opts.queue = redirectOptions.queue || \"\";\n                opts.easing = callOptions.easing || \"ease\";\n                opts.delay = parseFloat(callOptions.delay) || 0;\n                opts._cacheValues = callOptions._cacheValues || true;\n\n                /* Special processing for the first effect call. */\n                if (callIndex === 0) {\n                    /* If a delay was passed into the redirect, combine it with the first call's delay. */\n                    opts.delay += (parseFloat(redirectOptions.delay) || 0);\n\n                    if (elementsIndex === 0) {\n                        opts.begin = function() {\n                            /* Only trigger a begin callback on the first effect call with the first element in the set. */\n                            redirectOptions.begin && redirectOptions.begin.call(elements, elements);\n\n                            var direction = effectName.match(/(In|Out)$/);\n\n                            /* Make \"in\" transitioning elements invisible immediately so that there's no FOUC between now\n                               and the first RAF tick. */\n                            if ((direction && direction[0] === \"In\") && propertyMap.opacity !== undefined) {\n                                $.each(elements.nodeType ? [ elements ] : elements, function(i, element) {\n                                    Velocity.CSS.setPropertyValue(element, \"opacity\", 0);\n                                });\n                            }\n\n                            /* Only trigger animateParentHeight() if we're using an In/Out transition. */\n                            if (redirectOptions.animateParentHeight && direction) {\n                                animateParentHeight(elements, direction[0], redirectDuration + opts.delay, redirectOptions.stagger);\n                            }\n                        }\n                    }\n\n                    /* If the user isn't overriding the display option, default to \"auto\" for \"In\"-suffixed transitions. */\n                    if (redirectOptions.display !== null) {\n                        if (redirectOptions.display !== undefined && redirectOptions.display !== \"none\") {\n                            opts.display = redirectOptions.display;\n                        } else if (/In$/.test(effectName)) {\n                            /* Inline elements cannot be subjected to transforms, so we switch them to inline-block. */\n                            var defaultDisplay = Velocity.CSS.Values.getDisplayType(element);\n                            opts.display = (defaultDisplay === \"inline\") ? \"inline-block\" : defaultDisplay;\n                        }\n                    }\n\n                    if (redirectOptions.visibility && redirectOptions.visibility !== \"hidden\") {\n                        opts.visibility = redirectOptions.visibility;\n                    }\n                }\n\n                /* Special processing for the last effect call. */\n                if (callIndex === properties.calls.length - 1) {\n                    /* Append promise resolving onto the user's redirect callback. */\n                    function injectFinalCallbacks () {\n                        if ((redirectOptions.display === undefined || redirectOptions.display === \"none\") && /Out$/.test(effectName)) {\n                            $.each(elements.nodeType ? [ elements ] : elements, function(i, element) {\n                                Velocity.CSS.setPropertyValue(element, \"display\", \"none\");\n                            });\n                        }\n\n                        redirectOptions.complete && redirectOptions.complete.call(elements, elements);\n\n                        if (promiseData) {\n                            promiseData.resolver(elements || element);\n                        }\n                    }\n\n                    opts.complete = function() {\n                        if (properties.reset) {\n                            for (var resetProperty in properties.reset) {\n                                var resetValue = properties.reset[resetProperty];\n\n                                /* Format each non-array value in the reset property map to [ value, value ] so that changes apply\n                                   immediately and DOM querying is avoided (via forcefeeding). */\n                                /* Note: Don't forcefeed hooks, otherwise their hook roots will be defaulted to their null values. */\n                                if (Velocity.CSS.Hooks.registered[resetProperty] === undefined && (typeof resetValue === \"string\" || typeof resetValue === \"number\")) {\n                                    properties.reset[resetProperty] = [ properties.reset[resetProperty], properties.reset[resetProperty] ];\n                                }\n                            }\n\n                            /* So that the reset values are applied instantly upon the next rAF tick, use a zero duration and parallel queueing. */\n                            var resetOptions = { duration: 0, queue: false };\n\n                            /* Since the reset option uses up the complete callback, we trigger the user's complete callback at the end of ours. */\n                            if (finalElement) {\n                                resetOptions.complete = injectFinalCallbacks;\n                            }\n\n                            Velocity.animate(element, properties.reset, resetOptions);\n                        /* Only trigger the user's complete callback on the last effect call with the last element in the set. */\n                        } else if (finalElement) {\n                            injectFinalCallbacks();\n                        }\n                    };\n\n                    if (redirectOptions.visibility === \"hidden\") {\n                        opts.visibility = redirectOptions.visibility;\n                    }\n                }\n\n                Velocity.animate(element, propertyMap, opts);\n            }\n        };\n\n        /* Return the Velocity object so that RegisterUI calls can be chained. */\n        return Velocity;\n    };\n\n    /*********************\n       Packaged Effects\n    *********************/\n\n    /* Externalize the packagedEffects data so that they can optionally be modified and re-registered. */\n    /* Support: <=IE8: Callouts will have no effect, and transitions will simply fade in/out. IE9/Android 2.3: Most effects are fully supported, the rest fade in/out. All other browsers: full support. */\n    Velocity.RegisterEffect.packagedEffects =\n        {\n            /* Animate.css */\n            \"callout.bounce\": {\n                defaultDuration: 550,\n                calls: [\n                    [ { translateY: -30 }, 0.25 ],\n                    [ { translateY: 0 }, 0.125 ],\n                    [ { translateY: -15 }, 0.125 ],\n                    [ { translateY: 0 }, 0.25 ]\n                ]\n            },\n            /* Animate.css */\n            \"callout.shake\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { translateX: -11 }, 0.125 ],\n                    [ { translateX: 11 }, 0.125 ],\n                    [ { translateX: -11 }, 0.125 ],\n                    [ { translateX: 11 }, 0.125 ],\n                    [ { translateX: -11 }, 0.125 ],\n                    [ { translateX: 11 }, 0.125 ],\n                    [ { translateX: -11 }, 0.125 ],\n                    [ { translateX: 0 }, 0.125 ]\n                ]\n            },\n            /* Animate.css */\n            \"callout.flash\": {\n                defaultDuration: 1100,\n                calls: [\n                    [ { opacity: [ 0, \"easeInOutQuad\", 1 ] }, 0.25 ],\n                    [ { opacity: [ 1, \"easeInOutQuad\" ] }, 0.25 ],\n                    [ { opacity: [ 0, \"easeInOutQuad\" ] }, 0.25 ],\n                    [ { opacity: [ 1, \"easeInOutQuad\" ] }, 0.25 ]\n                ]\n            },\n            /* Animate.css */\n            \"callout.pulse\": {\n                defaultDuration: 825,\n                calls: [\n                    [ { scaleX: 1.1, scaleY: 1.1 }, 0.50, { easing: \"easeInExpo\" } ],\n                    [ { scaleX: 1, scaleY: 1 }, 0.50 ]\n                ]\n            },\n            /* Animate.css */\n            \"callout.swing\": {\n                defaultDuration: 950,\n                calls: [\n                    [ { rotateZ: 15 }, 0.20 ],\n                    [ { rotateZ: -10 }, 0.20 ],\n                    [ { rotateZ: 5 }, 0.20 ],\n                    [ { rotateZ: -5 }, 0.20 ],\n                    [ { rotateZ: 0 }, 0.20 ]\n                ]\n            },\n            /* Animate.css */\n            \"callout.tada\": {\n                defaultDuration: 1000,\n                calls: [\n                    [ { scaleX: 0.9, scaleY: 0.9, rotateZ: -3 }, 0.10 ],\n                    [ { scaleX: 1.1, scaleY: 1.1, rotateZ: 3 }, 0.10 ],\n                    [ { scaleX: 1.1, scaleY: 1.1, rotateZ: -3 }, 0.10 ],\n                    [ \"reverse\", 0.125 ],\n                    [ \"reverse\", 0.125 ],\n                    [ \"reverse\", 0.125 ],\n                    [ \"reverse\", 0.125 ],\n                    [ \"reverse\", 0.125 ],\n                    [ { scaleX: 1, scaleY: 1, rotateZ: 0 }, 0.20 ]\n                ]\n            },\n            \"transition.fadeIn\": {\n                defaultDuration: 500,\n                calls: [\n                    [ { opacity: [ 1, 0 ] } ]\n                ]\n            },\n            \"transition.fadeOut\": {\n                defaultDuration: 500,\n                calls: [\n                    [ { opacity: [ 0, 1 ] } ]\n                ]\n            },\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipXIn\": {\n                defaultDuration: 700,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformPerspective: [ 800, 800 ], rotateY: [ 0, -55 ] } ]\n                ],\n                reset: { transformPerspective: 0 }\n            },\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipXOut\": {\n                defaultDuration: 700,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformPerspective: [ 800, 800 ], rotateY: 55 } ]\n                ],\n                reset: { transformPerspective: 0, rotateY: 0 }\n            },\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipYIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformPerspective: [ 800, 800 ], rotateX: [ 0, -45 ] } ]\n                ],\n                reset: { transformPerspective: 0 }\n            },\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipYOut\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformPerspective: [ 800, 800 ], rotateX: 25 } ]\n                ],\n                reset: { transformPerspective: 0, rotateX: 0 }\n            },\n            /* Animate.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipBounceXIn\": {\n                defaultDuration: 900,\n                calls: [\n                    [ { opacity: [ 0.725, 0 ], transformPerspective: [ 400, 400 ], rotateY: [ -10, 90 ] }, 0.50 ],\n                    [ { opacity: 0.80, rotateY: 10 }, 0.25 ],\n                    [ { opacity: 1, rotateY: 0 }, 0.25 ]\n                ],\n                reset: { transformPerspective: 0 }\n            },\n            /* Animate.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipBounceXOut\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 0.9, 1 ], transformPerspective: [ 400, 400 ], rotateY: -10 }, 0.50 ],\n                    [ { opacity: 0, rotateY: 90 }, 0.50 ]\n                ],\n                reset: { transformPerspective: 0, rotateY: 0 }\n            },\n            /* Animate.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipBounceYIn\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 0.725, 0 ], transformPerspective: [ 400, 400 ], rotateX: [ -10, 90 ] }, 0.50 ],\n                    [ { opacity: 0.80, rotateX: 10 }, 0.25 ],\n                    [ { opacity: 1, rotateX: 0 }, 0.25 ]\n                ],\n                reset: { transformPerspective: 0 }\n            },\n            /* Animate.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.flipBounceYOut\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 0.9, 1 ], transformPerspective: [ 400, 400 ], rotateX: -15 }, 0.50 ],\n                    [ { opacity: 0, rotateX: 90 }, 0.50 ]\n                ],\n                reset: { transformPerspective: 0, rotateX: 0 }\n            },\n            /* Magic.css */\n            \"transition.swoopIn\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformOriginX: [ \"100%\", \"50%\" ], transformOriginY: [ \"100%\", \"100%\" ], scaleX: [ 1, 0 ], scaleY: [ 1, 0 ], translateX: [ 0, -700 ], translateZ: 0 } ]\n                ],\n                reset: { transformOriginX: \"50%\", transformOriginY: \"50%\" }\n            },\n            /* Magic.css */\n            \"transition.swoopOut\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformOriginX: [ \"50%\", \"100%\" ], transformOriginY: [ \"100%\", \"100%\" ], scaleX: 0, scaleY: 0, translateX: -700, translateZ: 0 } ]\n                ],\n                reset: { transformOriginX: \"50%\", transformOriginY: \"50%\", scaleX: 1, scaleY: 1, translateX: 0 }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3. (Fades and scales only.) */\n            \"transition.whirlIn\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformOriginX: [ \"50%\", \"50%\" ], transformOriginY: [ \"50%\", \"50%\" ], scaleX: [ 1, 0 ], scaleY: [ 1, 0 ], rotateY: [ 0, 160 ] }, 1, { easing: \"easeInOutSine\" } ]\n                ]\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3. (Fades and scales only.) */\n            \"transition.whirlOut\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { opacity: [ 0, \"easeInOutQuint\", 1 ], transformOriginX: [ \"50%\", \"50%\" ], transformOriginY: [ \"50%\", \"50%\" ], scaleX: 0, scaleY: 0, rotateY: 160 }, 1, { easing: \"swing\" } ]\n                ],\n                reset: { scaleX: 1, scaleY: 1, rotateY: 0 }\n            },\n            \"transition.shrinkIn\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformOriginX: [ \"50%\", \"50%\" ], transformOriginY: [ \"50%\", \"50%\" ], scaleX: [ 1, 1.5 ], scaleY: [ 1, 1.5 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.shrinkOut\": {\n                defaultDuration: 600,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformOriginX: [ \"50%\", \"50%\" ], transformOriginY: [ \"50%\", \"50%\" ], scaleX: 1.3, scaleY: 1.3, translateZ: 0 } ]\n                ],\n                reset: { scaleX: 1, scaleY: 1 }\n            },\n            \"transition.expandIn\": {\n                defaultDuration: 700,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformOriginX: [ \"50%\", \"50%\" ], transformOriginY: [ \"50%\", \"50%\" ], scaleX: [ 1, 0.625 ], scaleY: [ 1, 0.625 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.expandOut\": {\n                defaultDuration: 700,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformOriginX: [ \"50%\", \"50%\" ], transformOriginY: [ \"50%\", \"50%\" ], scaleX: 0.5, scaleY: 0.5, translateZ: 0 } ]\n                ],\n                reset: { scaleX: 1, scaleY: 1 }\n            },\n            /* Animate.css */\n            \"transition.bounceIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], scaleX: [ 1.05, 0.3 ], scaleY: [ 1.05, 0.3 ] }, 0.40 ],\n                    [ { scaleX: 0.9, scaleY: 0.9, translateZ: 0 }, 0.20 ],\n                    [ { scaleX: 1, scaleY: 1 }, 0.50 ]\n                ]\n            },\n            /* Animate.css */\n            \"transition.bounceOut\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { scaleX: 0.95, scaleY: 0.95 }, 0.35 ],\n                    [ { scaleX: 1.1, scaleY: 1.1, translateZ: 0 }, 0.35 ],\n                    [ { opacity: [ 0, 1 ], scaleX: 0.3, scaleY: 0.3 }, 0.30 ]\n                ],\n                reset: { scaleX: 1, scaleY: 1 }\n            },\n            /* Animate.css */\n            \"transition.bounceUpIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateY: [ -30, 1000 ] }, 0.60, { easing: \"easeOutCirc\" } ],\n                    [ { translateY: 10 }, 0.20 ],\n                    [ { translateY: 0 }, 0.20 ]\n                ]\n            },\n            /* Animate.css */\n            \"transition.bounceUpOut\": {\n                defaultDuration: 1000,\n                calls: [\n                    [ { translateY: 20 }, 0.20 ],\n                    [ { opacity: [ 0, \"easeInCirc\", 1 ], translateY: -1000 }, 0.80 ]\n                ],\n                reset: { translateY: 0 }\n            },\n            /* Animate.css */\n            \"transition.bounceDownIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateY: [ 30, -1000 ] }, 0.60, { easing: \"easeOutCirc\" } ],\n                    [ { translateY: -10 }, 0.20 ],\n                    [ { translateY: 0 }, 0.20 ]\n                ]\n            },\n            /* Animate.css */\n            \"transition.bounceDownOut\": {\n                defaultDuration: 1000,\n                calls: [\n                    [ { translateY: -20 }, 0.20 ],\n                    [ { opacity: [ 0, \"easeInCirc\", 1 ], translateY: 1000 }, 0.80 ]\n                ],\n                reset: { translateY: 0 }\n            },\n            /* Animate.css */\n            \"transition.bounceLeftIn\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateX: [ 30, -1250 ] }, 0.60, { easing: \"easeOutCirc\" } ],\n                    [ { translateX: -10 }, 0.20 ],\n                    [ { translateX: 0 }, 0.20 ]\n                ]\n            },\n            /* Animate.css */\n            \"transition.bounceLeftOut\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { translateX: 30 }, 0.20 ],\n                    [ { opacity: [ 0, \"easeInCirc\", 1 ], translateX: -1250 }, 0.80 ]\n                ],\n                reset: { translateX: 0 }\n            },\n            /* Animate.css */\n            \"transition.bounceRightIn\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateX: [ -30, 1250 ] }, 0.60, { easing: \"easeOutCirc\" } ],\n                    [ { translateX: 10 }, 0.20 ],\n                    [ { translateX: 0 }, 0.20 ]\n                ]\n            },\n            /* Animate.css */\n            \"transition.bounceRightOut\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { translateX: -30 }, 0.20 ],\n                    [ { opacity: [ 0, \"easeInCirc\", 1 ], translateX: 1250 }, 0.80 ]\n                ],\n                reset: { translateX: 0 }\n            },\n            \"transition.slideUpIn\": {\n                defaultDuration: 900,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateY: [ 0, 20 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideUpOut\": {\n                defaultDuration: 900,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateY: -20, translateZ: 0 } ]\n                ],\n                reset: { translateY: 0 }\n            },\n            \"transition.slideDownIn\": {\n                defaultDuration: 900,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateY: [ 0, -20 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideDownOut\": {\n                defaultDuration: 900,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateY: 20, translateZ: 0 } ]\n                ],\n                reset: { translateY: 0 }\n            },\n            \"transition.slideLeftIn\": {\n                defaultDuration: 1000,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateX: [ 0, -20 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideLeftOut\": {\n                defaultDuration: 1050,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateX: -20, translateZ: 0 } ]\n                ],\n                reset: { translateX: 0 }\n            },\n            \"transition.slideRightIn\": {\n                defaultDuration: 1000,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateX: [ 0, 20 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideRightOut\": {\n                defaultDuration: 1050,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateX: 20, translateZ: 0 } ]\n                ],\n                reset: { translateX: 0 }\n            },\n            \"transition.slideUpBigIn\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateY: [ 0, 75 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideUpBigOut\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateY: -75, translateZ: 0 } ]\n                ],\n                reset: { translateY: 0 }\n            },\n            \"transition.slideDownBigIn\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateY: [ 0, -75 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideDownBigOut\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateY: 75, translateZ: 0 } ]\n                ],\n                reset: { translateY: 0 }\n            },\n            \"transition.slideLeftBigIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateX: [ 0, -75 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideLeftBigOut\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateX: -75, translateZ: 0 } ]\n                ],\n                reset: { translateX: 0 }\n            },\n            \"transition.slideRightBigIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], translateX: [ 0, 75 ], translateZ: 0 } ]\n                ]\n            },\n            \"transition.slideRightBigOut\": {\n                defaultDuration: 750,\n                calls: [\n                    [ { opacity: [ 0, 1 ], translateX: 75, translateZ: 0 } ]\n                ],\n                reset: { translateX: 0 }\n            },\n            /* Magic.css */\n            \"transition.perspectiveUpIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformPerspective: [ 800, 800 ], transformOriginX: [ 0, 0 ], transformOriginY: [ \"100%\", \"100%\" ], rotateX: [ 0, -180 ] } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\" }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.perspectiveUpOut\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformPerspective: [ 800, 800 ], transformOriginX: [ 0, 0 ], transformOriginY: [ \"100%\", \"100%\" ], rotateX: -180 } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\", rotateX: 0 }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.perspectiveDownIn\": {\n                defaultDuration: 800,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformPerspective: [ 800, 800 ], transformOriginX: [ 0, 0 ], transformOriginY: [ 0, 0 ], rotateX: [ 0, 180 ] } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\" }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.perspectiveDownOut\": {\n                defaultDuration: 850,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformPerspective: [ 800, 800 ], transformOriginX: [ 0, 0 ], transformOriginY: [ 0, 0 ], rotateX: 180 } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\", rotateX: 0 }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.perspectiveLeftIn\": {\n                defaultDuration: 950,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformPerspective: [ 2000, 2000 ], transformOriginX: [ 0, 0 ], transformOriginY: [ 0, 0 ], rotateY: [ 0, -180 ] } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\" }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.perspectiveLeftOut\": {\n                defaultDuration: 950,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformPerspective: [ 2000, 2000 ], transformOriginX: [ 0, 0 ], transformOriginY: [ 0, 0 ], rotateY: -180 } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\", rotateY: 0 }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.perspectiveRightIn\": {\n                defaultDuration: 950,\n                calls: [\n                    [ { opacity: [ 1, 0 ], transformPerspective: [ 2000, 2000 ], transformOriginX: [ \"100%\", \"100%\" ], transformOriginY: [ 0, 0 ], rotateY: [ 0, 180 ] } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\" }\n            },\n            /* Magic.css */\n            /* Support: Loses rotation in IE9/Android 2.3 (fades only). */\n            \"transition.perspectiveRightOut\": {\n                defaultDuration: 950,\n                calls: [\n                    [ { opacity: [ 0, 1 ], transformPerspective: [ 2000, 2000 ], transformOriginX: [ \"100%\", \"100%\" ], transformOriginY: [ 0, 0 ], rotateY: 180 } ]\n                ],\n                reset: { transformPerspective: 0, transformOriginX: \"50%\", transformOriginY: \"50%\", rotateY: 0 }\n            }\n        };\n\n    /* Register the packaged effects. */\n    for (var effectName in Velocity.RegisterEffect.packagedEffects) {\n        Velocity.RegisterEffect(effectName, Velocity.RegisterEffect.packagedEffects[effectName]);\n    }\n\n    /*********************\n       Sequence Running\n    **********************/\n\n    /* Note: Sequence calls must use Velocity's single-object arguments syntax. */\n    Velocity.RunSequence = function (originalSequence) {\n        var sequence = $.extend(true, [], originalSequence);\n\n        if (sequence.length > 1) {\n            $.each(sequence.reverse(), function(i, currentCall) {\n                var nextCall = sequence[i + 1];\n\n                if (nextCall) {\n                    /* Parallel sequence calls (indicated via sequenceQueue:false) are triggered\n                       in the previous call's begin callback. Otherwise, chained calls are normally triggered\n                       in the previous call's complete callback. */\n                    var currentCallOptions = currentCall.o || currentCall.options,\n                        nextCallOptions = nextCall.o || nextCall.options;\n\n                    var timing = (currentCallOptions && currentCallOptions.sequenceQueue === false) ? \"begin\" : \"complete\",\n                        callbackOriginal = nextCallOptions && nextCallOptions[timing],\n                        options = {};\n\n                    options[timing] = function() {\n                        var nextCallElements = nextCall.e || nextCall.elements;\n                        var elements = nextCallElements.nodeType ? [ nextCallElements ] : nextCallElements;\n\n                        callbackOriginal && callbackOriginal.call(elements, elements);\n                        Velocity(currentCall);\n                    }\n\n                    if (nextCall.o) {\n                        nextCall.o = $.extend({}, nextCallOptions, options);\n                    } else {\n                        nextCall.options = $.extend({}, nextCallOptions, options);\n                    }\n                }\n            });\n\n            sequence.reverse();\n        }\n\n        Velocity(sequence[0]);\n    };\n}((window.jQuery || window.Zepto || window), window, document);\n}));", "/*! Flight v1.5.2 | (c) Twitter, Inc. | MIT License */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"flight\"] = factory();\n\telse\n\t\troot[\"flight\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n    __webpack_require__(1),\n    __webpack_require__(2),\n    __webpack_require__(3),\n    __webpack_require__(4),\n    __webpack_require__(5),\n    __webpack_require__(6),\n    __webpack_require__(7)\n  ], __WEBPACK_AMD_DEFINE_RESULT__ = function(advice, component, compose, debug, logger, registry, utils) {\n    'use strict';\n\n    return {\n      advice: advice,\n      component: component,\n      compose: compose,\n      debug: debug,\n      logger: logger,\n      registry: registry,\n      utils: utils\n    };\n\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n    __webpack_require__(7)\n  ], __WEBPACK_AMD_DEFINE_RESULT__ = function(utils) {\n    'use strict';\n\n    var advice = {\n\n      around: function(base, wrapped) {\n        return function composedAround() {\n          // unpacking arguments by hand benchmarked faster\n          var i = 0, l = arguments.length, args = new Array(l + 1);\n          args[0] = base.bind(this);\n          for (; i < l; i++) {\n            args[i + 1] = arguments[i];\n          }\n          return wrapped.apply(this, args);\n        };\n      },\n\n      before: function(base, before) {\n        var beforeFn = (typeof before == 'function') ? before : before.obj[before.fnName];\n        return function composedBefore() {\n          beforeFn.apply(this, arguments);\n          return base.apply(this, arguments);\n        };\n      },\n\n      after: function(base, after) {\n        var afterFn = (typeof after == 'function') ? after : after.obj[after.fnName];\n        return function composedAfter() {\n          var res = (base.unbound || base).apply(this, arguments);\n          afterFn.apply(this, arguments);\n          return res;\n        };\n      },\n\n      // a mixin that allows other mixins to augment existing functions by adding additional\n      // code before, after or around.\n      withAdvice: function() {\n        ['before', 'after', 'around'].forEach(function(m) {\n          this[m] = function(method, fn) {\n            var methods = method.trim().split(' ');\n\n            methods.forEach(function(i) {\n              utils.mutateProperty(this, i, function() {\n                if (typeof this[i] == 'function') {\n                  this[i] = advice[m](this[i], fn);\n                } else {\n                  this[i] = fn;\n                }\n\n                return this[i];\n              });\n            }, this);\n          };\n        }, this);\n      }\n    };\n\n    return advice;\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n    __webpack_require__(1),\n    __webpack_require__(7),\n    __webpack_require__(3),\n    __webpack_require__(8),\n    __webpack_require__(6),\n    __webpack_require__(5),\n    __webpack_require__(4)\n  ], __WEBPACK_AMD_DEFINE_RESULT__ = function(advice, utils, compose, withBase, registry, withLogging, debug) {\n    'use strict';\n\n    var functionNameRegEx = /function (.*?)\\s?\\(/;\n    var ignoredMixin = {\n      withBase: true,\n      withLogging: true\n    };\n\n    // teardown for all instances of this constructor\n    function teardownAll() {\n      var componentInfo = registry.findComponentInfo(this);\n\n      componentInfo && Object.keys(componentInfo.instances).forEach(function(k) {\n        var info = componentInfo.instances[k];\n        // It's possible that a previous teardown caused another component to teardown,\n        // so we can't assume that the instances object is as it was.\n        if (info && info.instance) {\n          info.instance.teardown();\n        }\n      });\n    }\n\n    function attachTo(selector/*, options args */) {\n      // unpacking arguments by hand benchmarked faster\n      var l = arguments.length;\n      var args = new Array(l - 1);\n      for (var i = 1; i < l; i++) {\n        args[i - 1] = arguments[i];\n      }\n\n      if (!selector) {\n        throw new Error('Component needs to be attachTo\\'d a jQuery object, native node or selector string');\n      }\n\n      var options = utils.merge.apply(utils, args);\n      var componentInfo = registry.findComponentInfo(this);\n\n      $(selector).each(function(i, node) {\n        if (componentInfo && componentInfo.isAttachedTo(node)) {\n          // already attached\n          return;\n        }\n\n        (new this).initialize(node, options);\n      }.bind(this));\n    }\n\n    function prettyPrintMixins() {\n      //could be called from constructor or constructor.prototype\n      var mixedIn = this.mixedIn || this.prototype.mixedIn || [];\n      return mixedIn.map(function(mixin) {\n        if (mixin.name == null) {\n          // function name property not supported by this browser, use regex\n          var m = mixin.toString().match(functionNameRegEx);\n          return (m && m[1]) ? m[1] : '';\n        }\n        return (!ignoredMixin[mixin.name] ? mixin.name : '');\n      }).filter(Boolean).join(', ');\n    };\n\n\n    // define the constructor for a custom component type\n    // takes an unlimited number of mixin functions as arguments\n    // typical api call with 3 mixins: defineComponent(timeline, withTweetCapability, withScrollCapability);\n    function defineComponent(/*mixins*/) {\n      // unpacking arguments by hand benchmarked faster\n      var l = arguments.length;\n      var mixins = new Array(l);\n      for (var i = 0; i < l; i++) {\n        mixins[i] = arguments[i];\n      }\n\n      var Component = function() {};\n\n      Component.toString = Component.prototype.toString = prettyPrintMixins;\n      if (debug.enabled) {\n        Component.describe = Component.prototype.describe = Component.toString();\n      }\n\n      // 'options' is optional hash to be merged with 'defaults' in the component definition\n      Component.attachTo = attachTo;\n      // enables extension of existing \"base\" Components\n      Component.mixin = function() {\n        var newComponent = defineComponent(); //TODO: fix pretty print\n        var newPrototype = Object.create(Component.prototype);\n        newPrototype.mixedIn = [].concat(Component.prototype.mixedIn);\n        newPrototype.defaults = utils.merge(Component.prototype.defaults);\n        newPrototype.attrDef = Component.prototype.attrDef;\n        compose.mixin(newPrototype, arguments);\n        newComponent.prototype = newPrototype;\n        newComponent.prototype.constructor = newComponent;\n        return newComponent;\n      };\n      Component.teardownAll = teardownAll;\n\n      // prepend common mixins to supplied list, then mixin all flavors\n      if (debug.enabled) {\n        mixins.unshift(withLogging);\n      }\n      mixins.unshift(withBase, advice.withAdvice, registry.withRegistration);\n      compose.mixin(Component.prototype, mixins);\n\n      return Component;\n    }\n\n    defineComponent.teardownAll = function() {\n      registry.components.slice().forEach(function(c) {\n        c.component.teardownAll();\n      });\n      registry.reset();\n    };\n\n    return defineComponent;\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n    __webpack_require__(7)\n  ], __WEBPACK_AMD_DEFINE_RESULT__ = function(utils) {\n    'use strict';\n\n    var dontLock = ['mixedIn', 'attrDef'];\n\n    function setWritability(obj, writable) {\n      Object.keys(obj).forEach(function (key) {\n        if (dontLock.indexOf(key) < 0) {\n          utils.propertyWritability(obj, key, writable);\n        }\n      });\n    }\n\n    function mixin(base, mixins) {\n      base.mixedIn = Object.prototype.hasOwnProperty.call(base, 'mixedIn') ? base.mixedIn : [];\n\n      for (var i = 0; i < mixins.length; i++) {\n        if (base.mixedIn.indexOf(mixins[i]) == -1) {\n          setWritability(base, false);\n          mixins[i].call(base);\n          base.mixedIn.push(mixins[i]);\n        }\n      }\n\n      setWritability(base, true);\n    }\n\n    return {\n      mixin: mixin\n    };\n\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(6)], __WEBPACK_AMD_DEFINE_RESULT__ = function(registry) {\n    'use strict';\n\n    // ==========================================\n    // Search object model\n    // ==========================================\n\n    function traverse(util, searchTerm, options) {\n      options = options || {};\n      var obj = options.obj || window;\n      var path = options.path || ((obj == window) ? 'window' : '');\n      var props = Object.keys(obj);\n      props.forEach(function(prop) {\n        if ((tests[util] || util)(searchTerm, obj, prop)) {\n          console.log([path, '.', prop].join(''), '->', ['(', typeof obj[prop], ')'].join(''), obj[prop]);\n        }\n        if (Object.prototype.toString.call(obj[prop]) == '[object Object]' && (obj[prop] != obj) && path.split('.').indexOf(prop) == -1) {\n          traverse(util, searchTerm, {obj: obj[prop], path: [path,prop].join('.')});\n        }\n      });\n    }\n\n    function search(util, expected, searchTerm, options) {\n      if (!expected || typeof searchTerm == expected) {\n        traverse(util, searchTerm, options);\n      } else {\n        console.error([searchTerm, 'must be', expected].join(' '));\n      }\n    }\n\n    var tests = {\n      'name': function(searchTerm, obj, prop) {return searchTerm == prop;},\n      'nameContains': function(searchTerm, obj, prop) {return prop.indexOf(searchTerm) > -1;},\n      'type': function(searchTerm, obj, prop) {return obj[prop] instanceof searchTerm;},\n      'value': function(searchTerm, obj, prop) {return obj[prop] === searchTerm;},\n      'valueCoerced': function(searchTerm, obj, prop) {return obj[prop] == searchTerm;}\n    };\n\n    function byName(searchTerm, options) {search('name', 'string', searchTerm, options);}\n    function byNameContains(searchTerm, options) {search('nameContains', 'string', searchTerm, options);}\n    function byType(searchTerm, options) {search('type', 'function', searchTerm, options);}\n    function byValue(searchTerm, options) {search('value', null, searchTerm, options);}\n    function byValueCoerced(searchTerm, options) {search('valueCoerced', null, searchTerm, options);}\n    function custom(fn, options) {traverse(fn, null, options);}\n\n    // ==========================================\n    // Event logging\n    // ==========================================\n\n    var ALL = 'all'; //no filter\n\n    //log nothing by default\n    var logFilter = {\n      eventNames: [],\n      actions: []\n    }\n\n    function filterEventLogsByAction(/*actions*/) {\n      var actions = [].slice.call(arguments);\n\n      logFilter.eventNames.length || (logFilter.eventNames = ALL);\n      logFilter.actions = actions.length ? actions : ALL;\n      saveLogFilter();\n    }\n\n    function filterEventLogsByName(/*eventNames*/) {\n      var eventNames = [].slice.call(arguments);\n\n      logFilter.actions.length || (logFilter.actions = ALL);\n      logFilter.eventNames = eventNames.length ? eventNames : ALL;\n      saveLogFilter();\n    }\n\n    function hideAllEventLogs() {\n      logFilter.actions = [];\n      logFilter.eventNames = [];\n      saveLogFilter();\n    }\n\n    function showAllEventLogs() {\n      logFilter.actions = ALL;\n      logFilter.eventNames = ALL;\n      saveLogFilter();\n    }\n\n    function saveLogFilter() {\n      try {\n        if (window.localStorage) {\n          localStorage.setItem('logFilter_eventNames', logFilter.eventNames);\n          localStorage.setItem('logFilter_actions', logFilter.actions);\n        }\n      } catch (ignored) {};\n    }\n\n    function retrieveLogFilter() {\n      var eventNames, actions;\n      try {\n        eventNames = (window.localStorage && localStorage.getItem('logFilter_eventNames'));\n        actions = (window.localStorage && localStorage.getItem('logFilter_actions'));\n      } catch (ignored) {\n        return;\n      }\n      eventNames && (logFilter.eventNames = eventNames);\n      actions && (logFilter.actions = actions);\n\n      // reconstitute arrays in place\n      Object.keys(logFilter).forEach(function(k) {\n        var thisProp = logFilter[k];\n        if (typeof thisProp == 'string' && thisProp !== ALL) {\n          logFilter[k] = thisProp ? thisProp.split(',') : [];\n        }\n      });\n    }\n\n    return {\n\n      enable: function(enable) {\n        this.enabled = !!enable;\n\n        if (enable && window.console) {\n          console.info('Booting in DEBUG mode');\n          console.info('You can configure event logging with DEBUG.events.logAll()/logNone()/logByName()/logByAction()');\n        }\n\n        retrieveLogFilter();\n\n        window.DEBUG = this;\n      },\n\n      warn: function (/*messages*/) {\n        if (!window.console) { return; }\n        var fn = (console.warn || console.log);\n        var messages = [].slice.call(arguments);\n        messages.unshift(this.toString() + ':')\n        fn.apply(console, messages);\n      },\n\n      registry: registry,\n\n      find: {\n        byName: byName,\n        byNameContains: byNameContains,\n        byType: byType,\n        byValue: byValue,\n        byValueCoerced: byValueCoerced,\n        custom: custom\n      },\n\n      events: {\n        logFilter: logFilter,\n\n        // Accepts any number of action args\n        // e.g. DEBUG.events.logByAction(\"on\", \"off\")\n        logByAction: filterEventLogsByAction,\n\n        // Accepts any number of event name args (inc. regex or wildcards)\n        // e.g. DEBUG.events.logByName(/ui.*/, \"*Thread*\");\n        logByName: filterEventLogsByName,\n\n        logAll: showAllEventLogs,\n        logNone: hideAllEventLogs\n      }\n    };\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n    __webpack_require__(7)\n  ], __WEBPACK_AMD_DEFINE_RESULT__ = function(utils) {\n    'use strict';\n\n    var actionSymbols = {\n      on: '<-',\n      trigger: '->',\n      off: 'x '\n    };\n\n    function elemToString(elem) {\n      var tagStr = elem.tagName ? elem.tagName.toLowerCase() : elem.toString();\n      var classStr = elem.className ? '.' + (elem.className) : '';\n      var result = tagStr + classStr;\n      return elem.tagName ? ['\\'', '\\''].join(result) : result;\n    }\n\n    function log(action, component, eventArgs) {\n      if (!window.DEBUG || !window.DEBUG.enabled) {\n        return;\n      }\n      var name, eventType, elem, fn, payload, logFilter, toRegExp, actionLoggable, nameLoggable, info;\n\n      if (typeof eventArgs[eventArgs.length - 1] == 'function') {\n        fn = eventArgs.pop();\n        fn = fn.unbound || fn; // use unbound version if any (better info)\n      }\n\n      if (eventArgs.length == 1) {\n        elem = component.$node[0];\n        eventType = eventArgs[0];\n      } else if ((eventArgs.length == 2) && typeof eventArgs[1] == 'object' && !eventArgs[1].type) {\n        //2 args, first arg is not elem\n        elem = component.$node[0];\n        eventType = eventArgs[0];\n        if (action == \"trigger\") {\n          payload = eventArgs[1];\n        }\n      } else {\n        //2+ args, first arg is elem\n        elem = eventArgs[0];\n        eventType = eventArgs[1];\n        if (action == \"trigger\") {\n          payload = eventArgs[2];\n        }\n      }\n\n      name = typeof eventType == 'object' ? eventType.type : eventType;\n\n      logFilter = window.DEBUG.events.logFilter;\n\n      // no regex for you, actions...\n      actionLoggable = logFilter.actions == 'all' || (logFilter.actions.indexOf(action) > -1);\n      // event name filter allow wildcards or regex...\n      toRegExp = function(expr) {\n        return expr.test ? expr : new RegExp('^' + expr.replace(/\\*/g, '.*') + '$');\n      };\n      nameLoggable =\n        logFilter.eventNames == 'all' ||\n        logFilter.eventNames.some(function(e) {return toRegExp(e).test(name);});\n\n      if (actionLoggable && nameLoggable) {\n        info = [actionSymbols[action], action, '[' + name + ']'];\n        payload && info.push(payload);\n        info.push(elemToString(elem));\n        info.push(component.constructor.describe.split(' ').slice(0,3).join(' '));\n        console.groupCollapsed && action == 'trigger' && console.groupCollapsed(action, name);\n        // IE9 doesn't define `apply` for console methods, but this works everywhere:\n        Function.prototype.apply.call(console.info, console, info);\n      }\n    }\n\n    function withLogging() {\n      this.before('trigger', function() {\n        log('trigger', this, utils.toArray(arguments));\n      });\n      if (console.groupCollapsed) {\n        this.after('trigger', function() {\n          console.groupEnd();\n        });\n      }\n      this.before('on', function() {\n        log('on', this, utils.toArray(arguments));\n      });\n      this.before('off', function() {\n        log('off', this, utils.toArray(arguments));\n      });\n    }\n\n    return withLogging;\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n    'use strict';\n\n    function parseEventArgs(instance, args) {\n      var element, type, callback;\n      var end = args.length;\n\n      if (typeof args[end - 1] == 'function') {\n        end -= 1;\n        callback = args[end];\n      }\n\n      if (typeof args[end - 1] == 'object') {\n        end -= 1;\n      }\n\n      if (end == 2) {\n        element = args[0];\n        type = args[1];\n      } else {\n        element = instance.node;\n        type = args[0];\n      }\n\n      return {\n        element: element,\n        type: type,\n        callback: callback\n      };\n    }\n\n    function matchEvent(a, b) {\n      return (\n        (a.element == b.element) &&\n        (a.type == b.type) &&\n        (b.callback == null || (a.callback == b.callback))\n      );\n    }\n\n    function Registry() {\n\n      var registry = this;\n\n      (this.reset = function() {\n        this.components = [];\n        this.allInstances = {};\n        this.events = [];\n      }).call(this);\n\n      function ComponentInfo(component) {\n        this.component = component;\n        this.attachedTo = [];\n        this.instances = {};\n\n        this.addInstance = function(instance) {\n          var instanceInfo = new InstanceInfo(instance);\n          this.instances[instance.identity] = instanceInfo;\n          this.attachedTo.push(instance.node);\n\n          return instanceInfo;\n        };\n\n        this.removeInstance = function(instance) {\n          delete this.instances[instance.identity];\n          var indexOfNode = this.attachedTo.indexOf(instance.node);\n          (indexOfNode > -1) && this.attachedTo.splice(indexOfNode, 1);\n\n          if (!Object.keys(this.instances).length) {\n            //if I hold no more instances remove me from registry\n            registry.removeComponentInfo(this);\n          }\n        };\n\n        this.isAttachedTo = function(node) {\n          return this.attachedTo.indexOf(node) > -1;\n        };\n      }\n\n      function InstanceInfo(instance) {\n        this.instance = instance;\n        this.events = [];\n\n        this.addBind = function(event) {\n          this.events.push(event);\n          registry.events.push(event);\n        };\n\n        this.removeBind = function(event) {\n          for (var i = 0, e; e = this.events[i]; i++) {\n            if (matchEvent(e, event)) {\n              this.events.splice(i, 1);\n            }\n          }\n        };\n      }\n\n      this.addInstance = function(instance) {\n        var component = this.findComponentInfo(instance);\n\n        if (!component) {\n          component = new ComponentInfo(instance.constructor);\n          this.components.push(component);\n        }\n\n        var inst = component.addInstance(instance);\n\n        this.allInstances[instance.identity] = inst;\n\n        return component;\n      };\n\n      this.removeInstance = function(instance) {\n        //remove from component info\n        var componentInfo = this.findComponentInfo(instance);\n        componentInfo && componentInfo.removeInstance(instance);\n\n        //remove from registry\n        delete this.allInstances[instance.identity];\n      };\n\n      this.removeComponentInfo = function(componentInfo) {\n        var index = this.components.indexOf(componentInfo);\n        (index > -1) && this.components.splice(index, 1);\n      };\n\n      this.findComponentInfo = function(which) {\n        var component = which.attachTo ? which : which.constructor;\n\n        for (var i = 0, c; c = this.components[i]; i++) {\n          if (c.component === component) {\n            return c;\n          }\n        }\n\n        return null;\n      };\n\n      this.findInstanceInfo = function(instance) {\n        return this.allInstances[instance.identity] || null;\n      };\n\n      this.getBoundEventNames = function(instance) {\n        return this.findInstanceInfo(instance).events.map(function(ev) {\n          return ev.type;\n        });\n      };\n\n      this.findInstanceInfoByNode = function(node) {\n        var result = [];\n        Object.keys(this.allInstances).forEach(function(k) {\n          var thisInstanceInfo = this.allInstances[k];\n          if (thisInstanceInfo.instance.node === node) {\n            result.push(thisInstanceInfo);\n          }\n        }, this);\n        return result;\n      };\n\n      this.on = function(componentOn) {\n        var instance = registry.findInstanceInfo(this), boundCallback;\n\n        // unpacking arguments by hand benchmarked faster\n        var l = arguments.length, i = 1;\n        var otherArgs = new Array(l - 1);\n        for (; i < l; i++) {\n          otherArgs[i - 1] = arguments[i];\n        }\n\n        if (instance) {\n          boundCallback = componentOn.apply(null, otherArgs);\n          if (boundCallback) {\n            otherArgs[otherArgs.length - 1] = boundCallback;\n          }\n          var event = parseEventArgs(this, otherArgs);\n          instance.addBind(event);\n        }\n      };\n\n      this.off = function(/*el, type, callback*/) {\n        var event = parseEventArgs(this, arguments),\n            instance = registry.findInstanceInfo(this);\n\n        if (instance) {\n          instance.removeBind(event);\n        }\n\n        //remove from global event registry\n        for (var i = 0, e; e = registry.events[i]; i++) {\n          if (matchEvent(e, event)) {\n            registry.events.splice(i, 1);\n          }\n        }\n      };\n\n      // debug tools may want to add advice to trigger\n      registry.trigger = function() {};\n\n      this.teardown = function() {\n        registry.removeInstance(this);\n      };\n\n      this.withRegistration = function() {\n        this.after('initialize', function() {\n          registry.addInstance(this);\n        });\n\n        this.around('on', registry.on);\n        this.after('off', registry.off);\n        //debug tools may want to add advice to trigger\n        window.DEBUG && (false).enabled && this.after('trigger', registry.trigger);\n        this.after('teardown', {obj: registry, fnName: 'teardown'});\n      };\n\n    }\n\n    return new Registry;\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(4)], __WEBPACK_AMD_DEFINE_RESULT__ = function(debug) {\n    'use strict';\n\n    var DEFAULT_INTERVAL = 100;\n\n    function canWriteProtect() {\n      var writeProtectSupported = debug.enabled && !Object.propertyIsEnumerable('getOwnPropertyDescriptor');\n      if (writeProtectSupported) {\n        //IE8 getOwnPropertyDescriptor is built-in but throws exeption on non DOM objects\n        try {\n          Object.getOwnPropertyDescriptor(Object, 'keys');\n        } catch (e) {\n         return false;\n        }\n      }\n\n      return writeProtectSupported;\n    }\n\n    var utils = {\n\n      isDomObj: function(obj) {\n        return !!(obj.nodeType || (obj === window));\n      },\n\n      toArray: function(obj, from) {\n        from = from || 0;\n        var len = obj.length, arr = new Array(len - from);\n        for (var i = from; i < len; i++) {\n          arr[i - from] = obj[i];\n        }\n        return arr;\n      },\n\n      // returns new object representing multiple objects merged together\n      // optional final argument is boolean which specifies if merge is recursive\n      // original objects are unmodified\n      //\n      // usage:\n      //   var base = {a:2, b:6};\n      //   var extra = {b:3, c:4};\n      //   merge(base, extra); //{a:2, b:3, c:4}\n      //   base; //{a:2, b:6}\n      //\n      //   var base = {a:2, b:6};\n      //   var extra = {b:3, c:4};\n      //   var extraExtra = {a:4, d:9};\n      //   merge(base, extra, extraExtra); //{a:4, b:3, c:4. d: 9}\n      //   base; //{a:2, b:6}\n      //\n      //   var base = {a:2, b:{bb:4, cc:5}};\n      //   var extra = {a:4, b:{cc:7, dd:1}};\n      //   merge(base, extra, true); //{a:4, b:{bb:4, cc:7, dd:1}}\n      //   base; //{a:2, b:{bb:4, cc:5}};\n\n      merge: function(/*obj1, obj2,....deepCopy*/) {\n        // unpacking arguments by hand benchmarked faster\n        var l = arguments.length,\n            args = new Array(l + 1);\n\n        if (l === 0) {\n          return {};\n        }\n\n        for (var i = 0; i < l; i++) {\n          args[i + 1] = arguments[i];\n        }\n\n        //start with empty object so a copy is created\n        args[0] = {};\n\n        if (args[args.length - 1] === true) {\n          //jquery extend requires deep copy as first arg\n          args.pop();\n          args.unshift(true);\n        }\n\n        return $.extend.apply(undefined, args);\n      },\n\n      // updates base in place by copying properties of extra to it\n      // optionally clobber protected\n      // usage:\n      //   var base = {a:2, b:6};\n      //   var extra = {c:4};\n      //   push(base, extra); //{a:2, b:6, c:4}\n      //   base; //{a:2, b:6, c:4}\n      //\n      //   var base = {a:2, b:6};\n      //   var extra = {b: 4 c:4};\n      //   push(base, extra, true); //Error (\"utils.push attempted to overwrite 'b' while running in protected mode\")\n      //   base; //{a:2, b:6}\n      //\n      // objects with the same key will merge recursively when protect is false\n      // eg:\n      // var base = {a:16, b:{bb:4, cc:10}};\n      // var extra = {b:{cc:25, dd:19}, c:5};\n      // push(base, extra); //{a:16, {bb:4, cc:25, dd:19}, c:5}\n      //\n      push: function(base, extra, protect) {\n        if (base) {\n          Object.keys(extra || {}).forEach(function(key) {\n            if (base[key] && protect) {\n              throw new Error('utils.push attempted to overwrite \"' + key + '\" while running in protected mode');\n            }\n\n            if (typeof base[key] == 'object' && typeof extra[key] == 'object') {\n              // recurse\n              this.push(base[key], extra[key]);\n            } else {\n              // no protect, so extra wins\n              base[key] = extra[key];\n            }\n          }, this);\n        }\n\n        return base;\n      },\n\n      // If obj.key points to an enumerable property, return its value\n      // If obj.key points to a non-enumerable property, return undefined\n      getEnumerableProperty: function(obj, key) {\n        return obj.propertyIsEnumerable(key) ? obj[key] : undefined;\n      },\n\n      // build a function from other function(s)\n      // utils.compose(a,b,c) -> a(b(c()));\n      // implementation lifted from underscore.js (c) 2009-2012 Jeremy Ashkenas\n      compose: function() {\n        var funcs = arguments;\n\n        return function() {\n          var args = arguments;\n\n          for (var i = funcs.length - 1; i >= 0; i--) {\n            args = [funcs[i].apply(this, args)];\n          }\n\n          return args[0];\n        };\n      },\n\n      // Can only unique arrays of homogeneous primitives, e.g. an array of only strings, an array of only booleans, or an array of only numerics\n      uniqueArray: function(array) {\n        var u = {}, a = [];\n\n        for (var i = 0, l = array.length; i < l; ++i) {\n          if (u.hasOwnProperty(array[i])) {\n            continue;\n          }\n\n          a.push(array[i]);\n          u[array[i]] = 1;\n        }\n\n        return a;\n      },\n\n      debounce: function(func, wait, immediate) {\n        if (typeof wait != 'number') {\n          wait = DEFAULT_INTERVAL;\n        }\n\n        var timeout, result;\n\n        return function() {\n          var context = this, args = arguments;\n          var later = function() {\n            timeout = null;\n            if (!immediate) {\n              result = func.apply(context, args);\n            }\n          };\n          var callNow = immediate && !timeout;\n\n          timeout && clearTimeout(timeout);\n          timeout = setTimeout(later, wait);\n\n          if (callNow) {\n            result = func.apply(context, args);\n          }\n\n          return result;\n        };\n      },\n\n      throttle: function(func, wait) {\n        if (typeof wait != 'number') {\n          wait = DEFAULT_INTERVAL;\n        }\n\n        var context, args, timeout, throttling, more, result;\n        var whenDone = this.debounce(function() {\n          more = throttling = false;\n        }, wait);\n\n        return function() {\n          context = this; args = arguments;\n          var later = function() {\n            timeout = null;\n            if (more) {\n              result = func.apply(context, args);\n            }\n            whenDone();\n          };\n\n          if (!timeout) {\n            timeout = setTimeout(later, wait);\n          }\n\n          if (throttling) {\n            more = true;\n          } else {\n            throttling = true;\n            result = func.apply(context, args);\n          }\n\n          whenDone();\n          return result;\n        };\n      },\n\n      countThen: function(num, base) {\n        return function() {\n          if (!--num) { return base.apply(this, arguments); }\n        };\n      },\n\n      delegate: function(rules) {\n        return function(e, data) {\n          var target = $(e.target), parent;\n\n          Object.keys(rules).forEach(function(selector) {\n            if (!e.isPropagationStopped() && (parent = target.closest(selector)).length) {\n              data = data || {};\n              e.currentTarget = data.el = parent[0];\n              return rules[selector].apply(this, [e, data]);\n            }\n          }, this);\n        };\n      },\n\n      // ensures that a function will only be called once.\n      // usage:\n      // will only create the application once\n      //   var initialize = utils.once(createApplication)\n      //     initialize();\n      //     initialize();\n      //\n      // will only delete a record once\n      //   var myHanlder = function () {\n      //     $.ajax({type: 'DELETE', url: 'someurl.com', data: {id: 1}});\n      //   };\n      //   this.on('click', utils.once(myHandler));\n      //\n      once: function(func) {\n        var ran, result;\n\n        return function() {\n          if (ran) {\n            return result;\n          }\n\n          ran = true;\n          result = func.apply(this, arguments);\n\n          return result;\n        };\n      },\n\n      propertyWritability: function(obj, prop, writable) {\n        if (canWriteProtect() && obj.hasOwnProperty(prop)) {\n          Object.defineProperty(obj, prop, { writable: writable });\n        }\n      },\n\n      // Property locking/unlocking\n      mutateProperty: function(obj, prop, op) {\n        var writable;\n\n        if (!canWriteProtect() || !obj.hasOwnProperty(prop)) {\n          op.call(obj);\n          return;\n        }\n\n        writable = Object.getOwnPropertyDescriptor(obj, prop).writable;\n\n        Object.defineProperty(obj, prop, { writable: true });\n        op.call(obj);\n        Object.defineProperty(obj, prop, { writable: writable });\n\n      }\n\n    };\n\n    return utils;\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* Copyright 2013 Twitter, Inc. Licensed under The MIT License. http://opensource.org/licenses/MIT */\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n    __webpack_require__(7),\n    __webpack_require__(6),\n    __webpack_require__(4)\n  ], __WEBPACK_AMD_DEFINE_RESULT__ = function(utils, registry, debug) {\n    'use strict';\n\n    // common mixin allocates basic functionality - used by all component prototypes\n    // callback context is bound to component\n    var componentId = 0;\n\n    function teardownInstance(instanceInfo) {\n      if (!instanceInfo) { return; }\n\n      instanceInfo.events.slice().forEach(function(event) {\n        var args = [event.type];\n\n        event.element && args.unshift(event.element);\n        (typeof event.callback == 'function') && args.push(event.callback);\n\n        this.off.apply(this, args);\n      }, instanceInfo.instance);\n    }\n\n    function checkSerializable(type, data) {\n      try {\n        window.postMessage(data, '*');\n      } catch (e) {\n        debug.warn.call(this, [\n          'Event \"', type, '\" was triggered with non-serializable data. ',\n          'Flight recommends you avoid passing non-serializable data in events.'\n        ].join(''));\n      }\n    }\n\n    function warnAboutReferenceType(key) {\n      debug.warn.call(this, [\n        'Attribute \"', key, '\" defaults to an array or object. ',\n        'Enclose this in a function to avoid sharing between component instances.'\n      ].join(''));\n    }\n\n    function initAttributes(attrs) {\n      var definedKeys = [], incomingKeys;\n\n      this.attr = new this.attrDef;\n\n      if (debug.enabled && window.console) {\n        for (var key in this.attrDef.prototype) {\n          definedKeys.push(key);\n        }\n        incomingKeys = Object.keys(attrs);\n\n        for (var i = incomingKeys.length - 1; i >= 0; i--) {\n          if (definedKeys.indexOf(incomingKeys[i]) == -1) {\n            debug.warn.call(this, 'Passed unused attribute \"' + incomingKeys[i] + '\".');\n            break;\n          }\n        }\n      }\n\n      for (var key in this.attrDef.prototype) {\n        if (typeof attrs[key] == 'undefined') {\n          if (this.attr[key] === null) {\n            throw new Error('Required attribute \"' + key +\n                            '\" not specified in attachTo for component \"' + this.toString() + '\".');\n          }\n          // Warn about reference types in attributes\n          if (debug.enabled && typeof this.attr[key] === 'object') {\n            warnAboutReferenceType.call(this, key);\n          }\n        } else {\n          this.attr[key] = attrs[key];\n        }\n\n        if (typeof this.attr[key] == 'function') {\n          this.attr[key] = this.attr[key].call(this);\n        }\n      }\n\n    }\n\n    function initDeprecatedAttributes(attrs) {\n      if (debug.enabled) {\n        debug.warn.call(this, 'defaultAttrs will be removed in a future version. Please use attributes.');\n      }\n\n      // merge defaults with supplied options\n      // put options in attr.__proto__ to avoid merge overhead\n      var attr = Object.create(attrs);\n\n      for (var key in this.defaults) {\n        if (!attrs.hasOwnProperty(key)) {\n          attr[key] = this.defaults[key];\n          // Warn about reference types in defaultAttrs\n          if (debug.enabled && typeof this.defaults[key] === 'object') {\n            warnAboutReferenceType.call(this, key);\n          }\n        }\n      }\n\n      this.attr = attr;\n\n      Object.keys(this.defaults || {}).forEach(function(key) {\n        if (this.defaults[key] === null && this.attr[key] === null) {\n          throw new Error('Required attribute \"' + key +\n                          '\" not specified in attachTo for component \"' + this.toString() + '\".');\n        }\n      }, this);\n    }\n\n    function proxyEventTo(targetEvent) {\n      return function(e, data) {\n        $(e.target).trigger(targetEvent, data);\n      };\n    }\n\n    function withBase() {\n\n      // delegate trigger, bind and unbind to an element\n      // if $element not supplied, use component's node\n      // other arguments are passed on\n      // event can be either a string specifying the type\n      // of the event, or a hash specifying both the type\n      // and a default function to be called.\n      this.trigger = function() {\n        var $element, type, data, event, defaultFn;\n        var lastIndex = arguments.length - 1, lastArg = arguments[lastIndex];\n\n        if (typeof lastArg != 'string' && !(lastArg && lastArg.defaultBehavior)) {\n          lastIndex--;\n          data = lastArg;\n        }\n\n        if (lastIndex == 1) {\n          $element = $(arguments[0]);\n          event = arguments[1];\n        } else {\n          $element = this.$node;\n          event = arguments[0];\n        }\n\n        if (event.defaultBehavior) {\n          defaultFn = event.defaultBehavior;\n          event = $.Event(event.type);\n        }\n\n        type = event.type || event;\n\n        if (debug.enabled && window.postMessage) {\n          checkSerializable.call(this, type, data);\n        }\n\n        if (typeof this.attr.eventData == 'object') {\n          data = $.extend(true, {}, this.attr.eventData, data);\n        }\n\n        $element.trigger((event || type), data);\n\n        if (defaultFn && !event.isDefaultPrevented()) {\n          (this[defaultFn] || defaultFn).call(this, event, data);\n        }\n\n        return $element;\n      };\n\n\n      this.on = function() {\n        var $element, type, callback, originalCb;\n        var lastIndex = arguments.length - 1, origin = arguments[lastIndex];\n\n        if (typeof origin == 'object') {\n          //delegate callback\n          originalCb = utils.delegate(\n            this.resolveDelegateRules(origin)\n          );\n        } else if (typeof origin == 'string') {\n          originalCb = proxyEventTo(origin);\n        } else {\n          originalCb = origin;\n        }\n\n        if (lastIndex == 2) {\n          $element = $(arguments[0]);\n          type = arguments[1];\n        } else {\n          $element = this.$node;\n          type = arguments[0];\n        }\n\n        if (typeof originalCb != 'function' && typeof originalCb != 'object') {\n          throw new Error('Unable to bind to \"' + type +\n                          '\" because the given callback is not a function or an object');\n        }\n\n        callback = originalCb.bind(this);\n        callback.target = originalCb;\n        callback.context = this;\n\n        $element.on(type, callback);\n\n        // store every bound version of the callback\n        originalCb.bound || (originalCb.bound = []);\n        originalCb.bound.push(callback);\n\n        return callback;\n      };\n\n      this.off = function() {\n        var $element, type, callback;\n        var lastIndex = arguments.length - 1;\n\n        if (typeof arguments[lastIndex] == 'function') {\n          callback = arguments[lastIndex];\n          lastIndex -= 1;\n        }\n\n        if (lastIndex == 1) {\n          $element = $(arguments[0]);\n          type = arguments[1];\n        } else {\n          $element = this.$node;\n          type = arguments[0];\n        }\n\n        if (callback) {\n          //this callback may be the original function or a bound version\n          var boundFunctions = callback.target ? callback.target.bound : callback.bound || [];\n          //set callback to version bound against this instance\n          boundFunctions && boundFunctions.some(function(fn, i, arr) {\n            if (fn.context && (this.identity == fn.context.identity)) {\n              arr.splice(i, 1);\n              callback = fn;\n              return true;\n            }\n          }, this);\n          $element.off(type, callback);\n        } else {\n          // Loop through the events of `this` instance\n          // and unbind using the callback\n          registry.findInstanceInfo(this).events.forEach(function (event) {\n            if (type == event.type) {\n              $element.off(type, event.callback);\n            }\n          });\n        }\n\n        return $element;\n      };\n\n      this.resolveDelegateRules = function(ruleInfo) {\n        var rules = {};\n\n        Object.keys(ruleInfo).forEach(function(r) {\n          if (!(r in this.attr)) {\n            throw new Error('Component \"' + this.toString() + '\" wants to listen on \"' + r + '\" but no such attribute was defined.');\n          }\n          rules[this.attr[r]] = (typeof ruleInfo[r] == 'string') ? proxyEventTo(ruleInfo[r]) : ruleInfo[r];\n        }, this);\n\n        return rules;\n      };\n\n      this.select = function(attributeKey) {\n        return this.$node.find(this.attr[attributeKey]);\n      };\n\n      // New-style attributes\n\n      this.attributes = function(attrs) {\n\n        var Attributes = function() {};\n\n        if (this.attrDef) {\n          Attributes.prototype = new this.attrDef;\n        }\n\n        for (var name in attrs) {\n          Attributes.prototype[name] = attrs[name];\n        }\n\n        this.attrDef = Attributes;\n      };\n\n      // Deprecated attributes\n\n      this.defaultAttrs = function(defaults) {\n        utils.push(this.defaults, defaults, true) || (this.defaults = defaults);\n      };\n\n      this.initialize = function(node, attrs) {\n        attrs = attrs || {};\n        this.identity || (this.identity = componentId++);\n\n        if (!node) {\n          throw new Error('Component needs a node');\n        }\n\n        if (node.jquery) {\n          this.node = node[0];\n          this.$node = node;\n        } else {\n          this.node = node;\n          this.$node = $(node);\n        }\n\n        if (this.attrDef) {\n          initAttributes.call(this, attrs);\n        } else {\n          initDeprecatedAttributes.call(this, attrs);\n        }\n\n        return this;\n      };\n\n      this.teardown = function() {\n        var instanceInfo = registry.findInstanceInfo(this);\n\n        if (instanceInfo) {\n          teardownInstance(instanceInfo);\n        }\n      };\n    }\n\n    return withBase;\n  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }\n/******/ ])\n});\n", "/*\nTurbolinks 5.2.0\nCopyright \u00A9 2018 Basecamp, LLC\n */\n(function(){var t=this;(function(){(function(){this.Turbolinks={supported:function(){return null!=window.history.pushState&&null!=window.requestAnimationFrame&&null!=window.addEventListener}(),visit:function(t,r){return e.controller.visit(t,r)},clearCache:function(){return e.controller.clearCache()},setProgressBarDelay:function(t){return e.controller.setProgressBarDelay(t)}}}).call(this)}).call(t);var e=t.Turbolinks;(function(){(function(){var t,r,n,o=[].slice;e.copyObject=function(t){var e,r,n;r={};for(e in t)n=t[e],r[e]=n;return r},e.closest=function(e,r){return t.call(e,r)},t=function(){var t,e;return t=document.documentElement,null!=(e=t.closest)?e:function(t){var e;for(e=this;e;){if(e.nodeType===Node.ELEMENT_NODE&&r.call(e,t))return e;e=e.parentNode}}}(),e.defer=function(t){return setTimeout(t,1)},e.throttle=function(t){var e;return e=null,function(){var r;return r=1<=arguments.length?o.call(arguments,0):[],null!=e?e:e=requestAnimationFrame(function(n){return function(){return e=null,t.apply(n,r)}}(this))}},e.dispatch=function(t,e){var r,o,i,s,a,u;return a=null!=e?e:{},u=a.target,r=a.cancelable,o=a.data,i=document.createEvent(\"Events\"),i.initEvent(t,!0,r===!0),i.data=null!=o?o:{},i.cancelable&&!n&&(s=i.preventDefault,i.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,\"defaultPrevented\",{get:function(){return!0}}),s.call(this)}),(null!=u?u:document).dispatchEvent(i),i},n=function(){var t;return t=document.createEvent(\"Events\"),t.initEvent(\"test\",!0,!0),t.preventDefault(),t.defaultPrevented}(),e.match=function(t,e){return r.call(t,e)},r=function(){var t,e,r,n;return t=document.documentElement,null!=(e=null!=(r=null!=(n=t.matchesSelector)?n:t.webkitMatchesSelector)?r:t.msMatchesSelector)?e:t.mozMatchesSelector}(),e.uuid=function(){var t,e,r;for(r=\"\",t=e=1;36>=e;t=++e)r+=9===t||14===t||19===t||24===t?\"-\":15===t?\"4\":20===t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return r}}).call(this),function(){e.Location=function(){function t(t){var e,r;null==t&&(t=\"\"),r=document.createElement(\"a\"),r.href=t.toString(),this.absoluteURL=r.href,e=r.hash.length,2>e?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-e),this.anchor=r.hash.slice(1))}var e,r,n,o;return t.wrap=function(t){return t instanceof this?t:new this(t)},t.prototype.getOrigin=function(){return this.absoluteURL.split(\"/\",3).join(\"/\")},t.prototype.getPath=function(){var t,e;return null!=(t=null!=(e=this.requestURL.match(/\\/\\/[^\\/]*(\\/[^?;]*)/))?e[1]:void 0)?t:\"/\"},t.prototype.getPathComponents=function(){return this.getPath().split(\"/\").slice(1)},t.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},t.prototype.getExtension=function(){var t,e;return null!=(t=null!=(e=this.getLastPathComponent().match(/\\.[^.]*$/))?e[0]:void 0)?t:\"\"},t.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/)},t.prototype.isPrefixedBy=function(t){var e;return e=r(t),this.isEqualTo(t)||o(this.absoluteURL,e)},t.prototype.isEqualTo=function(t){return this.absoluteURL===(null!=t?t.absoluteURL:void 0)},t.prototype.toCacheKey=function(){return this.requestURL},t.prototype.toJSON=function(){return this.absoluteURL},t.prototype.toString=function(){return this.absoluteURL},t.prototype.valueOf=function(){return this.absoluteURL},r=function(t){return e(t.getOrigin()+t.getPath())},e=function(t){return n(t,\"/\")?t:t+\"/\"},o=function(t,e){return t.slice(0,e.length)===e},n=function(t,e){return t.slice(-e.length)===e},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.HttpRequest=function(){function r(r,n,o){this.delegate=r,this.requestCanceled=t(this.requestCanceled,this),this.requestTimedOut=t(this.requestTimedOut,this),this.requestFailed=t(this.requestFailed,this),this.requestLoaded=t(this.requestLoaded,this),this.requestProgressed=t(this.requestProgressed,this),this.url=e.Location.wrap(n).requestURL,this.referrer=e.Location.wrap(o).absoluteURL,this.createXHR()}return r.NETWORK_FAILURE=0,r.TIMEOUT_FAILURE=-1,r.timeout=60,r.prototype.send=function(){var t;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,\"function\"==typeof(t=this.delegate).requestStarted?t.requestStarted():void 0):void 0},r.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},r.prototype.requestProgressed=function(t){return t.lengthComputable?this.setProgress(t.loaded/t.total):void 0},r.prototype.requestLoaded=function(){return this.endRequest(function(t){return function(){var e;return 200<=(e=t.xhr.status)&&300>e?t.delegate.requestCompletedWithResponse(t.xhr.responseText,t.xhr.getResponseHeader(\"Turbolinks-Location\")):(t.failed=!0,t.delegate.requestFailedWithStatusCode(t.xhr.status,t.xhr.responseText))}}(this))},r.prototype.requestFailed=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE)}}(this))},r.prototype.requestTimedOut=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE)}}(this))},r.prototype.requestCanceled=function(){return this.endRequest()},r.prototype.notifyApplicationBeforeRequestStart=function(){return e.dispatch(\"turbolinks:request-start\",{data:{url:this.url,xhr:this.xhr}})},r.prototype.notifyApplicationAfterRequestEnd=function(){return e.dispatch(\"turbolinks:request-end\",{data:{url:this.url,xhr:this.xhr}})},r.prototype.createXHR=function(){return this.xhr=new XMLHttpRequest,this.xhr.open(\"GET\",this.url,!0),this.xhr.timeout=1e3*this.constructor.timeout,this.xhr.setRequestHeader(\"Accept\",\"text/html, application/xhtml+xml\"),this.xhr.setRequestHeader(\"Turbolinks-Referrer\",this.referrer),this.xhr.onprogress=this.requestProgressed,this.xhr.onload=this.requestLoaded,this.xhr.onerror=this.requestFailed,this.xhr.ontimeout=this.requestTimedOut,this.xhr.onabort=this.requestCanceled},r.prototype.endRequest=function(t){return this.xhr?(this.notifyApplicationAfterRequestEnd(),null!=t&&t.call(this),this.destroy()):void 0},r.prototype.setProgress=function(t){var e;return this.progress=t,\"function\"==typeof(e=this.delegate).requestProgressed?e.requestProgressed(this.progress):void 0},r.prototype.destroy=function(){var t;return this.setProgress(1),\"function\"==typeof(t=this.delegate).requestFinished&&t.requestFinished(),this.delegate=null,this.xhr=null},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ProgressBar=function(){function e(){this.trickle=t(this.trickle,this),this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement()}var r;return r=300,e.defaultCSS=\".turbolinks-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: width \"+r+\"ms ease-out, opacity \"+r/2+\"ms \"+r/2+\"ms ease-in;\\n  transform: translate3d(0, 0, 0);\\n}\",e.prototype.show=function(){return this.visible?void 0:(this.visible=!0,this.installStylesheetElement(),this.installProgressElement(),this.startTrickling())},e.prototype.hide=function(){return this.visible&&!this.hiding?(this.hiding=!0,this.fadeProgressElement(function(t){return function(){return t.uninstallProgressElement(),t.stopTrickling(),t.visible=!1,t.hiding=!1}}(this))):void 0},e.prototype.setValue=function(t){return this.value=t,this.refresh()},e.prototype.installStylesheetElement=function(){return document.head.insertBefore(this.stylesheetElement,document.head.firstChild)},e.prototype.installProgressElement=function(){return this.progressElement.style.width=0,this.progressElement.style.opacity=1,document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()},e.prototype.fadeProgressElement=function(t){return this.progressElement.style.opacity=0,setTimeout(t,1.5*r)},e.prototype.uninstallProgressElement=function(){return this.progressElement.parentNode?document.documentElement.removeChild(this.progressElement):void 0},e.prototype.startTrickling=function(){return null!=this.trickleInterval?this.trickleInterval:this.trickleInterval=setInterval(this.trickle,r)},e.prototype.stopTrickling=function(){return clearInterval(this.trickleInterval),this.trickleInterval=null},e.prototype.trickle=function(){return this.setValue(this.value+Math.random()/100)},e.prototype.refresh=function(){return requestAnimationFrame(function(t){return function(){return t.progressElement.style.width=10+90*t.value+\"%\"}}(this))},e.prototype.createStylesheetElement=function(){var t;return t=document.createElement(\"style\"),t.type=\"text/css\",t.textContent=this.constructor.defaultCSS,t},e.prototype.createProgressElement=function(){var t;return t=document.createElement(\"div\"),t.className=\"turbolinks-progress-bar\",t},e}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.BrowserAdapter=function(){function r(r){this.controller=r,this.showProgressBar=t(this.showProgressBar,this),this.progressBar=new e.ProgressBar}var n,o,i;return i=e.HttpRequest,n=i.NETWORK_FAILURE,o=i.TIMEOUT_FAILURE,r.prototype.visitProposedToLocationWithAction=function(t,e){return this.controller.startVisitToLocationWithAction(t,e)},r.prototype.visitStarted=function(t){return t.issueRequest(),t.changeHistory(),t.loadCachedSnapshot()},r.prototype.visitRequestStarted=function(t){return this.progressBar.setValue(0),t.hasCachedSnapshot()||\"restore\"!==t.action?this.showProgressBarAfterDelay():this.showProgressBar()},r.prototype.visitRequestProgressed=function(t){return this.progressBar.setValue(t.progress)},r.prototype.visitRequestCompleted=function(t){return t.loadResponse()},r.prototype.visitRequestFailedWithStatusCode=function(t,e){switch(e){case n:case o:return this.reload();default:return t.loadResponse()}},r.prototype.visitRequestFinished=function(t){return this.hideProgressBar()},r.prototype.visitCompleted=function(t){return t.followRedirect()},r.prototype.pageInvalidated=function(){return this.reload()},r.prototype.showProgressBarAfterDelay=function(){return this.progressBarTimeout=setTimeout(this.showProgressBar,this.controller.progressBarDelay)},r.prototype.showProgressBar=function(){return this.progressBar.show()},r.prototype.hideProgressBar=function(){return this.progressBar.hide(),clearTimeout(this.progressBarTimeout)},r.prototype.reload=function(){return window.location.reload()},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.History=function(){function r(e){this.delegate=e,this.onPageLoad=t(this.onPageLoad,this),this.onPopState=t(this.onPopState,this)}return r.prototype.start=function(){return this.started?void 0:(addEventListener(\"popstate\",this.onPopState,!1),addEventListener(\"load\",this.onPageLoad,!1),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener(\"popstate\",this.onPopState,!1),removeEventListener(\"load\",this.onPageLoad,!1),this.started=!1):void 0},r.prototype.push=function(t,r){return t=e.Location.wrap(t),this.update(\"push\",t,r)},r.prototype.replace=function(t,r){return t=e.Location.wrap(t),this.update(\"replace\",t,r)},r.prototype.onPopState=function(t){var r,n,o,i;return this.shouldHandlePopState()&&(i=null!=(n=t.state)?n.turbolinks:void 0)?(r=e.Location.wrap(window.location),o=i.restorationIdentifier,this.delegate.historyPoppedToLocationWithRestorationIdentifier(r,o)):void 0},r.prototype.onPageLoad=function(t){return e.defer(function(t){return function(){return t.pageLoaded=!0}}(this))},r.prototype.shouldHandlePopState=function(){return this.pageIsLoaded()},r.prototype.pageIsLoaded=function(){return this.pageLoaded||\"complete\"===document.readyState},r.prototype.update=function(t,e,r){var n;return n={turbolinks:{restorationIdentifier:r}},history[t+\"State\"](n,null,e)},r}()}.call(this),function(){e.HeadDetails=function(){function t(t){var e,r,n,s,a,u;for(this.elements={},n=0,a=t.length;a>n;n++)u=t[n],u.nodeType===Node.ELEMENT_NODE&&(s=u.outerHTML,r=null!=(e=this.elements)[s]?e[s]:e[s]={type:i(u),tracked:o(u),elements:[]},r.elements.push(u))}var e,r,n,o,i;return t.fromHeadElement=function(t){var e;return new this(null!=(e=null!=t?t.childNodes:void 0)?e:[])},t.prototype.hasElementWithKey=function(t){return t in this.elements},t.prototype.getTrackedElementSignature=function(){var t,e;return function(){var r,n;r=this.elements,n=[];for(t in r)e=r[t].tracked,e&&n.push(t);return n}.call(this).join(\"\")},t.prototype.getScriptElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails(\"script\",t)},t.prototype.getStylesheetElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails(\"stylesheet\",t)},t.prototype.getElementsMatchingTypeNotInDetails=function(t,e){var r,n,o,i,s,a;o=this.elements,s=[];for(n in o)i=o[n],a=i.type,r=i.elements,a!==t||e.hasElementWithKey(n)||s.push(r[0]);return s},t.prototype.getProvisionalElements=function(){var t,e,r,n,o,i,s;r=[],n=this.elements;for(e in n)o=n[e],s=o.type,i=o.tracked,t=o.elements,null!=s||i?t.length>1&&r.push.apply(r,t.slice(1)):r.push.apply(r,t);return r},t.prototype.getMetaValue=function(t){var e;return null!=(e=this.findMetaElementByName(t))?e.getAttribute(\"content\"):void 0},t.prototype.findMetaElementByName=function(t){var r,n,o,i;r=void 0,i=this.elements;for(o in i)n=i[o].elements,e(n[0],t)&&(r=n[0]);return r},i=function(t){return r(t)?\"script\":n(t)?\"stylesheet\":void 0},o=function(t){return\"reload\"===t.getAttribute(\"data-turbolinks-track\")},r=function(t){var e;return e=t.tagName.toLowerCase(),\"script\"===e},n=function(t){var e;return e=t.tagName.toLowerCase(),\"style\"===e||\"link\"===e&&\"stylesheet\"===t.getAttribute(\"rel\")},e=function(t,e){var r;return r=t.tagName.toLowerCase(),\"meta\"===r&&t.getAttribute(\"name\")===e},t}()}.call(this),function(){e.Snapshot=function(){function t(t,e){this.headDetails=t,this.bodyElement=e}return t.wrap=function(t){return t instanceof this?t:\"string\"==typeof t?this.fromHTMLString(t):this.fromHTMLElement(t)},t.fromHTMLString=function(t){var e;return e=document.createElement(\"html\"),e.innerHTML=t,this.fromHTMLElement(e)},t.fromHTMLElement=function(t){var r,n,o,i;return o=t.querySelector(\"head\"),r=null!=(i=t.querySelector(\"body\"))?i:document.createElement(\"body\"),n=e.HeadDetails.fromHeadElement(o),new this(n,r)},t.prototype.clone=function(){return new this.constructor(this.headDetails,this.bodyElement.cloneNode(!0))},t.prototype.getRootLocation=function(){var t,r;return r=null!=(t=this.getSetting(\"root\"))?t:\"/\",new e.Location(r)},t.prototype.getCacheControlValue=function(){return this.getSetting(\"cache-control\")},t.prototype.getElementForAnchor=function(t){try{return this.bodyElement.querySelector(\"[id='\"+t+\"'], a[name='\"+t+\"']\")}catch(e){}},t.prototype.getPermanentElements=function(){return this.bodyElement.querySelectorAll(\"[id][data-turbolinks-permanent]\")},t.prototype.getPermanentElementById=function(t){return this.bodyElement.querySelector(\"#\"+t+\"[data-turbolinks-permanent]\")},t.prototype.getPermanentElementsPresentInSnapshot=function(t){var e,r,n,o,i;for(o=this.getPermanentElements(),i=[],r=0,n=o.length;n>r;r++)e=o[r],t.getPermanentElementById(e.id)&&i.push(e);return i},t.prototype.findFirstAutofocusableElement=function(){return this.bodyElement.querySelector(\"[autofocus]\")},t.prototype.hasAnchor=function(t){return null!=this.getElementForAnchor(t)},t.prototype.isPreviewable=function(){return\"no-preview\"!==this.getCacheControlValue()},t.prototype.isCacheable=function(){return\"no-cache\"!==this.getCacheControlValue()},t.prototype.isVisitable=function(){return\"reload\"!==this.getSetting(\"visit-control\")},t.prototype.getSetting=function(t){return this.headDetails.getMetaValue(\"turbolinks-\"+t)},t}()}.call(this),function(){var t=[].slice;e.Renderer=function(){function e(){}var r;return e.render=function(){var e,r,n,o;return n=arguments[0],r=arguments[1],e=3<=arguments.length?t.call(arguments,2):[],o=function(t,e,r){r.prototype=t.prototype;var n=new r,o=t.apply(n,e);return Object(o)===o?o:n}(this,e,function(){}),o.delegate=n,o.render(r),o},e.prototype.renderView=function(t){return this.delegate.viewWillRender(this.newBody),t(),this.delegate.viewRendered(this.newBody)},e.prototype.invalidateView=function(){return this.delegate.viewInvalidated()},e.prototype.createScriptElement=function(t){var e;return\"false\"===t.getAttribute(\"data-turbolinks-eval\")?t:(e=document.createElement(\"script\"),e.textContent=t.textContent,e.async=!1,r(e,t),e)},r=function(t,e){var r,n,o,i,s,a,u;for(i=e.attributes,a=[],r=0,n=i.length;n>r;r++)s=i[r],o=s.name,u=s.value,a.push(t.setAttribute(o,u));return a},e}()}.call(this),function(){var t,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;e.SnapshotRenderer=function(e){function o(t,e,r){this.currentSnapshot=t,this.newSnapshot=e,this.isPreview=r,this.currentHeadDetails=this.currentSnapshot.headDetails,this.newHeadDetails=this.newSnapshot.headDetails,this.currentBody=this.currentSnapshot.bodyElement,this.newBody=this.newSnapshot.bodyElement}return n(o,e),o.prototype.render=function(t){return this.shouldRender()?(this.mergeHead(),this.renderView(function(e){return function(){return e.replaceBody(),e.isPreview||e.focusFirstAutofocusableElement(),t()}}(this))):this.invalidateView()},o.prototype.mergeHead=function(){return this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()},o.prototype.replaceBody=function(){var t;return t=this.relocateCurrentBodyPermanentElements(),this.activateNewBodyScriptElements(),this.assignNewBody(),this.replacePlaceholderElementsWithClonedPermanentElements(t)},o.prototype.shouldRender=function(){return this.newSnapshot.isVisitable()&&this.trackedElementsAreIdentical()},o.prototype.trackedElementsAreIdentical=function(){return this.currentHeadDetails.getTrackedElementSignature()===this.newHeadDetails.getTrackedElementSignature()},o.prototype.copyNewHeadStylesheetElements=function(){var t,e,r,n,o;for(n=this.getNewHeadStylesheetElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},o.prototype.copyNewHeadScriptElements=function(){var t,e,r,n,o;for(n=this.getNewHeadScriptElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(this.createScriptElement(t)));return o},o.prototype.removeCurrentHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getCurrentHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.removeChild(t));return o},o.prototype.copyNewHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getNewHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},o.prototype.relocateCurrentBodyPermanentElements=function(){var e,n,o,i,s,a,u;for(a=this.getCurrentBodyPermanentElements(),u=[],e=0,n=a.length;n>e;e++)i=a[e],s=t(i),o=this.newSnapshot.getPermanentElementById(i.id),r(i,s.element),r(o,i),u.push(s);return u},o.prototype.replacePlaceholderElementsWithClonedPermanentElements=function(t){var e,n,o,i,s,a,u;for(u=[],o=0,i=t.length;i>o;o++)a=t[o],n=a.element,s=a.permanentElement,e=s.cloneNode(!0),u.push(r(n,e));return u},o.prototype.activateNewBodyScriptElements=function(){var t,e,n,o,i,s;for(i=this.getNewBodyScriptElements(),s=[],e=0,o=i.length;o>e;e++)n=i[e],t=this.createScriptElement(n),s.push(r(n,t));return s},o.prototype.assignNewBody=function(){return document.body=this.newBody},o.prototype.focusFirstAutofocusableElement=function(){var t;return null!=(t=this.newSnapshot.findFirstAutofocusableElement())?t.focus():void 0},o.prototype.getNewHeadStylesheetElements=function(){return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails)},o.prototype.getNewHeadScriptElements=function(){return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails)},o.prototype.getCurrentHeadProvisionalElements=function(){return this.currentHeadDetails.getProvisionalElements()},o.prototype.getNewHeadProvisionalElements=function(){return this.newHeadDetails.getProvisionalElements()},o.prototype.getCurrentBodyPermanentElements=function(){return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot)},o.prototype.getNewBodyScriptElements=function(){return this.newBody.querySelectorAll(\"script\")},o}(e.Renderer),t=function(t){var e;return e=document.createElement(\"meta\"),e.setAttribute(\"name\",\"turbolinks-permanent-placeholder\"),e.setAttribute(\"content\",t.id),{element:e,permanentElement:t}},r=function(t,e){var r;return(r=t.parentNode)?r.replaceChild(e,t):void 0}}.call(this),function(){var t=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;e.ErrorRenderer=function(e){function r(t){var e;e=document.createElement(\"html\"),e.innerHTML=t,this.newHead=e.querySelector(\"head\"),this.newBody=e.querySelector(\"body\")}return t(r,e),r.prototype.render=function(t){return this.renderView(function(e){return function(){return e.replaceHeadAndBody(),e.activateBodyScriptElements(),t()}}(this))},r.prototype.replaceHeadAndBody=function(){var t,e;return e=document.head,t=document.body,e.parentNode.replaceChild(this.newHead,e),t.parentNode.replaceChild(this.newBody,t)},r.prototype.activateBodyScriptElements=function(){var t,e,r,n,o,i;for(n=this.getScriptElements(),i=[],e=0,r=n.length;r>e;e++)o=n[e],t=this.createScriptElement(o),i.push(o.parentNode.replaceChild(t,o));return i},r.prototype.getScriptElements=function(){return document.documentElement.querySelectorAll(\"script\")},r}(e.Renderer)}.call(this),function(){e.View=function(){function t(t){this.delegate=t,this.htmlElement=document.documentElement}return t.prototype.getRootLocation=function(){return this.getSnapshot().getRootLocation()},t.prototype.getElementForAnchor=function(t){return this.getSnapshot().getElementForAnchor(t)},t.prototype.getSnapshot=function(){return e.Snapshot.fromHTMLElement(this.htmlElement)},t.prototype.render=function(t,e){var r,n,o;return o=t.snapshot,r=t.error,n=t.isPreview,this.markAsPreview(n),null!=o?this.renderSnapshot(o,n,e):this.renderError(r,e)},t.prototype.markAsPreview=function(t){return t?this.htmlElement.setAttribute(\"data-turbolinks-preview\",\"\"):this.htmlElement.removeAttribute(\"data-turbolinks-preview\")},t.prototype.renderSnapshot=function(t,r,n){return e.SnapshotRenderer.render(this.delegate,n,this.getSnapshot(),e.Snapshot.wrap(t),r)},t.prototype.renderError=function(t,r){return e.ErrorRenderer.render(this.delegate,r,t)},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ScrollManager=function(){function r(r){this.delegate=r,this.onScroll=t(this.onScroll,this),this.onScroll=e.throttle(this.onScroll)}return r.prototype.start=function(){return this.started?void 0:(addEventListener(\"scroll\",this.onScroll,!1),this.onScroll(),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener(\"scroll\",this.onScroll,!1),this.started=!1):void 0},r.prototype.scrollToElement=function(t){return t.scrollIntoView()},r.prototype.scrollToPosition=function(t){var e,r;return e=t.x,r=t.y,window.scrollTo(e,r)},r.prototype.onScroll=function(t){return this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},r.prototype.updatePosition=function(t){var e;return this.position=t,null!=(e=this.delegate)?e.scrollPositionChanged(this.position):void 0},r}()}.call(this),function(){e.SnapshotCache=function(){function t(t){this.size=t,this.keys=[],this.snapshots={}}var r;return t.prototype.has=function(t){var e;return e=r(t),e in this.snapshots},t.prototype.get=function(t){var e;if(this.has(t))return e=this.read(t),this.touch(t),e},t.prototype.put=function(t,e){return this.write(t,e),this.touch(t),e},t.prototype.read=function(t){var e;return e=r(t),this.snapshots[e]},t.prototype.write=function(t,e){var n;return n=r(t),this.snapshots[n]=e},t.prototype.touch=function(t){var e,n;return n=r(t),e=this.keys.indexOf(n),e>-1&&this.keys.splice(e,1),this.keys.unshift(n),this.trim()},t.prototype.trim=function(){var t,e,r,n,o;for(n=this.keys.splice(this.size),o=[],t=0,r=n.length;r>t;t++)e=n[t],o.push(delete this.snapshots[e]);return o},r=function(t){return e.Location.wrap(t).toCacheKey()},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Visit=function(){function r(r,n,o){this.controller=r,this.action=o,this.performScroll=t(this.performScroll,this),this.identifier=e.uuid(),this.location=e.Location.wrap(n),this.adapter=this.controller.adapter,this.state=\"initialized\",this.timingMetrics={}}var n;return r.prototype.start=function(){return\"initialized\"===this.state?(this.recordTimingMetric(\"visitStart\"),this.state=\"started\",this.adapter.visitStarted(this)):void 0},r.prototype.cancel=function(){var t;return\"started\"===this.state?(null!=(t=this.request)&&t.cancel(),this.cancelRender(),this.state=\"canceled\"):void 0},r.prototype.complete=function(){var t;return\"started\"===this.state?(this.recordTimingMetric(\"visitEnd\"),this.state=\"completed\",\"function\"==typeof(t=this.adapter).visitCompleted&&t.visitCompleted(this),this.controller.visitCompleted(this)):void 0},r.prototype.fail=function(){var t;return\"started\"===this.state?(this.state=\"failed\",\"function\"==typeof(t=this.adapter).visitFailed?t.visitFailed(this):void 0):void 0},r.prototype.changeHistory=function(){var t,e;return this.historyChanged?void 0:(t=this.location.isEqualTo(this.referrer)?\"replace\":this.action,e=n(t),this.controller[e](this.location,this.restorationIdentifier),this.historyChanged=!0)},r.prototype.issueRequest=function(){return this.shouldIssueRequest()&&null==this.request?(this.progress=0,this.request=new e.HttpRequest(this,this.location,this.referrer),this.request.send()):void 0},r.prototype.getCachedSnapshot=function(){var t;return!(t=this.controller.getCachedSnapshotForLocation(this.location))||null!=this.location.anchor&&!t.hasAnchor(this.location.anchor)||\"restore\"!==this.action&&!t.isPreviewable()?void 0:t},r.prototype.hasCachedSnapshot=function(){return null!=this.getCachedSnapshot()},r.prototype.loadCachedSnapshot=function(){var t,e;return(e=this.getCachedSnapshot())?(t=this.shouldIssueRequest(),this.render(function(){var r;return this.cacheSnapshot(),this.controller.render({snapshot:e,isPreview:t},this.performScroll),\"function\"==typeof(r=this.adapter).visitRendered&&r.visitRendered(this),t?void 0:this.complete()})):void 0},r.prototype.loadResponse=function(){return null!=this.response?this.render(function(){var t,e;return this.cacheSnapshot(),this.request.failed?(this.controller.render({error:this.response},this.performScroll),\"function\"==typeof(t=this.adapter).visitRendered&&t.visitRendered(this),this.fail()):(this.controller.render({snapshot:this.response},this.performScroll),\"function\"==typeof(e=this.adapter).visitRendered&&e.visitRendered(this),this.complete())}):void 0},r.prototype.followRedirect=function(){return this.redirectedToLocation&&!this.followedRedirect?(this.location=this.redirectedToLocation,this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation,this.restorationIdentifier),this.followedRedirect=!0):void 0},r.prototype.requestStarted=function(){var t;return this.recordTimingMetric(\"requestStart\"),\"function\"==typeof(t=this.adapter).visitRequestStarted?t.visitRequestStarted(this):void 0},r.prototype.requestProgressed=function(t){var e;return this.progress=t,\"function\"==typeof(e=this.adapter).visitRequestProgressed?e.visitRequestProgressed(this):void 0},r.prototype.requestCompletedWithResponse=function(t,r){return this.response=t,null!=r&&(this.redirectedToLocation=e.Location.wrap(r)),this.adapter.visitRequestCompleted(this)},r.prototype.requestFailedWithStatusCode=function(t,e){return this.response=e,this.adapter.visitRequestFailedWithStatusCode(this,t)},r.prototype.requestFinished=function(){var t;return this.recordTimingMetric(\"requestEnd\"),\"function\"==typeof(t=this.adapter).visitRequestFinished?t.visitRequestFinished(this):void 0},r.prototype.performScroll=function(){return this.scrolled?void 0:(\"restore\"===this.action?this.scrollToRestoredPosition()||this.scrollToTop():this.scrollToAnchor()||this.scrollToTop(),this.scrolled=!0)},r.prototype.scrollToRestoredPosition=function(){var t,e;return t=null!=(e=this.restorationData)?e.scrollPosition:void 0,null!=t?(this.controller.scrollToPosition(t),!0):void 0},r.prototype.scrollToAnchor=function(){return null!=this.location.anchor?(this.controller.scrollToAnchor(this.location.anchor),!0):void 0},r.prototype.scrollToTop=function(){return this.controller.scrollToPosition({x:0,y:0})},r.prototype.recordTimingMetric=function(t){var e;return null!=(e=this.timingMetrics)[t]?e[t]:e[t]=(new Date).getTime()},r.prototype.getTimingMetrics=function(){return e.copyObject(this.timingMetrics)},n=function(t){switch(t){case\"replace\":return\"replaceHistoryWithLocationAndRestorationIdentifier\";case\"advance\":case\"restore\":return\"pushHistoryWithLocationAndRestorationIdentifier\"}},r.prototype.shouldIssueRequest=function(){return\"restore\"===this.action?!this.hasCachedSnapshot():!0},r.prototype.cacheSnapshot=function(){return this.snapshotCached?void 0:(this.controller.cacheSnapshot(),this.snapshotCached=!0)},r.prototype.render=function(t){return this.cancelRender(),this.frame=requestAnimationFrame(function(e){return function(){return e.frame=null,t.call(e)}}(this))},r.prototype.cancelRender=function(){return this.frame?cancelAnimationFrame(this.frame):void 0},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Controller=function(){function r(){this.clickBubbled=t(this.clickBubbled,this),this.clickCaptured=t(this.clickCaptured,this),this.pageLoaded=t(this.pageLoaded,this),this.history=new e.History(this),this.view=new e.View(this),this.scrollManager=new e.ScrollManager(this),this.restorationData={},this.clearCache(),this.setProgressBarDelay(500)}return r.prototype.start=function(){return e.supported&&!this.started?(addEventListener(\"click\",this.clickCaptured,!0),addEventListener(\"DOMContentLoaded\",this.pageLoaded,!1),this.scrollManager.start(),this.startHistory(),this.started=!0,this.enabled=!0):void 0},r.prototype.disable=function(){return this.enabled=!1},r.prototype.stop=function(){return this.started?(removeEventListener(\"click\",this.clickCaptured,!0),removeEventListener(\"DOMContentLoaded\",this.pageLoaded,!1),this.scrollManager.stop(),this.stopHistory(),this.started=!1):void 0},r.prototype.clearCache=function(){return this.cache=new e.SnapshotCache(10)},r.prototype.visit=function(t,r){var n,o;return null==r&&(r={}),t=e.Location.wrap(t),this.applicationAllowsVisitingLocation(t)?this.locationIsVisitable(t)?(n=null!=(o=r.action)?o:\"advance\",this.adapter.visitProposedToLocationWithAction(t,n)):window.location=t:void 0},r.prototype.startVisitToLocationWithAction=function(t,r,n){var o;return e.supported?(o=this.getRestorationDataForIdentifier(n),this.startVisit(t,r,{restorationData:o})):window.location=t},r.prototype.setProgressBarDelay=function(t){return this.progressBarDelay=t},r.prototype.startHistory=function(){return this.location=e.Location.wrap(window.location),this.restorationIdentifier=e.uuid(),this.history.start(),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.stopHistory=function(){return this.history.stop()},r.prototype.pushHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.push(this.location,this.restorationIdentifier)},r.prototype.replaceHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.historyPoppedToLocationWithRestorationIdentifier=function(t,r){var n;return this.restorationIdentifier=r,this.enabled?(n=this.getRestorationDataForIdentifier(this.restorationIdentifier),this.startVisit(t,\"restore\",{restorationIdentifier:this.restorationIdentifier,restorationData:n,historyChanged:!0}),this.location=e.Location.wrap(t)):this.adapter.pageInvalidated()},r.prototype.getCachedSnapshotForLocation=function(t){var e;return null!=(e=this.cache.get(t))?e.clone():void 0},r.prototype.shouldCacheSnapshot=function(){return this.view.getSnapshot().isCacheable();\n},r.prototype.cacheSnapshot=function(){var t,r;return this.shouldCacheSnapshot()?(this.notifyApplicationBeforeCachingSnapshot(),r=this.view.getSnapshot(),t=this.lastRenderedLocation,e.defer(function(e){return function(){return e.cache.put(t,r.clone())}}(this))):void 0},r.prototype.scrollToAnchor=function(t){var e;return(e=this.view.getElementForAnchor(t))?this.scrollToElement(e):this.scrollToPosition({x:0,y:0})},r.prototype.scrollToElement=function(t){return this.scrollManager.scrollToElement(t)},r.prototype.scrollToPosition=function(t){return this.scrollManager.scrollToPosition(t)},r.prototype.scrollPositionChanged=function(t){var e;return e=this.getCurrentRestorationData(),e.scrollPosition=t},r.prototype.render=function(t,e){return this.view.render(t,e)},r.prototype.viewInvalidated=function(){return this.adapter.pageInvalidated()},r.prototype.viewWillRender=function(t){return this.notifyApplicationBeforeRender(t)},r.prototype.viewRendered=function(){return this.lastRenderedLocation=this.currentVisit.location,this.notifyApplicationAfterRender()},r.prototype.pageLoaded=function(){return this.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()},r.prototype.clickCaptured=function(){return removeEventListener(\"click\",this.clickBubbled,!1),addEventListener(\"click\",this.clickBubbled,!1)},r.prototype.clickBubbled=function(t){var e,r,n;return this.enabled&&this.clickEventIsSignificant(t)&&(r=this.getVisitableLinkForNode(t.target))&&(n=this.getVisitableLocationForLink(r))&&this.applicationAllowsFollowingLinkToLocation(r,n)?(t.preventDefault(),e=this.getActionForLink(r),this.visit(n,{action:e})):void 0},r.prototype.applicationAllowsFollowingLinkToLocation=function(t,e){var r;return r=this.notifyApplicationAfterClickingLinkToLocation(t,e),!r.defaultPrevented},r.prototype.applicationAllowsVisitingLocation=function(t){var e;return e=this.notifyApplicationBeforeVisitingLocation(t),!e.defaultPrevented},r.prototype.notifyApplicationAfterClickingLinkToLocation=function(t,r){return e.dispatch(\"turbolinks:click\",{target:t,data:{url:r.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationBeforeVisitingLocation=function(t){return e.dispatch(\"turbolinks:before-visit\",{data:{url:t.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationAfterVisitingLocation=function(t){return e.dispatch(\"turbolinks:visit\",{data:{url:t.absoluteURL}})},r.prototype.notifyApplicationBeforeCachingSnapshot=function(){return e.dispatch(\"turbolinks:before-cache\")},r.prototype.notifyApplicationBeforeRender=function(t){return e.dispatch(\"turbolinks:before-render\",{data:{newBody:t}})},r.prototype.notifyApplicationAfterRender=function(){return e.dispatch(\"turbolinks:render\")},r.prototype.notifyApplicationAfterPageLoad=function(t){return null==t&&(t={}),e.dispatch(\"turbolinks:load\",{data:{url:this.location.absoluteURL,timing:t}})},r.prototype.startVisit=function(t,e,r){var n;return null!=(n=this.currentVisit)&&n.cancel(),this.currentVisit=this.createVisit(t,e,r),this.currentVisit.start(),this.notifyApplicationAfterVisitingLocation(t)},r.prototype.createVisit=function(t,r,n){var o,i,s,a,u;return i=null!=n?n:{},a=i.restorationIdentifier,s=i.restorationData,o=i.historyChanged,u=new e.Visit(this,t,r),u.restorationIdentifier=null!=a?a:e.uuid(),u.restorationData=e.copyObject(s),u.historyChanged=o,u.referrer=this.location,u},r.prototype.visitCompleted=function(t){return this.notifyApplicationAfterPageLoad(t.getTimingMetrics())},r.prototype.clickEventIsSignificant=function(t){return!(t.defaultPrevented||t.target.isContentEditable||t.which>1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)},r.prototype.getVisitableLinkForNode=function(t){return this.nodeIsVisitable(t)?e.closest(t,\"a[href]:not([target]):not([download])\"):void 0},r.prototype.getVisitableLocationForLink=function(t){var r;return r=new e.Location(t.getAttribute(\"href\")),this.locationIsVisitable(r)?r:void 0},r.prototype.getActionForLink=function(t){var e;return null!=(e=t.getAttribute(\"data-turbolinks-action\"))?e:\"advance\"},r.prototype.nodeIsVisitable=function(t){var r;return(r=e.closest(t,\"[data-turbolinks]\"))?\"false\"!==r.getAttribute(\"data-turbolinks\"):!0},r.prototype.locationIsVisitable=function(t){return t.isPrefixedBy(this.view.getRootLocation())&&t.isHTML()},r.prototype.getCurrentRestorationData=function(){return this.getRestorationDataForIdentifier(this.restorationIdentifier)},r.prototype.getRestorationDataForIdentifier=function(t){var e;return null!=(e=this.restorationData)[t]?e[t]:e[t]={}},r}()}.call(this),function(){!function(){var t,e;if((t=e=document.currentScript)&&!e.hasAttribute(\"data-turbolinks-suppress-warning\"))for(;t=t.parentNode;)if(t===document.body)return console.warn(\"You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\\n\\nLoad your application\\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\\n\\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\\n\\n\\u2014\\u2014\\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s\",e.outerHTML)}()}.call(this),function(){var t,r,n;e.start=function(){return r()?(null==e.controller&&(e.controller=t()),e.controller.start()):void 0},r=function(){return null==window.Turbolinks&&(window.Turbolinks=e),n()},t=function(){var t;return t=new e.Controller,t.adapter=new e.BrowserAdapter(t),t},n=function(){return window.Turbolinks===e},n()&&e.start()}.call(this)}).call(this),\"object\"==typeof module&&module.exports?module.exports=e:\"function\"==typeof define&&define.amd&&define(e)}).call(this);", "/*!\n * Select2 4.0.8\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"tree\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"treeitem\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'treeitem',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-container';\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n    var self = this;\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        var $this = $(this);\n\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n    $rendered.attr('title', selection.title || selection.text);\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.options.get('disabled')) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n      $selection.attr('title', selection.title || selection.text);\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');   \n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"textbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      self.$search.attr('aria-activedescendant', params.id);\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').innerWidth();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    var data = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n\n    this.addOptions(this.convertToOptions(data));\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var tag = this._lastTag;\n\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n        decorated.call(self, params, callback);\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"textbox\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"treeitem\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = options.get('dropdownParent') || $(document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var setupResultsEvents = false;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      if (!setupResultsEvents) {\n        setupResultsEvents = true;\n\n        container.on('results:all', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n\n        container.on('results:append', function () {\n          self._positionDropdown();\n          self._resizeDropdown();\n        });\n      }\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = $offsetParent.offset();\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results\u2026';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching\u2026';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    if (typeof options.language === 'string') {\n      // Check if the language is specified with a region\n      if (options.language.indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = options.language.split('-');\n        var baseLanguage = languageParts[0];\n\n        options.language = [options.language, baseLanguage];\n      } else {\n        options.language = [options.language];\n      }\n    }\n\n    if ($.isArray(options.language)) {\n      var languages = new Translation();\n      options.language.push('en');\n\n      var languageNames = options.language;\n\n      for (var l = 0; l < languageNames.length; l++) {\n        var name = languageNames[l];\n        var language = {};\n\n        try {\n          // Try to load it with the original name\n          language = Translation.loadPath(name);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            name = this.defaults.amdLanguageBase + name;\n            language = Translation.loadPath(name);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files.\n            if (options.debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + name + '\" could not be ' +\n                'automatically loaded. A fallback will be used instead.'\n              );\n            }\n\n            continue;\n          }\n        }\n\n        languages.extend(language);\n      }\n\n      options.translations = languages;\n    } else {\n      var baseTranslation = Translation.loadPath(\n        this.defaults.amdLanguageBase + 'en'\n      );\n      var customTranslation = new Translation(options.language);\n\n      customTranslation.extend(baseTranslation);\n\n      options.translations = customTranslation;\n    }\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: EnglishTranslation,\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.language == null) {\n      if ($e.prop('lang')) {\n        this.options.language = $e.prop('lang').toLowerCase();\n      } else if ($e.closest('[lang]').prop('lang')) {\n        this.options.language = $e.closest('[lang]').prop('lang');\n      }\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        $.each(mutations, self._syncA);\n        $.each(mutations, self._syncS);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close();\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.options.get('disabled')) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    }\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function () {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', {});\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n  'jquery'\n], function ($) {\n  // Used to shim jQuery.mousewheel for non-full builds.\n  return $;\n});\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\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 = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt() {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var activeElement;\n    try {\n      activeElement = document.activeElement;\n    } catch(e) {\n      activeElement = document.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {\n    this.id = null;\n    this.f = null;\n    this.time = 0;\n    this.handler = bind(this.onTimeout, this);\n  };\n  Delayed.prototype.onTimeout = function (self) {\n    self.id = 0;\n    if (self.time <= +new Date) {\n      self.f();\n    } else {\n      setTimeout(self.handler, self.time - +new Date);\n    }\n  };\n  Delayed.prototype.set = function (ms, f) {\n    this.f = f;\n    var time = +new Date + ms;\n    if (!this.id || time < this.time) {\n      clearTimeout(this.id);\n      this.id = setTimeout(this.handler, ms);\n      this.time = time;\n    }\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 50;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              at += isRTL;\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      map[type] = (map[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers, arr = map && map[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range;\n    try {range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) { return false }\n    return range.compareEndPoints(\"StartToEnd\", range) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css || attributes) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    var isWidget = classTest(\"CodeMirror-linewidget\");\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    for (var i = 0; i < lineView.rest.length; i++)\n      { if (lineView.rest[i] == line)\n        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n      { if (lineNo(lineView.rest[i$1]) > lineN)\n        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      mStart = map[i];\n      mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n    return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n  }\n  function pageScrollY() {\n    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n    return window.pageYOffset || (document.documentElement || document.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var height = 0;\n    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n      { height += widgetHeight(lineObj.widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = outside; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight; box.bottom += widgetHeight;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      var id = cm.display.gutterSpecs[i].className;\n      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[id] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e$1) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range = doc.sel.ranges[i];\n      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        { drawSelectionCursor(cm, range.head, curFragment); }\n      if (!collapsed)\n        { drawSelectionRange(cm, range, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () {\n        if (!cm.hasFocus()) { onBlur(cm); }\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      onBlur(cm);\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n    var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      scrollToCoordsRange(cm, from, to, range.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.pointerEvents = \"auto\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt != bar) { bar.style.pointerEvents = \"none\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId           // Unique ID\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt();\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt();\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n    snapshot.activeElt.focus();\n    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var sel = window.getSelection(), range = document.createRange();\n      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      } else if (first) {\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(display) {\n    var width = display.gutters.offsetWidth;\n    display.sizer.style.marginLeft = width + \"px\";\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm.display);\n      return true\n    }\n    return false\n  }\n\n  function getGutters(gutters, lineNumbers) {\n    var result = [], sawLineNumbers = false;\n    for (var i = 0; i < gutters.length; i++) {\n      var name = gutters[i], style = null;\n      if (typeof name != \"string\") { style = name.style; name = name.className; }\n      if (name == \"CodeMirror-linenumbers\") {\n        if (!lineNumbers) { continue }\n        else { sawLineNumbers = true; }\n      }\n      result.push({className: name, style: style});\n    }\n    if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n    return result\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function renderGutters(display) {\n    var gutters = display.gutters, specs = display.gutterSpecs;\n    removeChildren(gutters);\n    display.lineGutter = null;\n    for (var i = 0; i < specs.length; ++i) {\n      var ref = specs[i];\n      var className = ref.className;\n      var style = ref.style;\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n      if (style) { gElt.style.cssText = style; }\n      if (className == \"CodeMirror-linenumbers\") {\n        display.lineGutter = gElt;\n        gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = specs.length ? \"\" : \"none\";\n    updateGutterSpace(display);\n  }\n\n  function updateGutters(cm) {\n    renderGutters(cm.display);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input, options) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n    renderGutters(d);\n\n    input.init(d);\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n\n      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n      // is with selectLeft/Right\n      var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n      var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? preventCursorRight : preventCursorLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? preventCursorLeft : preventCursorRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n      { doc.cantEdit = false; }\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        { if (op(this.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this.children.splice(++i, 0, leaf);\n              leaf.parent = this;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range.head; }\n      else if (start == \"anchor\") { pos = range.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n      else { pos = range.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {\n      var this$1 = this;\n\n      this.history = new History(this.history.maxGeneration);\n      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n    },\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n                span.from == null && lineNo != from.line ||\n                span.from != null && lineNo == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) { continue }\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var markAsReadAndPasteIfAllFilesAreRead = function () {\n        if (++read == n) {\n          operation(cm, function () {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(\n                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n          })();\n        }\n      };\n      var readTextFromFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n          markAsReadAndPasteIfAllFilesAreRead();\n          return\n        }\n        var reader = new FileReader;\n        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n        reader.onload = function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n            markAsReadAndPasteIfAllFilesAreRead();\n            return\n          }\n          text[i] = content;\n          markAsReadAndPasteIfAllFilesAreRead();\n        };\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e$1){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n    \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map, handle, context) {\n    map = getKeyMap(map);\n    var found = map.call ? map.call(key, context) : map[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map.fallthrough) {\n      if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map.fallthrough, handle, context) }\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      if (cm.doc.direction == \"rtl\") { dir = -dir; }\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n      { document.execCommand(\"cut\"); }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    window.focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if ((webkit && !safari) || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    delayBlurEvent(cm);\n    setTimeout(function () { return display.input.focus(); }, 20);\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n      else\n        { ourRange = range; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range.anchor, anchor) > 0) {\n          head = range.head;\n          anchor = minPos(oldRange.from(), range.anchor);\n        } else {\n          head = range.anchor;\n          anchor = maxPos(oldRange.to(), range.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      // If e is null or undefined we interpret this as someone trying\n      // to explicitly cancel the selection rather than the user\n      // letting go of the mouse button.\n      if (e) {\n        e_preventDefault(e);\n        display.input.focus();\n      }\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range) {\n    var anchor = range.anchor;\n    var head = range.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n    var order = getOrder(anchorLine);\n    if (!order) { return range }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e$1) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.display.gutterSpecs[i];\n        signal(cm, type, cm, line, gutter.className, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200c\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      updateGutters(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm, val) {\n      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n      updateGutters(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm, val) {\n      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n      updateGutters(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, updateGutters, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n\n    option(\"screenReaderLabel\", null, function (cm, val) {\n      val = (val === '') ? null : val;\n      cm.display.input.screenReaderLabelChanged(val);\n    });\n\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input, options);\n    display.wrapper.CodeMirror = this;\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(function () {\n        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n      }, 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n    on(d.input.getField(), \"contextmenu\", function (e) {\n      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n    });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range = sel.ranges[i$1];\n      var from = range.from(), to = range.to();\n      if (range.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n      var mode = cm.getModeAt(range.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n          { indented = indentLine(cm, range.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n    field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    disableBrowserMagic(te);\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){window.focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n      },\n      removeKeyMap: function(map) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map || maps[i].name == map) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this.state.modeGen++;\n            regChange(this);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range = ranges[i];\n          if (!range.empty()) {\n            var from = range.from(), to = range.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this, j, how); }\n            var newRanges = this.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range.head.line > end) {\n            indentLine(this, range.head.line, how, true);\n            end = range.head.line;\n            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range = this.doc.sel.primary();\n        if (start == null) { pos = range.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range.from() : range.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range) {\n          if (this$1.display.shift || this$1.doc.extend || range.empty())\n            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range.from() : range.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range) {\n            var other = findPosH(doc, range.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range) {\n          if (collapse)\n            { return dir < 0 ? range.from() : range.to() }\n          var headPos = cursorCoords(this$1, range.head, \"div\");\n          if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt() },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range, margin) {\n        if (range == null) {\n          range = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range == \"number\") {\n          range = {from: Pos(range, 0), to: null};\n        } else if (range.from == null) {\n          range = {from: range, to: null};\n        }\n        if (!range.to) { range.to = range.from; }\n        range.margin = margin || 0;\n\n        if (range.from.line != null) {\n          scrollToRange(this, range);\n        } else {\n          scrollToCoordsRange(this, range.from, range.to, range.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo = this.display.viewFrom;\n        this.doc.iter(lineNo, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n          ++lineNo;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this.display);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        // Cancel the current text selection if any (#5821)\n        if (this.state.selectingText) { this.state.selectingText(); }\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n  // doesn't cross line boundaries), \"word\" (across next word), or\n  // \"group\" (to the start of next group of word or\n  // non-word-non-whitespace chars). The visually param controls\n  // whether, in right-to-left text, direction 1 means to move towards\n  // the next index in the string, or towards the character to the right\n  // of the current position. The resulting position will have a\n  // hitSide=true property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n    function findNextLine() {\n      var l = pos.line + lineDir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (unit == \"codepoint\") {\n        var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));\n        if (isNaN(ch)) { next = null; }\n        else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),\n                            -dir); }\n      } else if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\" || unit == \"codepoint\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    function belongsToInput(e) {\n      for (var t = e.target; t; t = t.parentNode) {\n        if (t == div) { return true }\n        if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n      }\n      return false\n    }\n\n    on(div, \"paste\", function (e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = document.activeElement;\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.div.setAttribute('aria-label', label);\n    } else {\n      this.div.removeAttribute('aria-label');\n    }\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = document.activeElement == this.div;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor() || document.activeElement != this.div)\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n    var input = this;\n    if (this.selectionInEditor())\n      { this.pollSelection(); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range = found[0].find(0)))\n            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map.length; j += 3) {\n          var curNode = map[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n  };\n\n  TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.textarea.setAttribute('aria-label', label);\n    } else {\n      this.textarea.removeAttribute('aria-label');\n    }\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing) { return }\n    var cm = this.cm;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { window.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n    this.textarea.readOnly = !!val;\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, \u2026*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.58.2\";\n\n  return CodeMirror;\n\n})));\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n      emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n      unorderedListRE = /[*+-]\\s/;\n\n  CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), replacements = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var pos = ranges[i].head;\n\n      // If we're not in Markdown mode, fall back to normal newlineAndIndent\n      var eolState = cm.getStateAfter(pos.line);\n      var inner = CodeMirror.innerMode(cm.getMode(), eolState);\n      if (inner.mode.name !== \"markdown\") {\n        cm.execCommand(\"newlineAndIndent\");\n        return;\n      } else {\n        eolState = inner.state;\n      }\n\n      var inList = eolState.list !== false;\n      var inQuote = eolState.quote !== 0;\n\n      var line = cm.getLine(pos.line), match = listRE.exec(line);\n      var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n      if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n        cm.execCommand(\"newlineAndIndent\");\n        return;\n      }\n      if (emptyListRE.test(line)) {\n        var endOfQuote = inQuote && />\\s*$/.test(line)\n        var endOfList = !/>\\s*$/.test(line)\n        if (endOfQuote || endOfList) cm.replaceRange(\"\", {\n          line: pos.line, ch: 0\n        }, {\n          line: pos.line, ch: pos.ch + 1\n        });\n        replacements[i] = \"\\n\";\n      } else {\n        var indent = match[1], after = match[5];\n        var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0);\n        var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace(\"x\", \" \");\n        replacements[i] = \"\\n\" + indent + bullet + after;\n\n        if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n      }\n    }\n\n    cm.replaceSelections(replacements);\n  };\n\n  // Auto-updating Markdown list numbers when a new item is added to the\n  // middle of a list\n  function incrementRemainingMarkdownListNumbers(cm, pos) {\n    var startLine = pos.line, lookAhead = 0, skipCount = 0;\n    var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1];\n\n    do {\n      lookAhead += 1;\n      var nextLineNumber = startLine + lookAhead;\n      var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine);\n\n      if (nextItem) {\n        var nextIndent = nextItem[1];\n        var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount);\n        var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber;\n\n        if (startIndent === nextIndent && !isNaN(nextNumber)) {\n          if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n          if (newNumber > nextNumber) itemNumber = newNumber + 1;\n          cm.replaceRange(\n            nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n          {\n            line: nextLineNumber, ch: 0\n          }, {\n            line: nextLineNumber, ch: nextLine.length\n          });\n        } else {\n          if (startIndent.length > nextIndent.length) return;\n          // This doesn't run if the next line immediatley indents, as it is\n          // not clear of the users intention (new indented item or same level)\n          if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return;\n          skipCount += 1;\n        }\n      }\n    } while (nextItem);\n  }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\nvar CodeMirror = require(\"codemirror\");\n\nCodeMirror.commands.tabAndIndentMarkdownList = function (cm) {\n\tvar ranges = cm.listSelections();\n\tvar pos = ranges[0].head;\n\tvar eolState = cm.getStateAfter(pos.line);\n\tvar inList = eolState.list !== false;\n\n\tif (inList) {\n\t\tcm.execCommand(\"indentMore\");\n\t\treturn;\n\t}\n\n\tif (cm.options.indentWithTabs) {\n\t\tcm.execCommand(\"insertTab\");\n\t}\n\telse {\n\t\tvar spaces = Array(cm.options.tabSize + 1).join(\" \");\n\t\tcm.replaceSelection(spaces);\n\t}\n};\n\nCodeMirror.commands.shiftTabAndUnindentMarkdownList = function (cm) {\n\tvar ranges = cm.listSelections();\n\tvar pos = ranges[0].head;\n\tvar eolState = cm.getStateAfter(pos.line);\n\tvar inList = eolState.list !== false;\n\n\tif (inList) {\n\t\tcm.execCommand(\"indentLess\");\n\t\treturn;\n\t}\n\n\tif (cm.options.indentWithTabs) {\n\t\tcm.execCommand(\"insertTab\");\n\t}\n\telse {\n\t\tvar spaces = Array(cm.options.tabSize + 1).join(\" \");\n\t\tcm.replaceSelection(spaces);\n\t}\n};\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"fullScreen\", false, function(cm, val, old) {\n    if (old == CodeMirror.Init) old = false;\n    if (!old == !val) return;\n    if (val) setFullscreen(cm);\n    else setNormal(cm);\n  });\n\n  function setFullscreen(cm) {\n    var wrap = cm.getWrapperElement();\n    cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n                                  width: wrap.style.width, height: wrap.style.height};\n    wrap.style.width = \"\";\n    wrap.style.height = \"auto\";\n    wrap.className += \" CodeMirror-fullscreen\";\n    document.documentElement.style.overflow = \"hidden\";\n    cm.refresh();\n  }\n\n  function setNormal(cm) {\n    var wrap = cm.getWrapperElement();\n    wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n    document.documentElement.style.overflow = \"\";\n    var info = cm.state.fullScreenRestore;\n    wrap.style.width = info.width; wrap.style.height = info.height;\n    window.scrollTo(info.scrollLeft, info.scrollTop);\n    cm.refresh();\n  }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName;\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(tagName)) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[context.tagName];\n          if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    },\n\n    xmlCurrentTag: function(state) {\n      return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n    },\n\n    xmlCurrentContext: function(state) {\n      var context = []\n      for (var cx = state.context; cx; cx = cx.prev)\n        if (cx.tagName) context.push(cx.tagName)\n      return context.reverse()\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.modeInfo = [\n    {name: \"APL\", mime: \"text/apl\", mode: \"apl\", ext: [\"dyalog\", \"apl\"]},\n    {name: \"PGP\", mimes: [\"application/pgp\", \"application/pgp-encrypted\", \"application/pgp-keys\", \"application/pgp-signature\"], mode: \"asciiarmor\", ext: [\"asc\", \"pgp\", \"sig\"]},\n    {name: \"ASN.1\", mime: \"text/x-ttcn-asn\", mode: \"asn.1\", ext: [\"asn\", \"asn1\"]},\n    {name: \"Asterisk\", mime: \"text/x-asterisk\", mode: \"asterisk\", file: /^extensions\\.conf$/i},\n    {name: \"Brainfuck\", mime: \"text/x-brainfuck\", mode: \"brainfuck\", ext: [\"b\", \"bf\"]},\n    {name: \"C\", mime: \"text/x-csrc\", mode: \"clike\", ext: [\"c\", \"h\", \"ino\"]},\n    {name: \"C++\", mime: \"text/x-c++src\", mode: \"clike\", ext: [\"cpp\", \"c++\", \"cc\", \"cxx\", \"hpp\", \"h++\", \"hh\", \"hxx\"], alias: [\"cpp\"]},\n    {name: \"Cobol\", mime: \"text/x-cobol\", mode: \"cobol\", ext: [\"cob\", \"cpy\"]},\n    {name: \"C#\", mime: \"text/x-csharp\", mode: \"clike\", ext: [\"cs\"], alias: [\"csharp\", \"cs\"]},\n    {name: \"Clojure\", mime: \"text/x-clojure\", mode: \"clojure\", ext: [\"clj\", \"cljc\", \"cljx\"]},\n    {name: \"ClojureScript\", mime: \"text/x-clojurescript\", mode: \"clojure\", ext: [\"cljs\"]},\n    {name: \"Closure Stylesheets (GSS)\", mime: \"text/x-gss\", mode: \"css\", ext: [\"gss\"]},\n    {name: \"CMake\", mime: \"text/x-cmake\", mode: \"cmake\", ext: [\"cmake\", \"cmake.in\"], file: /^CMakeLists\\.txt$/},\n    {name: \"CoffeeScript\", mimes: [\"application/vnd.coffeescript\", \"text/coffeescript\", \"text/x-coffeescript\"], mode: \"coffeescript\", ext: [\"coffee\"], alias: [\"coffee\", \"coffee-script\"]},\n    {name: \"Common Lisp\", mime: \"text/x-common-lisp\", mode: \"commonlisp\", ext: [\"cl\", \"lisp\", \"el\"], alias: [\"lisp\"]},\n    {name: \"Cypher\", mime: \"application/x-cypher-query\", mode: \"cypher\", ext: [\"cyp\", \"cypher\"]},\n    {name: \"Cython\", mime: \"text/x-cython\", mode: \"python\", ext: [\"pyx\", \"pxd\", \"pxi\"]},\n    {name: \"Crystal\", mime: \"text/x-crystal\", mode: \"crystal\", ext: [\"cr\"]},\n    {name: \"CSS\", mime: \"text/css\", mode: \"css\", ext: [\"css\"]},\n    {name: \"CQL\", mime: \"text/x-cassandra\", mode: \"sql\", ext: [\"cql\"]},\n    {name: \"D\", mime: \"text/x-d\", mode: \"d\", ext: [\"d\"]},\n    {name: \"Dart\", mimes: [\"application/dart\", \"text/x-dart\"], mode: \"dart\", ext: [\"dart\"]},\n    {name: \"diff\", mime: \"text/x-diff\", mode: \"diff\", ext: [\"diff\", \"patch\"]},\n    {name: \"Django\", mime: \"text/x-django\", mode: \"django\"},\n    {name: \"Dockerfile\", mime: \"text/x-dockerfile\", mode: \"dockerfile\", file: /^Dockerfile$/},\n    {name: \"DTD\", mime: \"application/xml-dtd\", mode: \"dtd\", ext: [\"dtd\"]},\n    {name: \"Dylan\", mime: \"text/x-dylan\", mode: \"dylan\", ext: [\"dylan\", \"dyl\", \"intr\"]},\n    {name: \"EBNF\", mime: \"text/x-ebnf\", mode: \"ebnf\"},\n    {name: \"ECL\", mime: \"text/x-ecl\", mode: \"ecl\", ext: [\"ecl\"]},\n    {name: \"edn\", mime: \"application/edn\", mode: \"clojure\", ext: [\"edn\"]},\n    {name: \"Eiffel\", mime: \"text/x-eiffel\", mode: \"eiffel\", ext: [\"e\"]},\n    {name: \"Elm\", mime: \"text/x-elm\", mode: \"elm\", ext: [\"elm\"]},\n    {name: \"Embedded Javascript\", mime: \"application/x-ejs\", mode: \"htmlembedded\", ext: [\"ejs\"]},\n    {name: \"Embedded Ruby\", mime: \"application/x-erb\", mode: \"htmlembedded\", ext: [\"erb\"]},\n    {name: \"Erlang\", mime: \"text/x-erlang\", mode: \"erlang\", ext: [\"erl\"]},\n    {name: \"Esper\", mime: \"text/x-esper\", mode: \"sql\"},\n    {name: \"Factor\", mime: \"text/x-factor\", mode: \"factor\", ext: [\"factor\"]},\n    {name: \"FCL\", mime: \"text/x-fcl\", mode: \"fcl\"},\n    {name: \"Forth\", mime: \"text/x-forth\", mode: \"forth\", ext: [\"forth\", \"fth\", \"4th\"]},\n    {name: \"Fortran\", mime: \"text/x-fortran\", mode: \"fortran\", ext: [\"f\", \"for\", \"f77\", \"f90\", \"f95\"]},\n    {name: \"F#\", mime: \"text/x-fsharp\", mode: \"mllike\", ext: [\"fs\"], alias: [\"fsharp\"]},\n    {name: \"Gas\", mime: \"text/x-gas\", mode: \"gas\", ext: [\"s\"]},\n    {name: \"Gherkin\", mime: \"text/x-feature\", mode: \"gherkin\", ext: [\"feature\"]},\n    {name: \"GitHub Flavored Markdown\", mime: \"text/x-gfm\", mode: \"gfm\", file: /^(readme|contributing|history)\\.md$/i},\n    {name: \"Go\", mime: \"text/x-go\", mode: \"go\", ext: [\"go\"]},\n    {name: \"Groovy\", mime: \"text/x-groovy\", mode: \"groovy\", ext: [\"groovy\", \"gradle\"], file: /^Jenkinsfile$/},\n    {name: \"HAML\", mime: \"text/x-haml\", mode: \"haml\", ext: [\"haml\"]},\n    {name: \"Haskell\", mime: \"text/x-haskell\", mode: \"haskell\", ext: [\"hs\"]},\n    {name: \"Haskell (Literate)\", mime: \"text/x-literate-haskell\", mode: \"haskell-literate\", ext: [\"lhs\"]},\n    {name: \"Haxe\", mime: \"text/x-haxe\", mode: \"haxe\", ext: [\"hx\"]},\n    {name: \"HXML\", mime: \"text/x-hxml\", mode: \"haxe\", ext: [\"hxml\"]},\n    {name: \"ASP.NET\", mime: \"application/x-aspx\", mode: \"htmlembedded\", ext: [\"aspx\"], alias: [\"asp\", \"aspx\"]},\n    {name: \"HTML\", mime: \"text/html\", mode: \"htmlmixed\", ext: [\"html\", \"htm\", \"handlebars\", \"hbs\"], alias: [\"xhtml\"]},\n    {name: \"HTTP\", mime: \"message/http\", mode: \"http\"},\n    {name: \"IDL\", mime: \"text/x-idl\", mode: \"idl\", ext: [\"pro\"]},\n    {name: \"Pug\", mime: \"text/x-pug\", mode: \"pug\", ext: [\"jade\", \"pug\"], alias: [\"jade\"]},\n    {name: \"Java\", mime: \"text/x-java\", mode: \"clike\", ext: [\"java\"]},\n    {name: \"Java Server Pages\", mime: \"application/x-jsp\", mode: \"htmlembedded\", ext: [\"jsp\"], alias: [\"jsp\"]},\n    {name: \"JavaScript\", mimes: [\"text/javascript\", \"text/ecmascript\", \"application/javascript\", \"application/x-javascript\", \"application/ecmascript\"],\n     mode: \"javascript\", ext: [\"js\"], alias: [\"ecmascript\", \"js\", \"node\"]},\n    {name: \"JSON\", mimes: [\"application/json\", \"application/x-json\"], mode: \"javascript\", ext: [\"json\", \"map\"], alias: [\"json5\"]},\n    {name: \"JSON-LD\", mime: \"application/ld+json\", mode: \"javascript\", ext: [\"jsonld\"], alias: [\"jsonld\"]},\n    {name: \"JSX\", mime: \"text/jsx\", mode: \"jsx\", ext: [\"jsx\"]},\n    {name: \"Jinja2\", mime: \"text/jinja2\", mode: \"jinja2\", ext: [\"j2\", \"jinja\", \"jinja2\"]},\n    {name: \"Julia\", mime: \"text/x-julia\", mode: \"julia\", ext: [\"jl\"]},\n    {name: \"Kotlin\", mime: \"text/x-kotlin\", mode: \"clike\", ext: [\"kt\"]},\n    {name: \"LESS\", mime: \"text/x-less\", mode: \"css\", ext: [\"less\"]},\n    {name: \"LiveScript\", mime: \"text/x-livescript\", mode: \"livescript\", ext: [\"ls\"], alias: [\"ls\"]},\n    {name: \"Lua\", mime: \"text/x-lua\", mode: \"lua\", ext: [\"lua\"]},\n    {name: \"Markdown\", mime: \"text/x-markdown\", mode: \"markdown\", ext: [\"markdown\", \"md\", \"mkd\"]},\n    {name: \"mIRC\", mime: \"text/mirc\", mode: \"mirc\"},\n    {name: \"MariaDB SQL\", mime: \"text/x-mariadb\", mode: \"sql\"},\n    {name: \"Mathematica\", mime: \"text/x-mathematica\", mode: \"mathematica\", ext: [\"m\", \"nb\", \"wl\", \"wls\"]},\n    {name: \"Modelica\", mime: \"text/x-modelica\", mode: \"modelica\", ext: [\"mo\"]},\n    {name: \"MUMPS\", mime: \"text/x-mumps\", mode: \"mumps\", ext: [\"mps\"]},\n    {name: \"MS SQL\", mime: \"text/x-mssql\", mode: \"sql\"},\n    {name: \"mbox\", mime: \"application/mbox\", mode: \"mbox\", ext: [\"mbox\"]},\n    {name: \"MySQL\", mime: \"text/x-mysql\", mode: \"sql\"},\n    {name: \"Nginx\", mime: \"text/x-nginx-conf\", mode: \"nginx\", file: /nginx.*\\.conf$/i},\n    {name: \"NSIS\", mime: \"text/x-nsis\", mode: \"nsis\", ext: [\"nsh\", \"nsi\"]},\n    {name: \"NTriples\", mimes: [\"application/n-triples\", \"application/n-quads\", \"text/n-triples\"],\n     mode: \"ntriples\", ext: [\"nt\", \"nq\"]},\n    {name: \"Objective-C\", mime: \"text/x-objectivec\", mode: \"clike\", ext: [\"m\"], alias: [\"objective-c\", \"objc\"]},\n    {name: \"Objective-C++\", mime: \"text/x-objectivec++\", mode: \"clike\", ext: [\"mm\"], alias: [\"objective-c++\", \"objc++\"]},\n    {name: \"OCaml\", mime: \"text/x-ocaml\", mode: \"mllike\", ext: [\"ml\", \"mli\", \"mll\", \"mly\"]},\n    {name: \"Octave\", mime: \"text/x-octave\", mode: \"octave\", ext: [\"m\"]},\n    {name: \"Oz\", mime: \"text/x-oz\", mode: \"oz\", ext: [\"oz\"]},\n    {name: \"Pascal\", mime: \"text/x-pascal\", mode: \"pascal\", ext: [\"p\", \"pas\"]},\n    {name: \"PEG.js\", mime: \"null\", mode: \"pegjs\", ext: [\"jsonld\"]},\n    {name: \"Perl\", mime: \"text/x-perl\", mode: \"perl\", ext: [\"pl\", \"pm\"]},\n    {name: \"PHP\", mimes: [\"text/x-php\", \"application/x-httpd-php\", \"application/x-httpd-php-open\"], mode: \"php\", ext: [\"php\", \"php3\", \"php4\", \"php5\", \"php7\", \"phtml\"]},\n    {name: \"Pig\", mime: \"text/x-pig\", mode: \"pig\", ext: [\"pig\"]},\n    {name: \"Plain Text\", mime: \"text/plain\", mode: \"null\", ext: [\"txt\", \"text\", \"conf\", \"def\", \"list\", \"log\"]},\n    {name: \"PLSQL\", mime: \"text/x-plsql\", mode: \"sql\", ext: [\"pls\"]},\n    {name: \"PostgreSQL\", mime: \"text/x-pgsql\", mode: \"sql\"},\n    {name: \"PowerShell\", mime: \"application/x-powershell\", mode: \"powershell\", ext: [\"ps1\", \"psd1\", \"psm1\"]},\n    {name: \"Properties files\", mime: \"text/x-properties\", mode: \"properties\", ext: [\"properties\", \"ini\", \"in\"], alias: [\"ini\", \"properties\"]},\n    {name: \"ProtoBuf\", mime: \"text/x-protobuf\", mode: \"protobuf\", ext: [\"proto\"]},\n    {name: \"Python\", mime: \"text/x-python\", mode: \"python\", ext: [\"BUILD\", \"bzl\", \"py\", \"pyw\"], file: /^(BUCK|BUILD)$/},\n    {name: \"Puppet\", mime: \"text/x-puppet\", mode: \"puppet\", ext: [\"pp\"]},\n    {name: \"Q\", mime: \"text/x-q\", mode: \"q\", ext: [\"q\"]},\n    {name: \"R\", mime: \"text/x-rsrc\", mode: \"r\", ext: [\"r\", \"R\"], alias: [\"rscript\"]},\n    {name: \"reStructuredText\", mime: \"text/x-rst\", mode: \"rst\", ext: [\"rst\"], alias: [\"rst\"]},\n    {name: \"RPM Changes\", mime: \"text/x-rpm-changes\", mode: \"rpm\"},\n    {name: \"RPM Spec\", mime: \"text/x-rpm-spec\", mode: \"rpm\", ext: [\"spec\"]},\n    {name: \"Ruby\", mime: \"text/x-ruby\", mode: \"ruby\", ext: [\"rb\"], alias: [\"jruby\", \"macruby\", \"rake\", \"rb\", \"rbx\"]},\n    {name: \"Rust\", mime: \"text/x-rustsrc\", mode: \"rust\", ext: [\"rs\"]},\n    {name: \"SAS\", mime: \"text/x-sas\", mode: \"sas\", ext: [\"sas\"]},\n    {name: \"Sass\", mime: \"text/x-sass\", mode: \"sass\", ext: [\"sass\"]},\n    {name: \"Scala\", mime: \"text/x-scala\", mode: \"clike\", ext: [\"scala\"]},\n    {name: \"Scheme\", mime: \"text/x-scheme\", mode: \"scheme\", ext: [\"scm\", \"ss\"]},\n    {name: \"SCSS\", mime: \"text/x-scss\", mode: \"css\", ext: [\"scss\"]},\n    {name: \"Shell\", mimes: [\"text/x-sh\", \"application/x-sh\"], mode: \"shell\", ext: [\"sh\", \"ksh\", \"bash\"], alias: [\"bash\", \"sh\", \"zsh\"], file: /^PKGBUILD$/},\n    {name: \"Sieve\", mime: \"application/sieve\", mode: \"sieve\", ext: [\"siv\", \"sieve\"]},\n    {name: \"Slim\", mimes: [\"text/x-slim\", \"application/x-slim\"], mode: \"slim\", ext: [\"slim\"]},\n    {name: \"Smalltalk\", mime: \"text/x-stsrc\", mode: \"smalltalk\", ext: [\"st\"]},\n    {name: \"Smarty\", mime: \"text/x-smarty\", mode: \"smarty\", ext: [\"tpl\"]},\n    {name: \"Solr\", mime: \"text/x-solr\", mode: \"solr\"},\n    {name: \"SML\", mime: \"text/x-sml\", mode: \"mllike\", ext: [\"sml\", \"sig\", \"fun\", \"smackspec\"]},\n    {name: \"Soy\", mime: \"text/x-soy\", mode: \"soy\", ext: [\"soy\"], alias: [\"closure template\"]},\n    {name: \"SPARQL\", mime: \"application/sparql-query\", mode: \"sparql\", ext: [\"rq\", \"sparql\"], alias: [\"sparul\"]},\n    {name: \"Spreadsheet\", mime: \"text/x-spreadsheet\", mode: \"spreadsheet\", alias: [\"excel\", \"formula\"]},\n    {name: \"SQL\", mime: \"text/x-sql\", mode: \"sql\", ext: [\"sql\"]},\n    {name: \"SQLite\", mime: \"text/x-sqlite\", mode: \"sql\"},\n    {name: \"Squirrel\", mime: \"text/x-squirrel\", mode: \"clike\", ext: [\"nut\"]},\n    {name: \"Stylus\", mime: \"text/x-styl\", mode: \"stylus\", ext: [\"styl\"]},\n    {name: \"Swift\", mime: \"text/x-swift\", mode: \"swift\", ext: [\"swift\"]},\n    {name: \"sTeX\", mime: \"text/x-stex\", mode: \"stex\"},\n    {name: \"LaTeX\", mime: \"text/x-latex\", mode: \"stex\", ext: [\"text\", \"ltx\", \"tex\"], alias: [\"tex\"]},\n    {name: \"SystemVerilog\", mime: \"text/x-systemverilog\", mode: \"verilog\", ext: [\"v\", \"sv\", \"svh\"]},\n    {name: \"Tcl\", mime: \"text/x-tcl\", mode: \"tcl\", ext: [\"tcl\"]},\n    {name: \"Textile\", mime: \"text/x-textile\", mode: \"textile\", ext: [\"textile\"]},\n    {name: \"TiddlyWiki\", mime: \"text/x-tiddlywiki\", mode: \"tiddlywiki\"},\n    {name: \"Tiki wiki\", mime: \"text/tiki\", mode: \"tiki\"},\n    {name: \"TOML\", mime: \"text/x-toml\", mode: \"toml\", ext: [\"toml\"]},\n    {name: \"Tornado\", mime: \"text/x-tornado\", mode: \"tornado\"},\n    {name: \"troff\", mime: \"text/troff\", mode: \"troff\", ext: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]},\n    {name: \"TTCN\", mime: \"text/x-ttcn\", mode: \"ttcn\", ext: [\"ttcn\", \"ttcn3\", \"ttcnpp\"]},\n    {name: \"TTCN_CFG\", mime: \"text/x-ttcn-cfg\", mode: \"ttcn-cfg\", ext: [\"cfg\"]},\n    {name: \"Turtle\", mime: \"text/turtle\", mode: \"turtle\", ext: [\"ttl\"]},\n    {name: \"TypeScript\", mime: \"application/typescript\", mode: \"javascript\", ext: [\"ts\"], alias: [\"ts\"]},\n    {name: \"TypeScript-JSX\", mime: \"text/typescript-jsx\", mode: \"jsx\", ext: [\"tsx\"], alias: [\"tsx\"]},\n    {name: \"Twig\", mime: \"text/x-twig\", mode: \"twig\"},\n    {name: \"Web IDL\", mime: \"text/x-webidl\", mode: \"webidl\", ext: [\"webidl\"]},\n    {name: \"VB.NET\", mime: \"text/x-vb\", mode: \"vb\", ext: [\"vb\"]},\n    {name: \"VBScript\", mime: \"text/vbscript\", mode: \"vbscript\", ext: [\"vbs\"]},\n    {name: \"Velocity\", mime: \"text/velocity\", mode: \"velocity\", ext: [\"vtl\"]},\n    {name: \"Verilog\", mime: \"text/x-verilog\", mode: \"verilog\", ext: [\"v\"]},\n    {name: \"VHDL\", mime: \"text/x-vhdl\", mode: \"vhdl\", ext: [\"vhd\", \"vhdl\"]},\n    {name: \"Vue.js Component\", mimes: [\"script/x-vue\", \"text/x-vue\"], mode: \"vue\", ext: [\"vue\"]},\n    {name: \"XML\", mimes: [\"application/xml\", \"text/xml\"], mode: \"xml\", ext: [\"xml\", \"xsl\", \"xsd\", \"svg\"], alias: [\"rss\", \"wsdl\", \"xsd\"]},\n    {name: \"XQuery\", mime: \"application/xquery\", mode: \"xquery\", ext: [\"xy\", \"xquery\"]},\n    {name: \"Yacas\", mime: \"text/x-yacas\", mode: \"yacas\", ext: [\"ys\"]},\n    {name: \"YAML\", mimes: [\"text/x-yaml\", \"text/yaml\"], mode: \"yaml\", ext: [\"yaml\", \"yml\"], alias: [\"yml\"]},\n    {name: \"Z80\", mime: \"text/x-z80\", mode: \"z80\", ext: [\"z80\"]},\n    {name: \"mscgen\", mime: \"text/x-mscgen\", mode: \"mscgen\", ext: [\"mscgen\", \"mscin\", \"msc\"]},\n    {name: \"xu\", mime: \"text/x-xu\", mode: \"mscgen\", ext: [\"xu\"]},\n    {name: \"msgenny\", mime: \"text/x-msgenny\", mode: \"mscgen\", ext: [\"msgenny\"]},\n    {name: \"WebAssembly\", mime: \"text/webassembly\", mode: \"wast\", ext: [\"wat\", \"wast\"]},\n  ];\n  // Ensure all modes have a mime property for backwards compatibility\n  for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n    var info = CodeMirror.modeInfo[i];\n    if (info.mimes) info.mime = info.mimes[0];\n  }\n\n  CodeMirror.findModeByMIME = function(mime) {\n    mime = mime.toLowerCase();\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.mime == mime) return info;\n      if (info.mimes) for (var j = 0; j < info.mimes.length; j++)\n        if (info.mimes[j] == mime) return info;\n    }\n    if (/\\+xml$/.test(mime)) return CodeMirror.findModeByMIME(\"application/xml\")\n    if (/\\+json$/.test(mime)) return CodeMirror.findModeByMIME(\"application/json\")\n  };\n\n  CodeMirror.findModeByExtension = function(ext) {\n    ext = ext.toLowerCase();\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.ext) for (var j = 0; j < info.ext.length; j++)\n        if (info.ext[j] == ext) return info;\n    }\n  };\n\n  CodeMirror.findModeByFileName = function(filename) {\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.file && info.file.test(filename)) return info;\n    }\n    var dot = filename.lastIndexOf(\".\");\n    var ext = dot > -1 && filename.substring(dot + 1, filename.length);\n    if (ext) return CodeMirror.findModeByExtension(ext);\n  };\n\n  CodeMirror.findModeByName = function(name) {\n    name = name.toLowerCase();\n    for (var i = 0; i < CodeMirror.modeInfo.length; i++) {\n      var info = CodeMirror.modeInfo[i];\n      if (info.name.toLowerCase() == name) return info;\n      if (info.alias) for (var j = 0; j < info.alias.length; j++)\n        if (info.alias[j].toLowerCase() == name) return info;\n    }\n  };\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../meta\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../xml/xml\", \"../meta\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"markdown\", function(cmCfg, modeCfg) {\n\n  var htmlMode = CodeMirror.getMode(cmCfg, \"text/html\");\n  var htmlModeMissing = htmlMode.name == \"null\"\n\n  function getMode(name) {\n    if (CodeMirror.findModeByName) {\n      var found = CodeMirror.findModeByName(name);\n      if (found) name = found.mime || found.mimes[0];\n    }\n    var mode = CodeMirror.getMode(cmCfg, name);\n    return mode.name == \"null\" ? null : mode;\n  }\n\n  // Should characters that affect highlighting be highlighted separate?\n  // Does not include characters that will be output (such as `1.` and `-` for lists)\n  if (modeCfg.highlightFormatting === undefined)\n    modeCfg.highlightFormatting = false;\n\n  // Maximum number of nested blockquotes. Set to 0 for infinite nesting.\n  // Excess `>` will emit `error` token.\n  if (modeCfg.maxBlockquoteDepth === undefined)\n    modeCfg.maxBlockquoteDepth = 0;\n\n  // Turn on task lists? (\"- [ ] \" and \"- [x] \")\n  if (modeCfg.taskLists === undefined) modeCfg.taskLists = false;\n\n  // Turn on strikethrough syntax\n  if (modeCfg.strikethrough === undefined)\n    modeCfg.strikethrough = false;\n\n  if (modeCfg.emoji === undefined)\n    modeCfg.emoji = false;\n\n  if (modeCfg.fencedCodeBlockHighlighting === undefined)\n    modeCfg.fencedCodeBlockHighlighting = true;\n\n  if (modeCfg.fencedCodeBlockDefaultMode === undefined)\n    modeCfg.fencedCodeBlockDefaultMode = 'text/plain';\n\n  if (modeCfg.xml === undefined)\n    modeCfg.xml = true;\n\n  // Allow token types to be overridden by user-provided token types.\n  if (modeCfg.tokenTypeOverrides === undefined)\n    modeCfg.tokenTypeOverrides = {};\n\n  var tokenTypes = {\n    header: \"header\",\n    code: \"comment\",\n    quote: \"quote\",\n    list1: \"variable-2\",\n    list2: \"variable-3\",\n    list3: \"keyword\",\n    hr: \"hr\",\n    image: \"image\",\n    imageAltText: \"image-alt-text\",\n    imageMarker: \"image-marker\",\n    formatting: \"formatting\",\n    linkInline: \"link\",\n    linkEmail: \"link\",\n    linkText: \"link\",\n    linkHref: \"string\",\n    em: \"em\",\n    strong: \"strong\",\n    strikethrough: \"strikethrough\",\n    emoji: \"builtin\"\n  };\n\n  for (var tokenType in tokenTypes) {\n    if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) {\n      tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType];\n    }\n  }\n\n  var hrRE = /^([*\\-_])(?:\\s*\\1){2,}\\s*$/\n  ,   listRE = /^(?:[*\\-+]|^[0-9]+([.)]))\\s+/\n  ,   taskListRE = /^\\[(x| )\\](?=\\s)/i // Must follow listRE\n  ,   atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/\n  ,   setextHeaderRE = /^ {0,3}(?:\\={1,}|-{2,})\\s*$/\n  ,   textRE = /^[^#!\\[\\]*_\\\\<>` \"'(~:]+/\n  ,   fencedCodeRE = /^(~~~+|```+)[ \\t]*([\\w\\/+#-]*)[^\\n`]*$/\n  ,   linkDefRE = /^\\s*\\[[^\\]]+?\\]:.*$/ // naive link-definition\n  ,   punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]/\n  ,   expandedTab = \"    \" // CommonMark specifies tab as 4 spaces\n\n  function switchInline(stream, state, f) {\n    state.f = state.inline = f;\n    return f(stream, state);\n  }\n\n  function switchBlock(stream, state, f) {\n    state.f = state.block = f;\n    return f(stream, state);\n  }\n\n  function lineIsEmpty(line) {\n    return !line || !/\\S/.test(line.string)\n  }\n\n  // Blocks\n\n  function blankLine(state) {\n    // Reset linkTitle state\n    state.linkTitle = false;\n    state.linkHref = false;\n    state.linkText = false;\n    // Reset EM state\n    state.em = false;\n    // Reset STRONG state\n    state.strong = false;\n    // Reset strikethrough state\n    state.strikethrough = false;\n    // Reset state.quote\n    state.quote = 0;\n    // Reset state.indentedCode\n    state.indentedCode = false;\n    if (state.f == htmlBlock) {\n      var exit = htmlModeMissing\n      if (!exit) {\n        var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n        exit = inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n          (!inner.state.context && inner.state.tokenize.isInText)\n      }\n      if (exit) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    // Reset state.trailingSpace\n    state.trailingSpace = 0;\n    state.trailingSpaceNewLine = false;\n    // Mark this line as blank\n    state.prevLine = state.thisLine\n    state.thisLine = {stream: null}\n    return null;\n  }\n\n  function blockNormal(stream, state) {\n    var firstTokenOnLine = stream.column() === state.indentation;\n    var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream);\n    var prevLineIsIndentedCode = state.indentedCode;\n    var prevLineIsHr = state.prevLine.hr;\n    var prevLineIsList = state.list !== false;\n    var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3;\n\n    state.indentedCode = false;\n\n    var lineIndentation = state.indentation;\n    // compute once per line (on first token)\n    if (state.indentationDiff === null) {\n      state.indentationDiff = state.indentation;\n      if (prevLineIsList) {\n        state.list = null;\n        // While this list item's marker's indentation is less than the deepest\n        //  list item's content's indentation,pop the deepest list item\n        //  indentation off the stack, and update block indentation state\n        while (lineIndentation < state.listStack[state.listStack.length - 1]) {\n          state.listStack.pop();\n          if (state.listStack.length) {\n            state.indentation = state.listStack[state.listStack.length - 1];\n          // less than the first list's indent -> the line is no longer a list\n          } else {\n            state.list = false;\n          }\n        }\n        if (state.list !== false) {\n          state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1]\n        }\n      }\n    }\n\n    // not comprehensive (currently only for setext detection purposes)\n    var allowsInlineContinuation = (\n        !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header &&\n        (!prevLineIsList || !prevLineIsIndentedCode) &&\n        !state.prevLine.fencedCodeEnd\n    );\n\n    var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) &&\n      state.indentation <= maxNonCodeIndentation && stream.match(hrRE);\n\n    var match = null;\n    if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd ||\n         state.prevLine.header || prevLineLineIsEmpty)) {\n      stream.skipToEnd();\n      state.indentedCode = true;\n      return tokenTypes.code;\n    } else if (stream.eatSpace()) {\n      return null;\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) {\n      state.quote = 0;\n      state.header = match[1].length;\n      state.thisLine.header = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      state.f = state.inline;\n      return getType(state);\n    } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) {\n      state.quote = firstTokenOnLine ? 1 : state.quote + 1;\n      if (modeCfg.highlightFormatting) state.formatting = \"quote\";\n      stream.eatSpace();\n      return getType(state);\n    } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) {\n      var listType = match[1] ? \"ol\" : \"ul\";\n\n      state.indentation = lineIndentation + stream.current().length;\n      state.list = true;\n      state.quote = 0;\n\n      // Add this list item's content's indentation to the stack\n      state.listStack.push(state.indentation);\n      // Reset inline styles which shouldn't propagate aross list items\n      state.em = false;\n      state.strong = false;\n      state.code = false;\n      state.strikethrough = false;\n\n      if (modeCfg.taskLists && stream.match(taskListRE, false)) {\n        state.taskList = true;\n      }\n      state.f = state.inline;\n      if (modeCfg.highlightFormatting) state.formatting = [\"list\", \"list-\" + listType];\n      return getType(state);\n    } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) {\n      state.quote = 0;\n      state.fencedEndRE = new RegExp(match[1] + \"+ *$\");\n      // try switching mode\n      state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2] || modeCfg.fencedCodeBlockDefaultMode );\n      if (state.localMode) state.localState = CodeMirror.startState(state.localMode);\n      state.f = state.block = local;\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      state.code = -1\n      return getType(state);\n    // SETEXT has lowest block-scope precedence after HR, so check it after\n    //  the others (code, blockquote, list...)\n    } else if (\n      // if setext set, indicates line after ---/===\n      state.setext || (\n        // line before ---/===\n        (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false &&\n        !state.code && !isHr && !linkDefRE.test(stream.string) &&\n        (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE))\n      )\n    ) {\n      if ( !state.setext ) {\n        state.header = match[0].charAt(0) == '=' ? 1 : 2;\n        state.setext = state.header;\n      } else {\n        state.header = state.setext;\n        // has no effect on type so we can reset it now\n        state.setext = 0;\n        stream.skipToEnd();\n        if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      }\n      state.thisLine.header = true;\n      state.f = state.inline;\n      return getType(state);\n    } else if (isHr) {\n      stream.skipToEnd();\n      state.hr = true;\n      state.thisLine.hr = true;\n      return tokenTypes.hr;\n    } else if (stream.peek() === '[') {\n      return switchInline(stream, state, footnoteLink);\n    }\n\n    return switchInline(stream, state, state.inline);\n  }\n\n  function htmlBlock(stream, state) {\n    var style = htmlMode.token(stream, state.htmlState);\n    if (!htmlModeMissing) {\n      var inner = CodeMirror.innerMode(htmlMode, state.htmlState)\n      if ((inner.mode.name == \"xml\" && inner.state.tagStart === null &&\n           (!inner.state.context && inner.state.tokenize.isInText)) ||\n          (state.md_inside && stream.current().indexOf(\">\") > -1)) {\n        state.f = inlineNormal;\n        state.block = blockNormal;\n        state.htmlState = null;\n      }\n    }\n    return style;\n  }\n\n  function local(stream, state) {\n    var currListInd = state.listStack[state.listStack.length - 1] || 0;\n    var hasExitedList = state.indentation < currListInd;\n    var maxFencedEndInd = currListInd + 3;\n    if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) {\n      if (modeCfg.highlightFormatting) state.formatting = \"code-block\";\n      var returnType;\n      if (!hasExitedList) returnType = getType(state)\n      state.localMode = state.localState = null;\n      state.block = blockNormal;\n      state.f = inlineNormal;\n      state.fencedEndRE = null;\n      state.code = 0\n      state.thisLine.fencedCodeEnd = true;\n      if (hasExitedList) return switchBlock(stream, state, state.block);\n      return returnType;\n    } else if (state.localMode) {\n      return state.localMode.token(stream, state.localState);\n    } else {\n      stream.skipToEnd();\n      return tokenTypes.code;\n    }\n  }\n\n  // Inline\n  function getType(state) {\n    var styles = [];\n\n    if (state.formatting) {\n      styles.push(tokenTypes.formatting);\n\n      if (typeof state.formatting === \"string\") state.formatting = [state.formatting];\n\n      for (var i = 0; i < state.formatting.length; i++) {\n        styles.push(tokenTypes.formatting + \"-\" + state.formatting[i]);\n\n        if (state.formatting[i] === \"header\") {\n          styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.header);\n        }\n\n        // Add `formatting-quote` and `formatting-quote-#` for blockquotes\n        // Add `error` instead if the maximum blockquote nesting depth is passed\n        if (state.formatting[i] === \"quote\") {\n          if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n            styles.push(tokenTypes.formatting + \"-\" + state.formatting[i] + \"-\" + state.quote);\n          } else {\n            styles.push(\"error\");\n          }\n        }\n      }\n    }\n\n    if (state.taskOpen) {\n      styles.push(\"meta\");\n      return styles.length ? styles.join(' ') : null;\n    }\n    if (state.taskClosed) {\n      styles.push(\"property\");\n      return styles.length ? styles.join(' ') : null;\n    }\n\n    if (state.linkHref) {\n      styles.push(tokenTypes.linkHref, \"url\");\n    } else { // Only apply inline styles to non-url text\n      if (state.strong) { styles.push(tokenTypes.strong); }\n      if (state.em) { styles.push(tokenTypes.em); }\n      if (state.strikethrough) { styles.push(tokenTypes.strikethrough); }\n      if (state.emoji) { styles.push(tokenTypes.emoji); }\n      if (state.linkText) { styles.push(tokenTypes.linkText); }\n      if (state.code) { styles.push(tokenTypes.code); }\n      if (state.image) { styles.push(tokenTypes.image); }\n      if (state.imageAltText) { styles.push(tokenTypes.imageAltText, \"link\"); }\n      if (state.imageMarker) { styles.push(tokenTypes.imageMarker); }\n    }\n\n    if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + \"-\" + state.header); }\n\n    if (state.quote) {\n      styles.push(tokenTypes.quote);\n\n      // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth\n      if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) {\n        styles.push(tokenTypes.quote + \"-\" + state.quote);\n      } else {\n        styles.push(tokenTypes.quote + \"-\" + modeCfg.maxBlockquoteDepth);\n      }\n    }\n\n    if (state.list !== false) {\n      var listMod = (state.listStack.length - 1) % 3;\n      if (!listMod) {\n        styles.push(tokenTypes.list1);\n      } else if (listMod === 1) {\n        styles.push(tokenTypes.list2);\n      } else {\n        styles.push(tokenTypes.list3);\n      }\n    }\n\n    if (state.trailingSpaceNewLine) {\n      styles.push(\"trailing-space-new-line\");\n    } else if (state.trailingSpace) {\n      styles.push(\"trailing-space-\" + (state.trailingSpace % 2 ? \"a\" : \"b\"));\n    }\n\n    return styles.length ? styles.join(' ') : null;\n  }\n\n  function handleText(stream, state) {\n    if (stream.match(textRE, true)) {\n      return getType(state);\n    }\n    return undefined;\n  }\n\n  function inlineNormal(stream, state) {\n    var style = state.text(stream, state);\n    if (typeof style !== 'undefined')\n      return style;\n\n    if (state.list) { // List marker (*, +, -, 1., etc)\n      state.list = null;\n      return getType(state);\n    }\n\n    if (state.taskList) {\n      var taskOpen = stream.match(taskListRE, true)[1] === \" \";\n      if (taskOpen) state.taskOpen = true;\n      else state.taskClosed = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"task\";\n      state.taskList = false;\n      return getType(state);\n    }\n\n    state.taskOpen = false;\n    state.taskClosed = false;\n\n    if (state.header && stream.match(/^#+$/, true)) {\n      if (modeCfg.highlightFormatting) state.formatting = \"header\";\n      return getType(state);\n    }\n\n    var ch = stream.next();\n\n    // Matches link titles present on next line\n    if (state.linkTitle) {\n      state.linkTitle = false;\n      var matchCh = ch;\n      if (ch === '(') {\n        matchCh = ')';\n      }\n      matchCh = (matchCh+'').replace(/([.?*+^\\[\\]\\\\(){}|-])/g, \"\\\\$1\");\n      var regex = '^\\\\s*(?:[^' + matchCh + '\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)' + matchCh;\n      if (stream.match(new RegExp(regex), true)) {\n        return tokenTypes.linkHref;\n      }\n    }\n\n    // If this block is changed, it may need to be updated in GFM mode\n    if (ch === '`') {\n      var previousFormatting = state.formatting;\n      if (modeCfg.highlightFormatting) state.formatting = \"code\";\n      stream.eatWhile('`');\n      var count = stream.current().length\n      if (state.code == 0 && (!state.quote || count == 1)) {\n        state.code = count\n        return getType(state)\n      } else if (count == state.code) { // Must be exact\n        var t = getType(state)\n        state.code = 0\n        return t\n      } else {\n        state.formatting = previousFormatting\n        return getType(state)\n      }\n    } else if (state.code) {\n      return getType(state);\n    }\n\n    if (ch === '\\\\') {\n      stream.next();\n      if (modeCfg.highlightFormatting) {\n        var type = getType(state);\n        var formattingEscape = tokenTypes.formatting + \"-escape\";\n        return type ? type + \" \" + formattingEscape : formattingEscape;\n      }\n    }\n\n    if (ch === '!' && stream.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/, false)) {\n      state.imageMarker = true;\n      state.image = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === '[' && state.imageMarker && stream.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/, false)) {\n      state.imageMarker = false;\n      state.imageAltText = true\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.imageAltText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"image\";\n      var type = getType(state);\n      state.imageAltText = false;\n      state.image = false;\n      state.inline = state.f = linkHref;\n      return type;\n    }\n\n    if (ch === '[' && !state.image) {\n      if (state.linkText && stream.match(/^.*?\\]/)) return getType(state)\n      state.linkText = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      return getType(state);\n    }\n\n    if (ch === ']' && state.linkText) {\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      state.linkText = false;\n      state.inline = state.f = stream.match(/\\(.*?\\)| ?\\[.*?\\]/, false) ? linkHref : inlineNormal\n      return type;\n    }\n\n    if (ch === '<' && stream.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    if (ch === '<' && stream.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/, false)) {\n      state.f = state.inline = linkInline;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkEmail;\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\\?|!\\[CDATA\\[|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*(?:>|$))/i, false)) {\n      var end = stream.string.indexOf(\">\", stream.pos);\n      if (end != -1) {\n        var atts = stream.string.substring(stream.start, end);\n        if (/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(atts)) state.md_inside = true;\n      }\n      stream.backUp(1);\n      state.htmlState = CodeMirror.startState(htmlMode);\n      return switchBlock(stream, state, htmlBlock);\n    }\n\n    if (modeCfg.xml && ch === '<' && stream.match(/^\\/\\w*?>/)) {\n      state.md_inside = false;\n      return \"tag\";\n    } else if (ch === \"*\" || ch === \"_\") {\n      var len = 1, before = stream.pos == 1 ? \" \" : stream.string.charAt(stream.pos - 2)\n      while (len < 3 && stream.eat(ch)) len++\n      var after = stream.peek() || \" \"\n      // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis\n      var leftFlanking = !/\\s/.test(after) && (!punctuation.test(after) || /\\s/.test(before) || punctuation.test(before))\n      var rightFlanking = !/\\s/.test(before) && (!punctuation.test(before) || /\\s/.test(after) || punctuation.test(after))\n      var setEm = null, setStrong = null\n      if (len % 2) { // Em\n        if (!state.em && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setEm = true\n        else if (state.em == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setEm = false\n      }\n      if (len > 1) { // Strong\n        if (!state.strong && leftFlanking && (ch === \"*\" || !rightFlanking || punctuation.test(before)))\n          setStrong = true\n        else if (state.strong == ch && rightFlanking && (ch === \"*\" || !leftFlanking || punctuation.test(after)))\n          setStrong = false\n      }\n      if (setStrong != null || setEm != null) {\n        if (modeCfg.highlightFormatting) state.formatting = setEm == null ? \"strong\" : setStrong == null ? \"em\" : \"strong em\"\n        if (setEm === true) state.em = ch\n        if (setStrong === true) state.strong = ch\n        var t = getType(state)\n        if (setEm === false) state.em = false\n        if (setStrong === false) state.strong = false\n        return t\n      }\n    } else if (ch === ' ') {\n      if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces\n        if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n          return getType(state);\n        } else { // Not surrounded by spaces, back up pointer\n          stream.backUp(1);\n        }\n      }\n    }\n\n    if (modeCfg.strikethrough) {\n      if (ch === '~' && stream.eatWhile(ch)) {\n        if (state.strikethrough) {// Remove strikethrough\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          var t = getType(state);\n          state.strikethrough = false;\n          return t;\n        } else if (stream.match(/^[^\\s]/, false)) {// Add strikethrough\n          state.strikethrough = true;\n          if (modeCfg.highlightFormatting) state.formatting = \"strikethrough\";\n          return getType(state);\n        }\n      } else if (ch === ' ') {\n        if (stream.match(/^~~/, true)) { // Probably surrounded by space\n          if (stream.peek() === ' ') { // Surrounded by spaces, ignore\n            return getType(state);\n          } else { // Not surrounded by spaces, back up pointer\n            stream.backUp(2);\n          }\n        }\n      }\n    }\n\n    if (modeCfg.emoji && ch === \":\" && stream.match(/^(?:[a-z_\\d+][a-z_\\d+-]*|\\-[a-z_\\d+][a-z_\\d+-]*):/)) {\n      state.emoji = true;\n      if (modeCfg.highlightFormatting) state.formatting = \"emoji\";\n      var retType = getType(state);\n      state.emoji = false;\n      return retType;\n    }\n\n    if (ch === ' ') {\n      if (stream.match(/^ +$/, false)) {\n        state.trailingSpace++;\n      } else if (state.trailingSpace) {\n        state.trailingSpaceNewLine = true;\n      }\n    }\n\n    return getType(state);\n  }\n\n  function linkInline(stream, state) {\n    var ch = stream.next();\n\n    if (ch === \">\") {\n      state.f = state.inline = inlineNormal;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var type = getType(state);\n      if (type){\n        type += \" \";\n      } else {\n        type = \"\";\n      }\n      return type + tokenTypes.linkInline;\n    }\n\n    stream.match(/^[^>]+/, true);\n\n    return tokenTypes.linkInline;\n  }\n\n  function linkHref(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    var ch = stream.next();\n    if (ch === '(' || ch === '[') {\n      state.f = state.inline = getLinkHrefInside(ch === \"(\" ? \")\" : \"]\");\n      if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n      state.linkHref = true;\n      return getType(state);\n    }\n    return 'error';\n  }\n\n  var linkRE = {\n    \")\": /^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\n    \"]\": /^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/\n  }\n\n  function getLinkHrefInside(endChar) {\n    return function(stream, state) {\n      var ch = stream.next();\n\n      if (ch === endChar) {\n        state.f = state.inline = inlineNormal;\n        if (modeCfg.highlightFormatting) state.formatting = \"link-string\";\n        var returnState = getType(state);\n        state.linkHref = false;\n        return returnState;\n      }\n\n      stream.match(linkRE[endChar])\n      state.linkHref = true;\n      return getType(state);\n    };\n  }\n\n  function footnoteLink(stream, state) {\n    if (stream.match(/^([^\\]\\\\]|\\\\.)*\\]:/, false)) {\n      state.f = footnoteLinkInside;\n      stream.next(); // Consume [\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      state.linkText = true;\n      return getType(state);\n    }\n    return switchInline(stream, state, inlineNormal);\n  }\n\n  function footnoteLinkInside(stream, state) {\n    if (stream.match(/^\\]:/, true)) {\n      state.f = state.inline = footnoteUrl;\n      if (modeCfg.highlightFormatting) state.formatting = \"link\";\n      var returnType = getType(state);\n      state.linkText = false;\n      return returnType;\n    }\n\n    stream.match(/^([^\\]\\\\]|\\\\.)+/, true);\n\n    return tokenTypes.linkText;\n  }\n\n  function footnoteUrl(stream, state) {\n    // Check if space, and return NULL if so (to avoid marking the space)\n    if(stream.eatSpace()){\n      return null;\n    }\n    // Match URL\n    stream.match(/^[^\\s]+/, true);\n    // Check for link title\n    if (stream.peek() === undefined) { // End of line, set flag to check next line\n      state.linkTitle = true;\n    } else { // More content on line, check if link title\n      stream.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/, true);\n    }\n    state.f = state.inline = inlineNormal;\n    return tokenTypes.linkHref + \" url\";\n  }\n\n  var mode = {\n    startState: function() {\n      return {\n        f: blockNormal,\n\n        prevLine: {stream: null},\n        thisLine: {stream: null},\n\n        block: blockNormal,\n        htmlState: null,\n        indentation: 0,\n\n        inline: inlineNormal,\n        text: handleText,\n\n        formatting: false,\n        linkText: false,\n        linkHref: false,\n        linkTitle: false,\n        code: 0,\n        em: false,\n        strong: false,\n        header: 0,\n        setext: 0,\n        hr: false,\n        taskList: false,\n        list: false,\n        listStack: [],\n        quote: 0,\n        trailingSpace: 0,\n        trailingSpaceNewLine: false,\n        strikethrough: false,\n        emoji: false,\n        fencedEndRE: null\n      };\n    },\n\n    copyState: function(s) {\n      return {\n        f: s.f,\n\n        prevLine: s.prevLine,\n        thisLine: s.thisLine,\n\n        block: s.block,\n        htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState),\n        indentation: s.indentation,\n\n        localMode: s.localMode,\n        localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null,\n\n        inline: s.inline,\n        text: s.text,\n        formatting: false,\n        linkText: s.linkText,\n        linkTitle: s.linkTitle,\n        linkHref: s.linkHref,\n        code: s.code,\n        em: s.em,\n        strong: s.strong,\n        strikethrough: s.strikethrough,\n        emoji: s.emoji,\n        header: s.header,\n        setext: s.setext,\n        hr: s.hr,\n        taskList: s.taskList,\n        list: s.list,\n        listStack: s.listStack.slice(0),\n        quote: s.quote,\n        indentedCode: s.indentedCode,\n        trailingSpace: s.trailingSpace,\n        trailingSpaceNewLine: s.trailingSpaceNewLine,\n        md_inside: s.md_inside,\n        fencedEndRE: s.fencedEndRE\n      };\n    },\n\n    token: function(stream, state) {\n\n      // Reset state.formatting\n      state.formatting = false;\n\n      if (stream != state.thisLine.stream) {\n        state.header = 0;\n        state.hr = false;\n\n        if (stream.match(/^\\s*$/, true)) {\n          blankLine(state);\n          return null;\n        }\n\n        state.prevLine = state.thisLine\n        state.thisLine = {stream: stream}\n\n        // Reset state.taskList\n        state.taskList = false;\n\n        // Reset state.trailingSpace\n        state.trailingSpace = 0;\n        state.trailingSpaceNewLine = false;\n\n        if (!state.localState) {\n          state.f = state.block;\n          if (state.f != htmlBlock) {\n            var indentation = stream.match(/^\\s*/, true)[0].replace(/\\t/g, expandedTab).length;\n            state.indentation = indentation;\n            state.indentationDiff = null;\n            if (indentation > 0) return null;\n          }\n        }\n      }\n      return state.f(stream, state);\n    },\n\n    innerMode: function(state) {\n      if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode};\n      if (state.localState) return {state: state.localState, mode: state.localMode};\n      return {state: state, mode: mode};\n    },\n\n    indent: function(state, textAfter, line) {\n      if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line)\n      if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line)\n      return CodeMirror.Pass\n    },\n\n    blankLine: blankLine,\n\n    getType: getType,\n\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n    closeBrackets: \"()[]{}''\\\"\\\"``\",\n    fold: \"markdown\"\n  };\n  return mode;\n}, \"xml\");\n\nCodeMirror.defineMIME(\"text/markdown\", \"markdown\");\n\nCodeMirror.defineMIME(\"text/x-markdown\", \"markdown\");\n\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n  return {\n    startState: function() {\n      return {\n        base: CodeMirror.startState(base),\n        overlay: CodeMirror.startState(overlay),\n        basePos: 0, baseCur: null,\n        overlayPos: 0, overlayCur: null,\n        streamSeen: null\n      };\n    },\n    copyState: function(state) {\n      return {\n        base: CodeMirror.copyState(base, state.base),\n        overlay: CodeMirror.copyState(overlay, state.overlay),\n        basePos: state.basePos, baseCur: null,\n        overlayPos: state.overlayPos, overlayCur: null\n      };\n    },\n\n    token: function(stream, state) {\n      if (stream != state.streamSeen ||\n          Math.min(state.basePos, state.overlayPos) < stream.start) {\n        state.streamSeen = stream;\n        state.basePos = state.overlayPos = stream.start;\n      }\n\n      if (stream.start == state.basePos) {\n        state.baseCur = base.token(stream, state.base);\n        state.basePos = stream.pos;\n      }\n      if (stream.start == state.overlayPos) {\n        stream.pos = stream.start;\n        state.overlayCur = overlay.token(stream, state.overlay);\n        state.overlayPos = stream.pos;\n      }\n      stream.pos = Math.min(state.basePos, state.overlayPos);\n\n      // state.overlay.combineTokens always takes precedence over combine,\n      // unless set to null\n      if (state.overlayCur == null) return state.baseCur;\n      else if (state.baseCur != null &&\n               state.overlay.combineTokens ||\n               combine && state.overlay.combineTokens == null)\n        return state.baseCur + \" \" + state.overlayCur;\n      else return state.overlayCur;\n    },\n\n    indent: base.indent && function(state, textAfter, line) {\n      return base.indent(state.base, textAfter, line);\n    },\n    electricChars: base.electricChars,\n\n    innerMode: function(state) { return {state: state.base, mode: base}; },\n\n    blankLine: function(state) {\n      var baseToken, overlayToken;\n      if (base.blankLine) baseToken = base.blankLine(state.base);\n      if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n      return overlayToken == null ?\n        baseToken :\n        (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n    }\n  };\n};\n\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.on(\"blur\", onBlur);\n      cm.on(\"change\", onChange);\n      cm.on(\"swapDoc\", onChange);\n      CodeMirror.on(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose = function() { onComposition(cm) })\n      onChange(cm);\n    } else if (!val && prev) {\n      cm.off(\"blur\", onBlur);\n      cm.off(\"change\", onChange);\n      cm.off(\"swapDoc\", onChange);\n      CodeMirror.off(cm.getInputField(), \"compositionupdate\", cm.state.placeholderCompose)\n      clearPlaceholder(cm);\n      var wrapper = cm.getWrapperElement();\n      wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n    }\n\n    if (val && !cm.hasFocus()) onBlur(cm);\n  });\n\n  function clearPlaceholder(cm) {\n    if (cm.state.placeholder) {\n      cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n      cm.state.placeholder = null;\n    }\n  }\n  function setPlaceholder(cm) {\n    clearPlaceholder(cm);\n    var elt = cm.state.placeholder = document.createElement(\"pre\");\n    elt.style.cssText = \"height: 0; overflow: visible\";\n    elt.style.direction = cm.getOption(\"direction\");\n    elt.className = \"CodeMirror-placeholder CodeMirror-line-like\";\n    var placeHolder = cm.getOption(\"placeholder\")\n    if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n    elt.appendChild(placeHolder)\n    cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n  }\n\n  function onComposition(cm) {\n    setTimeout(function() {\n      var empty = false, input = cm.getInputField()\n      if (input.nodeName == \"TEXTAREA\")\n        empty = !input.value\n      else if (cm.lineCount() == 1)\n        empty = !/[^\\u200b]/.test(input.querySelector(\".CodeMirror-line\").textContent)\n      if (empty) setPlaceholder(cm)\n      else clearPlaceholder(cm)\n    }, 20)\n  }\n\n  function onBlur(cm) {\n    if (isEmpty(cm)) setPlaceholder(cm);\n  }\n  function onChange(cm) {\n    var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n    wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n    if (empty) setPlaceholder(cm);\n    else clearPlaceholder(cm);\n  }\n\n  function isEmpty(cm) {\n    return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n  }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.state.markedSelection = [];\n      cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n      reset(cm);\n      cm.on(\"cursorActivity\", onCursorActivity);\n      cm.on(\"change\", onChange);\n    } else if (!val && prev) {\n      cm.off(\"cursorActivity\", onCursorActivity);\n      cm.off(\"change\", onChange);\n      clear(cm);\n      cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n    }\n  });\n\n  function onCursorActivity(cm) {\n    if (cm.state.markedSelection)\n      cm.operation(function() { update(cm); });\n  }\n\n  function onChange(cm) {\n    if (cm.state.markedSelection && cm.state.markedSelection.length)\n      cm.operation(function() { clear(cm); });\n  }\n\n  var CHUNK_SIZE = 8;\n  var Pos = CodeMirror.Pos;\n  var cmp = CodeMirror.cmpPos;\n\n  function coverRange(cm, from, to, addAt) {\n    if (cmp(from, to) == 0) return;\n    var array = cm.state.markedSelection;\n    var cls = cm.state.markedSelectionStyle;\n    for (var line = from.line;;) {\n      var start = line == from.line ? from : Pos(line, 0);\n      var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n      var end = atEnd ? to : Pos(endLine, 0);\n      var mark = cm.markText(start, end, {className: cls});\n      if (addAt == null) array.push(mark);\n      else array.splice(addAt++, 0, mark);\n      if (atEnd) break;\n      line = endLine;\n    }\n  }\n\n  function clear(cm) {\n    var array = cm.state.markedSelection;\n    for (var i = 0; i < array.length; ++i) array[i].clear();\n    array.length = 0;\n  }\n\n  function reset(cm) {\n    clear(cm);\n    var ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++)\n      coverRange(cm, ranges[i].from(), ranges[i].to());\n  }\n\n  function update(cm) {\n    if (!cm.somethingSelected()) return clear(cm);\n    if (cm.listSelections().length > 1) return reset(cm);\n\n    var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n    var array = cm.state.markedSelection;\n    if (!array.length) return coverRange(cm, from, to);\n\n    var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n    if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n        cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n      return reset(cm);\n\n    while (cmp(from, coverStart.from) > 0) {\n      array.shift().clear();\n      coverStart = array[0].find();\n    }\n    if (cmp(from, coverStart.from) < 0) {\n      if (coverStart.to.line - from.line < CHUNK_SIZE) {\n        array.shift().clear();\n        coverRange(cm, from, coverStart.to, 0);\n      } else {\n        coverRange(cm, from, coverStart.from, 0);\n      }\n    }\n\n    while (cmp(to, coverEnd.to) < 0) {\n      array.pop().clear();\n      coverEnd = array[array.length - 1].find();\n    }\n    if (cmp(to, coverEnd.to) > 0) {\n      if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n        array.pop().clear();\n        coverRange(cm, coverEnd.from, to);\n      } else {\n        coverRange(cm, coverEnd.to, to);\n      }\n    }\n  }\n});\n", "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../markdown/markdown\"), require(\"../../addon/mode/overlay\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../markdown/markdown\", \"../../addon/mode/overlay\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar urlRE = /^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\\.beep|\\.lwz|\\.xpc|\\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\\.beeps?|xmpp|xri|ymsgr|z39\\.50[rs]?):(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\([^\\s()<>]*\\))+(?:\\([^\\s()<>]*\\)|[^\\s`*!()\\[\\]{};:'\".,<>?\u00AB\u00BB\u201C\u201D\u2018\u2019]))/i\n\nCodeMirror.defineMode(\"gfm\", function(config, modeConfig) {\n  var codeDepth = 0;\n  function blankLine(state) {\n    state.code = false;\n    return null;\n  }\n  var gfmOverlay = {\n    startState: function() {\n      return {\n        code: false,\n        codeBlock: false,\n        ateSpace: false\n      };\n    },\n    copyState: function(s) {\n      return {\n        code: s.code,\n        codeBlock: s.codeBlock,\n        ateSpace: s.ateSpace\n      };\n    },\n    token: function(stream, state) {\n      state.combineTokens = null;\n\n      // Hack to prevent formatting override inside code blocks (block and inline)\n      if (state.codeBlock) {\n        if (stream.match(/^```+/)) {\n          state.codeBlock = false;\n          return null;\n        }\n        stream.skipToEnd();\n        return null;\n      }\n      if (stream.sol()) {\n        state.code = false;\n      }\n      if (stream.sol() && stream.match(/^```+/)) {\n        stream.skipToEnd();\n        state.codeBlock = true;\n        return null;\n      }\n      // If this block is changed, it may need to be updated in Markdown mode\n      if (stream.peek() === '`') {\n        stream.next();\n        var before = stream.pos;\n        stream.eatWhile('`');\n        var difference = 1 + stream.pos - before;\n        if (!state.code) {\n          codeDepth = difference;\n          state.code = true;\n        } else {\n          if (difference === codeDepth) { // Must be exact\n            state.code = false;\n          }\n        }\n        return null;\n      } else if (state.code) {\n        stream.next();\n        return null;\n      }\n      // Check if space. If so, links can be formatted later on\n      if (stream.eatSpace()) {\n        state.ateSpace = true;\n        return null;\n      }\n      if (stream.sol() || state.ateSpace) {\n        state.ateSpace = false;\n        if (modeConfig.gitHubSpice !== false) {\n          if(stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+@)?(?=.{0,6}\\d)(?:[a-f0-9]{7,40}\\b)/)) {\n            // User/Project@SHA\n            // User@SHA\n            // SHA\n            state.combineTokens = true;\n            return \"link\";\n          } else if (stream.match(/^(?:[a-zA-Z0-9\\-_]+\\/)?(?:[a-zA-Z0-9\\-_]+)?#[0-9]+\\b/)) {\n            // User/Project#Num\n            // User#Num\n            // #Num\n            state.combineTokens = true;\n            return \"link\";\n          }\n        }\n      }\n      if (stream.match(urlRE) &&\n          stream.string.slice(stream.start - 2, stream.start) != \"](\" &&\n          (stream.start == 0 || /\\W/.test(stream.string.charAt(stream.start - 1)))) {\n        // URLs\n        // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls\n        // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine\n        // And then limited url schemes to the CommonMark list, so foo:bar isn't matched as a URL\n        state.combineTokens = true;\n        return \"link\";\n      }\n      stream.next();\n      return null;\n    },\n    blankLine: blankLine\n  };\n\n  var markdownConfig = {\n    taskLists: true,\n    strikethrough: true,\n    emoji: true\n  };\n  for (var attr in modeConfig) {\n    markdownConfig[attr] = modeConfig[attr];\n  }\n  markdownConfig.name = \"markdown\";\n  return CodeMirror.overlayMode(CodeMirror.getMode(config, markdownConfig), gfmOverlay);\n\n}, \"markdown\");\n\n  CodeMirror.defineMIME(\"text/x-gfm\", \"gfm\");\n});\n", "/* globals chrome: false */\n/* globals __dirname: false */\n/* globals require: false */\n/* globals Buffer: false */\n/* globals module: false */\n\n/**\n * Typo is a JavaScript implementation of a spellchecker using hunspell-style \n * dictionaries.\n */\n\nvar Typo;\n\n(function () {\n\"use strict\";\n\n/**\n * Typo constructor.\n *\n * @param {String} [dictionary] The locale code of the dictionary being used. e.g.,\n *                              \"en_US\". This is only used to auto-load dictionaries.\n * @param {String} [affData]    The data from the dictionary's .aff file. If omitted\n *                              and Typo.js is being used in a Chrome extension, the .aff\n *                              file will be loaded automatically from\n *                              lib/typo/dictionaries/[dictionary]/[dictionary].aff\n *                              In other environments, it will be loaded from\n *                              [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].aff\n * @param {String} [wordsData]  The data from the dictionary's .dic file. If omitted\n *                              and Typo.js is being used in a Chrome extension, the .dic\n *                              file will be loaded automatically from\n *                              lib/typo/dictionaries/[dictionary]/[dictionary].dic\n *                              In other environments, it will be loaded from\n *                              [settings.dictionaryPath]/dictionaries/[dictionary]/[dictionary].dic\n * @param {Object} [settings]   Constructor settings. Available properties are:\n *                              {String} [dictionaryPath]: path to load dictionary from in non-chrome\n *                              environment.\n *                              {Object} [flags]: flag information.\n *                              {Boolean} [asyncLoad]: If true, affData and wordsData will be loaded\n *                              asynchronously.\n *                              {Function} [loadedCallback]: Called when both affData and wordsData\n *                              have been loaded. Only used if asyncLoad is set to true. The parameter\n *                              is the instantiated Typo object.\n *\n * @returns {Typo} A Typo object.\n */\n\nTypo = function (dictionary, affData, wordsData, settings) {\n\tsettings = settings || {};\n\n\tthis.dictionary = null;\n\t\n\tthis.rules = {};\n\tthis.dictionaryTable = {};\n\t\n\tthis.compoundRules = [];\n\tthis.compoundRuleCodes = {};\n\t\n\tthis.replacementTable = [];\n\t\n\tthis.flags = settings.flags || {}; \n\t\n\tthis.memoized = {};\n\n\tthis.loaded = false;\n\t\n\tvar self = this;\n\t\n\tvar path;\n\t\n\t// Loop-control variables.\n\tvar i, j, _len, _jlen;\n\t\n\tif (dictionary) {\n\t\tself.dictionary = dictionary;\n\t\t\n\t\t// If the data is preloaded, just setup the Typo object.\n\t\tif (affData && wordsData) {\n\t\t\tsetup();\n\t\t}\n\t\t// Loading data for Chrome extentions.\n\t\telse if (typeof window !== 'undefined' && 'chrome' in window && 'extension' in window.chrome && 'getURL' in window.chrome.extension) {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = \"typo/dictionaries\";\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\"), setAffData);\n\t\t\tif (!wordsData) readDataFile(chrome.extension.getURL(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\"), setWordsData);\n\t\t}\n\t\telse {\n\t\t\tif (settings.dictionaryPath) {\n\t\t\t\tpath = settings.dictionaryPath;\n\t\t\t}\n\t\t\telse if (typeof __dirname !== 'undefined') {\n\t\t\t\tpath = __dirname + '/dictionaries';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpath = './dictionaries';\n\t\t\t}\n\t\t\t\n\t\t\tif (!affData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".aff\", setAffData);\n\t\t\tif (!wordsData) readDataFile(path + \"/\" + dictionary + \"/\" + dictionary + \".dic\", setWordsData);\n\t\t}\n\t}\n\t\n\tfunction readDataFile(url, setFunc) {\n\t\tvar response = self._readFile(url, null, settings.asyncLoad);\n\t\t\n\t\tif (settings.asyncLoad) {\n\t\t\tresponse.then(function(data) {\n\t\t\t\tsetFunc(data);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tsetFunc(response);\n\t\t}\n\t}\n\n\tfunction setAffData(data) {\n\t\taffData = data;\n\n\t\tif (wordsData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setWordsData(data) {\n\t\twordsData = data;\n\n\t\tif (affData) {\n\t\t\tsetup();\n\t\t}\n\t}\n\n\tfunction setup() {\n\t\tself.rules = self._parseAFF(affData);\n\t\t\n\t\t// Save the rule codes that are used in compound rules.\n\t\tself.compoundRuleCodes = {};\n\t\t\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar rule = self.compoundRules[i];\n\t\t\t\n\t\t\tfor (j = 0, _jlen = rule.length; j < _jlen; j++) {\n\t\t\t\tself.compoundRuleCodes[rule[j]] = [];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// If we add this ONLYINCOMPOUND flag to self.compoundRuleCodes, then _parseDIC\n\t\t// will do the work of saving the list of words that are compound-only.\n\t\tif (\"ONLYINCOMPOUND\" in self.flags) {\n\t\t\tself.compoundRuleCodes[self.flags.ONLYINCOMPOUND] = [];\n\t\t}\n\t\t\n\t\tself.dictionaryTable = self._parseDIC(wordsData);\n\t\t\n\t\t// Get rid of any codes from the compound rule codes that are never used \n\t\t// (or that were special regex characters).  Not especially necessary... \n\t\tfor (i in self.compoundRuleCodes) {\n\t\t\tif (self.compoundRuleCodes[i].length === 0) {\n\t\t\t\tdelete self.compoundRuleCodes[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Build the full regular expressions for each compound rule.\n\t\t// I have a feeling (but no confirmation yet) that this method of \n\t\t// testing for compound words is probably slow.\n\t\tfor (i = 0, _len = self.compoundRules.length; i < _len; i++) {\n\t\t\tvar ruleText = self.compoundRules[i];\n\t\t\t\n\t\t\tvar expressionText = \"\";\n\t\t\t\n\t\t\tfor (j = 0, _jlen = ruleText.length; j < _jlen; j++) {\n\t\t\t\tvar character = ruleText[j];\n\t\t\t\t\n\t\t\t\tif (character in self.compoundRuleCodes) {\n\t\t\t\t\texpressionText += \"(\" + self.compoundRuleCodes[character].join(\"|\") + \")\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\texpressionText += character;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself.compoundRules[i] = new RegExp(expressionText, \"i\");\n\t\t}\n\t\t\n\t\tself.loaded = true;\n\t\t\n\t\tif (settings.asyncLoad && settings.loadedCallback) {\n\t\t\tsettings.loadedCallback(self);\n\t\t}\n\t}\n\t\n\treturn this;\n};\n\nTypo.prototype = {\n\t/**\n\t * Loads a Typo instance from a hash of all of the Typo properties.\n\t *\n\t * @param object obj A hash of Typo properties, probably gotten from a JSON.parse(JSON.stringify(typo_instance)).\n\t */\n\t\n\tload : function (obj) {\n\t\tfor (var i in obj) {\n\t\t\tif (obj.hasOwnProperty(i)) {\n\t\t\t\tthis[i] = obj[i];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Read the contents of a file.\n\t * \n\t * @param {String} path The path (relative) to the file.\n\t * @param {String} [charset=\"ISO8859-1\"] The expected charset of the file\n\t * @param {Boolean} async If true, the file will be read asynchronously. For node.js this does nothing, all\n\t *        files are read synchronously.\n\t * @returns {String} The file data if async is false, otherwise a promise object. If running node.js, the data is\n\t *          always returned.\n\t */\n\t\n\t_readFile : function (path, charset, async) {\n\t\tcharset = charset || \"utf8\";\n\t\t\n\t\tif (typeof XMLHttpRequest !== 'undefined') {\n\t\t\tvar promise;\n\t\t\tvar req = new XMLHttpRequest();\n\t\t\treq.open(\"GET\", path, async);\n\t\t\t\n\t\t\tif (async) {\n\t\t\t\tpromise = new Promise(function(resolve, reject) {\n\t\t\t\t\treq.onload = function() {\n\t\t\t\t\t\tif (req.status === 200) {\n\t\t\t\t\t\t\tresolve(req.responseText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\treq.onerror = function() {\n\t\t\t\t\t\treject(req.statusText);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\tif (req.overrideMimeType)\n\t\t\t\treq.overrideMimeType(\"text/plain; charset=\" + charset);\n\t\t\n\t\t\treq.send(null);\n\t\t\t\n\t\t\treturn async ? promise : req.responseText;\n\t\t}\n\t\telse if (typeof require !== 'undefined') {\n\t\t\t// Node.js\n\t\t\tvar fs = require(\"fs\");\n\t\t\t\n\t\t\ttry {\n\t\t\t\tif (fs.existsSync(path)) {\n\t\t\t\t\treturn fs.readFileSync(path, charset);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.log(\"Path \" + path + \" does not exist.\");\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t},\n\t\n\t/**\n\t * Parse the rules out from a .aff file.\n\t *\n\t * @param {String} data The contents of the affix file.\n\t * @returns object The rules from the file.\n\t */\n\t\n\t_parseAFF : function (data) {\n\t\tvar rules = {};\n\t\t\n\t\tvar line, subline, numEntries, lineParts;\n\t\tvar i, j, _len, _jlen;\n\t\t\n\t\t// Remove comment lines\n\t\tdata = this._removeAffixComments(data);\n\t\t\n\t\tvar lines = data.split(/\\r?\\n/);\n\t\t\n\t\tfor (i = 0, _len = lines.length; i < _len; i++) {\n\t\t\tline = lines[i];\n\t\t\t\n\t\t\tvar definitionParts = line.split(/\\s+/);\n\t\t\t\n\t\t\tvar ruleType = definitionParts[0];\n\t\t\t\n\t\t\tif (ruleType == \"PFX\" || ruleType == \"SFX\") {\n\t\t\t\tvar ruleCode = definitionParts[1];\n\t\t\t\tvar combineable = definitionParts[2];\n\t\t\t\tnumEntries = parseInt(definitionParts[3], 10);\n\t\t\t\t\n\t\t\t\tvar entries = [];\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tsubline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = subline.split(/\\s+/);\n\t\t\t\t\tvar charactersToRemove = lineParts[2];\n\t\t\t\t\t\n\t\t\t\t\tvar additionParts = lineParts[3].split(\"/\");\n\t\t\t\t\t\n\t\t\t\t\tvar charactersToAdd = additionParts[0];\n\t\t\t\t\tif (charactersToAdd === \"0\") charactersToAdd = \"\";\n\t\t\t\t\t\n\t\t\t\t\tvar continuationClasses = this.parseRuleCodes(additionParts[1]);\n\t\t\t\t\t\n\t\t\t\t\tvar regexToMatch = lineParts[4];\n\t\t\t\t\t\n\t\t\t\t\tvar entry = {};\n\t\t\t\t\tentry.add = charactersToAdd;\n\t\t\t\t\t\n\t\t\t\t\tif (continuationClasses.length > 0) entry.continuationClasses = continuationClasses;\n\t\t\t\t\t\n\t\t\t\t\tif (regexToMatch !== \".\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.match = new RegExp(regexToMatch + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.match = new RegExp(\"^\" + regexToMatch);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (charactersToRemove != \"0\") {\n\t\t\t\t\t\tif (ruleType === \"SFX\") {\n\t\t\t\t\t\t\tentry.remove = new RegExp(charactersToRemove  + \"$\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tentry.remove = charactersToRemove;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tentries.push(entry);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\trules[ruleCode] = { \"type\" : ruleType, \"combineable\" : (combineable == \"Y\"), \"entries\" : entries };\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"COMPOUNDRULE\") {\n\t\t\t\tnumEntries = parseInt(definitionParts[1], 10);\n\t\t\t\t\n\t\t\t\tfor (j = i + 1, _jlen = i + 1 + numEntries; j < _jlen; j++) {\n\t\t\t\t\tline = lines[j];\n\t\t\t\t\t\n\t\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\tthis.compoundRules.push(lineParts[1]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ti += numEntries;\n\t\t\t}\n\t\t\telse if (ruleType === \"REP\") {\n\t\t\t\tlineParts = line.split(/\\s+/);\n\t\t\t\t\n\t\t\t\tif (lineParts.length === 3) {\n\t\t\t\t\tthis.replacementTable.push([ lineParts[1], lineParts[2] ]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// ONLYINCOMPOUND\n\t\t\t\t// COMPOUNDMIN\n\t\t\t\t// FLAG\n\t\t\t\t// KEEPCASE\n\t\t\t\t// NEEDAFFIX\n\t\t\t\t\n\t\t\t\tthis.flags[ruleType] = definitionParts[1];\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn rules;\n\t},\n\t\n\t/**\n\t * Removes comment lines and then cleans up blank lines and trailing whitespace.\n\t *\n\t * @param {String} data The data from an affix file.\n\t * @return {String} The cleaned-up data.\n\t */\n\t\n\t_removeAffixComments : function (data) {\n\t\t// Remove comments\n\t\t// This used to remove any string starting with '#' up to the end of the line,\n\t\t// but some COMPOUNDRULE definitions include '#' as part of the rule.\n\t\t// I haven't seen any affix files that use comments on the same line as real data,\n\t\t// so I don't think this will break anything.\n\t\tdata = data.replace(/^\\s*#.*$/mg, \"\");\n\t\t\n\t\t// Trim each line\n\t\tdata = data.replace(/^\\s\\s*/m, '').replace(/\\s\\s*$/m, '');\n\t\t\n\t\t// Remove blank lines.\n\t\tdata = data.replace(/\\n{2,}/g, \"\\n\");\n\t\t\n\t\t// Trim the entire string\n\t\tdata = data.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t\t\n\t\treturn data;\n\t},\n\t\n\t/**\n\t * Parses the words out from the .dic file.\n\t *\n\t * @param {String} data The data from the dictionary file.\n\t * @returns object The lookup table containing all of the words and\n\t *                 word forms from the dictionary.\n\t */\n\t\n\t_parseDIC : function (data) {\n\t\tdata = this._removeDicComments(data);\n\t\t\n\t\tvar lines = data.split(/\\r?\\n/);\n\t\tvar dictionaryTable = {};\n\t\t\n\t\tfunction addWord(word, rules) {\n\t\t\t// Some dictionaries will list the same word multiple times with different rule sets.\n\t\t\tif (!dictionaryTable.hasOwnProperty(word)) {\n\t\t\t\tdictionaryTable[word] = null;\n\t\t\t}\n\t\t\t\n\t\t\tif (rules.length > 0) {\n\t\t\t\tif (dictionaryTable[word] === null) {\n\t\t\t\t\tdictionaryTable[word] = [];\n\t\t\t\t}\n\n\t\t\t\tdictionaryTable[word].push(rules);\n\t\t\t}\n\t\t}\n\t\t\n\t\t// The first line is the number of words in the dictionary.\n\t\tfor (var i = 1, _len = lines.length; i < _len; i++) {\n\t\t\tvar line = lines[i];\n\t\t\t\n\t\t\tif (!line) {\n\t\t\t\t// Ignore empty lines.\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar parts = line.split(\"/\", 2);\n\t\t\t\n\t\t\tvar word = parts[0];\n\n\t\t\t// Now for each affix rule, generate that form of the word.\n\t\t\tif (parts.length > 1) {\n\t\t\t\tvar ruleCodesArray = this.parseRuleCodes(parts[1]);\n\t\t\t\t\n\t\t\t\t// Save the ruleCodes for compound word situations.\n\t\t\t\tif (!(\"NEEDAFFIX\" in this.flags) || ruleCodesArray.indexOf(this.flags.NEEDAFFIX) == -1) {\n\t\t\t\t\taddWord(word, ruleCodesArray);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (var j = 0, _jlen = ruleCodesArray.length; j < _jlen; j++) {\n\t\t\t\t\tvar code = ruleCodesArray[j];\n\t\t\t\t\t\n\t\t\t\t\tvar rule = this.rules[code];\n\t\t\t\t\t\n\t\t\t\t\tif (rule) {\n\t\t\t\t\t\tvar newWords = this._applyRule(word, rule);\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var ii = 0, _iilen = newWords.length; ii < _iilen; ii++) {\n\t\t\t\t\t\t\tvar newWord = newWords[ii];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\taddWord(newWord, []);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (rule.combineable) {\n\t\t\t\t\t\t\t\tfor (var k = j + 1; k < _jlen; k++) {\n\t\t\t\t\t\t\t\t\tvar combineCode = ruleCodesArray[k];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tvar combineRule = this.rules[combineCode];\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (combineRule) {\n\t\t\t\t\t\t\t\t\t\tif (combineRule.combineable && (rule.type != combineRule.type)) {\n\t\t\t\t\t\t\t\t\t\t\tvar otherNewWords = this._applyRule(newWord, combineRule);\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tfor (var iii = 0, _iiilen = otherNewWords.length; iii < _iiilen; iii++) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar otherNewWord = otherNewWords[iii];\n\t\t\t\t\t\t\t\t\t\t\t\taddWord(otherNewWord, []);\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\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\t\n\t\t\t\t\tif (code in this.compoundRuleCodes) {\n\t\t\t\t\t\tthis.compoundRuleCodes[code].push(word);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\taddWord(word.trim(), []);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn dictionaryTable;\n\t},\n\t\n\t\n\t/**\n\t * Removes comment lines and then cleans up blank lines and trailing whitespace.\n\t *\n\t * @param {String} data The data from a .dic file.\n\t * @return {String} The cleaned-up data.\n\t */\n\t\n\t_removeDicComments : function (data) {\n\t\t// I can't find any official documentation on it, but at least the de_DE\n\t\t// dictionary uses tab-indented lines as comments.\n\t\t\n\t\t// Remove comments\n\t\tdata = data.replace(/^\\t.*$/mg, \"\");\n\t\t\n\t\treturn data;\n\t},\n\t\n\tparseRuleCodes : function (textCodes) {\n\t\tif (!textCodes) {\n\t\t\treturn [];\n\t\t}\n\t\telse if (!(\"FLAG\" in this.flags)) {\n\t\t\treturn textCodes.split(\"\");\n\t\t}\n\t\telse if (this.flags.FLAG === \"long\") {\n\t\t\tvar flags = [];\n\t\t\t\n\t\t\tfor (var i = 0, _len = textCodes.length; i < _len; i += 2) {\n\t\t\t\tflags.push(textCodes.substr(i, 2));\n\t\t\t}\n\t\t\t\n\t\t\treturn flags;\n\t\t}\n\t\telse if (this.flags.FLAG === \"num\") {\n\t\t\treturn textCodes.split(\",\");\n\t\t}\n\t},\n\t\n\t/**\n\t * Applies an affix rule to a word.\n\t *\n\t * @param {String} word The base word.\n\t * @param {Object} rule The affix rule.\n\t * @returns {String[]} The new words generated by the rule.\n\t */\n\t\n\t_applyRule : function (word, rule) {\n\t\tvar entries = rule.entries;\n\t\tvar newWords = [];\n\t\t\n\t\tfor (var i = 0, _len = entries.length; i < _len; i++) {\n\t\t\tvar entry = entries[i];\n\t\t\t\n\t\t\tif (!entry.match || word.match(entry.match)) {\n\t\t\t\tvar newWord = word;\n\t\t\t\t\n\t\t\t\tif (entry.remove) {\n\t\t\t\t\tnewWord = newWord.replace(entry.remove, \"\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (rule.type === \"SFX\") {\n\t\t\t\t\tnewWord = newWord + entry.add;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewWord = entry.add + newWord;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnewWords.push(newWord);\n\t\t\t\t\n\t\t\t\tif (\"continuationClasses\" in entry) {\n\t\t\t\t\tfor (var j = 0, _jlen = entry.continuationClasses.length; j < _jlen; j++) {\n\t\t\t\t\t\tvar continuationRule = this.rules[entry.continuationClasses[j]];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (continuationRule) {\n\t\t\t\t\t\t\tnewWords = newWords.concat(this._applyRule(newWord, continuationRule));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/*\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// This shouldn't happen, but it does, at least in the de_DE dictionary.\n\t\t\t\t\t\t\t// I think the author mistakenly supplied lower-case rule codes instead \n\t\t\t\t\t\t\t// of upper-case.\n\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\t\n\t\treturn newWords;\n\t},\n\t\n\t/**\n\t * Checks whether a word or a capitalization variant exists in the current dictionary.\n\t * The word is trimmed and several variations of capitalizations are checked.\n\t * If you want to check a word without any changes made to it, call checkExact()\n\t *\n\t * @see http://blog.stevenlevithan.com/archives/faster-trim-javascript re:trimming function\n\t *\n\t * @param {String} aWord The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheck : function (aWord) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\t\t\n\t\t// Remove leading and trailing whitespace\n\t\tvar trimmedWord = aWord.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t\t\n\t\tif (this.checkExact(trimmedWord)) {\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\t// The exact word is not in the dictionary.\n\t\tif (trimmedWord.toUpperCase() === trimmedWord) {\n\t\t\t// The word was supplied in all uppercase.\n\t\t\t// Check for a capitalized form of the word.\n\t\t\tvar capitalizedWord = trimmedWord[0] + trimmedWord.substring(1).toLowerCase();\n\t\t\t\n\t\t\tif (this.hasFlag(capitalizedWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.checkExact(capitalizedWord)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar lowercaseWord = trimmedWord.toLowerCase();\n\t\t\n\t\tif (lowercaseWord !== trimmedWord) {\n\t\t\tif (this.hasFlag(lowercaseWord, \"KEEPCASE\")) {\n\t\t\t\t// Capitalization variants are not allowed for this word.\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// Check for a lowercase form\n\t\t\tif (this.checkExact(lowercaseWord)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Checks whether a word exists in the current dictionary.\n\t *\n\t * @param {String} word The word to check.\n\t * @returns {Boolean}\n\t */\n\t\n\tcheckExact : function (word) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tvar ruleCodes = this.dictionaryTable[word];\n\t\t\n\t\tvar i, _len;\n\t\t\n\t\tif (typeof ruleCodes === 'undefined') {\n\t\t\t// Check if this might be a compound word.\n\t\t\tif (\"COMPOUNDMIN\" in this.flags && word.length >= this.flags.COMPOUNDMIN) {\n\t\t\t\tfor (i = 0, _len = this.compoundRules.length; i < _len; i++) {\n\t\t\t\t\tif (word.match(this.compoundRules[i])) {\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\t\telse if (ruleCodes === null) {\n\t\t\t// a null (but not undefined) value for an entry in the dictionary table\n\t\t\t// means that the word is in the dictionary but has no flags.\n\t\t\treturn true;\n\t\t}\n\t\telse if (typeof ruleCodes === 'object') { // this.dictionary['hasOwnProperty'] will be a function.\n\t\t\tfor (i = 0, _len = ruleCodes.length; i < _len; i++) {\n\t\t\t\tif (!this.hasFlag(word, \"ONLYINCOMPOUND\", ruleCodes[i])) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Looks up whether a given word is flagged with a given flag.\n\t *\n\t * @param {String} word The word in question.\n\t * @param {String} flag The flag in question.\n\t * @return {Boolean}\n\t */\n\t \n\thasFlag : function (word, flag, wordFlags) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tif (flag in this.flags) {\n\t\t\tif (typeof wordFlags === 'undefined') {\n\t\t\t\twordFlags = Array.prototype.concat.apply([], this.dictionaryTable[word]);\n\t\t\t}\n\t\t\t\n\t\t\tif (wordFlags && wordFlags.indexOf(this.flags[flag]) !== -1) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn false;\n\t},\n\t\n\t/**\n\t * Returns a list of suggestions for a misspelled word.\n\t *\n\t * @see http://www.norvig.com/spell-correct.html for the basis of this suggestor.\n\t * This suggestor is primitive, but it works.\n\t *\n\t * @param {String} word The misspelling.\n\t * @param {Number} [limit=5] The maximum number of suggestions to return.\n\t * @returns {String[]} The array of suggestions.\n\t */\n\t\n\talphabet : \"\",\n\t\n\tsuggest : function (word, limit) {\n\t\tif (!this.loaded) {\n\t\t\tthrow \"Dictionary not loaded.\";\n\t\t}\n\n\t\tlimit = limit || 5;\n\n\t\tif (this.memoized.hasOwnProperty(word)) {\n\t\t\tvar memoizedLimit = this.memoized[word]['limit'];\n\n\t\t\t// Only return the cached list if it's big enough or if there weren't enough suggestions\n\t\t\t// to fill a smaller limit.\n\t\t\tif (limit <= memoizedLimit || this.memoized[word]['suggestions'].length < memoizedLimit) {\n\t\t\t\treturn this.memoized[word]['suggestions'].slice(0, limit);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (this.check(word)) return [];\n\t\t\n\t\t// Check the replacement table.\n\t\tfor (var i = 0, _len = this.replacementTable.length; i < _len; i++) {\n\t\t\tvar replacementEntry = this.replacementTable[i];\n\t\t\t\n\t\t\tif (word.indexOf(replacementEntry[0]) !== -1) {\n\t\t\t\tvar correctedWord = word.replace(replacementEntry[0], replacementEntry[1]);\n\t\t\t\t\n\t\t\t\tif (this.check(correctedWord)) {\n\t\t\t\t\treturn [ correctedWord ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar self = this;\n\t\tself.alphabet = \"abcdefghijklmnopqrstuvwxyz\";\n\t\t\n\t\t/*\n\t\tif (!self.alphabet) {\n\t\t\t// Use the alphabet as implicitly defined by the words in the dictionary.\n\t\t\tvar alphaHash = {};\n\t\t\t\n\t\t\tfor (var i in self.dictionaryTable) {\n\t\t\t\tfor (var j = 0, _len = i.length; j < _len; j++) {\n\t\t\t\t\talphaHash[i[j]] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfor (var i in alphaHash) {\n\t\t\t\tself.alphabet += i;\n\t\t\t}\n\t\t\t\n\t\t\tvar alphaArray = self.alphabet.split(\"\");\n\t\t\talphaArray.sort();\n\t\t\tself.alphabet = alphaArray.join(\"\");\n\t\t}\n\t\t*/\n\t\t\n\t\t/**\n\t\t * Returns a hash keyed by all of the strings that can be made by making a single edit to the word (or words in) `words`\n\t\t * The value of each entry is the number of unique ways that the resulting word can be made.\n\t\t *\n\t\t * @arg mixed words Either a hash keyed by words or a string word to operate on.\n\t\t * @arg bool known_only Whether this function should ignore strings that are not in the dictionary.\n\t\t */\n\t\tfunction edits1(words, known_only) {\n\t\t\tvar rv = {};\n\t\t\t\n\t\t\tvar i, j, _iilen, _len, _jlen, _edit;\n\t\t\t\n\t\t\tif (typeof words == 'string') {\n\t\t\t\tvar word = words;\n\t\t\t\twords = {};\n\t\t\t\twords[word] = true;\n\t\t\t}\n\n\t\t\tfor (var word in words) {\n\t\t\t\tfor (i = 0, _len = word.length + 1; i < _len; i++) {\n\t\t\t\t\tvar s = [ word.substring(0, i), word.substring(i) ];\n\t\t\t\t\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\t_edit = s[0] + s[1].substring(1);\n\n\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\trv[_edit] += 1;\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\t\n\t\t\t\t\t// Eliminate transpositions of identical letters\n\t\t\t\t\tif (s[1].length > 1 && s[1][1] !== s[1][0]) {\n\t\t\t\t\t\t_edit = s[0] + s[1][1] + s[1][0] + s[1].substring(2);\n\n\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\trv[_edit] += 1;\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\tif (s[1]) {\n\t\t\t\t\t\tfor (j = 0, _jlen = self.alphabet.length; j < _jlen; j++) {\n\t\t\t\t\t\t\t// Eliminate replacement of a letter by itself\n\t\t\t\t\t\t\tif (self.alphabet[j] != s[1].substring(0,1)){\n\t\t\t\t\t\t\t\t_edit = s[0] + self.alphabet[j] + s[1].substring(1);\n\n\t\t\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\trv[_edit] += 1;\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}\n\n\t\t\t\t\tif (s[1]) {\n\t\t\t\t\t\tfor (j = 0, _jlen = self.alphabet.length; j < _jlen; j++) {\n\t\t\t\t\t\t\t_edit = s[0] + self.alphabet[j] + s[1];\n\n\t\t\t\t\t\t\tif (!known_only || self.check(_edit)) {\n\t\t\t\t\t\t\t\tif (!(_edit in rv)) {\n\t\t\t\t\t\t\t\t\trv[_edit] = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\trv[_edit] += 1;\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\t\t\t}\n\t\t\t\n\t\t\treturn rv;\n\t\t}\n\n\t\tfunction correct(word) {\n\t\t\t// Get the edit-distance-1 and edit-distance-2 forms of this word.\n\t\t\tvar ed1 = edits1(word);\n\t\t\tvar ed2 = edits1(ed1, true);\n\t\t\t\n\t\t\t// Sort the edits based on how many different ways they were created.\n\t\t\tvar weighted_corrections = ed2;\n\t\t\t\n\t\t\tfor (var ed1word in ed1) {\n\t\t\t\tif (!self.check(ed1word)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (ed1word in weighted_corrections) {\n\t\t\t\t\tweighted_corrections[ed1word] += ed1[ed1word];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tweighted_corrections[ed1word] = ed1[ed1word];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar i, _len;\n\n\t\t\tvar sorted_corrections = [];\n\t\t\t\n\t\t\tfor (i in weighted_corrections) {\n\t\t\t\tif (weighted_corrections.hasOwnProperty(i)) {\n\t\t\t\t\tsorted_corrections.push([ i, weighted_corrections[i] ]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction sorter(a, b) {\n\t\t\t\tvar a_val = a[1];\n\t\t\t\tvar b_val = b[1];\n\t\t\t\tif (a_val < b_val) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (a_val > b_val) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\t// @todo If a and b are equally weighted, add our own weight based on something like the key locations on this language's default keyboard.\n\t\t\t\treturn b[0].localeCompare(a[0]);\n\t\t\t}\n\t\t\t\n\t\t\tsorted_corrections.sort(sorter).reverse();\n\n\t\t\tvar rv = [];\n\n\t\t\tvar capitalization_scheme = \"lowercase\";\n\t\t\t\n\t\t\tif (word.toUpperCase() === word) {\n\t\t\t\tcapitalization_scheme = \"uppercase\";\n\t\t\t}\n\t\t\telse if (word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase() === word) {\n\t\t\t\tcapitalization_scheme = \"capitalized\";\n\t\t\t}\n\t\t\t\n\t\t\tvar working_limit = limit;\n\n\t\t\tfor (i = 0; i < Math.min(working_limit, sorted_corrections.length); i++) {\n\t\t\t\tif (\"uppercase\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].toUpperCase();\n\t\t\t\t}\n\t\t\t\telse if (\"capitalized\" === capitalization_scheme) {\n\t\t\t\t\tsorted_corrections[i][0] = sorted_corrections[i][0].substr(0, 1).toUpperCase() + sorted_corrections[i][0].substr(1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (!self.hasFlag(sorted_corrections[i][0], \"NOSUGGEST\") && rv.indexOf(sorted_corrections[i][0]) == -1) {\n\t\t\t\t\trv.push(sorted_corrections[i][0]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If one of the corrections is not eligible as a suggestion , make sure we still return the right number of suggestions.\n\t\t\t\t\tworking_limit++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn rv;\n\t\t}\n\t\t\n\t\tthis.memoized[word] = {\n\t\t\t'suggestions': correct(word),\n\t\t\t'limit': limit\n\t\t};\n\n\t\treturn this.memoized[word]['suggestions'];\n\t}\n};\n})();\n\n// Support for use as a node.js module.\nif (typeof module !== 'undefined') {\n\tmodule.exports = Typo;\n}\n", "// Use strict mode (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)\n\"use strict\";\n\n\n// Requires\nvar Typo = require(\"typo-js\");\n\n\n// Create function\nfunction CodeMirrorSpellChecker(options) {\n\t// Initialize\n\toptions = options || {};\n\n\n\t// Verify\n\tif(typeof options.codeMirrorInstance !== \"function\" || typeof options.codeMirrorInstance.defineMode !== \"function\") {\n\t\tconsole.log(\"CodeMirror Spell Checker: You must provide an instance of CodeMirror via the option `codeMirrorInstance`\");\n\t\treturn;\n\t}\n\n\n\t// Because some browsers don't support this functionality yet\n\tif(!String.prototype.includes) {\n\t\tString.prototype.includes = function() {\n\t\t\t\"use strict\";\n\t\t\treturn String.prototype.indexOf.apply(this, arguments) !== -1;\n\t\t};\n\t}\n\n\n\t// Define the new mode\n\toptions.codeMirrorInstance.defineMode(\"spell-checker\", function(config) {\n\t\t// Load AFF/DIC data\n\t\tif(!CodeMirrorSpellChecker.aff_loading) {\n\t\t\tCodeMirrorSpellChecker.aff_loading = true;\n\t\t\tvar xhr_aff = new XMLHttpRequest();\n\t\t\txhr_aff.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.aff\", true);\n\t\t\txhr_aff.onload = function() {\n\t\t\t\tif(xhr_aff.readyState === 4 && xhr_aff.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.aff_data = xhr_aff.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\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\txhr_aff.send(null);\n\t\t}\n\n\t\tif(!CodeMirrorSpellChecker.dic_loading) {\n\t\t\tCodeMirrorSpellChecker.dic_loading = true;\n\t\t\tvar xhr_dic = new XMLHttpRequest();\n\t\t\txhr_dic.open(\"GET\", \"https://cdn.jsdelivr.net/codemirror.spell-checker/latest/en_US.dic\", true);\n\t\t\txhr_dic.onload = function() {\n\t\t\t\tif(xhr_dic.readyState === 4 && xhr_dic.status === 200) {\n\t\t\t\t\tCodeMirrorSpellChecker.dic_data = xhr_dic.responseText;\n\t\t\t\t\tCodeMirrorSpellChecker.num_loaded++;\n\n\t\t\t\t\tif(CodeMirrorSpellChecker.num_loaded == 2) {\n\t\t\t\t\t\tCodeMirrorSpellChecker.typo = new Typo(\"en_US\", CodeMirrorSpellChecker.aff_data, CodeMirrorSpellChecker.dic_data, {\n\t\t\t\t\t\t\tplatform: \"any\"\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\txhr_dic.send(null);\n\t\t}\n\n\n\t\t// Define what separates a word\n\t\tvar rx_word = \"!\\\"#$%&()*+,-./:;<=>?@[\\\\]^_`{|}~ \";\n\n\n\t\t// Create the overlay and such\n\t\tvar overlay = {\n\t\t\ttoken: function(stream) {\n\t\t\t\tvar ch = stream.peek();\n\t\t\t\tvar word = \"\";\n\n\t\t\t\tif(rx_word.includes(ch)) {\n\t\t\t\t\tstream.next();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\twhile((ch = stream.peek()) != null && !rx_word.includes(ch)) {\n\t\t\t\t\tword += ch;\n\t\t\t\t\tstream.next();\n\t\t\t\t}\n\n\t\t\t\tif(CodeMirrorSpellChecker.typo && !CodeMirrorSpellChecker.typo.check(word))\n\t\t\t\t\treturn \"spell-error\"; // CSS class: cm-spell-error\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tvar mode = options.codeMirrorInstance.getMode(\n\t\t\tconfig, config.backdrop || \"text/plain\"\n\t\t);\n\n\t\treturn options.codeMirrorInstance.overlayMode(mode, overlay, true);\n\t});\n}\n\n\n// Initialize data globally to reduce memory consumption\nCodeMirrorSpellChecker.num_loaded = 0;\nCodeMirrorSpellChecker.aff_loading = false;\nCodeMirrorSpellChecker.dic_loading = false;\nCodeMirrorSpellChecker.aff_data = \"\";\nCodeMirrorSpellChecker.dic_data = \"\";\nCodeMirrorSpellChecker.typo;\n\n\n// Export\nmodule.exports = CodeMirrorSpellChecker;", "/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.marked = factory());\n})(this, (function () { 'use strict';\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _createForOfIteratorHelperLoose(o, allowArrayLike) {\n    var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n    if (it) return (it = it.call(o)).next.bind(it);\n\n    if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n      if (it) o = it;\n      var i = 0;\n      return function () {\n        if (i >= o.length) return {\n          done: true\n        };\n        return {\n          done: false,\n          value: o[i++]\n        };\n      };\n    }\n\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var defaults$5 = {exports: {}};\n\n  function getDefaults$1() {\n    return {\n      baseUrl: null,\n      breaks: false,\n      extensions: null,\n      gfm: true,\n      headerIds: true,\n      headerPrefix: '',\n      highlight: null,\n      langPrefix: 'language-',\n      mangle: true,\n      pedantic: false,\n      renderer: null,\n      sanitize: false,\n      sanitizer: null,\n      silent: false,\n      smartLists: false,\n      smartypants: false,\n      tokenizer: null,\n      walkTokens: null,\n      xhtml: false\n    };\n  }\n\n  function changeDefaults$1(newDefaults) {\n    defaults$5.exports.defaults = newDefaults;\n  }\n\n  defaults$5.exports = {\n    defaults: getDefaults$1(),\n    getDefaults: getDefaults$1,\n    changeDefaults: changeDefaults$1\n  };\n\n  /**\n   * Helpers\n   */\n  var escapeTest = /[&<>\"']/;\n  var escapeReplace = /[&<>\"']/g;\n  var escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\n  var escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\n  var escapeReplacements = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  var getEscapeReplacement = function getEscapeReplacement(ch) {\n    return escapeReplacements[ch];\n  };\n\n  function escape$2(html, encode) {\n    if (encode) {\n      if (escapeTest.test(html)) {\n        return html.replace(escapeReplace, getEscapeReplacement);\n      }\n    } else {\n      if (escapeTestNoEncode.test(html)) {\n        return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n      }\n    }\n\n    return html;\n  }\n\n  var unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n  function unescape$1(html) {\n    // explicitly match decimal, hex, and named HTML entities\n    return html.replace(unescapeTest, function (_, n) {\n      n = n.toLowerCase();\n      if (n === 'colon') return ':';\n\n      if (n.charAt(0) === '#') {\n        return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));\n      }\n\n      return '';\n    });\n  }\n\n  var caret = /(^|[^\\[])\\^/g;\n\n  function edit$1(regex, opt) {\n    regex = regex.source || regex;\n    opt = opt || '';\n    var obj = {\n      replace: function replace(name, val) {\n        val = val.source || val;\n        val = val.replace(caret, '$1');\n        regex = regex.replace(name, val);\n        return obj;\n      },\n      getRegex: function getRegex() {\n        return new RegExp(regex, opt);\n      }\n    };\n    return obj;\n  }\n\n  var nonWordAndColonTest = /[^\\w:]/g;\n  var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n  function cleanUrl$1(sanitize, base, href) {\n    if (sanitize) {\n      var prot;\n\n      try {\n        prot = decodeURIComponent(unescape$1(href)).replace(nonWordAndColonTest, '').toLowerCase();\n      } catch (e) {\n        return null;\n      }\n\n      if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n        return null;\n      }\n    }\n\n    if (base && !originIndependentUrl.test(href)) {\n      href = resolveUrl(base, href);\n    }\n\n    try {\n      href = encodeURI(href).replace(/%25/g, '%');\n    } catch (e) {\n      return null;\n    }\n\n    return href;\n  }\n\n  var baseUrls = {};\n  var justDomain = /^[^:]+:\\/*[^/]*$/;\n  var protocol = /^([^:]+:)[\\s\\S]*$/;\n  var domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n  function resolveUrl(base, href) {\n    if (!baseUrls[' ' + base]) {\n      // we can ignore everything in base after the last slash of its path component,\n      // but we might need to add _that_\n      // https://tools.ietf.org/html/rfc3986#section-3\n      if (justDomain.test(base)) {\n        baseUrls[' ' + base] = base + '/';\n      } else {\n        baseUrls[' ' + base] = rtrim$1(base, '/', true);\n      }\n    }\n\n    base = baseUrls[' ' + base];\n    var relativeBase = base.indexOf(':') === -1;\n\n    if (href.substring(0, 2) === '//') {\n      if (relativeBase) {\n        return href;\n      }\n\n      return base.replace(protocol, '$1') + href;\n    } else if (href.charAt(0) === '/') {\n      if (relativeBase) {\n        return href;\n      }\n\n      return base.replace(domain, '$1') + href;\n    } else {\n      return base + href;\n    }\n  }\n\n  var noopTest$1 = {\n    exec: function noopTest() {}\n  };\n\n  function merge$2(obj) {\n    var i = 1,\n        target,\n        key;\n\n    for (; i < arguments.length; i++) {\n      target = arguments[i];\n\n      for (key in target) {\n        if (Object.prototype.hasOwnProperty.call(target, key)) {\n          obj[key] = target[key];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  function splitCells$1(tableRow, count) {\n    // ensure that every cell-delimiting pipe has a space\n    // before it to distinguish it from an escaped pipe\n    var row = tableRow.replace(/\\|/g, function (match, offset, str) {\n      var escaped = false,\n          curr = offset;\n\n      while (--curr >= 0 && str[curr] === '\\\\') {\n        escaped = !escaped;\n      }\n\n      if (escaped) {\n        // odd number of slashes means | is escaped\n        // so we leave it alone\n        return '|';\n      } else {\n        // add space before unescaped |\n        return ' |';\n      }\n    }),\n        cells = row.split(/ \\|/);\n    var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n\n    if (!cells[0].trim()) {\n      cells.shift();\n    }\n\n    if (!cells[cells.length - 1].trim()) {\n      cells.pop();\n    }\n\n    if (cells.length > count) {\n      cells.splice(count);\n    } else {\n      while (cells.length < count) {\n        cells.push('');\n      }\n    }\n\n    for (; i < cells.length; i++) {\n      // leading or trailing whitespace is ignored per the gfm spec\n      cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n    }\n\n    return cells;\n  } // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n  // /c*$/ is vulnerable to REDOS.\n  // invert: Remove suffix of non-c chars instead. Default falsey.\n\n\n  function rtrim$1(str, c, invert) {\n    var l = str.length;\n\n    if (l === 0) {\n      return '';\n    } // Length of suffix matching the invert condition.\n\n\n    var suffLen = 0; // Step left until we fail to match the invert condition.\n\n    while (suffLen < l) {\n      var currChar = str.charAt(l - suffLen - 1);\n\n      if (currChar === c && !invert) {\n        suffLen++;\n      } else if (currChar !== c && invert) {\n        suffLen++;\n      } else {\n        break;\n      }\n    }\n\n    return str.substr(0, l - suffLen);\n  }\n\n  function findClosingBracket$1(str, b) {\n    if (str.indexOf(b[1]) === -1) {\n      return -1;\n    }\n\n    var l = str.length;\n    var level = 0,\n        i = 0;\n\n    for (; i < l; i++) {\n      if (str[i] === '\\\\') {\n        i++;\n      } else if (str[i] === b[0]) {\n        level++;\n      } else if (str[i] === b[1]) {\n        level--;\n\n        if (level < 0) {\n          return i;\n        }\n      }\n    }\n\n    return -1;\n  }\n\n  function checkSanitizeDeprecation$1(opt) {\n    if (opt && opt.sanitize && !opt.silent) {\n      console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n    }\n  } // copied from https://stackoverflow.com/a/5450113/806777\n\n\n  function repeatString$1(pattern, count) {\n    if (count < 1) {\n      return '';\n    }\n\n    var result = '';\n\n    while (count > 1) {\n      if (count & 1) {\n        result += pattern;\n      }\n\n      count >>= 1;\n      pattern += pattern;\n    }\n\n    return result + pattern;\n  }\n\n  var helpers = {\n    escape: escape$2,\n    unescape: unescape$1,\n    edit: edit$1,\n    cleanUrl: cleanUrl$1,\n    resolveUrl: resolveUrl,\n    noopTest: noopTest$1,\n    merge: merge$2,\n    splitCells: splitCells$1,\n    rtrim: rtrim$1,\n    findClosingBracket: findClosingBracket$1,\n    checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n    repeatString: repeatString$1\n  };\n\n  var defaults$4 = defaults$5.exports.defaults;\n  var rtrim = helpers.rtrim,\n      splitCells = helpers.splitCells,\n      _escape = helpers.escape,\n      findClosingBracket = helpers.findClosingBracket;\n\n  function outputLink(cap, link, raw, lexer) {\n    var href = link.href;\n    var title = link.title ? _escape(link.title) : null;\n    var text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n    if (cap[0].charAt(0) !== '!') {\n      lexer.state.inLink = true;\n      var token = {\n        type: 'link',\n        raw: raw,\n        href: href,\n        title: title,\n        text: text,\n        tokens: lexer.inlineTokens(text, [])\n      };\n      lexer.state.inLink = false;\n      return token;\n    } else {\n      return {\n        type: 'image',\n        raw: raw,\n        href: href,\n        title: title,\n        text: _escape(text)\n      };\n    }\n  }\n\n  function indentCodeCompensation(raw, text) {\n    var matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n    if (matchIndentToCode === null) {\n      return text;\n    }\n\n    var indentToCode = matchIndentToCode[1];\n    return text.split('\\n').map(function (node) {\n      var matchIndentInNode = node.match(/^\\s+/);\n\n      if (matchIndentInNode === null) {\n        return node;\n      }\n\n      var indentInNode = matchIndentInNode[0];\n\n      if (indentInNode.length >= indentToCode.length) {\n        return node.slice(indentToCode.length);\n      }\n\n      return node;\n    }).join('\\n');\n  }\n  /**\n   * Tokenizer\n   */\n\n\n  var Tokenizer_1 = /*#__PURE__*/function () {\n    function Tokenizer(options) {\n      this.options = options || defaults$4;\n    }\n\n    var _proto = Tokenizer.prototype;\n\n    _proto.space = function space(src) {\n      var cap = this.rules.block.newline.exec(src);\n\n      if (cap) {\n        if (cap[0].length > 1) {\n          return {\n            type: 'space',\n            raw: cap[0]\n          };\n        }\n\n        return {\n          raw: '\\n'\n        };\n      }\n    };\n\n    _proto.code = function code(src) {\n      var cap = this.rules.block.code.exec(src);\n\n      if (cap) {\n        var text = cap[0].replace(/^ {1,4}/gm, '');\n        return {\n          type: 'code',\n          raw: cap[0],\n          codeBlockStyle: 'indented',\n          text: !this.options.pedantic ? rtrim(text, '\\n') : text\n        };\n      }\n    };\n\n    _proto.fences = function fences(src) {\n      var cap = this.rules.block.fences.exec(src);\n\n      if (cap) {\n        var raw = cap[0];\n        var text = indentCodeCompensation(raw, cap[3] || '');\n        return {\n          type: 'code',\n          raw: raw,\n          lang: cap[2] ? cap[2].trim() : cap[2],\n          text: text\n        };\n      }\n    };\n\n    _proto.heading = function heading(src) {\n      var cap = this.rules.block.heading.exec(src);\n\n      if (cap) {\n        var text = cap[2].trim(); // remove trailing #s\n\n        if (/#$/.test(text)) {\n          var trimmed = rtrim(text, '#');\n\n          if (this.options.pedantic) {\n            text = trimmed.trim();\n          } else if (!trimmed || / $/.test(trimmed)) {\n            // CommonMark requires space before trailing #s\n            text = trimmed.trim();\n          }\n        }\n\n        var token = {\n          type: 'heading',\n          raw: cap[0],\n          depth: cap[1].length,\n          text: text,\n          tokens: []\n        };\n        this.lexer.inline(token.text, token.tokens);\n        return token;\n      }\n    };\n\n    _proto.hr = function hr(src) {\n      var cap = this.rules.block.hr.exec(src);\n\n      if (cap) {\n        return {\n          type: 'hr',\n          raw: cap[0]\n        };\n      }\n    };\n\n    _proto.blockquote = function blockquote(src) {\n      var cap = this.rules.block.blockquote.exec(src);\n\n      if (cap) {\n        var text = cap[0].replace(/^ *> ?/gm, '');\n        return {\n          type: 'blockquote',\n          raw: cap[0],\n          tokens: this.lexer.blockTokens(text, []),\n          text: text\n        };\n      }\n    };\n\n    _proto.list = function list(src) {\n      var cap = this.rules.block.list.exec(src);\n\n      if (cap) {\n        var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, lines, itemContents;\n        var bull = cap[1].trim();\n        var isordered = bull.length > 1;\n        var list = {\n          type: 'list',\n          raw: '',\n          ordered: isordered,\n          start: isordered ? +bull.slice(0, -1) : '',\n          loose: false,\n          items: []\n        };\n        bull = isordered ? \"\\\\d{1,9}\\\\\" + bull.slice(-1) : \"\\\\\" + bull;\n\n        if (this.options.pedantic) {\n          bull = isordered ? bull : '[*+-]';\n        } // Get next list item\n\n\n        var itemRegex = new RegExp(\"^( {0,3}\" + bull + \")((?: [^\\\\n]*| *)(?:\\\\n[^\\\\n]*)*(?:\\\\n|$))\"); // Get each top-level item\n\n        while (src) {\n          if (this.rules.block.hr.test(src)) {\n            // End list if we encounter an HR (possibly move into itemRegex?)\n            break;\n          }\n\n          if (!(cap = itemRegex.exec(src))) {\n            break;\n          }\n\n          lines = cap[2].split('\\n');\n\n          if (this.options.pedantic) {\n            indent = 2;\n            itemContents = lines[0].trimLeft();\n          } else {\n            indent = cap[2].search(/[^ ]/); // Find first non-space char\n\n            indent = cap[1].length + (indent > 4 ? 1 : indent); // intented code blocks after 4 spaces; indent is always 1\n\n            itemContents = lines[0].slice(indent - cap[1].length);\n          }\n\n          blankLine = false;\n          raw = cap[0];\n\n          if (!lines[0] && /^ *$/.test(lines[1])) {\n            // items begin with at most one blank line\n            raw = cap[1] + lines.slice(0, 2).join('\\n') + '\\n';\n            list.loose = true;\n            lines = [];\n          }\n\n          var nextBulletRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}(?:[*+-]|\\\\d{1,9}[.)])\");\n\n          for (i = 1; i < lines.length; i++) {\n            line = lines[i];\n\n            if (this.options.pedantic) {\n              // Re-align to follow commonmark nesting rules\n              line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');\n            } // End list item if found start of new bullet\n\n\n            if (nextBulletRegex.test(line)) {\n              raw = cap[1] + lines.slice(0, i).join('\\n') + '\\n';\n              break;\n            } // Until we encounter a blank line, item contents do not need indentation\n\n\n            if (!blankLine) {\n              if (!line.trim()) {\n                // Check if current line is empty\n                blankLine = true;\n              } // Dedent if possible\n\n\n              if (line.search(/[^ ]/) >= indent) {\n                itemContents += '\\n' + line.slice(indent);\n              } else {\n                itemContents += '\\n' + line;\n              }\n\n              continue;\n            } // Dedent this line\n\n\n            if (line.search(/[^ ]/) >= indent || !line.trim()) {\n              itemContents += '\\n' + line.slice(indent);\n              continue;\n            } else {\n              // Line was not properly indented; end of this item\n              raw = cap[1] + lines.slice(0, i).join('\\n') + '\\n';\n              break;\n            }\n          }\n\n          if (!list.loose) {\n            // If the previous item ended with a blank line, the list is loose\n            if (endsWithBlankLine) {\n              list.loose = true;\n            } else if (/\\n *\\n *$/.test(raw)) {\n              endsWithBlankLine = true;\n            }\n          } // Check for task list items\n\n\n          if (this.options.gfm) {\n            istask = /^\\[[ xX]\\] /.exec(itemContents);\n\n            if (istask) {\n              ischecked = istask[0] !== '[ ] ';\n              itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n            }\n          }\n\n          list.items.push({\n            type: 'list_item',\n            raw: raw,\n            task: !!istask,\n            checked: ischecked,\n            loose: false,\n            text: itemContents\n          });\n          list.raw += raw;\n          src = src.slice(raw.length);\n        } // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n\n\n        list.items[list.items.length - 1].raw = raw.trimRight();\n        list.items[list.items.length - 1].text = itemContents.trimRight();\n        list.raw = list.raw.trimRight();\n        var l = list.items.length; // Item child tokens handled here at end because we needed to have the final item to trim it first\n\n        for (i = 0; i < l; i++) {\n          this.lexer.state.top = false;\n          list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n          if (list.items[i].tokens.some(function (t) {\n            return t.type === 'space';\n          })) {\n            list.loose = true;\n            list.items[i].loose = true;\n          }\n        }\n\n        return list;\n      }\n    };\n\n    _proto.html = function html(src) {\n      var cap = this.rules.block.html.exec(src);\n\n      if (cap) {\n        var token = {\n          type: 'html',\n          raw: cap[0],\n          pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n          text: cap[0]\n        };\n\n        if (this.options.sanitize) {\n          token.type = 'paragraph';\n          token.text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]);\n          token.tokens = [];\n          this.lexer.inline(token.text, token.tokens);\n        }\n\n        return token;\n      }\n    };\n\n    _proto.def = function def(src) {\n      var cap = this.rules.block.def.exec(src);\n\n      if (cap) {\n        if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n        var tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n        return {\n          type: 'def',\n          tag: tag,\n          raw: cap[0],\n          href: cap[2],\n          title: cap[3]\n        };\n      }\n    };\n\n    _proto.table = function table(src) {\n      var cap = this.rules.block.table.exec(src);\n\n      if (cap) {\n        var item = {\n          type: 'table',\n          header: splitCells(cap[1]).map(function (c) {\n            return {\n              text: c\n            };\n          }),\n          align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n          rows: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n        };\n\n        if (item.header.length === item.align.length) {\n          item.raw = cap[0];\n          var l = item.align.length;\n          var i, j, k, row;\n\n          for (i = 0; i < l; i++) {\n            if (/^ *-+: *$/.test(item.align[i])) {\n              item.align[i] = 'right';\n            } else if (/^ *:-+: *$/.test(item.align[i])) {\n              item.align[i] = 'center';\n            } else if (/^ *:-+ *$/.test(item.align[i])) {\n              item.align[i] = 'left';\n            } else {\n              item.align[i] = null;\n            }\n          }\n\n          l = item.rows.length;\n\n          for (i = 0; i < l; i++) {\n            item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {\n              return {\n                text: c\n              };\n            });\n          } // parse child tokens inside headers and cells\n          // header child tokens\n\n\n          l = item.header.length;\n\n          for (j = 0; j < l; j++) {\n            item.header[j].tokens = [];\n            this.lexer.inlineTokens(item.header[j].text, item.header[j].tokens);\n          } // cell child tokens\n\n\n          l = item.rows.length;\n\n          for (j = 0; j < l; j++) {\n            row = item.rows[j];\n\n            for (k = 0; k < row.length; k++) {\n              row[k].tokens = [];\n              this.lexer.inlineTokens(row[k].text, row[k].tokens);\n            }\n          }\n\n          return item;\n        }\n      }\n    };\n\n    _proto.lheading = function lheading(src) {\n      var cap = this.rules.block.lheading.exec(src);\n\n      if (cap) {\n        var token = {\n          type: 'heading',\n          raw: cap[0],\n          depth: cap[2].charAt(0) === '=' ? 1 : 2,\n          text: cap[1],\n          tokens: []\n        };\n        this.lexer.inline(token.text, token.tokens);\n        return token;\n      }\n    };\n\n    _proto.paragraph = function paragraph(src) {\n      var cap = this.rules.block.paragraph.exec(src);\n\n      if (cap) {\n        var token = {\n          type: 'paragraph',\n          raw: cap[0],\n          text: cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1],\n          tokens: []\n        };\n        this.lexer.inline(token.text, token.tokens);\n        return token;\n      }\n    };\n\n    _proto.text = function text(src) {\n      var cap = this.rules.block.text.exec(src);\n\n      if (cap) {\n        var token = {\n          type: 'text',\n          raw: cap[0],\n          text: cap[0],\n          tokens: []\n        };\n        this.lexer.inline(token.text, token.tokens);\n        return token;\n      }\n    };\n\n    _proto.escape = function escape(src) {\n      var cap = this.rules.inline.escape.exec(src);\n\n      if (cap) {\n        return {\n          type: 'escape',\n          raw: cap[0],\n          text: _escape(cap[1])\n        };\n      }\n    };\n\n    _proto.tag = function tag(src) {\n      var cap = this.rules.inline.tag.exec(src);\n\n      if (cap) {\n        if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n          this.lexer.state.inLink = true;\n        } else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n          this.lexer.state.inLink = false;\n        }\n\n        if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n          this.lexer.state.inRawBlock = true;\n        } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n          this.lexer.state.inRawBlock = false;\n        }\n\n        return {\n          type: this.options.sanitize ? 'text' : 'html',\n          raw: cap[0],\n          inLink: this.lexer.state.inLink,\n          inRawBlock: this.lexer.state.inRawBlock,\n          text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0]\n        };\n      }\n    };\n\n    _proto.link = function link(src) {\n      var cap = this.rules.inline.link.exec(src);\n\n      if (cap) {\n        var trimmedUrl = cap[2].trim();\n\n        if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n          // commonmark requires matching angle brackets\n          if (!/>$/.test(trimmedUrl)) {\n            return;\n          } // ending angle bracket cannot be escaped\n\n\n          var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n\n          if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n            return;\n          }\n        } else {\n          // find closing parenthesis\n          var lastParenIndex = findClosingBracket(cap[2], '()');\n\n          if (lastParenIndex > -1) {\n            var start = cap[0].indexOf('!') === 0 ? 5 : 4;\n            var linkLen = start + cap[1].length + lastParenIndex;\n            cap[2] = cap[2].substring(0, lastParenIndex);\n            cap[0] = cap[0].substring(0, linkLen).trim();\n            cap[3] = '';\n          }\n        }\n\n        var href = cap[2];\n        var title = '';\n\n        if (this.options.pedantic) {\n          // split pedantic href and title\n          var link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n          if (link) {\n            href = link[1];\n            title = link[3];\n          }\n        } else {\n          title = cap[3] ? cap[3].slice(1, -1) : '';\n        }\n\n        href = href.trim();\n\n        if (/^</.test(href)) {\n          if (this.options.pedantic && !/>$/.test(trimmedUrl)) {\n            // pedantic allows starting angle bracket without ending angle bracket\n            href = href.slice(1);\n          } else {\n            href = href.slice(1, -1);\n          }\n        }\n\n        return outputLink(cap, {\n          href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n          title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n        }, cap[0], this.lexer);\n      }\n    };\n\n    _proto.reflink = function reflink(src, links) {\n      var cap;\n\n      if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n        var link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n        link = links[link.toLowerCase()];\n\n        if (!link || !link.href) {\n          var text = cap[0].charAt(0);\n          return {\n            type: 'text',\n            raw: text,\n            text: text\n          };\n        }\n\n        return outputLink(cap, link, cap[0], this.lexer);\n      }\n    };\n\n    _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {\n      if (prevChar === void 0) {\n        prevChar = '';\n      }\n\n      var match = this.rules.inline.emStrong.lDelim.exec(src);\n      if (!match) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n      if (match[3] && prevChar.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/)) return;\n      var nextChar = match[1] || match[2] || '';\n\n      if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {\n        var lLength = match[0].length - 1;\n        var rDelim,\n            rLength,\n            delimTotal = lLength,\n            midDelimTotal = 0;\n        var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n        endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?)\n\n        maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n        while ((match = endReg.exec(maskedSrc)) != null) {\n          rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n          if (!rDelim) continue; // skip single * in __abc*abc__\n\n          rLength = rDelim.length;\n\n          if (match[3] || match[4]) {\n            // found another Left Delim\n            delimTotal += rLength;\n            continue;\n          } else if (match[5] || match[6]) {\n            // either Left or Right Delim\n            if (lLength % 3 && !((lLength + rLength) % 3)) {\n              midDelimTotal += rLength;\n              continue; // CommonMark Emphasis Rules 9-10\n            }\n          }\n\n          delimTotal -= rLength;\n          if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n          // Remove extra characters. *a*** -> *a*\n\n          rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); // Create `em` if smallest delimiter has odd char count. *a***\n\n          if (Math.min(lLength, rLength) % 2) {\n            var _text = src.slice(1, lLength + match.index + rLength);\n\n            return {\n              type: 'em',\n              raw: src.slice(0, lLength + match.index + rLength + 1),\n              text: _text,\n              tokens: this.lexer.inlineTokens(_text, [])\n            };\n          } // Create 'strong' if smallest delimiter has even char count. **a***\n\n\n          var text = src.slice(2, lLength + match.index + rLength - 1);\n          return {\n            type: 'strong',\n            raw: src.slice(0, lLength + match.index + rLength + 1),\n            text: text,\n            tokens: this.lexer.inlineTokens(text, [])\n          };\n        }\n      }\n    };\n\n    _proto.codespan = function codespan(src) {\n      var cap = this.rules.inline.code.exec(src);\n\n      if (cap) {\n        var text = cap[2].replace(/\\n/g, ' ');\n        var hasNonSpaceChars = /[^ ]/.test(text);\n        var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\n        if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n          text = text.substring(1, text.length - 1);\n        }\n\n        text = _escape(text, true);\n        return {\n          type: 'codespan',\n          raw: cap[0],\n          text: text\n        };\n      }\n    };\n\n    _proto.br = function br(src) {\n      var cap = this.rules.inline.br.exec(src);\n\n      if (cap) {\n        return {\n          type: 'br',\n          raw: cap[0]\n        };\n      }\n    };\n\n    _proto.del = function del(src) {\n      var cap = this.rules.inline.del.exec(src);\n\n      if (cap) {\n        return {\n          type: 'del',\n          raw: cap[0],\n          text: cap[2],\n          tokens: this.lexer.inlineTokens(cap[2], [])\n        };\n      }\n    };\n\n    _proto.autolink = function autolink(src, mangle) {\n      var cap = this.rules.inline.autolink.exec(src);\n\n      if (cap) {\n        var text, href;\n\n        if (cap[2] === '@') {\n          text = _escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n          href = 'mailto:' + text;\n        } else {\n          text = _escape(cap[1]);\n          href = text;\n        }\n\n        return {\n          type: 'link',\n          raw: cap[0],\n          text: text,\n          href: href,\n          tokens: [{\n            type: 'text',\n            raw: text,\n            text: text\n          }]\n        };\n      }\n    };\n\n    _proto.url = function url(src, mangle) {\n      var cap;\n\n      if (cap = this.rules.inline.url.exec(src)) {\n        var text, href;\n\n        if (cap[2] === '@') {\n          text = _escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n          href = 'mailto:' + text;\n        } else {\n          // do extended autolink path validation\n          var prevCapZero;\n\n          do {\n            prevCapZero = cap[0];\n            cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n          } while (prevCapZero !== cap[0]);\n\n          text = _escape(cap[0]);\n\n          if (cap[1] === 'www.') {\n            href = 'http://' + text;\n          } else {\n            href = text;\n          }\n        }\n\n        return {\n          type: 'link',\n          raw: cap[0],\n          text: text,\n          href: href,\n          tokens: [{\n            type: 'text',\n            raw: text,\n            text: text\n          }]\n        };\n      }\n    };\n\n    _proto.inlineText = function inlineText(src, smartypants) {\n      var cap = this.rules.inline.text.exec(src);\n\n      if (cap) {\n        var text;\n\n        if (this.lexer.state.inRawBlock) {\n          text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0];\n        } else {\n          text = _escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n        }\n\n        return {\n          type: 'text',\n          raw: cap[0],\n          text: text\n        };\n      }\n    };\n\n    return Tokenizer;\n  }();\n\n  var noopTest = helpers.noopTest,\n      edit = helpers.edit,\n      merge$1 = helpers.merge;\n  /**\n   * Block-Level Grammar\n   */\n\n  var block$1 = {\n    newline: /^(?: *(?:\\n|$))+/,\n    code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n    fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n    hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n    heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n    blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n    list: /^( {0,3}bull)( [^\\n]+?)?(?:\\n|$)/,\n    html: '^ {0,3}(?:' // optional indentation\n    + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n    + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n    + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n    + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n    + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n    + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n    + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n    + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n    + ')',\n    def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n    table: noopTest,\n    lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n    // regex template, placeholders will be replaced according to different paragraph\n    // interruption rules of commonmark and the original markdown spec:\n    _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n    text: /^[^\\n]+/\n  };\n  block$1._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\n  block$1._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\n  block$1.def = edit(block$1.def).replace('label', block$1._label).replace('title', block$1._title).getRegex();\n  block$1.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\n  block$1.listItemStart = edit(/^( *)(bull) */).replace('bull', block$1.bullet).getRegex();\n  block$1.list = edit(block$1.list).replace(/bull/g, block$1.bullet).replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))').replace('def', '\\\\n+(?=' + block$1.def.source + ')').getRegex();\n  block$1._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';\n  block$1._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\n  block$1.html = edit(block$1.html, 'i').replace('comment', block$1._comment).replace('tag', block$1._tag).replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\n  block$1.paragraph = edit(block$1._paragraph).replace('hr', block$1.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n  .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block$1._tag) // pars can be interrupted by type (6) html blocks\n  .getRegex();\n  block$1.blockquote = edit(block$1.blockquote).replace('paragraph', block$1.paragraph).getRegex();\n  /**\n   * Normal Block Grammar\n   */\n\n  block$1.normal = merge$1({}, block$1);\n  /**\n   * GFM Block Grammar\n   */\n\n  block$1.gfm = merge$1({}, block$1.normal, {\n    table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n    + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n    + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n\n  });\n  block$1.gfm.table = edit(block$1.gfm.table).replace('hr', block$1.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block$1._tag) // tables can be interrupted by type (6) html blocks\n  .getRegex();\n  /**\n   * Pedantic grammar (original John Gruber's loose markdown specification)\n   */\n\n  block$1.pedantic = merge$1({}, block$1.normal, {\n    html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)' + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n    + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))').replace('comment', block$1._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b').getRegex(),\n    def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n    heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n    fences: noopTest,\n    // fences not supported\n    paragraph: edit(block$1.normal._paragraph).replace('hr', block$1.hr).replace('heading', ' *#{1,6} *[^\\n]').replace('lheading', block$1.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()\n  });\n  /**\n   * Inline-Level Grammar\n   */\n\n  var inline$1 = {\n    escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n    autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n    url: noopTest,\n    tag: '^comment' + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n    // CDATA section\n    link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n    reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n    nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n    reflinkSearch: 'reflink|nolink(?!\\\\()',\n    emStrong: {\n      lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n      //        (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left.  (5) and (6) can be either Left or Right.\n      //        () Skip orphan delim inside strong    (1) #***                (2) a***#, a***                   (3) #***a, ***a                 (4) ***#              (5) #***#                 (6) a***a\n      rDelimAst: /^[^_*]*?\\_\\_[^_*]*?\\*[^_*]*?(?=\\_\\_)|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n      rDelimUnd: /^[^_*]*?\\*\\*[^_*]*?\\_[^_*]*?(?=\\*\\*)|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n\n    },\n    code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n    br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n    del: noopTest,\n    text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n    punctuation: /^([\\spunctuation])/\n  }; // list of punctuation marks from CommonMark spec\n  // without * and _ to handle the different emphasis markers * and _\n\n  inline$1._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\n  inline$1.punctuation = edit(inline$1.punctuation).replace(/punctuation/g, inline$1._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>\n\n  inline$1.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n  inline$1.escapedEmSt = /\\\\\\*|\\\\_/g;\n  inline$1._comment = edit(block$1._comment).replace('(?:-->|$)', '-->').getRegex();\n  inline$1.emStrong.lDelim = edit(inline$1.emStrong.lDelim).replace(/punct/g, inline$1._punctuation).getRegex();\n  inline$1.emStrong.rDelimAst = edit(inline$1.emStrong.rDelimAst, 'g').replace(/punct/g, inline$1._punctuation).getRegex();\n  inline$1.emStrong.rDelimUnd = edit(inline$1.emStrong.rDelimUnd, 'g').replace(/punct/g, inline$1._punctuation).getRegex();\n  inline$1._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n  inline$1._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\n  inline$1._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\n  inline$1.autolink = edit(inline$1.autolink).replace('scheme', inline$1._scheme).replace('email', inline$1._email).getRegex();\n  inline$1._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n  inline$1.tag = edit(inline$1.tag).replace('comment', inline$1._comment).replace('attribute', inline$1._attribute).getRegex();\n  inline$1._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n  inline$1._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\n  inline$1._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n  inline$1.link = edit(inline$1.link).replace('label', inline$1._label).replace('href', inline$1._href).replace('title', inline$1._title).getRegex();\n  inline$1.reflink = edit(inline$1.reflink).replace('label', inline$1._label).getRegex();\n  inline$1.reflinkSearch = edit(inline$1.reflinkSearch, 'g').replace('reflink', inline$1.reflink).replace('nolink', inline$1.nolink).getRegex();\n  /**\n   * Normal Inline Grammar\n   */\n\n  inline$1.normal = merge$1({}, inline$1);\n  /**\n   * Pedantic Inline Grammar\n   */\n\n  inline$1.pedantic = merge$1({}, inline$1.normal, {\n    strong: {\n      start: /^__|\\*\\*/,\n      middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n      endAst: /\\*\\*(?!\\*)/g,\n      endUnd: /__(?!_)/g\n    },\n    em: {\n      start: /^_|\\*/,\n      middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n      endAst: /\\*(?!\\*)/g,\n      endUnd: /_(?!_)/g\n    },\n    link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace('label', inline$1._label).getRegex(),\n    reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace('label', inline$1._label).getRegex()\n  });\n  /**\n   * GFM Inline Grammar\n   */\n\n  inline$1.gfm = merge$1({}, inline$1.normal, {\n    escape: edit(inline$1.escape).replace('])', '~|])').getRegex(),\n    _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n    url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n    _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n    del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n    text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n  });\n  inline$1.gfm.url = edit(inline$1.gfm.url, 'i').replace('email', inline$1.gfm._extended_email).getRegex();\n  /**\n   * GFM + Line Breaks Inline Grammar\n   */\n\n  inline$1.breaks = merge$1({}, inline$1.gfm, {\n    br: edit(inline$1.br).replace('{2,}', '*').getRegex(),\n    text: edit(inline$1.gfm.text).replace('\\\\b_', '\\\\b_| {2,}\\\\n').replace(/\\{2,\\}/g, '*').getRegex()\n  });\n  var rules = {\n    block: block$1,\n    inline: inline$1\n  };\n\n  var Tokenizer$1 = Tokenizer_1;\n  var defaults$3 = defaults$5.exports.defaults;\n  var block = rules.block,\n      inline = rules.inline;\n  var repeatString = helpers.repeatString;\n  /**\n   * smartypants text replacement\n   */\n\n  function smartypants(text) {\n    return text // em-dashes\n    .replace(/---/g, \"\\u2014\") // en-dashes\n    .replace(/--/g, \"\\u2013\") // opening singles\n    .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, \"$1\\u2018\") // closing singles & apostrophes\n    .replace(/'/g, \"\\u2019\") // opening doubles\n    .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, \"$1\\u201C\") // closing doubles\n    .replace(/\"/g, \"\\u201D\") // ellipses\n    .replace(/\\.{3}/g, \"\\u2026\");\n  }\n  /**\n   * mangle email addresses\n   */\n\n\n  function mangle(text) {\n    var out = '',\n        i,\n        ch;\n    var l = text.length;\n\n    for (i = 0; i < l; i++) {\n      ch = text.charCodeAt(i);\n\n      if (Math.random() > 0.5) {\n        ch = 'x' + ch.toString(16);\n      }\n\n      out += '&#' + ch + ';';\n    }\n\n    return out;\n  }\n  /**\n   * Block Lexer\n   */\n\n\n  var Lexer_1 = /*#__PURE__*/function () {\n    function Lexer(options) {\n      this.tokens = [];\n      this.tokens.links = Object.create(null);\n      this.options = options || defaults$3;\n      this.options.tokenizer = this.options.tokenizer || new Tokenizer$1();\n      this.tokenizer = this.options.tokenizer;\n      this.tokenizer.options = this.options;\n      this.tokenizer.lexer = this;\n      this.inlineQueue = [];\n      this.state = {\n        inLink: false,\n        inRawBlock: false,\n        top: true\n      };\n      var rules = {\n        block: block.normal,\n        inline: inline.normal\n      };\n\n      if (this.options.pedantic) {\n        rules.block = block.pedantic;\n        rules.inline = inline.pedantic;\n      } else if (this.options.gfm) {\n        rules.block = block.gfm;\n\n        if (this.options.breaks) {\n          rules.inline = inline.breaks;\n        } else {\n          rules.inline = inline.gfm;\n        }\n      }\n\n      this.tokenizer.rules = rules;\n    }\n    /**\n     * Expose Rules\n     */\n\n\n    /**\n     * Static Lex Method\n     */\n    Lexer.lex = function lex(src, options) {\n      var lexer = new Lexer(options);\n      return lexer.lex(src);\n    }\n    /**\n     * Static Lex Inline Method\n     */\n    ;\n\n    Lexer.lexInline = function lexInline(src, options) {\n      var lexer = new Lexer(options);\n      return lexer.inlineTokens(src);\n    }\n    /**\n     * Preprocessing\n     */\n    ;\n\n    var _proto = Lexer.prototype;\n\n    _proto.lex = function lex(src) {\n      src = src.replace(/\\r\\n|\\r/g, '\\n').replace(/\\t/g, '    ');\n      this.blockTokens(src, this.tokens);\n      var next;\n\n      while (next = this.inlineQueue.shift()) {\n        this.inlineTokens(next.src, next.tokens);\n      }\n\n      return this.tokens;\n    }\n    /**\n     * Lexing\n     */\n    ;\n\n    _proto.blockTokens = function blockTokens(src, tokens) {\n      var _this = this;\n\n      if (tokens === void 0) {\n        tokens = [];\n      }\n\n      if (this.options.pedantic) {\n        src = src.replace(/^ +$/gm, '');\n      }\n\n      var token, lastToken, cutSrc, lastParagraphClipped;\n\n      while (src) {\n        if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {\n          if (token = extTokenizer.call({\n            lexer: _this\n          }, src, tokens)) {\n            src = src.substring(token.raw.length);\n            tokens.push(token);\n            return true;\n          }\n\n          return false;\n        })) {\n          continue;\n        } // newline\n\n\n        if (token = this.tokenizer.space(src)) {\n          src = src.substring(token.raw.length);\n\n          if (token.type) {\n            tokens.push(token);\n          }\n\n          continue;\n        } // code\n\n\n        if (token = this.tokenizer.code(src)) {\n          src = src.substring(token.raw.length);\n          lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.\n\n          if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n            lastToken.raw += '\\n' + token.raw;\n            lastToken.text += '\\n' + token.text;\n            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n          } else {\n            tokens.push(token);\n          }\n\n          continue;\n        } // fences\n\n\n        if (token = this.tokenizer.fences(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // heading\n\n\n        if (token = this.tokenizer.heading(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // hr\n\n\n        if (token = this.tokenizer.hr(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // blockquote\n\n\n        if (token = this.tokenizer.blockquote(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // list\n\n\n        if (token = this.tokenizer.list(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // html\n\n\n        if (token = this.tokenizer.html(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // def\n\n\n        if (token = this.tokenizer.def(src)) {\n          src = src.substring(token.raw.length);\n          lastToken = tokens[tokens.length - 1];\n\n          if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n            lastToken.raw += '\\n' + token.raw;\n            lastToken.text += '\\n' + token.raw;\n            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n          } else if (!this.tokens.links[token.tag]) {\n            this.tokens.links[token.tag] = {\n              href: token.href,\n              title: token.title\n            };\n          }\n\n          continue;\n        } // table (gfm)\n\n\n        if (token = this.tokenizer.table(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // lheading\n\n\n        if (token = this.tokenizer.lheading(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // top-level paragraph\n        // prevent paragraph consuming extensions by clipping 'src' to extension start\n\n\n        cutSrc = src;\n\n        if (this.options.extensions && this.options.extensions.startBlock) {\n          (function () {\n            var startIndex = Infinity;\n            var tempSrc = src.slice(1);\n            var tempStart = void 0;\n\n            _this.options.extensions.startBlock.forEach(function (getStartIndex) {\n              tempStart = getStartIndex.call({\n                lexer: this\n              }, tempSrc);\n\n              if (typeof tempStart === 'number' && tempStart >= 0) {\n                startIndex = Math.min(startIndex, tempStart);\n              }\n            });\n\n            if (startIndex < Infinity && startIndex >= 0) {\n              cutSrc = src.substring(0, startIndex + 1);\n            }\n          })();\n        }\n\n        if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n          lastToken = tokens[tokens.length - 1];\n\n          if (lastParagraphClipped && lastToken.type === 'paragraph') {\n            lastToken.raw += '\\n' + token.raw;\n            lastToken.text += '\\n' + token.text;\n            this.inlineQueue.pop();\n            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n          } else {\n            tokens.push(token);\n          }\n\n          lastParagraphClipped = cutSrc.length !== src.length;\n          src = src.substring(token.raw.length);\n          continue;\n        } // text\n\n\n        if (token = this.tokenizer.text(src)) {\n          src = src.substring(token.raw.length);\n          lastToken = tokens[tokens.length - 1];\n\n          if (lastToken && lastToken.type === 'text') {\n            lastToken.raw += '\\n' + token.raw;\n            lastToken.text += '\\n' + token.text;\n            this.inlineQueue.pop();\n            this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n          } else {\n            tokens.push(token);\n          }\n\n          continue;\n        }\n\n        if (src) {\n          var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n          if (this.options.silent) {\n            console.error(errMsg);\n            break;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n\n      this.state.top = true;\n      return tokens;\n    };\n\n    _proto.inline = function inline(src, tokens) {\n      this.inlineQueue.push({\n        src: src,\n        tokens: tokens\n      });\n    }\n    /**\n     * Lexing/Compiling\n     */\n    ;\n\n    _proto.inlineTokens = function inlineTokens(src, tokens) {\n      var _this2 = this;\n\n      if (tokens === void 0) {\n        tokens = [];\n      }\n\n      var token, lastToken, cutSrc; // String with links masked to avoid interference with em and strong\n\n      var maskedSrc = src;\n      var match;\n      var keepPrevChar, prevChar; // Mask out reflinks\n\n      if (this.tokens.links) {\n        var links = Object.keys(this.tokens.links);\n\n        if (links.length > 0) {\n          while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n            if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n              maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n            }\n          }\n        }\n      } // Mask out other blocks\n\n\n      while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n        maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n      } // Mask out escaped em & strong delimiters\n\n\n      while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n        maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n      }\n\n      while (src) {\n        if (!keepPrevChar) {\n          prevChar = '';\n        }\n\n        keepPrevChar = false; // extensions\n\n        if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {\n          if (token = extTokenizer.call({\n            lexer: _this2\n          }, src, tokens)) {\n            src = src.substring(token.raw.length);\n            tokens.push(token);\n            return true;\n          }\n\n          return false;\n        })) {\n          continue;\n        } // escape\n\n\n        if (token = this.tokenizer.escape(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // tag\n\n\n        if (token = this.tokenizer.tag(src)) {\n          src = src.substring(token.raw.length);\n          lastToken = tokens[tokens.length - 1];\n\n          if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n            lastToken.raw += token.raw;\n            lastToken.text += token.text;\n          } else {\n            tokens.push(token);\n          }\n\n          continue;\n        } // link\n\n\n        if (token = this.tokenizer.link(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // reflink, nolink\n\n\n        if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n          src = src.substring(token.raw.length);\n          lastToken = tokens[tokens.length - 1];\n\n          if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n            lastToken.raw += token.raw;\n            lastToken.text += token.text;\n          } else {\n            tokens.push(token);\n          }\n\n          continue;\n        } // em & strong\n\n\n        if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // code\n\n\n        if (token = this.tokenizer.codespan(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // br\n\n\n        if (token = this.tokenizer.br(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // del (gfm)\n\n\n        if (token = this.tokenizer.del(src)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // autolink\n\n\n        if (token = this.tokenizer.autolink(src, mangle)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // url (gfm)\n\n\n        if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          continue;\n        } // text\n        // prevent inlineText consuming extensions by clipping 'src' to extension start\n\n\n        cutSrc = src;\n\n        if (this.options.extensions && this.options.extensions.startInline) {\n          (function () {\n            var startIndex = Infinity;\n            var tempSrc = src.slice(1);\n            var tempStart = void 0;\n\n            _this2.options.extensions.startInline.forEach(function (getStartIndex) {\n              tempStart = getStartIndex.call({\n                lexer: this\n              }, tempSrc);\n\n              if (typeof tempStart === 'number' && tempStart >= 0) {\n                startIndex = Math.min(startIndex, tempStart);\n              }\n            });\n\n            if (startIndex < Infinity && startIndex >= 0) {\n              cutSrc = src.substring(0, startIndex + 1);\n            }\n          })();\n        }\n\n        if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n          src = src.substring(token.raw.length);\n\n          if (token.raw.slice(-1) !== '_') {\n            // Track prevChar before string of ____ started\n            prevChar = token.raw.slice(-1);\n          }\n\n          keepPrevChar = true;\n          lastToken = tokens[tokens.length - 1];\n\n          if (lastToken && lastToken.type === 'text') {\n            lastToken.raw += token.raw;\n            lastToken.text += token.text;\n          } else {\n            tokens.push(token);\n          }\n\n          continue;\n        }\n\n        if (src) {\n          var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n          if (this.options.silent) {\n            console.error(errMsg);\n            break;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n\n      return tokens;\n    };\n\n    _createClass(Lexer, null, [{\n      key: \"rules\",\n      get: function get() {\n        return {\n          block: block,\n          inline: inline\n        };\n      }\n    }]);\n\n    return Lexer;\n  }();\n\n  var defaults$2 = defaults$5.exports.defaults;\n  var cleanUrl = helpers.cleanUrl,\n      escape$1 = helpers.escape;\n  /**\n   * Renderer\n   */\n\n  var Renderer_1 = /*#__PURE__*/function () {\n    function Renderer(options) {\n      this.options = options || defaults$2;\n    }\n\n    var _proto = Renderer.prototype;\n\n    _proto.code = function code(_code, infostring, escaped) {\n      var lang = (infostring || '').match(/\\S*/)[0];\n\n      if (this.options.highlight) {\n        var out = this.options.highlight(_code, lang);\n\n        if (out != null && out !== _code) {\n          escaped = true;\n          _code = out;\n        }\n      }\n\n      _code = _code.replace(/\\n$/, '') + '\\n';\n\n      if (!lang) {\n        return '<pre><code>' + (escaped ? _code : escape$1(_code, true)) + '</code></pre>\\n';\n      }\n\n      return '<pre><code class=\"' + this.options.langPrefix + escape$1(lang, true) + '\">' + (escaped ? _code : escape$1(_code, true)) + '</code></pre>\\n';\n    };\n\n    _proto.blockquote = function blockquote(quote) {\n      return '<blockquote>\\n' + quote + '</blockquote>\\n';\n    };\n\n    _proto.html = function html(_html) {\n      return _html;\n    };\n\n    _proto.heading = function heading(text, level, raw, slugger) {\n      if (this.options.headerIds) {\n        return '<h' + level + ' id=\"' + this.options.headerPrefix + slugger.slug(raw) + '\">' + text + '</h' + level + '>\\n';\n      } // ignore IDs\n\n\n      return '<h' + level + '>' + text + '</h' + level + '>\\n';\n    };\n\n    _proto.hr = function hr() {\n      return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n    };\n\n    _proto.list = function list(body, ordered, start) {\n      var type = ordered ? 'ol' : 'ul',\n          startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : '';\n      return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n    };\n\n    _proto.listitem = function listitem(text) {\n      return '<li>' + text + '</li>\\n';\n    };\n\n    _proto.checkbox = function checkbox(checked) {\n      return '<input ' + (checked ? 'checked=\"\" ' : '') + 'disabled=\"\" type=\"checkbox\"' + (this.options.xhtml ? ' /' : '') + '> ';\n    };\n\n    _proto.paragraph = function paragraph(text) {\n      return '<p>' + text + '</p>\\n';\n    };\n\n    _proto.table = function table(header, body) {\n      if (body) body = '<tbody>' + body + '</tbody>';\n      return '<table>\\n' + '<thead>\\n' + header + '</thead>\\n' + body + '</table>\\n';\n    };\n\n    _proto.tablerow = function tablerow(content) {\n      return '<tr>\\n' + content + '</tr>\\n';\n    };\n\n    _proto.tablecell = function tablecell(content, flags) {\n      var type = flags.header ? 'th' : 'td';\n      var tag = flags.align ? '<' + type + ' align=\"' + flags.align + '\">' : '<' + type + '>';\n      return tag + content + '</' + type + '>\\n';\n    } // span level renderer\n    ;\n\n    _proto.strong = function strong(text) {\n      return '<strong>' + text + '</strong>';\n    };\n\n    _proto.em = function em(text) {\n      return '<em>' + text + '</em>';\n    };\n\n    _proto.codespan = function codespan(text) {\n      return '<code>' + text + '</code>';\n    };\n\n    _proto.br = function br() {\n      return this.options.xhtml ? '<br/>' : '<br>';\n    };\n\n    _proto.del = function del(text) {\n      return '<del>' + text + '</del>';\n    };\n\n    _proto.link = function link(href, title, text) {\n      href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n\n      if (href === null) {\n        return text;\n      }\n\n      var out = '<a href=\"' + escape$1(href) + '\"';\n\n      if (title) {\n        out += ' title=\"' + title + '\"';\n      }\n\n      out += '>' + text + '</a>';\n      return out;\n    };\n\n    _proto.image = function image(href, title, text) {\n      href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n\n      if (href === null) {\n        return text;\n      }\n\n      var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n\n      if (title) {\n        out += ' title=\"' + title + '\"';\n      }\n\n      out += this.options.xhtml ? '/>' : '>';\n      return out;\n    };\n\n    _proto.text = function text(_text) {\n      return _text;\n    };\n\n    return Renderer;\n  }();\n\n  /**\n   * TextRenderer\n   * returns only the textual part of the token\n   */\n\n  var TextRenderer_1 = /*#__PURE__*/function () {\n    function TextRenderer() {}\n\n    var _proto = TextRenderer.prototype;\n\n    // no need for block level renderers\n    _proto.strong = function strong(text) {\n      return text;\n    };\n\n    _proto.em = function em(text) {\n      return text;\n    };\n\n    _proto.codespan = function codespan(text) {\n      return text;\n    };\n\n    _proto.del = function del(text) {\n      return text;\n    };\n\n    _proto.html = function html(text) {\n      return text;\n    };\n\n    _proto.text = function text(_text) {\n      return _text;\n    };\n\n    _proto.link = function link(href, title, text) {\n      return '' + text;\n    };\n\n    _proto.image = function image(href, title, text) {\n      return '' + text;\n    };\n\n    _proto.br = function br() {\n      return '';\n    };\n\n    return TextRenderer;\n  }();\n\n  /**\n   * Slugger generates header id\n   */\n\n  var Slugger_1 = /*#__PURE__*/function () {\n    function Slugger() {\n      this.seen = {};\n    }\n\n    var _proto = Slugger.prototype;\n\n    _proto.serialize = function serialize(value) {\n      return value.toLowerCase().trim() // remove html tags\n      .replace(/<[!\\/a-z].*?>/ig, '') // remove unwanted chars\n      .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '').replace(/\\s/g, '-');\n    }\n    /**\n     * Finds the next safe (unique) slug to use\n     */\n    ;\n\n    _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {\n      var slug = originalSlug;\n      var occurenceAccumulator = 0;\n\n      if (this.seen.hasOwnProperty(slug)) {\n        occurenceAccumulator = this.seen[originalSlug];\n\n        do {\n          occurenceAccumulator++;\n          slug = originalSlug + '-' + occurenceAccumulator;\n        } while (this.seen.hasOwnProperty(slug));\n      }\n\n      if (!isDryRun) {\n        this.seen[originalSlug] = occurenceAccumulator;\n        this.seen[slug] = 0;\n      }\n\n      return slug;\n    }\n    /**\n     * Convert string to unique id\n     * @param {object} options\n     * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n     */\n    ;\n\n    _proto.slug = function slug(value, options) {\n      if (options === void 0) {\n        options = {};\n      }\n\n      var slug = this.serialize(value);\n      return this.getNextSafeSlug(slug, options.dryrun);\n    };\n\n    return Slugger;\n  }();\n\n  var Renderer$1 = Renderer_1;\n  var TextRenderer$1 = TextRenderer_1;\n  var Slugger$1 = Slugger_1;\n  var defaults$1 = defaults$5.exports.defaults;\n  var unescape = helpers.unescape;\n  /**\n   * Parsing & Compiling\n   */\n\n  var Parser_1 = /*#__PURE__*/function () {\n    function Parser(options) {\n      this.options = options || defaults$1;\n      this.options.renderer = this.options.renderer || new Renderer$1();\n      this.renderer = this.options.renderer;\n      this.renderer.options = this.options;\n      this.textRenderer = new TextRenderer$1();\n      this.slugger = new Slugger$1();\n    }\n    /**\n     * Static Parse Method\n     */\n\n\n    Parser.parse = function parse(tokens, options) {\n      var parser = new Parser(options);\n      return parser.parse(tokens);\n    }\n    /**\n     * Static Parse Inline Method\n     */\n    ;\n\n    Parser.parseInline = function parseInline(tokens, options) {\n      var parser = new Parser(options);\n      return parser.parseInline(tokens);\n    }\n    /**\n     * Parse Loop\n     */\n    ;\n\n    var _proto = Parser.prototype;\n\n    _proto.parse = function parse(tokens, top) {\n      if (top === void 0) {\n        top = true;\n      }\n\n      var out = '',\n          i,\n          j,\n          k,\n          l2,\n          l3,\n          row,\n          cell,\n          header,\n          body,\n          token,\n          ordered,\n          start,\n          loose,\n          itemBody,\n          item,\n          checked,\n          task,\n          checkbox,\n          ret;\n      var l = tokens.length;\n\n      for (i = 0; i < l; i++) {\n        token = tokens[i]; // Run any renderer extensions\n\n        if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n          ret = this.options.extensions.renderers[token.type].call({\n            parser: this\n          }, token);\n\n          if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n            out += ret || '';\n            continue;\n          }\n        }\n\n        switch (token.type) {\n          case 'space':\n            {\n              continue;\n            }\n\n          case 'hr':\n            {\n              out += this.renderer.hr();\n              continue;\n            }\n\n          case 'heading':\n            {\n              out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);\n              continue;\n            }\n\n          case 'code':\n            {\n              out += this.renderer.code(token.text, token.lang, token.escaped);\n              continue;\n            }\n\n          case 'table':\n            {\n              header = ''; // header\n\n              cell = '';\n              l2 = token.header.length;\n\n              for (j = 0; j < l2; j++) {\n                cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {\n                  header: true,\n                  align: token.align[j]\n                });\n              }\n\n              header += this.renderer.tablerow(cell);\n              body = '';\n              l2 = token.rows.length;\n\n              for (j = 0; j < l2; j++) {\n                row = token.rows[j];\n                cell = '';\n                l3 = row.length;\n\n                for (k = 0; k < l3; k++) {\n                  cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {\n                    header: false,\n                    align: token.align[k]\n                  });\n                }\n\n                body += this.renderer.tablerow(cell);\n              }\n\n              out += this.renderer.table(header, body);\n              continue;\n            }\n\n          case 'blockquote':\n            {\n              body = this.parse(token.tokens);\n              out += this.renderer.blockquote(body);\n              continue;\n            }\n\n          case 'list':\n            {\n              ordered = token.ordered;\n              start = token.start;\n              loose = token.loose;\n              l2 = token.items.length;\n              body = '';\n\n              for (j = 0; j < l2; j++) {\n                item = token.items[j];\n                checked = item.checked;\n                task = item.task;\n                itemBody = '';\n\n                if (item.task) {\n                  checkbox = this.renderer.checkbox(checked);\n\n                  if (loose) {\n                    if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n                      item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n\n                      if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n                        item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n                      }\n                    } else {\n                      item.tokens.unshift({\n                        type: 'text',\n                        text: checkbox\n                      });\n                    }\n                  } else {\n                    itemBody += checkbox;\n                  }\n                }\n\n                itemBody += this.parse(item.tokens, loose);\n                body += this.renderer.listitem(itemBody, task, checked);\n              }\n\n              out += this.renderer.list(body, ordered, start);\n              continue;\n            }\n\n          case 'html':\n            {\n              // TODO parse inline content if parameter markdown=1\n              out += this.renderer.html(token.text);\n              continue;\n            }\n\n          case 'paragraph':\n            {\n              out += this.renderer.paragraph(this.parseInline(token.tokens));\n              continue;\n            }\n\n          case 'text':\n            {\n              body = token.tokens ? this.parseInline(token.tokens) : token.text;\n\n              while (i + 1 < l && tokens[i + 1].type === 'text') {\n                token = tokens[++i];\n                body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n              }\n\n              out += top ? this.renderer.paragraph(body) : body;\n              continue;\n            }\n\n          default:\n            {\n              var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n              if (this.options.silent) {\n                console.error(errMsg);\n                return;\n              } else {\n                throw new Error(errMsg);\n              }\n            }\n        }\n      }\n\n      return out;\n    }\n    /**\n     * Parse Inline Tokens\n     */\n    ;\n\n    _proto.parseInline = function parseInline(tokens, renderer) {\n      renderer = renderer || this.renderer;\n      var out = '',\n          i,\n          token,\n          ret;\n      var l = tokens.length;\n\n      for (i = 0; i < l; i++) {\n        token = tokens[i]; // Run any renderer extensions\n\n        if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n          ret = this.options.extensions.renderers[token.type].call({\n            parser: this\n          }, token);\n\n          if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n            out += ret || '';\n            continue;\n          }\n        }\n\n        switch (token.type) {\n          case 'escape':\n            {\n              out += renderer.text(token.text);\n              break;\n            }\n\n          case 'html':\n            {\n              out += renderer.html(token.text);\n              break;\n            }\n\n          case 'link':\n            {\n              out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n              break;\n            }\n\n          case 'image':\n            {\n              out += renderer.image(token.href, token.title, token.text);\n              break;\n            }\n\n          case 'strong':\n            {\n              out += renderer.strong(this.parseInline(token.tokens, renderer));\n              break;\n            }\n\n          case 'em':\n            {\n              out += renderer.em(this.parseInline(token.tokens, renderer));\n              break;\n            }\n\n          case 'codespan':\n            {\n              out += renderer.codespan(token.text);\n              break;\n            }\n\n          case 'br':\n            {\n              out += renderer.br();\n              break;\n            }\n\n          case 'del':\n            {\n              out += renderer.del(this.parseInline(token.tokens, renderer));\n              break;\n            }\n\n          case 'text':\n            {\n              out += renderer.text(token.text);\n              break;\n            }\n\n          default:\n            {\n              var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n              if (this.options.silent) {\n                console.error(errMsg);\n                return;\n              } else {\n                throw new Error(errMsg);\n              }\n            }\n        }\n      }\n\n      return out;\n    };\n\n    return Parser;\n  }();\n\n  var Lexer = Lexer_1;\n  var Parser = Parser_1;\n  var Tokenizer = Tokenizer_1;\n  var Renderer = Renderer_1;\n  var TextRenderer = TextRenderer_1;\n  var Slugger = Slugger_1;\n  var merge = helpers.merge,\n      checkSanitizeDeprecation = helpers.checkSanitizeDeprecation,\n      escape = helpers.escape;\n  var getDefaults = defaults$5.exports.getDefaults,\n      changeDefaults = defaults$5.exports.changeDefaults,\n      defaults = defaults$5.exports.defaults;\n  /**\n   * Marked\n   */\n\n  function marked(src, opt, callback) {\n    // throw error in case of non string input\n    if (typeof src === 'undefined' || src === null) {\n      throw new Error('marked(): input parameter is undefined or null');\n    }\n\n    if (typeof src !== 'string') {\n      throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n    }\n\n    if (typeof opt === 'function') {\n      callback = opt;\n      opt = null;\n    }\n\n    opt = merge({}, marked.defaults, opt || {});\n    checkSanitizeDeprecation(opt);\n\n    if (callback) {\n      var highlight = opt.highlight;\n      var tokens;\n\n      try {\n        tokens = Lexer.lex(src, opt);\n      } catch (e) {\n        return callback(e);\n      }\n\n      var done = function done(err) {\n        var out;\n\n        if (!err) {\n          try {\n            if (opt.walkTokens) {\n              marked.walkTokens(tokens, opt.walkTokens);\n            }\n\n            out = Parser.parse(tokens, opt);\n          } catch (e) {\n            err = e;\n          }\n        }\n\n        opt.highlight = highlight;\n        return err ? callback(err) : callback(null, out);\n      };\n\n      if (!highlight || highlight.length < 3) {\n        return done();\n      }\n\n      delete opt.highlight;\n      if (!tokens.length) return done();\n      var pending = 0;\n      marked.walkTokens(tokens, function (token) {\n        if (token.type === 'code') {\n          pending++;\n          setTimeout(function () {\n            highlight(token.text, token.lang, function (err, code) {\n              if (err) {\n                return done(err);\n              }\n\n              if (code != null && code !== token.text) {\n                token.text = code;\n                token.escaped = true;\n              }\n\n              pending--;\n\n              if (pending === 0) {\n                done();\n              }\n            });\n          }, 0);\n        }\n      });\n\n      if (pending === 0) {\n        done();\n      }\n\n      return;\n    }\n\n    try {\n      var _tokens = Lexer.lex(src, opt);\n\n      if (opt.walkTokens) {\n        marked.walkTokens(_tokens, opt.walkTokens);\n      }\n\n      return Parser.parse(_tokens, opt);\n    } catch (e) {\n      e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n      if (opt.silent) {\n        return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';\n      }\n\n      throw e;\n    }\n  }\n  /**\n   * Options\n   */\n\n\n  marked.options = marked.setOptions = function (opt) {\n    merge(marked.defaults, opt);\n    changeDefaults(marked.defaults);\n    return marked;\n  };\n\n  marked.getDefaults = getDefaults;\n  marked.defaults = defaults;\n  /**\n   * Use Extension\n   */\n\n  marked.use = function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var opts = merge.apply(void 0, [{}].concat(args));\n    var extensions = marked.defaults.extensions || {\n      renderers: {},\n      childTokens: {}\n    };\n    var hasExtensions;\n    args.forEach(function (pack) {\n      // ==-- Parse \"addon\" extensions --== //\n      if (pack.extensions) {\n        hasExtensions = true;\n        pack.extensions.forEach(function (ext) {\n          if (!ext.name) {\n            throw new Error('extension name required');\n          }\n\n          if (ext.renderer) {\n            // Renderer extensions\n            var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;\n\n            if (prevRenderer) {\n              // Replace extension with func to run new extension but fall back if false\n              extensions.renderers[ext.name] = function () {\n                for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n                  args[_key2] = arguments[_key2];\n                }\n\n                var ret = ext.renderer.apply(this, args);\n\n                if (ret === false) {\n                  ret = prevRenderer.apply(this, args);\n                }\n\n                return ret;\n              };\n            } else {\n              extensions.renderers[ext.name] = ext.renderer;\n            }\n          }\n\n          if (ext.tokenizer) {\n            // Tokenizer Extensions\n            if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {\n              throw new Error(\"extension level must be 'block' or 'inline'\");\n            }\n\n            if (extensions[ext.level]) {\n              extensions[ext.level].unshift(ext.tokenizer);\n            } else {\n              extensions[ext.level] = [ext.tokenizer];\n            }\n\n            if (ext.start) {\n              // Function to check for start of token\n              if (ext.level === 'block') {\n                if (extensions.startBlock) {\n                  extensions.startBlock.push(ext.start);\n                } else {\n                  extensions.startBlock = [ext.start];\n                }\n              } else if (ext.level === 'inline') {\n                if (extensions.startInline) {\n                  extensions.startInline.push(ext.start);\n                } else {\n                  extensions.startInline = [ext.start];\n                }\n              }\n            }\n          }\n\n          if (ext.childTokens) {\n            // Child tokens to be visited by walkTokens\n            extensions.childTokens[ext.name] = ext.childTokens;\n          }\n        });\n      } // ==-- Parse \"overwrite\" extensions --== //\n\n\n      if (pack.renderer) {\n        (function () {\n          var renderer = marked.defaults.renderer || new Renderer();\n\n          var _loop = function _loop(prop) {\n            var prevRenderer = renderer[prop]; // Replace renderer with func to run extension, but fall back if false\n\n            renderer[prop] = function () {\n              for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n                args[_key3] = arguments[_key3];\n              }\n\n              var ret = pack.renderer[prop].apply(renderer, args);\n\n              if (ret === false) {\n                ret = prevRenderer.apply(renderer, args);\n              }\n\n              return ret;\n            };\n          };\n\n          for (var prop in pack.renderer) {\n            _loop(prop);\n          }\n\n          opts.renderer = renderer;\n        })();\n      }\n\n      if (pack.tokenizer) {\n        (function () {\n          var tokenizer = marked.defaults.tokenizer || new Tokenizer();\n\n          var _loop2 = function _loop2(prop) {\n            var prevTokenizer = tokenizer[prop]; // Replace tokenizer with func to run extension, but fall back if false\n\n            tokenizer[prop] = function () {\n              for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n                args[_key4] = arguments[_key4];\n              }\n\n              var ret = pack.tokenizer[prop].apply(tokenizer, args);\n\n              if (ret === false) {\n                ret = prevTokenizer.apply(tokenizer, args);\n              }\n\n              return ret;\n            };\n          };\n\n          for (var prop in pack.tokenizer) {\n            _loop2(prop);\n          }\n\n          opts.tokenizer = tokenizer;\n        })();\n      } // ==-- Parse WalkTokens extensions --== //\n\n\n      if (pack.walkTokens) {\n        var walkTokens = marked.defaults.walkTokens;\n\n        opts.walkTokens = function (token) {\n          pack.walkTokens.call(this, token);\n\n          if (walkTokens) {\n            walkTokens.call(this, token);\n          }\n        };\n      }\n\n      if (hasExtensions) {\n        opts.extensions = extensions;\n      }\n\n      marked.setOptions(opts);\n    });\n  };\n  /**\n   * Run callback for every token\n   */\n\n\n  marked.walkTokens = function (tokens, callback) {\n    var _loop3 = function _loop3() {\n      var token = _step.value;\n      callback.call(marked, token);\n\n      switch (token.type) {\n        case 'table':\n          {\n            for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) {\n              var cell = _step2.value;\n              marked.walkTokens(cell.tokens, callback);\n            }\n\n            for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {\n              var row = _step3.value;\n\n              for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {\n                var _cell = _step4.value;\n                marked.walkTokens(_cell.tokens, callback);\n              }\n            }\n\n            break;\n          }\n\n        case 'list':\n          {\n            marked.walkTokens(token.items, callback);\n            break;\n          }\n\n        default:\n          {\n            if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {\n              // Walk any extensions\n              marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) {\n                marked.walkTokens(token[childTokens], callback);\n              });\n            } else if (token.tokens) {\n              marked.walkTokens(token.tokens, callback);\n            }\n          }\n      }\n    };\n\n    for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {\n      _loop3();\n    }\n  };\n  /**\n   * Parse Inline\n   */\n\n\n  marked.parseInline = function (src, opt) {\n    // throw error in case of non string input\n    if (typeof src === 'undefined' || src === null) {\n      throw new Error('marked.parseInline(): input parameter is undefined or null');\n    }\n\n    if (typeof src !== 'string') {\n      throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n    }\n\n    opt = merge({}, marked.defaults, opt || {});\n    checkSanitizeDeprecation(opt);\n\n    try {\n      var tokens = Lexer.lexInline(src, opt);\n\n      if (opt.walkTokens) {\n        marked.walkTokens(tokens, opt.walkTokens);\n      }\n\n      return Parser.parseInline(tokens, opt);\n    } catch (e) {\n      e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n      if (opt.silent) {\n        return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';\n      }\n\n      throw e;\n    }\n  };\n  /**\n   * Expose\n   */\n\n\n  marked.Parser = Parser;\n  marked.parser = Parser.parse;\n  marked.Renderer = Renderer;\n  marked.TextRenderer = TextRenderer;\n  marked.Lexer = Lexer;\n  marked.lexer = Lexer.lex;\n  marked.Tokenizer = Tokenizer;\n  marked.Slugger = Slugger;\n  marked.parse = marked;\n  var marked_1 = marked;\n\n  return marked_1;\n\n}));\n", "/*global require,module*/\n\"use strict\";\nvar CodeMirror = require(\"codemirror\");\nrequire(\"codemirror/addon/edit/continuelist.js\");\nrequire(\"./codemirror/tablist\");\nrequire(\"codemirror/addon/display/fullscreen.js\");\nrequire(\"codemirror/mode/markdown/markdown.js\");\nrequire(\"codemirror/addon/mode/overlay.js\");\nrequire(\"codemirror/addon/display/placeholder.js\");\nrequire(\"codemirror/addon/selection/mark-selection.js\");\nrequire(\"codemirror/mode/gfm/gfm.js\");\nrequire(\"codemirror/mode/xml/xml.js\");\nvar CodeMirrorSpellChecker = require(\"codemirror-spell-checker\");\nvar marked = require(\"marked\");\n\n\n// Some variables\nvar isMac = /Mac/.test(navigator.platform);\n\n// Mapping of actions that can be bound to keyboard shortcuts or toolbar buttons\nvar bindings = {\n\t\"toggleBold\": toggleBold,\n\t\"toggleItalic\": toggleItalic,\n\t\"drawLink\": drawLink,\n\t\"toggleHeadingSmaller\": toggleHeadingSmaller,\n\t\"toggleHeadingBigger\": toggleHeadingBigger,\n\t\"drawImage\": drawImage,\n\t\"toggleBlockquote\": toggleBlockquote,\n\t\"toggleOrderedList\": toggleOrderedList,\n\t\"toggleUnorderedList\": toggleUnorderedList,\n\t\"toggleCodeBlock\": toggleCodeBlock,\n\t\"togglePreview\": togglePreview,\n\t\"toggleStrikethrough\": toggleStrikethrough,\n\t\"toggleHeading1\": toggleHeading1,\n\t\"toggleHeading2\": toggleHeading2,\n\t\"toggleHeading3\": toggleHeading3,\n\t\"cleanBlock\": cleanBlock,\n\t\"drawTable\": drawTable,\n\t\"drawHorizontalRule\": drawHorizontalRule,\n\t\"undo\": undo,\n\t\"redo\": redo,\n\t\"toggleSideBySide\": toggleSideBySide,\n\t\"toggleFullScreen\": toggleFullScreen\n};\n\nvar shortcuts = {\n\t\"toggleBold\": \"Cmd-B\",\n\t\"toggleItalic\": \"Cmd-I\",\n\t\"drawLink\": \"Cmd-K\",\n\t\"toggleHeadingSmaller\": \"Cmd-H\",\n\t\"toggleHeadingBigger\": \"Shift-Cmd-H\",\n\t\"cleanBlock\": \"Cmd-E\",\n\t\"drawImage\": \"Cmd-Alt-I\",\n\t\"toggleBlockquote\": \"Cmd-'\",\n\t\"toggleOrderedList\": \"Cmd-Alt-L\",\n\t\"toggleUnorderedList\": \"Cmd-L\",\n\t\"toggleCodeBlock\": \"Cmd-Alt-C\",\n\t\"togglePreview\": \"Cmd-P\",\n\t\"toggleSideBySide\": \"F9\",\n\t\"toggleFullScreen\": \"F11\"\n};\n\nvar getBindingName = function(f) {\n\tfor(var key in bindings) {\n\t\tif(bindings[key] === f) {\n\t\t\treturn key;\n\t\t}\n\t}\n\treturn null;\n};\n\nvar isMobile = function() {\n\tvar check = false;\n\t(function(a) {\n\t\tif(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true;\n\t})(navigator.userAgent || navigator.vendor || window.opera);\n\treturn check;\n};\n\n\n/**\n * Fix shortcut. Mac use Command, others use Ctrl.\n */\nfunction fixShortcut(name) {\n\tif(isMac) {\n\t\tname = name.replace(\"Ctrl\", \"Cmd\");\n\t} else {\n\t\tname = name.replace(\"Cmd\", \"Ctrl\");\n\t}\n\treturn name;\n}\n\n\n/**\n * Create icon element for toolbar.\n */\nfunction createIcon(options, enableTooltips, shortcuts) {\n\toptions = options || {};\n\tvar el = document.createElement(\"a\");\n\tenableTooltips = (enableTooltips == undefined) ? true : enableTooltips;\n\n\tif(options.title && enableTooltips) {\n\t\tel.title = createTootlip(options.title, options.action, shortcuts);\n\n\t\tif(isMac) {\n\t\t\tel.title = el.title.replace(\"Ctrl\", \"\u2318\");\n\t\t\tel.title = el.title.replace(\"Alt\", \"\u2325\");\n\t\t}\n\t}\n\n\tel.tabIndex = -1;\n\tel.className = options.className;\n\treturn el;\n}\n\nfunction createSep() {\n\tvar el = document.createElement(\"i\");\n\tel.className = \"separator\";\n\tel.innerHTML = \"|\";\n\treturn el;\n}\n\nfunction createTootlip(title, action, shortcuts) {\n\tvar actionName;\n\tvar tooltip = title;\n\n\tif(action) {\n\t\tactionName = getBindingName(action);\n\t\tif(shortcuts[actionName]) {\n\t\t\ttooltip += \" (\" + fixShortcut(shortcuts[actionName]) + \")\";\n\t\t}\n\t}\n\n\treturn tooltip;\n}\n\n/**\n * The state of CodeMirror at the given position.\n */\nfunction getState(cm, pos) {\n\tpos = pos || cm.getCursor(\"start\");\n\tvar stat = cm.getTokenAt(pos);\n\tif(!stat.type) return {};\n\n\tvar types = stat.type.split(\" \");\n\n\tvar ret = {},\n\t\tdata, text;\n\tfor(var i = 0; i < types.length; i++) {\n\t\tdata = types[i];\n\t\tif(data === \"strong\") {\n\t\t\tret.bold = true;\n\t\t} else if(data === \"variable-2\") {\n\t\t\ttext = cm.getLine(pos.line);\n\t\t\tif(/^\\s*\\d+\\.\\s/.test(text)) {\n\t\t\t\tret[\"ordered-list\"] = true;\n\t\t\t} else {\n\t\t\t\tret[\"unordered-list\"] = true;\n\t\t\t}\n\t\t} else if(data === \"atom\") {\n\t\t\tret.quote = true;\n\t\t} else if(data === \"em\") {\n\t\t\tret.italic = true;\n\t\t} else if(data === \"quote\") {\n\t\t\tret.quote = true;\n\t\t} else if(data === \"strikethrough\") {\n\t\t\tret.strikethrough = true;\n\t\t} else if(data === \"comment\") {\n\t\t\tret.code = true;\n\t\t} else if(data === \"link\") {\n\t\t\tret.link = true;\n\t\t} else if(data === \"tag\") {\n\t\t\tret.image = true;\n\t\t} else if(data.match(/^header(\\-[1-6])?$/)) {\n\t\t\tret[data.replace(\"header\", \"heading\")] = true;\n\t\t}\n\t}\n\treturn ret;\n}\n\n\n// Saved overflow setting\nvar saved_overflow = \"\";\n\n/**\n * Toggle full screen of the editor.\n */\nfunction toggleFullScreen(editor) {\n\t// Set fullscreen\n\tvar cm = editor.codemirror;\n\tcm.setOption(\"fullScreen\", !cm.getOption(\"fullScreen\"));\n\n\n\t// Prevent scrolling on body during fullscreen active\n\tif(cm.getOption(\"fullScreen\")) {\n\t\tsaved_overflow = document.body.style.overflow;\n\t\tdocument.body.style.overflow = \"hidden\";\n\t} else {\n\t\tdocument.body.style.overflow = saved_overflow;\n\t}\n\n\n\t// Update toolbar class\n\tvar wrap = cm.getWrapperElement();\n\n\tif(!/fullscreen/.test(wrap.previousSibling.className)) {\n\t\twrap.previousSibling.className += \" fullscreen\";\n\t} else {\n\t\twrap.previousSibling.className = wrap.previousSibling.className.replace(/\\s*fullscreen\\b/, \"\");\n\t}\n\n\n\t// Update toolbar button\n\tvar toolbarButton = editor.toolbarElements.fullscreen;\n\n\tif(!/active/.test(toolbarButton.className)) {\n\t\ttoolbarButton.className += \" active\";\n\t} else {\n\t\ttoolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, \"\");\n\t}\n\n\n\t// Hide side by side if needed\n\tvar sidebyside = cm.getWrapperElement().nextSibling;\n\tif(/editor-preview-active-side/.test(sidebyside.className))\n\t\ttoggleSideBySide(editor);\n}\n\n\n/**\n * Action for toggling bold.\n */\nfunction toggleBold(editor) {\n\t_toggleBlock(editor, \"bold\", editor.options.blockStyles.bold);\n}\n\n\n/**\n * Action for toggling italic.\n */\nfunction toggleItalic(editor) {\n\t_toggleBlock(editor, \"italic\", editor.options.blockStyles.italic);\n}\n\n\n/**\n * Action for toggling strikethrough.\n */\nfunction toggleStrikethrough(editor) {\n\t_toggleBlock(editor, \"strikethrough\", \"~~\");\n}\n\n/**\n * Action for toggling code block.\n */\nfunction toggleCodeBlock(editor) {\n\tvar fenceCharsToInsert = editor.options.blockStyles.code;\n\n\tfunction fencing_line(line) {\n\t\t/* return true, if this is a ``` or ~~~ line */\n\t\tif(typeof line !== \"object\") {\n\t\t\tthrow \"fencing_line() takes a 'line' object (not a line number, or line text).  Got: \" + typeof line + \": \" + line;\n\t\t}\n\t\treturn line.styles && line.styles[2] && line.styles[2].indexOf(\"formatting-code-block\") !== -1;\n\t}\n\n\tfunction token_state(token) {\n\t\t// base goes an extra level deep when mode backdrops are used, e.g. spellchecker on\n\t\treturn token.state.base.base || token.state.base;\n\t}\n\n\tfunction code_type(cm, line_num, line, firstTok, lastTok) {\n\t\t/*\n\t\t * Return \"single\", \"indented\", \"fenced\" or false\n\t\t *\n\t\t * cm and line_num are required.  Others are optional for efficiency\n\t\t *   To check in the middle of a line, pass in firstTok yourself.\n\t\t */\n\t\tline = line || cm.getLineHandle(line_num);\n\t\tfirstTok = firstTok || cm.getTokenAt({\n\t\t\tline: line_num,\n\t\t\tch: 1\n\t\t});\n\t\tlastTok = lastTok || (!!line.text && cm.getTokenAt({\n\t\t\tline: line_num,\n\t\t\tch: line.text.length - 1\n\t\t}));\n\t\tvar types = firstTok.type ? firstTok.type.split(\" \") : [];\n\t\tif(lastTok && token_state(lastTok).indentedCode) {\n\t\t\t// have to check last char, since first chars of first line aren\"t marked as indented\n\t\t\treturn \"indented\";\n\t\t} else if(types.indexOf(\"comment\") === -1) {\n\t\t\t// has to be after \"indented\" check, since first chars of first indented line aren\"t marked as such\n\t\t\treturn false;\n\t\t} else if(token_state(firstTok).fencedChars || token_state(lastTok).fencedChars || fencing_line(line)) {\n\t\t\treturn \"fenced\";\n\t\t} else {\n\t\t\treturn \"single\";\n\t\t}\n\t}\n\n\tfunction insertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert) {\n\t\tvar start_line_sel = cur_start.line + 1,\n\t\t\tend_line_sel = cur_end.line + 1,\n\t\t\tsel_multi = cur_start.line !== cur_end.line,\n\t\t\trepl_start = fenceCharsToInsert + \"\\n\",\n\t\t\trepl_end = \"\\n\" + fenceCharsToInsert;\n\t\tif(sel_multi) {\n\t\t\tend_line_sel++;\n\t\t}\n\t\t// handle last char including \\n or not\n\t\tif(sel_multi && cur_end.ch === 0) {\n\t\t\trepl_end = fenceCharsToInsert + \"\\n\";\n\t\t\tend_line_sel--;\n\t\t}\n\t\t_replaceSelection(cm, false, [repl_start, repl_end]);\n\t\tcm.setSelection({\n\t\t\tline: start_line_sel,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: end_line_sel,\n\t\t\tch: 0\n\t\t});\n\t}\n\n\tvar cm = editor.codemirror,\n\t\tcur_start = cm.getCursor(\"start\"),\n\t\tcur_end = cm.getCursor(\"end\"),\n\t\ttok = cm.getTokenAt({\n\t\t\tline: cur_start.line,\n\t\t\tch: cur_start.ch || 1\n\t\t}), // avoid ch 0 which is a cursor pos but not token\n\t\tline = cm.getLineHandle(cur_start.line),\n\t\tis_code = code_type(cm, cur_start.line, line, tok);\n\tvar block_start, block_end, lineCount;\n\n\tif(is_code === \"single\") {\n\t\t// similar to some SimpleMDE _toggleBlock logic\n\t\tvar start = line.text.slice(0, cur_start.ch).replace(\"`\", \"\"),\n\t\t\tend = line.text.slice(cur_start.ch).replace(\"`\", \"\");\n\t\tcm.replaceRange(start + end, {\n\t\t\tline: cur_start.line,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: cur_start.line,\n\t\t\tch: 99999999999999\n\t\t});\n\t\tcur_start.ch--;\n\t\tif(cur_start !== cur_end) {\n\t\t\tcur_end.ch--;\n\t\t}\n\t\tcm.setSelection(cur_start, cur_end);\n\t\tcm.focus();\n\t} else if(is_code === \"fenced\") {\n\t\tif(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n\t\t\t// use selection\n\n\t\t\t// find the fenced line so we know what type it is (tilde, backticks, number of them)\n\t\t\tfor(block_start = cur_start.line; block_start >= 0; block_start--) {\n\t\t\t\tline = cm.getLineHandle(block_start);\n\t\t\t\tif(fencing_line(line)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar fencedTok = cm.getTokenAt({\n\t\t\t\tline: block_start,\n\t\t\t\tch: 1\n\t\t\t});\n\t\t\tvar fence_chars = token_state(fencedTok).fencedChars;\n\t\t\tvar start_text, start_line;\n\t\t\tvar end_text, end_line;\n\t\t\t// check for selection going up against fenced lines, in which case we don't want to add more fencing\n\t\t\tif(fencing_line(cm.getLineHandle(cur_start.line))) {\n\t\t\t\tstart_text = \"\";\n\t\t\t\tstart_line = cur_start.line;\n\t\t\t} else if(fencing_line(cm.getLineHandle(cur_start.line - 1))) {\n\t\t\t\tstart_text = \"\";\n\t\t\t\tstart_line = cur_start.line - 1;\n\t\t\t} else {\n\t\t\t\tstart_text = fence_chars + \"\\n\";\n\t\t\t\tstart_line = cur_start.line;\n\t\t\t}\n\t\t\tif(fencing_line(cm.getLineHandle(cur_end.line))) {\n\t\t\t\tend_text = \"\";\n\t\t\t\tend_line = cur_end.line;\n\t\t\t\tif(cur_end.ch === 0) {\n\t\t\t\t\tend_line += 1;\n\t\t\t\t}\n\t\t\t} else if(cur_end.ch !== 0 && fencing_line(cm.getLineHandle(cur_end.line + 1))) {\n\t\t\t\tend_text = \"\";\n\t\t\t\tend_line = cur_end.line + 1;\n\t\t\t} else {\n\t\t\t\tend_text = fence_chars + \"\\n\";\n\t\t\t\tend_line = cur_end.line + 1;\n\t\t\t}\n\t\t\tif(cur_end.ch === 0) {\n\t\t\t\t// full last line selected, putting cursor at beginning of next\n\t\t\t\tend_line -= 1;\n\t\t\t}\n\t\t\tcm.operation(function() {\n\t\t\t\t// end line first, so that line numbers don't change\n\t\t\t\tcm.replaceRange(end_text, {\n\t\t\t\t\tline: end_line,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: end_line + (end_text ? 0 : 1),\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t\tcm.replaceRange(start_text, {\n\t\t\t\t\tline: start_line,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: start_line + (start_text ? 0 : 1),\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t});\n\t\t\tcm.setSelection({\n\t\t\t\tline: start_line + (start_text ? 1 : 0),\n\t\t\t\tch: 0\n\t\t\t}, {\n\t\t\t\tline: end_line + (start_text ? 1 : -1),\n\t\t\t\tch: 0\n\t\t\t});\n\t\t\tcm.focus();\n\t\t} else {\n\t\t\t// no selection, search for ends of this fenced block\n\t\t\tvar search_from = cur_start.line;\n\t\t\tif(fencing_line(cm.getLineHandle(cur_start.line))) { // gets a little tricky if cursor is right on a fenced line\n\t\t\t\tif(code_type(cm, cur_start.line + 1) === \"fenced\") {\n\t\t\t\t\tblock_start = cur_start.line;\n\t\t\t\t\tsearch_from = cur_start.line + 1; // for searching for \"end\"\n\t\t\t\t} else {\n\t\t\t\t\tblock_end = cur_start.line;\n\t\t\t\t\tsearch_from = cur_start.line - 1; // for searching for \"start\"\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(block_start === undefined) {\n\t\t\t\tfor(block_start = search_from; block_start >= 0; block_start--) {\n\t\t\t\t\tline = cm.getLineHandle(block_start);\n\t\t\t\t\tif(fencing_line(line)) {\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\tif(block_end === undefined) {\n\t\t\t\tlineCount = cm.lineCount();\n\t\t\t\tfor(block_end = search_from; block_end < lineCount; block_end++) {\n\t\t\t\t\tline = cm.getLineHandle(block_end);\n\t\t\t\t\tif(fencing_line(line)) {\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\tcm.operation(function() {\n\t\t\t\tcm.replaceRange(\"\", {\n\t\t\t\t\tline: block_start,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: block_start + 1,\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t\tcm.replaceRange(\"\", {\n\t\t\t\t\tline: block_end - 1,\n\t\t\t\t\tch: 0\n\t\t\t\t}, {\n\t\t\t\t\tline: block_end,\n\t\t\t\t\tch: 0\n\t\t\t\t});\n\t\t\t});\n\t\t\tcm.focus();\n\t\t}\n\t} else if(is_code === \"indented\") {\n\t\tif(cur_start.line !== cur_end.line || cur_start.ch !== cur_end.ch) {\n\t\t\t// use selection\n\t\t\tblock_start = cur_start.line;\n\t\t\tblock_end = cur_end.line;\n\t\t\tif(cur_end.ch === 0) {\n\t\t\t\tblock_end--;\n\t\t\t}\n\t\t} else {\n\t\t\t// no selection, search for ends of this indented block\n\t\t\tfor(block_start = cur_start.line; block_start >= 0; block_start--) {\n\t\t\t\tline = cm.getLineHandle(block_start);\n\t\t\t\tif(line.text.match(/^\\s*$/)) {\n\t\t\t\t\t// empty or all whitespace - keep going\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tif(code_type(cm, block_start, line) !== \"indented\") {\n\t\t\t\t\t\tblock_start += 1;\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\tlineCount = cm.lineCount();\n\t\t\tfor(block_end = cur_start.line; block_end < lineCount; block_end++) {\n\t\t\t\tline = cm.getLineHandle(block_end);\n\t\t\t\tif(line.text.match(/^\\s*$/)) {\n\t\t\t\t\t// empty or all whitespace - keep going\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tif(code_type(cm, block_end, line) !== \"indented\") {\n\t\t\t\t\t\tblock_end -= 1;\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\t\t// if we are going to un-indent based on a selected set of lines, and the next line is indented too, we need to\n\t\t// insert a blank line so that the next line(s) continue to be indented code\n\t\tvar next_line = cm.getLineHandle(block_end + 1),\n\t\t\tnext_line_last_tok = next_line && cm.getTokenAt({\n\t\t\t\tline: block_end + 1,\n\t\t\t\tch: next_line.text.length - 1\n\t\t\t}),\n\t\t\tnext_line_indented = next_line_last_tok && token_state(next_line_last_tok).indentedCode;\n\t\tif(next_line_indented) {\n\t\t\tcm.replaceRange(\"\\n\", {\n\t\t\t\tline: block_end + 1,\n\t\t\t\tch: 0\n\t\t\t});\n\t\t}\n\n\t\tfor(var i = block_start; i <= block_end; i++) {\n\t\t\tcm.indentLine(i, \"subtract\"); // TODO: this doesn't get tracked in the history, so can't be undone :(\n\t\t}\n\t\tcm.focus();\n\t} else {\n\t\t// insert code formatting\n\t\tvar no_sel_and_starting_of_line = (cur_start.line === cur_end.line && cur_start.ch === cur_end.ch && cur_start.ch === 0);\n\t\tvar sel_multi = cur_start.line !== cur_end.line;\n\t\tif(no_sel_and_starting_of_line || sel_multi) {\n\t\t\tinsertFencingAtSelection(cm, cur_start, cur_end, fenceCharsToInsert);\n\t\t} else {\n\t\t\t_replaceSelection(cm, false, [\"`\", \"`\"]);\n\t\t}\n\t}\n}\n\n/**\n * Action for toggling blockquote.\n */\nfunction toggleBlockquote(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleLine(cm, \"quote\");\n}\n\n/**\n * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal\n */\nfunction toggleHeadingSmaller(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, \"smaller\");\n}\n\n/**\n * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal\n */\nfunction toggleHeadingBigger(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, \"bigger\");\n}\n\n/**\n * Action for toggling heading size 1\n */\nfunction toggleHeading1(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, undefined, 1);\n}\n\n/**\n * Action for toggling heading size 2\n */\nfunction toggleHeading2(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, undefined, 2);\n}\n\n/**\n * Action for toggling heading size 3\n */\nfunction toggleHeading3(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleHeading(cm, undefined, 3);\n}\n\n\n/**\n * Action for toggling ul.\n */\nfunction toggleUnorderedList(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleLine(cm, \"unordered-list\");\n}\n\n\n/**\n * Action for toggling ol.\n */\nfunction toggleOrderedList(editor) {\n\tvar cm = editor.codemirror;\n\t_toggleLine(cm, \"ordered-list\");\n}\n\n/**\n * Action for clean block (remove headline, list, blockquote code, markers)\n */\nfunction cleanBlock(editor) {\n\tvar cm = editor.codemirror;\n\t_cleanBlock(cm);\n}\n\n/**\n * Action for drawing a link.\n */\nfunction drawLink(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\tvar url = \"http://\";\n\tif(options.promptURLs) {\n\t\turl = prompt(options.promptTexts.link);\n\t\tif(!url) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t_replaceSelection(cm, stat.link, options.insertTexts.link, url);\n}\n\n/**\n * Action for drawing an img.\n */\nfunction drawImage(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\tvar url = \"http://\";\n\tif(options.promptURLs) {\n\t\turl = prompt(options.promptTexts.image);\n\t\tif(!url) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t_replaceSelection(cm, stat.image, options.insertTexts.image, url);\n}\n\n/**\n * Action for drawing a table.\n */\nfunction drawTable(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\t_replaceSelection(cm, stat.table, options.insertTexts.table);\n}\n\n/**\n * Action for drawing a horizontal rule.\n */\nfunction drawHorizontalRule(editor) {\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\tvar options = editor.options;\n\t_replaceSelection(cm, stat.image, options.insertTexts.horizontalRule);\n}\n\n\n/**\n * Undo action.\n */\nfunction undo(editor) {\n\tvar cm = editor.codemirror;\n\tcm.undo();\n\tcm.focus();\n}\n\n\n/**\n * Redo action.\n */\nfunction redo(editor) {\n\tvar cm = editor.codemirror;\n\tcm.redo();\n\tcm.focus();\n}\n\n\n/**\n * Toggle side by side preview\n */\nfunction toggleSideBySide(editor) {\n\tvar cm = editor.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.nextSibling;\n\tvar toolbarButton = editor.toolbarElements[\"side-by-side\"];\n\tvar useSideBySideListener = false;\n\tif(/editor-preview-active-side/.test(preview.className)) {\n\t\tpreview.className = preview.className.replace(\n\t\t\t/\\s*editor-preview-active-side\\s*/g, \"\"\n\t\t);\n\t\ttoolbarButton.className = toolbarButton.className.replace(/\\s*active\\s*/g, \"\");\n\t\twrapper.className = wrapper.className.replace(/\\s*CodeMirror-sided\\s*/g, \" \");\n\t} else {\n\t\t// When the preview button is clicked for the first time,\n\t\t// give some time for the transition from editor.css to fire and the view to slide from right to left,\n\t\t// instead of just appearing.\n\t\tsetTimeout(function() {\n\t\t\tif(!cm.getOption(\"fullScreen\"))\n\t\t\t\ttoggleFullScreen(editor);\n\t\t\tpreview.className += \" editor-preview-active-side\";\n\t\t}, 1);\n\t\ttoolbarButton.className += \" active\";\n\t\twrapper.className += \" CodeMirror-sided\";\n\t\tuseSideBySideListener = true;\n\t}\n\n\t// Hide normal preview if active\n\tvar previewNormal = wrapper.lastChild;\n\tif(/editor-preview-active/.test(previewNormal.className)) {\n\t\tpreviewNormal.className = previewNormal.className.replace(\n\t\t\t/\\s*editor-preview-active\\s*/g, \"\"\n\t\t);\n\t\tvar toolbar = editor.toolbarElements.preview;\n\t\tvar toolbar_div = wrapper.previousSibling;\n\t\ttoolbar.className = toolbar.className.replace(/\\s*active\\s*/g, \"\");\n\t\ttoolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, \"\");\n\t}\n\n\tvar sideBySideRenderingFunction = function() {\n\t\tpreview.innerHTML = editor.options.previewRender(editor.value(), preview);\n\t};\n\n\tif(!cm.sideBySideRenderingFunction) {\n\t\tcm.sideBySideRenderingFunction = sideBySideRenderingFunction;\n\t}\n\n\tif(useSideBySideListener) {\n\t\tpreview.innerHTML = editor.options.previewRender(editor.value(), preview);\n\t\tcm.on(\"update\", cm.sideBySideRenderingFunction);\n\t} else {\n\t\tcm.off(\"update\", cm.sideBySideRenderingFunction);\n\t}\n\n\t// Refresh to fix selection being off (#309)\n\tcm.refresh();\n}\n\n\n/**\n * Preview action.\n */\nfunction togglePreview(editor) {\n\tvar cm = editor.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar toolbar_div = wrapper.previousSibling;\n\tvar toolbar = editor.options.toolbar ? editor.toolbarElements.preview : false;\n\tvar preview = wrapper.lastChild;\n\tif(!preview || !/editor-preview/.test(preview.className)) {\n\t\tpreview = document.createElement(\"div\");\n\t\tpreview.className = \"editor-preview\";\n\t\twrapper.appendChild(preview);\n\t}\n\tif(/editor-preview-active/.test(preview.className)) {\n\t\tpreview.className = preview.className.replace(\n\t\t\t/\\s*editor-preview-active\\s*/g, \"\"\n\t\t);\n\t\tif(toolbar) {\n\t\t\ttoolbar.className = toolbar.className.replace(/\\s*active\\s*/g, \"\");\n\t\t\ttoolbar_div.className = toolbar_div.className.replace(/\\s*disabled-for-preview*/g, \"\");\n\t\t}\n\t} else {\n\t\t// When the preview button is clicked for the first time,\n\t\t// give some time for the transition from editor.css to fire and the view to slide from right to left,\n\t\t// instead of just appearing.\n\t\tsetTimeout(function() {\n\t\t\tpreview.className += \" editor-preview-active\";\n\t\t}, 1);\n\t\tif(toolbar) {\n\t\t\ttoolbar.className += \" active\";\n\t\t\ttoolbar_div.className += \" disabled-for-preview\";\n\t\t}\n\t}\n\tpreview.innerHTML = editor.options.previewRender(editor.value(), preview);\n\n\t// Turn off side by side if needed\n\tvar sidebyside = cm.getWrapperElement().nextSibling;\n\tif(/editor-preview-active-side/.test(sidebyside.className))\n\t\ttoggleSideBySide(editor);\n}\n\nfunction _replaceSelection(cm, active, startEnd, url) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar text;\n\tvar start = startEnd[0];\n\tvar end = startEnd[1];\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tif(url) {\n\t\tend = end.replace(\"#url#\", url);\n\t}\n\tif(active) {\n\t\ttext = cm.getLine(startPoint.line);\n\t\tstart = text.slice(0, startPoint.ch);\n\t\tend = text.slice(startPoint.ch);\n\t\tcm.replaceRange(start + end, {\n\t\t\tline: startPoint.line,\n\t\t\tch: 0\n\t\t});\n\t} else {\n\t\ttext = cm.getSelection();\n\t\tcm.replaceSelection(start + text + end);\n\n\t\tstartPoint.ch += start.length;\n\t\tif(startPoint !== endPoint) {\n\t\t\tendPoint.ch += start.length;\n\t\t}\n\t}\n\tcm.setSelection(startPoint, endPoint);\n\tcm.focus();\n}\n\n\nfunction _toggleHeading(cm, direction, size) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tfor(var i = startPoint.line; i <= endPoint.line; i++) {\n\t\t(function(i) {\n\t\t\tvar text = cm.getLine(i);\n\t\t\tvar currHeadingLevel = text.search(/[^#]/);\n\n\t\t\tif(direction !== undefined) {\n\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\tif(direction == \"bigger\") {\n\t\t\t\t\t\ttext = \"###### \" + text;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"# \" + text;\n\t\t\t\t\t}\n\t\t\t\t} else if(currHeadingLevel == 6 && direction == \"smaller\") {\n\t\t\t\t\ttext = text.substr(7);\n\t\t\t\t} else if(currHeadingLevel == 1 && direction == \"bigger\") {\n\t\t\t\t\ttext = text.substr(2);\n\t\t\t\t} else {\n\t\t\t\t\tif(direction == \"bigger\") {\n\t\t\t\t\t\ttext = text.substr(1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"#\" + text;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(size == 1) {\n\t\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\t\ttext = \"# \" + text;\n\t\t\t\t\t} else if(currHeadingLevel == size) {\n\t\t\t\t\t\ttext = text.substr(currHeadingLevel + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"# \" + text.substr(currHeadingLevel + 1);\n\t\t\t\t\t}\n\t\t\t\t} else if(size == 2) {\n\t\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\t\ttext = \"## \" + text;\n\t\t\t\t\t} else if(currHeadingLevel == size) {\n\t\t\t\t\t\ttext = text.substr(currHeadingLevel + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"## \" + text.substr(currHeadingLevel + 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif(currHeadingLevel <= 0) {\n\t\t\t\t\t\ttext = \"### \" + text;\n\t\t\t\t\t} else if(currHeadingLevel == size) {\n\t\t\t\t\t\ttext = text.substr(currHeadingLevel + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttext = \"### \" + text.substr(currHeadingLevel + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcm.replaceRange(text, {\n\t\t\t\tline: i,\n\t\t\t\tch: 0\n\t\t\t}, {\n\t\t\t\tline: i,\n\t\t\t\tch: 99999999999999\n\t\t\t});\n\t\t})(i);\n\t}\n\tcm.focus();\n}\n\n\nfunction _toggleLine(cm, name) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar stat = getState(cm);\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tvar repl = {\n\t\t\"quote\": /^(\\s*)\\>\\s+/,\n\t\t\"unordered-list\": /^(\\s*)(\\*|\\-|\\+)\\s+/,\n\t\t\"ordered-list\": /^(\\s*)\\d+\\.\\s+/\n\t};\n\tvar map = {\n\t\t\"quote\": \"> \",\n\t\t\"unordered-list\": \"* \",\n\t\t\"ordered-list\": \"1. \"\n\t};\n\tfor(var i = startPoint.line; i <= endPoint.line; i++) {\n\t\t(function(i) {\n\t\t\tvar text = cm.getLine(i);\n\t\t\tif(stat[name]) {\n\t\t\t\ttext = text.replace(repl[name], \"$1\");\n\t\t\t} else {\n\t\t\t\ttext = map[name] + text;\n\t\t\t}\n\t\t\tcm.replaceRange(text, {\n\t\t\t\tline: i,\n\t\t\t\tch: 0\n\t\t\t}, {\n\t\t\t\tline: i,\n\t\t\t\tch: 99999999999999\n\t\t\t});\n\t\t})(i);\n\t}\n\tcm.focus();\n}\n\nfunction _toggleBlock(editor, type, start_chars, end_chars) {\n\tif(/editor-preview-active/.test(editor.codemirror.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tend_chars = (typeof end_chars === \"undefined\") ? start_chars : end_chars;\n\tvar cm = editor.codemirror;\n\tvar stat = getState(cm);\n\n\tvar text;\n\tvar start = start_chars;\n\tvar end = end_chars;\n\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\n\tif(stat[type]) {\n\t\ttext = cm.getLine(startPoint.line);\n\t\tstart = text.slice(0, startPoint.ch);\n\t\tend = text.slice(startPoint.ch);\n\t\tif(type == \"bold\") {\n\t\t\tstart = start.replace(/(\\*\\*|__)(?![\\s\\S]*(\\*\\*|__))/, \"\");\n\t\t\tend = end.replace(/(\\*\\*|__)/, \"\");\n\t\t} else if(type == \"italic\") {\n\t\t\tstart = start.replace(/(\\*|_)(?![\\s\\S]*(\\*|_))/, \"\");\n\t\t\tend = end.replace(/(\\*|_)/, \"\");\n\t\t} else if(type == \"strikethrough\") {\n\t\t\tstart = start.replace(/(\\*\\*|~~)(?![\\s\\S]*(\\*\\*|~~))/, \"\");\n\t\t\tend = end.replace(/(\\*\\*|~~)/, \"\");\n\t\t}\n\t\tcm.replaceRange(start + end, {\n\t\t\tline: startPoint.line,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: startPoint.line,\n\t\t\tch: 99999999999999\n\t\t});\n\n\t\tif(type == \"bold\" || type == \"strikethrough\") {\n\t\t\tstartPoint.ch -= 2;\n\t\t\tif(startPoint !== endPoint) {\n\t\t\t\tendPoint.ch -= 2;\n\t\t\t}\n\t\t} else if(type == \"italic\") {\n\t\t\tstartPoint.ch -= 1;\n\t\t\tif(startPoint !== endPoint) {\n\t\t\t\tendPoint.ch -= 1;\n\t\t\t}\n\t\t}\n\t} else {\n\t\ttext = cm.getSelection();\n\t\tif(type == \"bold\") {\n\t\t\ttext = text.split(\"**\").join(\"\");\n\t\t\ttext = text.split(\"__\").join(\"\");\n\t\t} else if(type == \"italic\") {\n\t\t\ttext = text.split(\"*\").join(\"\");\n\t\t\ttext = text.split(\"_\").join(\"\");\n\t\t} else if(type == \"strikethrough\") {\n\t\t\ttext = text.split(\"~~\").join(\"\");\n\t\t}\n\t\tcm.replaceSelection(start + text + end);\n\n\t\tstartPoint.ch += start_chars.length;\n\t\tendPoint.ch = startPoint.ch + text.length;\n\t}\n\n\tcm.setSelection(startPoint, endPoint);\n\tcm.focus();\n}\n\nfunction _cleanBlock(cm) {\n\tif(/editor-preview-active/.test(cm.getWrapperElement().lastChild.className))\n\t\treturn;\n\n\tvar startPoint = cm.getCursor(\"start\");\n\tvar endPoint = cm.getCursor(\"end\");\n\tvar text;\n\n\tfor(var line = startPoint.line; line <= endPoint.line; line++) {\n\t\ttext = cm.getLine(line);\n\t\ttext = text.replace(/^[ ]*([# ]+|\\*|\\-|[> ]+|[0-9]+(.|\\)))[ ]*/, \"\");\n\n\t\tcm.replaceRange(text, {\n\t\t\tline: line,\n\t\t\tch: 0\n\t\t}, {\n\t\t\tline: line,\n\t\t\tch: 99999999999999\n\t\t});\n\t}\n}\n\n// Merge the properties of one object into another.\nfunction _mergeProperties(target, source) {\n\tfor(var property in source) {\n\t\tif(source.hasOwnProperty(property)) {\n\t\t\tif(source[property] instanceof Array) {\n\t\t\t\ttarget[property] = source[property].concat(target[property] instanceof Array ? target[property] : []);\n\t\t\t} else if(\n\t\t\t\tsource[property] !== null &&\n\t\t\t\ttypeof source[property] === \"object\" &&\n\t\t\t\tsource[property].constructor === Object\n\t\t\t) {\n\t\t\t\ttarget[property] = _mergeProperties(target[property] || {}, source[property]);\n\t\t\t} else {\n\t\t\t\ttarget[property] = source[property];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn target;\n}\n\n// Merge an arbitrary number of objects into one.\nfunction extend(target) {\n\tfor(var i = 1; i < arguments.length; i++) {\n\t\ttarget = _mergeProperties(target, arguments[i]);\n\t}\n\n\treturn target;\n}\n\n/* The right word count in respect for CJK. */\nfunction wordCount(data) {\n\tvar pattern = /[a-zA-Z0-9_\\u0392-\\u03c9\\u0410-\\u04F9]+|[\\u4E00-\\u9FFF\\u3400-\\u4dbf\\uf900-\\ufaff\\u3040-\\u309f\\uac00-\\ud7af]+/g;\n\tvar m = data.match(pattern);\n\tvar count = 0;\n\tif(m === null) return count;\n\tfor(var i = 0; i < m.length; i++) {\n\t\tif(m[i].charCodeAt(0) >= 0x4E00) {\n\t\t\tcount += m[i].length;\n\t\t} else {\n\t\t\tcount += 1;\n\t\t}\n\t}\n\treturn count;\n}\n\nvar toolbarBuiltInButtons = {\n\t\"bold\": {\n\t\tname: \"bold\",\n\t\taction: toggleBold,\n\t\tclassName: \"fa fa-bold\",\n\t\ttitle: \"Bold\",\n\t\tdefault: true\n\t},\n\t\"italic\": {\n\t\tname: \"italic\",\n\t\taction: toggleItalic,\n\t\tclassName: \"fa fa-italic\",\n\t\ttitle: \"Italic\",\n\t\tdefault: true\n\t},\n\t\"strikethrough\": {\n\t\tname: \"strikethrough\",\n\t\taction: toggleStrikethrough,\n\t\tclassName: \"fa fa-strikethrough\",\n\t\ttitle: \"Strikethrough\"\n\t},\n\t\"heading\": {\n\t\tname: \"heading\",\n\t\taction: toggleHeadingSmaller,\n\t\tclassName: \"fa fa-header\",\n\t\ttitle: \"Heading\",\n\t\tdefault: true\n\t},\n\t\"heading-smaller\": {\n\t\tname: \"heading-smaller\",\n\t\taction: toggleHeadingSmaller,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-smaller\",\n\t\ttitle: \"Smaller Heading\"\n\t},\n\t\"heading-bigger\": {\n\t\tname: \"heading-bigger\",\n\t\taction: toggleHeadingBigger,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-bigger\",\n\t\ttitle: \"Bigger Heading\"\n\t},\n\t\"heading-1\": {\n\t\tname: \"heading-1\",\n\t\taction: toggleHeading1,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-1\",\n\t\ttitle: \"Big Heading\"\n\t},\n\t\"heading-2\": {\n\t\tname: \"heading-2\",\n\t\taction: toggleHeading2,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-2\",\n\t\ttitle: \"Medium Heading\"\n\t},\n\t\"heading-3\": {\n\t\tname: \"heading-3\",\n\t\taction: toggleHeading3,\n\t\tclassName: \"fa fa-header fa-header-x fa-header-3\",\n\t\ttitle: \"Small Heading\"\n\t},\n\t\"separator-1\": {\n\t\tname: \"separator-1\"\n\t},\n\t\"code\": {\n\t\tname: \"code\",\n\t\taction: toggleCodeBlock,\n\t\tclassName: \"fa fa-code\",\n\t\ttitle: \"Code\"\n\t},\n\t\"quote\": {\n\t\tname: \"quote\",\n\t\taction: toggleBlockquote,\n\t\tclassName: \"fa fa-quote-left\",\n\t\ttitle: \"Quote\",\n\t\tdefault: true\n\t},\n\t\"unordered-list\": {\n\t\tname: \"unordered-list\",\n\t\taction: toggleUnorderedList,\n\t\tclassName: \"fa fa-list-ul\",\n\t\ttitle: \"Generic List\",\n\t\tdefault: true\n\t},\n\t\"ordered-list\": {\n\t\tname: \"ordered-list\",\n\t\taction: toggleOrderedList,\n\t\tclassName: \"fa fa-list-ol\",\n\t\ttitle: \"Numbered List\",\n\t\tdefault: true\n\t},\n\t\"clean-block\": {\n\t\tname: \"clean-block\",\n\t\taction: cleanBlock,\n\t\tclassName: \"fa fa-eraser fa-clean-block\",\n\t\ttitle: \"Clean block\"\n\t},\n\t\"separator-2\": {\n\t\tname: \"separator-2\"\n\t},\n\t\"link\": {\n\t\tname: \"link\",\n\t\taction: drawLink,\n\t\tclassName: \"fa fa-link\",\n\t\ttitle: \"Create Link\",\n\t\tdefault: true\n\t},\n\t\"image\": {\n\t\tname: \"image\",\n\t\taction: drawImage,\n\t\tclassName: \"fa fa-picture-o\",\n\t\ttitle: \"Insert Image\",\n\t\tdefault: true\n\t},\n\t\"table\": {\n\t\tname: \"table\",\n\t\taction: drawTable,\n\t\tclassName: \"fa fa-table\",\n\t\ttitle: \"Insert Table\"\n\t},\n\t\"horizontal-rule\": {\n\t\tname: \"horizontal-rule\",\n\t\taction: drawHorizontalRule,\n\t\tclassName: \"fa fa-minus\",\n\t\ttitle: \"Insert Horizontal Line\"\n\t},\n\t\"separator-3\": {\n\t\tname: \"separator-3\"\n\t},\n\t\"preview\": {\n\t\tname: \"preview\",\n\t\taction: togglePreview,\n\t\tclassName: \"fa fa-eye no-disable\",\n\t\ttitle: \"Toggle Preview\",\n\t\tdefault: true\n\t},\n\t\"side-by-side\": {\n\t\tname: \"side-by-side\",\n\t\taction: toggleSideBySide,\n\t\tclassName: \"fa fa-columns no-disable no-mobile\",\n\t\ttitle: \"Toggle Side by Side\",\n\t\tdefault: true\n\t},\n\t\"fullscreen\": {\n\t\tname: \"fullscreen\",\n\t\taction: toggleFullScreen,\n\t\tclassName: \"fa fa-arrows-alt no-disable no-mobile\",\n\t\ttitle: \"Toggle Fullscreen\",\n\t\tdefault: true\n\t},\n\t\"separator-4\": {\n\t\tname: \"separator-4\"\n\t},\n\t\"guide\": {\n\t\tname: \"guide\",\n\t\taction: \"https://simplemde.com/markdown-guide\",\n\t\tclassName: \"fa fa-question-circle\",\n\t\ttitle: \"Markdown Guide\",\n\t\tdefault: true\n\t},\n\t\"separator-5\": {\n\t\tname: \"separator-5\"\n\t},\n\t\"undo\": {\n\t\tname: \"undo\",\n\t\taction: undo,\n\t\tclassName: \"fa fa-undo no-disable\",\n\t\ttitle: \"Undo\"\n\t},\n\t\"redo\": {\n\t\tname: \"redo\",\n\t\taction: redo,\n\t\tclassName: \"fa fa-repeat no-disable\",\n\t\ttitle: \"Redo\"\n\t}\n};\n\nvar insertTexts = {\n\tlink: [\"[\", \"](#url#)\"],\n\timage: [\"![](\", \"#url#)\"],\n\ttable: [\"\", \"\\n\\n| Column 1 | Column 2 | Column 3 |\\n| -------- | -------- | -------- |\\n| Text     | Text     | Text     |\\n\\n\"],\n\thorizontalRule: [\"\", \"\\n\\n-----\\n\\n\"]\n};\n\nvar promptTexts = {\n\tlink: \"URL for the link:\",\n\timage: \"URL of the image:\"\n};\n\nvar blockStyles = {\n\t\"bold\": \"**\",\n\t\"code\": \"```\",\n\t\"italic\": \"*\"\n};\n\n/**\n * Interface of SimpleMDE.\n */\nfunction SimpleMDE(options) {\n\t// Handle options parameter\n\toptions = options || {};\n\n\n\t// Used later to refer to it\"s parent\n\toptions.parent = this;\n\n\n\t// Check if Font Awesome needs to be auto downloaded\n\tvar autoDownloadFA = true;\n\n\tif(options.autoDownloadFontAwesome === false) {\n\t\tautoDownloadFA = false;\n\t}\n\n\tif(options.autoDownloadFontAwesome !== true) {\n\t\tvar styleSheets = document.styleSheets;\n\t\tfor(var i = 0; i < styleSheets.length; i++) {\n\t\t\tif(!styleSheets[i].href)\n\t\t\t\tcontinue;\n\n\t\t\tif(styleSheets[i].href.indexOf(\"//maxcdn.bootstrapcdn.com/font-awesome/\") > -1) {\n\t\t\t\tautoDownloadFA = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif(autoDownloadFA) {\n\t\tvar link = document.createElement(\"link\");\n\t\tlink.rel = \"stylesheet\";\n\t\tlink.href = \"https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css\";\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(link);\n\t}\n\n\n\t// Find the textarea to use\n\tif(options.element) {\n\t\tthis.element = options.element;\n\t} else if(options.element === null) {\n\t\t// This means that the element option was specified, but no element was found\n\t\tconsole.log(\"SimpleMDE: Error. No element was found.\");\n\t\treturn;\n\t}\n\n\n\t// Handle toolbar\n\tif(options.toolbar === undefined) {\n\t\t// Initialize\n\t\toptions.toolbar = [];\n\n\n\t\t// Loop over the built in buttons, to get the preferred order\n\t\tfor(var key in toolbarBuiltInButtons) {\n\t\t\tif(toolbarBuiltInButtons.hasOwnProperty(key)) {\n\t\t\t\tif(key.indexOf(\"separator-\") != -1) {\n\t\t\t\t\toptions.toolbar.push(\"|\");\n\t\t\t\t}\n\n\t\t\t\tif(toolbarBuiltInButtons[key].default === true || (options.showIcons && options.showIcons.constructor === Array && options.showIcons.indexOf(key) != -1)) {\n\t\t\t\t\toptions.toolbar.push(key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t// Handle status bar\n\tif(!options.hasOwnProperty(\"status\")) {\n\t\toptions.status = [\"autosave\", \"lines\", \"words\", \"cursor\"];\n\t}\n\n\n\t// Add default preview rendering function\n\tif(!options.previewRender) {\n\t\toptions.previewRender = function(plainText) {\n\t\t\t// Note: \"this\" refers to the options object\n\t\t\treturn this.parent.markdown(plainText);\n\t\t};\n\t}\n\n\n\t// Set default options for parsing config\n\toptions.parsingConfig = extend({\n\t\thighlightFormatting: true // needed for toggleCodeBlock to detect types of code\n\t}, options.parsingConfig || {});\n\n\n\t// Merging the insertTexts, with the given options\n\toptions.insertTexts = extend({}, insertTexts, options.insertTexts || {});\n\n\n\t// Merging the promptTexts, with the given options\n\toptions.promptTexts = promptTexts;\n\n\n\t// Merging the blockStyles, with the given options\n\toptions.blockStyles = extend({}, blockStyles, options.blockStyles || {});\n\n\n\t// Merging the shortcuts, with the given options\n\toptions.shortcuts = extend({}, shortcuts, options.shortcuts || {});\n\n\n\t// Change unique_id to uniqueId for backwards compatibility\n\tif(options.autosave != undefined && options.autosave.unique_id != undefined && options.autosave.unique_id != \"\")\n\t\toptions.autosave.uniqueId = options.autosave.unique_id;\n\n\n\t// Update this options\n\tthis.options = options;\n\n\n\t// Auto render\n\tthis.render();\n\n\n\t// The codemirror component is only available after rendering\n\t// so, the setter for the initialValue can only run after\n\t// the element has been rendered\n\tif(options.initialValue && (!this.options.autosave || this.options.autosave.foundSavedValue !== true)) {\n\t\tthis.value(options.initialValue);\n\t}\n}\n\n/**\n * Default markdown render.\n */\nSimpleMDE.prototype.markdown = function(text) {\n\tif(marked) {\n\t\t// Initialize\n\t\tvar markedOptions = {};\n\n\n\t\t// Update options\n\t\tif(this.options && this.options.renderingConfig && this.options.renderingConfig.singleLineBreaks === false) {\n\t\t\tmarkedOptions.breaks = false;\n\t\t} else {\n\t\t\tmarkedOptions.breaks = true;\n\t\t}\n\n\t\tif(this.options && this.options.renderingConfig && this.options.renderingConfig.codeSyntaxHighlighting === true && window.hljs) {\n\t\t\tmarkedOptions.highlight = function(code) {\n\t\t\t\treturn window.hljs.highlightAuto(code).value;\n\t\t\t};\n\t\t}\n\n\n\t\t// Set options\n\t\tmarked.setOptions(markedOptions);\n\n\n\t\t// Return\n\t\treturn marked(text);\n\t}\n};\n\n/**\n * Render editor to the given element.\n */\nSimpleMDE.prototype.render = function(el) {\n\tif(!el) {\n\t\tel = this.element || document.getElementsByTagName(\"textarea\")[0];\n\t}\n\n\tif(this._rendered && this._rendered === el) {\n\t\t// Already rendered.\n\t\treturn;\n\t}\n\n\tthis.element = el;\n\tvar options = this.options;\n\n\tvar self = this;\n\tvar keyMaps = {};\n\n\tfor(var key in options.shortcuts) {\n\t\t// null stands for \"do not bind this command\"\n\t\tif(options.shortcuts[key] !== null && bindings[key] !== null) {\n\t\t\t(function(key) {\n\t\t\t\tkeyMaps[fixShortcut(options.shortcuts[key])] = function() {\n\t\t\t\t\tbindings[key](self);\n\t\t\t\t};\n\t\t\t})(key);\n\t\t}\n\t}\n\n\tkeyMaps[\"Enter\"] = \"newlineAndIndentContinueMarkdownList\";\n\tkeyMaps[\"Tab\"] = \"tabAndIndentMarkdownList\";\n\tkeyMaps[\"Shift-Tab\"] = \"shiftTabAndUnindentMarkdownList\";\n\tkeyMaps[\"Esc\"] = function(cm) {\n\t\tif(cm.getOption(\"fullScreen\")) toggleFullScreen(self);\n\t};\n\n\tdocument.addEventListener(\"keydown\", function(e) {\n\t\te = e || window.event;\n\n\t\tif(e.keyCode == 27) {\n\t\t\tif(self.codemirror.getOption(\"fullScreen\")) toggleFullScreen(self);\n\t\t}\n\t}, false);\n\n\tvar mode, backdrop;\n\tif(options.spellChecker !== false) {\n\t\tmode = \"spell-checker\";\n\t\tbackdrop = options.parsingConfig;\n\t\tbackdrop.name = \"gfm\";\n\t\tbackdrop.gitHubSpice = false;\n\n\t\tCodeMirrorSpellChecker({\n\t\t\tcodeMirrorInstance: CodeMirror\n\t\t});\n\t} else {\n\t\tmode = options.parsingConfig;\n\t\tmode.name = \"gfm\";\n\t\tmode.gitHubSpice = false;\n\t}\n\n\tthis.codemirror = CodeMirror.fromTextArea(el, {\n\t\tmode: mode,\n\t\tbackdrop: backdrop,\n\t\ttheme: \"paper\",\n\t\ttabSize: (options.tabSize != undefined) ? options.tabSize : 2,\n\t\tindentUnit: (options.tabSize != undefined) ? options.tabSize : 2,\n\t\tindentWithTabs: (options.indentWithTabs === false) ? false : true,\n\t\tlineNumbers: false,\n\t\tautofocus: (options.autofocus === true) ? true : false,\n\t\textraKeys: keyMaps,\n\t\tlineWrapping: (options.lineWrapping === false) ? false : true,\n\t\tallowDropFileTypes: [\"text/plain\"],\n\t\tplaceholder: options.placeholder || el.getAttribute(\"placeholder\") || \"\",\n\t\tstyleSelectedText: (options.styleSelectedText != undefined) ? options.styleSelectedText : true\n\t});\n\n\tif(options.forceSync === true) {\n\t\tvar cm = this.codemirror;\n\t\tcm.on(\"change\", function() {\n\t\t\tcm.save();\n\t\t});\n\t}\n\n\tthis.gui = {};\n\n\tif(options.toolbar !== false) {\n\t\tthis.gui.toolbar = this.createToolbar();\n\t}\n\tif(options.status !== false) {\n\t\tthis.gui.statusbar = this.createStatusbar();\n\t}\n\tif(options.autosave != undefined && options.autosave.enabled === true) {\n\t\tthis.autosave();\n\t}\n\n\tthis.gui.sideBySide = this.createSideBySide();\n\n\tthis._rendered = this.element;\n\n\n\t// Fixes CodeMirror bug (#344)\n\tvar temp_cm = this.codemirror;\n\tsetTimeout(function() {\n\t\ttemp_cm.refresh();\n\t}.bind(temp_cm), 0);\n};\n\n// Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem throw QuotaExceededError. We're going to detect this and set a variable accordingly.\nfunction isLocalStorageAvailable() {\n\tif(typeof localStorage === \"object\") {\n\t\ttry {\n\t\t\tlocalStorage.setItem(\"smde_localStorage\", 1);\n\t\t\tlocalStorage.removeItem(\"smde_localStorage\");\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nSimpleMDE.prototype.autosave = function() {\n\tif(isLocalStorageAvailable()) {\n\t\tvar simplemde = this;\n\n\t\tif(this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == \"\") {\n\t\t\tconsole.log(\"SimpleMDE: You must set a uniqueId to use the autosave feature\");\n\t\t\treturn;\n\t\t}\n\n\t\tif(simplemde.element.form != null && simplemde.element.form != undefined) {\n\t\t\tsimplemde.element.form.addEventListener(\"submit\", function() {\n\t\t\t\tlocalStorage.removeItem(\"smde_\" + simplemde.options.autosave.uniqueId);\n\t\t\t});\n\t\t}\n\n\t\tif(this.options.autosave.loaded !== true) {\n\t\t\tif(typeof localStorage.getItem(\"smde_\" + this.options.autosave.uniqueId) == \"string\" && localStorage.getItem(\"smde_\" + this.options.autosave.uniqueId) != \"\") {\n\t\t\t\tthis.codemirror.setValue(localStorage.getItem(\"smde_\" + this.options.autosave.uniqueId));\n\t\t\t\tthis.options.autosave.foundSavedValue = true;\n\t\t\t}\n\n\t\t\tthis.options.autosave.loaded = true;\n\t\t}\n\n\t\tlocalStorage.setItem(\"smde_\" + this.options.autosave.uniqueId, simplemde.value());\n\n\t\tvar el = document.getElementById(\"autosaved\");\n\t\tif(el != null && el != undefined && el != \"\") {\n\t\t\tvar d = new Date();\n\t\t\tvar hh = d.getHours();\n\t\t\tvar m = d.getMinutes();\n\t\t\tvar dd = \"am\";\n\t\t\tvar h = hh;\n\t\t\tif(h >= 12) {\n\t\t\t\th = hh - 12;\n\t\t\t\tdd = \"pm\";\n\t\t\t}\n\t\t\tif(h == 0) {\n\t\t\t\th = 12;\n\t\t\t}\n\t\t\tm = m < 10 ? \"0\" + m : m;\n\n\t\t\tel.innerHTML = \"Autosaved: \" + h + \":\" + m + \" \" + dd;\n\t\t}\n\n\t\tthis.autosaveTimeoutId = setTimeout(function() {\n\t\t\tsimplemde.autosave();\n\t\t}, this.options.autosave.delay || 10000);\n\t} else {\n\t\tconsole.log(\"SimpleMDE: localStorage not available, cannot autosave\");\n\t}\n};\n\nSimpleMDE.prototype.clearAutosavedValue = function() {\n\tif(isLocalStorageAvailable()) {\n\t\tif(this.options.autosave == undefined || this.options.autosave.uniqueId == undefined || this.options.autosave.uniqueId == \"\") {\n\t\t\tconsole.log(\"SimpleMDE: You must set a uniqueId to clear the autosave value\");\n\t\t\treturn;\n\t\t}\n\n\t\tlocalStorage.removeItem(\"smde_\" + this.options.autosave.uniqueId);\n\t} else {\n\t\tconsole.log(\"SimpleMDE: localStorage not available, cannot autosave\");\n\t}\n};\n\nSimpleMDE.prototype.createSideBySide = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.nextSibling;\n\n\tif(!preview || !/editor-preview-side/.test(preview.className)) {\n\t\tpreview = document.createElement(\"div\");\n\t\tpreview.className = \"editor-preview-side\";\n\t\twrapper.parentNode.insertBefore(preview, wrapper.nextSibling);\n\t}\n\n\t// Syncs scroll  editor -> preview\n\tvar cScroll = false;\n\tvar pScroll = false;\n\tcm.on(\"scroll\", function(v) {\n\t\tif(cScroll) {\n\t\t\tcScroll = false;\n\t\t\treturn;\n\t\t}\n\t\tpScroll = true;\n\t\tvar height = v.getScrollInfo().height - v.getScrollInfo().clientHeight;\n\t\tvar ratio = parseFloat(v.getScrollInfo().top) / height;\n\t\tvar move = (preview.scrollHeight - preview.clientHeight) * ratio;\n\t\tpreview.scrollTop = move;\n\t});\n\n\t// Syncs scroll  preview -> editor\n\tpreview.onscroll = function() {\n\t\tif(pScroll) {\n\t\t\tpScroll = false;\n\t\t\treturn;\n\t\t}\n\t\tcScroll = true;\n\t\tvar height = preview.scrollHeight - preview.clientHeight;\n\t\tvar ratio = parseFloat(preview.scrollTop) / height;\n\t\tvar move = (cm.getScrollInfo().height - cm.getScrollInfo().clientHeight) * ratio;\n\t\tcm.scrollTo(0, move);\n\t};\n\treturn preview;\n};\n\nSimpleMDE.prototype.createToolbar = function(items) {\n\titems = items || this.options.toolbar;\n\n\tif(!items || items.length === 0) {\n\t\treturn;\n\t}\n\tvar i;\n\tfor(i = 0; i < items.length; i++) {\n\t\tif(toolbarBuiltInButtons[items[i]] != undefined) {\n\t\t\titems[i] = toolbarBuiltInButtons[items[i]];\n\t\t}\n\t}\n\n\tvar bar = document.createElement(\"div\");\n\tbar.className = \"editor-toolbar\";\n\n\tvar self = this;\n\n\tvar toolbarData = {};\n\tself.toolbar = items;\n\n\tfor(i = 0; i < items.length; i++) {\n\t\tif(items[i].name == \"guide\" && self.options.toolbarGuideIcon === false)\n\t\t\tcontinue;\n\n\t\tif(self.options.hideIcons && self.options.hideIcons.indexOf(items[i].name) != -1)\n\t\t\tcontinue;\n\n\t\t// Fullscreen does not work well on mobile devices (even tablets)\n\t\t// In the future, hopefully this can be resolved\n\t\tif((items[i].name == \"fullscreen\" || items[i].name == \"side-by-side\") && isMobile())\n\t\t\tcontinue;\n\n\n\t\t// Don't include trailing separators\n\t\tif(items[i] === \"|\") {\n\t\t\tvar nonSeparatorIconsFollow = false;\n\n\t\t\tfor(var x = (i + 1); x < items.length; x++) {\n\t\t\t\tif(items[x] !== \"|\" && (!self.options.hideIcons || self.options.hideIcons.indexOf(items[x].name) == -1)) {\n\t\t\t\t\tnonSeparatorIconsFollow = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!nonSeparatorIconsFollow)\n\t\t\t\tcontinue;\n\t\t}\n\n\n\t\t// Create the icon and append to the toolbar\n\t\t(function(item) {\n\t\t\tvar el;\n\t\t\tif(item === \"|\") {\n\t\t\t\tel = createSep();\n\t\t\t} else {\n\t\t\t\tel = createIcon(item, self.options.toolbarTips, self.options.shortcuts);\n\t\t\t}\n\n\t\t\t// bind events, special for info\n\t\t\tif(item.action) {\n\t\t\t\tif(typeof item.action === \"function\") {\n\t\t\t\t\tel.onclick = function(e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\titem.action(self);\n\t\t\t\t\t};\n\t\t\t\t} else if(typeof item.action === \"string\") {\n\t\t\t\t\tel.href = item.action;\n\t\t\t\t\tel.target = \"_blank\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttoolbarData[item.name || item] = el;\n\t\t\tbar.appendChild(el);\n\t\t})(items[i]);\n\t}\n\n\tself.toolbarElements = toolbarData;\n\n\tvar cm = this.codemirror;\n\tcm.on(\"cursorActivity\", function() {\n\t\tvar stat = getState(cm);\n\n\t\tfor(var key in toolbarData) {\n\t\t\t(function(key) {\n\t\t\t\tvar el = toolbarData[key];\n\t\t\t\tif(stat[key]) {\n\t\t\t\t\tel.className += \" active\";\n\t\t\t\t} else if(key != \"fullscreen\" && key != \"side-by-side\") {\n\t\t\t\t\tel.className = el.className.replace(/\\s*active\\s*/g, \"\");\n\t\t\t\t}\n\t\t\t})(key);\n\t\t}\n\t});\n\n\tvar cmWrapper = cm.getWrapperElement();\n\tcmWrapper.parentNode.insertBefore(bar, cmWrapper);\n\treturn bar;\n};\n\nSimpleMDE.prototype.createStatusbar = function(status) {\n\t// Initialize\n\tstatus = status || this.options.status;\n\tvar options = this.options;\n\tvar cm = this.codemirror;\n\n\n\t// Make sure the status variable is valid\n\tif(!status || status.length === 0)\n\t\treturn;\n\n\n\t// Set up the built-in items\n\tvar items = [];\n\tvar i, onUpdate, defaultValue;\n\n\tfor(i = 0; i < status.length; i++) {\n\t\t// Reset some values\n\t\tonUpdate = undefined;\n\t\tdefaultValue = undefined;\n\n\n\t\t// Handle if custom or not\n\t\tif(typeof status[i] === \"object\") {\n\t\t\titems.push({\n\t\t\t\tclassName: status[i].className,\n\t\t\t\tdefaultValue: status[i].defaultValue,\n\t\t\t\tonUpdate: status[i].onUpdate\n\t\t\t});\n\t\t} else {\n\t\t\tvar name = status[i];\n\n\t\t\tif(name === \"words\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tel.innerHTML = wordCount(cm.getValue());\n\t\t\t\t};\n\t\t\t\tonUpdate = function(el) {\n\t\t\t\t\tel.innerHTML = wordCount(cm.getValue());\n\t\t\t\t};\n\t\t\t} else if(name === \"lines\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tel.innerHTML = cm.lineCount();\n\t\t\t\t};\n\t\t\t\tonUpdate = function(el) {\n\t\t\t\t\tel.innerHTML = cm.lineCount();\n\t\t\t\t};\n\t\t\t} else if(name === \"cursor\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tel.innerHTML = \"0:0\";\n\t\t\t\t};\n\t\t\t\tonUpdate = function(el) {\n\t\t\t\t\tvar pos = cm.getCursor();\n\t\t\t\t\tel.innerHTML = pos.line + \":\" + pos.ch;\n\t\t\t\t};\n\t\t\t} else if(name === \"autosave\") {\n\t\t\t\tdefaultValue = function(el) {\n\t\t\t\t\tif(options.autosave != undefined && options.autosave.enabled === true) {\n\t\t\t\t\t\tel.setAttribute(\"id\", \"autosaved\");\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\titems.push({\n\t\t\t\tclassName: name,\n\t\t\t\tdefaultValue: defaultValue,\n\t\t\t\tonUpdate: onUpdate\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// Create element for the status bar\n\tvar bar = document.createElement(\"div\");\n\tbar.className = \"editor-statusbar\";\n\n\n\t// Create a new span for each item\n\tfor(i = 0; i < items.length; i++) {\n\t\t// Store in temporary variable\n\t\tvar item = items[i];\n\n\n\t\t// Create span element\n\t\tvar el = document.createElement(\"span\");\n\t\tel.className = item.className;\n\n\n\t\t// Ensure the defaultValue is a function\n\t\tif(typeof item.defaultValue === \"function\") {\n\t\t\titem.defaultValue(el);\n\t\t}\n\n\n\t\t// Ensure the onUpdate is a function\n\t\tif(typeof item.onUpdate === \"function\") {\n\t\t\t// Create a closure around the span of the current action, then execute the onUpdate handler\n\t\t\tthis.codemirror.on(\"update\", (function(el, item) {\n\t\t\t\treturn function() {\n\t\t\t\t\titem.onUpdate(el);\n\t\t\t\t};\n\t\t\t}(el, item)));\n\t\t}\n\n\n\t\t// Append the item to the status bar\n\t\tbar.appendChild(el);\n\t}\n\n\n\t// Insert the status bar into the DOM\n\tvar cmWrapper = this.codemirror.getWrapperElement();\n\tcmWrapper.parentNode.insertBefore(bar, cmWrapper.nextSibling);\n\treturn bar;\n};\n\n/**\n * Get or set the text content.\n */\nSimpleMDE.prototype.value = function(val) {\n\tif(val === undefined) {\n\t\treturn this.codemirror.getValue();\n\t} else {\n\t\tthis.codemirror.getDoc().setValue(val);\n\t\treturn this;\n\t}\n};\n\n\n/**\n * Bind static methods for exports.\n */\nSimpleMDE.toggleBold = toggleBold;\nSimpleMDE.toggleItalic = toggleItalic;\nSimpleMDE.toggleStrikethrough = toggleStrikethrough;\nSimpleMDE.toggleBlockquote = toggleBlockquote;\nSimpleMDE.toggleHeadingSmaller = toggleHeadingSmaller;\nSimpleMDE.toggleHeadingBigger = toggleHeadingBigger;\nSimpleMDE.toggleHeading1 = toggleHeading1;\nSimpleMDE.toggleHeading2 = toggleHeading2;\nSimpleMDE.toggleHeading3 = toggleHeading3;\nSimpleMDE.toggleCodeBlock = toggleCodeBlock;\nSimpleMDE.toggleUnorderedList = toggleUnorderedList;\nSimpleMDE.toggleOrderedList = toggleOrderedList;\nSimpleMDE.cleanBlock = cleanBlock;\nSimpleMDE.drawLink = drawLink;\nSimpleMDE.drawImage = drawImage;\nSimpleMDE.drawTable = drawTable;\nSimpleMDE.drawHorizontalRule = drawHorizontalRule;\nSimpleMDE.undo = undo;\nSimpleMDE.redo = redo;\nSimpleMDE.togglePreview = togglePreview;\nSimpleMDE.toggleSideBySide = toggleSideBySide;\nSimpleMDE.toggleFullScreen = toggleFullScreen;\n\n/**\n * Bind instance methods for exports.\n */\nSimpleMDE.prototype.toggleBold = function() {\n\ttoggleBold(this);\n};\nSimpleMDE.prototype.toggleItalic = function() {\n\ttoggleItalic(this);\n};\nSimpleMDE.prototype.toggleStrikethrough = function() {\n\ttoggleStrikethrough(this);\n};\nSimpleMDE.prototype.toggleBlockquote = function() {\n\ttoggleBlockquote(this);\n};\nSimpleMDE.prototype.toggleHeadingSmaller = function() {\n\ttoggleHeadingSmaller(this);\n};\nSimpleMDE.prototype.toggleHeadingBigger = function() {\n\ttoggleHeadingBigger(this);\n};\nSimpleMDE.prototype.toggleHeading1 = function() {\n\ttoggleHeading1(this);\n};\nSimpleMDE.prototype.toggleHeading2 = function() {\n\ttoggleHeading2(this);\n};\nSimpleMDE.prototype.toggleHeading3 = function() {\n\ttoggleHeading3(this);\n};\nSimpleMDE.prototype.toggleCodeBlock = function() {\n\ttoggleCodeBlock(this);\n};\nSimpleMDE.prototype.toggleUnorderedList = function() {\n\ttoggleUnorderedList(this);\n};\nSimpleMDE.prototype.toggleOrderedList = function() {\n\ttoggleOrderedList(this);\n};\nSimpleMDE.prototype.cleanBlock = function() {\n\tcleanBlock(this);\n};\nSimpleMDE.prototype.drawLink = function() {\n\tdrawLink(this);\n};\nSimpleMDE.prototype.drawImage = function() {\n\tdrawImage(this);\n};\nSimpleMDE.prototype.drawTable = function() {\n\tdrawTable(this);\n};\nSimpleMDE.prototype.drawHorizontalRule = function() {\n\tdrawHorizontalRule(this);\n};\nSimpleMDE.prototype.undo = function() {\n\tundo(this);\n};\nSimpleMDE.prototype.redo = function() {\n\tredo(this);\n};\nSimpleMDE.prototype.togglePreview = function() {\n\ttogglePreview(this);\n};\nSimpleMDE.prototype.toggleSideBySide = function() {\n\ttoggleSideBySide(this);\n};\nSimpleMDE.prototype.toggleFullScreen = function() {\n\ttoggleFullScreen(this);\n};\n\nSimpleMDE.prototype.isPreviewActive = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.lastChild;\n\n\treturn /editor-preview-active/.test(preview.className);\n};\n\nSimpleMDE.prototype.isSideBySideActive = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\tvar preview = wrapper.nextSibling;\n\n\treturn /editor-preview-active-side/.test(preview.className);\n};\n\nSimpleMDE.prototype.isFullscreenActive = function() {\n\tvar cm = this.codemirror;\n\n\treturn cm.getOption(\"fullScreen\");\n};\n\nSimpleMDE.prototype.getState = function() {\n\tvar cm = this.codemirror;\n\n\treturn getState(cm);\n};\n\nSimpleMDE.prototype.toTextArea = function() {\n\tvar cm = this.codemirror;\n\tvar wrapper = cm.getWrapperElement();\n\n\tif(wrapper.parentNode) {\n\t\tif(this.gui.toolbar) {\n\t\t\twrapper.parentNode.removeChild(this.gui.toolbar);\n\t\t}\n\t\tif(this.gui.statusbar) {\n\t\t\twrapper.parentNode.removeChild(this.gui.statusbar);\n\t\t}\n\t\tif(this.gui.sideBySide) {\n\t\t\twrapper.parentNode.removeChild(this.gui.sideBySide);\n\t\t}\n\t}\n\n\tcm.toTextArea();\n\n\tif(this.autosaveTimeoutId) {\n\t\tclearTimeout(this.autosaveTimeoutId);\n\t\tthis.autosaveTimeoutId = undefined;\n\t\tthis.clearAutosavedValue();\n\t}\n};\n\nmodule.exports = SimpleMDE;", "// Generated by CoffeeScript 1.6.2\n/**\n@license Sticky-kit v1.1.3 | WTFPL | Leaf Corcoran 2015 | http://leafo.net\n*/\n\n\n(function() {\n  var $, win;\n\n  $ = this.jQuery || window.jQuery;\n\n  win = $(window);\n\n  $.fn.stick_in_parent = function(opts) {\n    var doc, elm, enable_bottoming, inner_scrolling, manual_spacer, offset_top, outer_width, parent_selector, recalc_every, sticky_class, _fn, _i, _len;\n\n    if (opts == null) {\n      opts = {};\n    }\n    sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming;\n    if (offset_top == null) {\n      offset_top = 0;\n    }\n    if (parent_selector == null) {\n      parent_selector = void 0;\n    }\n    if (inner_scrolling == null) {\n      inner_scrolling = true;\n    }\n    if (sticky_class == null) {\n      sticky_class = \"is_stuck\";\n    }\n    doc = $(document);\n    if (enable_bottoming == null) {\n      enable_bottoming = true;\n    }\n    outer_width = function(el) {\n      var computed, w, _el;\n\n      if (window.getComputedStyle) {\n        _el = el[0];\n        computed = window.getComputedStyle(el[0]);\n        w = parseFloat(computed.getPropertyValue(\"width\")) + parseFloat(computed.getPropertyValue(\"margin-left\")) + parseFloat(computed.getPropertyValue(\"margin-right\"));\n        if (computed.getPropertyValue(\"box-sizing\") !== \"border-box\") {\n          w += parseFloat(computed.getPropertyValue(\"border-left-width\")) + parseFloat(computed.getPropertyValue(\"border-right-width\")) + parseFloat(computed.getPropertyValue(\"padding-left\")) + parseFloat(computed.getPropertyValue(\"padding-right\"));\n        }\n        return w;\n      } else {\n        return el.outerWidth(true);\n      }\n    };\n    _fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) {\n      var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick;\n\n      if (elm.data(\"sticky_kit\")) {\n        return;\n      }\n      elm.data(\"sticky_kit\", true);\n      last_scroll_height = doc.height();\n      parent = elm.parent();\n      if (parent_selector != null) {\n        parent = parent.closest(parent_selector);\n      }\n      if (!parent.length) {\n        throw \"failed to find stick parent\";\n      }\n      fixed = false;\n      bottomed = false;\n      spacer = manual_spacer != null ? manual_spacer && elm.closest(manual_spacer) : $(\"<div />\");\n      if (spacer) {\n        spacer.css('position', elm.css('position'));\n      }\n      recalc = function() {\n        var border_top, padding_top, restore;\n\n        if (detached) {\n          return;\n        }\n        last_scroll_height = doc.height();\n        border_top = parseInt(parent.css(\"border-top-width\"), 10);\n        padding_top = parseInt(parent.css(\"padding-top\"), 10);\n        padding_bottom = parseInt(parent.css(\"padding-bottom\"), 10);\n        parent_top = parent.offset().top + border_top + padding_top;\n        parent_height = parent.height();\n        if (fixed) {\n          fixed = false;\n          bottomed = false;\n          if (manual_spacer == null) {\n            elm.insertAfter(spacer);\n            spacer.detach();\n          }\n          elm.css({\n            position: \"\",\n            top: \"\",\n            width: \"\",\n            bottom: \"\"\n          }).removeClass(sticky_class);\n          restore = true;\n        }\n        top = elm.offset().top - (parseInt(elm.css(\"margin-top\"), 10) || 0) - offset_top;\n        height = elm.outerHeight(true);\n        el_float = elm.css(\"float\");\n        if (spacer) {\n          spacer.css({\n            width: outer_width(elm),\n            height: height,\n            display: elm.css(\"display\"),\n            \"vertical-align\": elm.css(\"vertical-align\"),\n            \"float\": el_float\n          });\n        }\n        if (restore) {\n          return tick();\n        }\n      };\n      recalc();\n      if (height === parent_height) {\n        return;\n      }\n      last_pos = void 0;\n      offset = offset_top;\n      recalc_counter = recalc_every;\n      tick = function() {\n        var css, delta, recalced, scroll, will_bottom, win_height;\n\n        if (detached) {\n          return;\n        }\n        recalced = false;\n        if (recalc_counter != null) {\n          recalc_counter -= 1;\n          if (recalc_counter <= 0) {\n            recalc_counter = recalc_every;\n            recalc();\n            recalced = true;\n          }\n        }\n        if (!recalced && doc.height() !== last_scroll_height) {\n          recalc();\n          recalced = true;\n        }\n        scroll = win.scrollTop();\n        if (last_pos != null) {\n          delta = scroll - last_pos;\n        }\n        last_pos = scroll;\n        if (fixed) {\n          if (enable_bottoming) {\n            will_bottom = scroll + height + offset > parent_height + parent_top;\n            if (bottomed && !will_bottom) {\n              bottomed = false;\n              elm.css({\n                position: \"fixed\",\n                bottom: \"\",\n                top: offset\n              }).trigger(\"sticky_kit:unbottom\");\n            }\n          }\n          if (scroll < top) {\n            fixed = false;\n            offset = offset_top;\n            if (manual_spacer == null) {\n              if (el_float === \"left\" || el_float === \"right\") {\n                elm.insertAfter(spacer);\n              }\n              spacer.detach();\n            }\n            css = {\n              position: \"\",\n              width: \"\",\n              top: \"\"\n            };\n            elm.css(css).removeClass(sticky_class).trigger(\"sticky_kit:unstick\");\n          }\n          if (inner_scrolling) {\n            win_height = win.height();\n            if (height + offset_top > win_height) {\n              if (!bottomed) {\n                offset -= delta;\n                offset = Math.max(win_height - height, offset);\n                offset = Math.min(offset_top, offset);\n                if (fixed) {\n                  elm.css({\n                    top: offset + \"px\"\n                  });\n                }\n              }\n            }\n          }\n        } else {\n          if (scroll > top) {\n            fixed = true;\n            css = {\n              position: \"fixed\",\n              top: offset\n            };\n            css.width = elm.css(\"box-sizing\") === \"border-box\" ? elm.outerWidth() + \"px\" : elm.width() + \"px\";\n            elm.css(css).addClass(sticky_class);\n            if (manual_spacer == null) {\n              elm.after(spacer);\n              if (el_float === \"left\" || el_float === \"right\") {\n                spacer.append(elm);\n              }\n            }\n            elm.trigger(\"sticky_kit:stick\");\n          }\n        }\n        if (fixed && enable_bottoming) {\n          if (will_bottom == null) {\n            will_bottom = scroll + height + offset > parent_height + parent_top;\n          }\n          if (!bottomed && will_bottom) {\n            bottomed = true;\n            if (parent.css(\"position\") === \"static\") {\n              parent.css({\n                position: \"relative\"\n              });\n            }\n            return elm.css({\n              position: \"absolute\",\n              bottom: padding_bottom,\n              top: \"auto\"\n            }).trigger(\"sticky_kit:bottom\");\n          }\n        }\n      };\n      recalc_and_tick = function() {\n        recalc();\n        return tick();\n      };\n      detach = function() {\n        detached = true;\n        win.off(\"touchmove\", tick);\n        win.off(\"scroll\", tick);\n        win.off(\"resize\", recalc_and_tick);\n        $(document.body).off(\"sticky_kit:recalc\", recalc_and_tick);\n        elm.off(\"sticky_kit:detach\", detach);\n        elm.removeData(\"sticky_kit\");\n        elm.css({\n          position: \"\",\n          bottom: \"\",\n          top: \"\",\n          width: \"\"\n        });\n        parent.position(\"position\", \"\");\n        if (fixed) {\n          if (manual_spacer == null) {\n            if (el_float === \"left\" || el_float === \"right\") {\n              elm.insertAfter(spacer);\n            }\n            spacer.remove();\n          }\n          return elm.removeClass(sticky_class);\n        }\n      };\n      win.on(\"touchmove\", tick);\n      win.on(\"scroll\", tick);\n      win.on(\"resize\", recalc_and_tick);\n      $(document.body).on(\"sticky_kit:recalc\", recalc_and_tick);\n      elm.on(\"sticky_kit:detach\", detach);\n      return setTimeout(tick, 0);\n    };\n    for (_i = 0, _len = this.length; _i < _len; _i++) {\n      elm = this[_i];\n      _fn($(elm));\n    }\n    return this;\n  };\n\n}).call(this);\n", "/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.23';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n\n      // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function');\n\n      while (++index < length) {\n        var key = path[index];\n\n        // skip non-string keys (e.g., Symbols, numbers)\n        if (typeof key !== 'string') {\n          continue;\n        }\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block \"constructor.prototype\" chains\n        if (key === 'constructor' &&\n            (index + 1) < length &&\n            typeof path[index + 1] === 'string' &&\n            path[index + 1] === 'prototype') {\n\n          // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a')\n          if (isRootPrimitive && index === 0) {\n            continue;\n          }\n\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('d\u00E9j\u00E0 vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n", "/*!\n * Vue.js v2.7.16\n * (c) 2014-2023 Evan You\n * Released under the MIT License.\n */\nvar emptyObject = Object.freeze({});\nvar isArray = Array.isArray;\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef(v) {\n    return v === undefined || v === null;\n}\nfunction isDef(v) {\n    return v !== undefined && v !== null;\n}\nfunction isTrue(v) {\n    return v === true;\n}\nfunction isFalse(v) {\n    return v === false;\n}\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive(value) {\n    return (typeof value === 'string' ||\n        typeof value === 'number' ||\n        // $flow-disable-line\n        typeof value === 'symbol' ||\n        typeof value === 'boolean');\n}\nfunction isFunction(value) {\n    return typeof value === 'function';\n}\n/**\n * Quick object check - this is primarily used to tell\n * objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject(obj) {\n    return obj !== null && typeof obj === 'object';\n}\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\nfunction toRawType(value) {\n    return _toString.call(value).slice(8, -1);\n}\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject(obj) {\n    return _toString.call(obj) === '[object Object]';\n}\nfunction isRegExp(v) {\n    return _toString.call(v) === '[object RegExp]';\n}\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex(val) {\n    var n = parseFloat(String(val));\n    return n >= 0 && Math.floor(n) === n && isFinite(val);\n}\nfunction isPromise(val) {\n    return (isDef(val) &&\n        typeof val.then === 'function' &&\n        typeof val.catch === 'function');\n}\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString(val) {\n    return val == null\n        ? ''\n        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n            ? JSON.stringify(val, replacer, 2)\n            : String(val);\n}\nfunction replacer(_key, val) {\n    // avoid circular deps from v3\n    if (val && val.__v_isRef) {\n        return val.value;\n    }\n    return val;\n}\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber(val) {\n    var n = parseFloat(val);\n    return isNaN(n) ? val : n;\n}\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap(str, expectsLowerCase) {\n    var map = Object.create(null);\n    var list = str.split(',');\n    for (var i = 0; i < list.length; i++) {\n        map[list[i]] = true;\n    }\n    return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };\n}\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n/**\n * Remove an item from an array.\n */\nfunction remove$2(arr, item) {\n    var len = arr.length;\n    if (len) {\n        // fast path for the only / last item\n        if (item === arr[len - 1]) {\n            arr.length = len - 1;\n            return;\n        }\n        var index = arr.indexOf(item);\n        if (index > -1) {\n            return arr.splice(index, 1);\n        }\n    }\n}\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n    return hasOwnProperty.call(obj, key);\n}\n/**\n * Create a cached version of a pure function.\n */\nfunction cached(fn) {\n    var cache = Object.create(null);\n    return function cachedFn(str) {\n        var hit = cache[str];\n        return hit || (cache[str] = fn(str));\n    };\n}\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n    return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });\n});\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n});\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n    return str.replace(hyphenateRE, '-$1').toLowerCase();\n});\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n/* istanbul ignore next */\nfunction polyfillBind(fn, ctx) {\n    function boundFn(a) {\n        var l = arguments.length;\n        return l\n            ? l > 1\n                ? fn.apply(ctx, arguments)\n                : fn.call(ctx, a)\n            : fn.call(ctx);\n    }\n    boundFn._length = fn.length;\n    return boundFn;\n}\nfunction nativeBind(fn, ctx) {\n    return fn.bind(ctx);\n}\n// @ts-expect-error bind cannot be `undefined`\nvar bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray(list, start) {\n    start = start || 0;\n    var i = list.length - start;\n    var ret = new Array(i);\n    while (i--) {\n        ret[i] = list[i + start];\n    }\n    return ret;\n}\n/**\n * Mix properties into target object.\n */\nfunction extend(to, _from) {\n    for (var key in _from) {\n        to[key] = _from[key];\n    }\n    return to;\n}\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject(arr) {\n    var res = {};\n    for (var i = 0; i < arr.length; i++) {\n        if (arr[i]) {\n            extend(res, arr[i]);\n        }\n    }\n    return res;\n}\n/* eslint-disable no-unused-vars */\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop(a, b, c) { }\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n/* eslint-enable no-unused-vars */\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys$1(modules) {\n    return modules\n        .reduce(function (keys, m) { return keys.concat(m.staticKeys || []); }, [])\n        .join(',');\n}\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual(a, b) {\n    if (a === b)\n        return true;\n    var isObjectA = isObject(a);\n    var isObjectB = isObject(b);\n    if (isObjectA && isObjectB) {\n        try {\n            var isArrayA = Array.isArray(a);\n            var isArrayB = Array.isArray(b);\n            if (isArrayA && isArrayB) {\n                return (a.length === b.length &&\n                    a.every(function (e, i) {\n                        return looseEqual(e, b[i]);\n                    }));\n            }\n            else if (a instanceof Date && b instanceof Date) {\n                return a.getTime() === b.getTime();\n            }\n            else if (!isArrayA && !isArrayB) {\n                var keysA = Object.keys(a);\n                var keysB = Object.keys(b);\n                return (keysA.length === keysB.length &&\n                    keysA.every(function (key) {\n                        return looseEqual(a[key], b[key]);\n                    }));\n            }\n            else {\n                /* istanbul ignore next */\n                return false;\n            }\n        }\n        catch (e) {\n            /* istanbul ignore next */\n            return false;\n        }\n    }\n    else if (!isObjectA && !isObjectB) {\n        return String(a) === String(b);\n    }\n    else {\n        return false;\n    }\n}\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf(arr, val) {\n    for (var i = 0; i < arr.length; i++) {\n        if (looseEqual(arr[i], val))\n            return i;\n    }\n    return -1;\n}\n/**\n * Ensure a function is called only once.\n */\nfunction once(fn) {\n    var called = false;\n    return function () {\n        if (!called) {\n            called = true;\n            fn.apply(this, arguments);\n        }\n    };\n}\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill\nfunction hasChanged(x, y) {\n    if (x === y) {\n        return x === 0 && 1 / x !== 1 / y;\n    }\n    else {\n        return x === x || y === y;\n    }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\nvar ASSET_TYPES = ['component', 'directive', 'filter'];\nvar LIFECYCLE_HOOKS = [\n    'beforeCreate',\n    'created',\n    'beforeMount',\n    'mounted',\n    'beforeUpdate',\n    'updated',\n    'beforeDestroy',\n    'destroyed',\n    'activated',\n    'deactivated',\n    'errorCaptured',\n    'serverPrefetch',\n    'renderTracked',\n    'renderTriggered'\n];\n\nvar config = {\n    /**\n     * Option merge strategies (used in core/util/options)\n     */\n    // $flow-disable-line\n    optionMergeStrategies: Object.create(null),\n    /**\n     * Whether to suppress warnings.\n     */\n    silent: false,\n    /**\n     * Show production mode tip message on boot?\n     */\n    productionTip: process.env.NODE_ENV !== 'production',\n    /**\n     * Whether to enable devtools\n     */\n    devtools: process.env.NODE_ENV !== 'production',\n    /**\n     * Whether to record perf\n     */\n    performance: false,\n    /**\n     * Error handler for watcher errors\n     */\n    errorHandler: null,\n    /**\n     * Warn handler for watcher warns\n     */\n    warnHandler: null,\n    /**\n     * Ignore certain custom elements\n     */\n    ignoredElements: [],\n    /**\n     * Custom user key aliases for v-on\n     */\n    // $flow-disable-line\n    keyCodes: Object.create(null),\n    /**\n     * Check if a tag is reserved so that it cannot be registered as a\n     * component. This is platform-dependent and may be overwritten.\n     */\n    isReservedTag: no,\n    /**\n     * Check if an attribute is reserved so that it cannot be used as a component\n     * prop. This is platform-dependent and may be overwritten.\n     */\n    isReservedAttr: no,\n    /**\n     * Check if a tag is an unknown element.\n     * Platform-dependent.\n     */\n    isUnknownElement: no,\n    /**\n     * Get the namespace of an element\n     */\n    getTagNamespace: noop,\n    /**\n     * Parse the real tag name for the specific platform.\n     */\n    parsePlatformTagName: identity,\n    /**\n     * Check if an attribute must be bound using property, e.g. value\n     * Platform-dependent.\n     */\n    mustUseProp: no,\n    /**\n     * Perform updates asynchronously. Intended to be used by Vue Test Utils\n     * This will significantly reduce performance if set to false.\n     */\n    async: true,\n    /**\n     * Exposed for legacy reasons\n     */\n    _lifecycleHooks: LIFECYCLE_HOOKS\n};\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved(str) {\n    var c = (str + '').charCodeAt(0);\n    return c === 0x24 || c === 0x5f;\n}\n/**\n * Define a property.\n */\nfunction def(obj, key, val, enumerable) {\n    Object.defineProperty(obj, key, {\n        value: val,\n        enumerable: !!enumerable,\n        writable: true,\n        configurable: true\n    });\n}\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp(\"[^\".concat(unicodeRegExp.source, \".$_\\\\d]\"));\nfunction parsePath(path) {\n    if (bailRE.test(path)) {\n        return;\n    }\n    var segments = path.split('.');\n    return function (obj) {\n        for (var i = 0; i < segments.length; i++) {\n            if (!obj)\n                return;\n            obj = obj[segments[i]];\n        }\n        return obj;\n    };\n}\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nUA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nUA && /chrome\\/\\d+/.test(UA) && !isEdge;\nUA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n// Firefox has a \"watch\" function on Object.prototype...\n// @ts-expect-error firebox support\nvar nativeWatch = {}.watch;\nvar supportsPassive = false;\nif (inBrowser) {\n    try {\n        var opts = {};\n        Object.defineProperty(opts, 'passive', {\n            get: function () {\n                /* istanbul ignore next */\n                supportsPassive = true;\n            }\n        }); // https://github.com/facebook/flow/issues/285\n        window.addEventListener('test-passive', null, opts);\n    }\n    catch (e) { }\n}\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n    if (_isServer === undefined) {\n        /* istanbul ignore if */\n        if (!inBrowser && typeof global !== 'undefined') {\n            // detect presence of vue-server-renderer and avoid\n            // Webpack shimming the process\n            _isServer =\n                global['process'] && global['process'].env.VUE_ENV === 'server';\n        }\n        else {\n            _isServer = false;\n        }\n    }\n    return _isServer;\n};\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n/* istanbul ignore next */\nfunction isNative(Ctor) {\n    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n}\nvar hasSymbol = typeof Symbol !== 'undefined' &&\n    isNative(Symbol) &&\n    typeof Reflect !== 'undefined' &&\n    isNative(Reflect.ownKeys);\nvar _Set; // $flow-disable-line\n/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {\n    // use native Set when available.\n    _Set = Set;\n}\nelse {\n    // a non-standard Set polyfill that only works with primitive keys.\n    _Set = /** @class */ (function () {\n        function Set() {\n            this.set = Object.create(null);\n        }\n        Set.prototype.has = function (key) {\n            return this.set[key] === true;\n        };\n        Set.prototype.add = function (key) {\n            this.set[key] = true;\n        };\n        Set.prototype.clear = function () {\n            this.set = Object.create(null);\n        };\n        return Set;\n    }());\n}\n\nvar currentInstance = null;\n/**\n * This is exposed for compatibility with v3 (e.g. some functions in VueUse\n * relies on it). Do not use this internally, just use `currentInstance`.\n *\n * @internal this function needs manual type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction getCurrentInstance() {\n    return currentInstance && { proxy: currentInstance };\n}\n/**\n * @internal\n */\nfunction setCurrentInstance(vm) {\n    if (vm === void 0) { vm = null; }\n    if (!vm)\n        currentInstance && currentInstance._scope.off();\n    currentInstance = vm;\n    vm && vm._scope.on();\n}\n\n/**\n * @internal\n */\nvar VNode = /** @class */ (function () {\n    function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {\n        this.tag = tag;\n        this.data = data;\n        this.children = children;\n        this.text = text;\n        this.elm = elm;\n        this.ns = undefined;\n        this.context = context;\n        this.fnContext = undefined;\n        this.fnOptions = undefined;\n        this.fnScopeId = undefined;\n        this.key = data && data.key;\n        this.componentOptions = componentOptions;\n        this.componentInstance = undefined;\n        this.parent = undefined;\n        this.raw = false;\n        this.isStatic = false;\n        this.isRootInsert = true;\n        this.isComment = false;\n        this.isCloned = false;\n        this.isOnce = false;\n        this.asyncFactory = asyncFactory;\n        this.asyncMeta = undefined;\n        this.isAsyncPlaceholder = false;\n    }\n    Object.defineProperty(VNode.prototype, \"child\", {\n        // DEPRECATED: alias for componentInstance for backwards compat.\n        /* istanbul ignore next */\n        get: function () {\n            return this.componentInstance;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return VNode;\n}());\nvar createEmptyVNode = function (text) {\n    if (text === void 0) { text = ''; }\n    var node = new VNode();\n    node.text = text;\n    node.isComment = true;\n    return node;\n};\nfunction createTextVNode(val) {\n    return new VNode(undefined, undefined, undefined, String(val));\n}\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode(vnode) {\n    var cloned = new VNode(vnode.tag, vnode.data, \n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);\n    cloned.ns = vnode.ns;\n    cloned.isStatic = vnode.isStatic;\n    cloned.key = vnode.key;\n    cloned.isComment = vnode.isComment;\n    cloned.fnContext = vnode.fnContext;\n    cloned.fnOptions = vnode.fnOptions;\n    cloned.fnScopeId = vnode.fnScopeId;\n    cloned.asyncMeta = vnode.asyncMeta;\n    cloned.isCloned = true;\n    return cloned;\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\nvar initProxy;\nif (process.env.NODE_ENV !== 'production') {\n    var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +\n        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +\n        'require' // for Webpack/Browserify\n    );\n    var warnNonPresent_1 = function (target, key) {\n        warn$2(\"Property or method \\\"\".concat(key, \"\\\" is not defined on the instance but \") +\n            'referenced during render. Make sure that this property is reactive, ' +\n            'either in the data option, or for class-based components, by ' +\n            'initializing the property. ' +\n            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);\n    };\n    var warnReservedPrefix_1 = function (target, key) {\n        warn$2(\"Property \\\"\".concat(key, \"\\\" must be accessed with \\\"$data.\").concat(key, \"\\\" because \") +\n            'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n            'prevent conflicts with Vue internals. ' +\n            'See: https://v2.vuejs.org/v2/api/#data', target);\n    };\n    var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);\n    if (hasProxy_1) {\n        var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n        config.keyCodes = new Proxy(config.keyCodes, {\n            set: function (target, key, value) {\n                if (isBuiltInModifier_1(key)) {\n                    warn$2(\"Avoid overwriting built-in modifier in config.keyCodes: .\".concat(key));\n                    return false;\n                }\n                else {\n                    target[key] = value;\n                    return true;\n                }\n            }\n        });\n    }\n    var hasHandler_1 = {\n        has: function (target, key) {\n            var has = key in target;\n            var isAllowed = allowedGlobals_1(key) ||\n                (typeof key === 'string' &&\n                    key.charAt(0) === '_' &&\n                    !(key in target.$data));\n            if (!has && !isAllowed) {\n                if (key in target.$data)\n                    warnReservedPrefix_1(target, key);\n                else\n                    warnNonPresent_1(target, key);\n            }\n            return has || !isAllowed;\n        }\n    };\n    var getHandler_1 = {\n        get: function (target, key) {\n            if (typeof key === 'string' && !(key in target)) {\n                if (key in target.$data)\n                    warnReservedPrefix_1(target, key);\n                else\n                    warnNonPresent_1(target, key);\n            }\n            return target[key];\n        }\n    };\n    initProxy = function initProxy(vm) {\n        if (hasProxy_1) {\n            // determine which proxy handler to use\n            var options = vm.$options;\n            var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;\n            vm._renderProxy = new Proxy(vm, handlers);\n        }\n        else {\n            vm._renderProxy = vm;\n        }\n    };\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar uid$2 = 0;\nvar pendingCleanupDeps = [];\nvar cleanupDeps = function () {\n    for (var i = 0; i < pendingCleanupDeps.length; i++) {\n        var dep = pendingCleanupDeps[i];\n        dep.subs = dep.subs.filter(function (s) { return s; });\n        dep._pending = false;\n    }\n    pendingCleanupDeps.length = 0;\n};\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n * @internal\n */\nvar Dep = /** @class */ (function () {\n    function Dep() {\n        // pending subs cleanup\n        this._pending = false;\n        this.id = uid$2++;\n        this.subs = [];\n    }\n    Dep.prototype.addSub = function (sub) {\n        this.subs.push(sub);\n    };\n    Dep.prototype.removeSub = function (sub) {\n        // #12696 deps with massive amount of subscribers are extremely slow to\n        // clean up in Chromium\n        // to workaround this, we unset the sub for now, and clear them on\n        // next scheduler flush.\n        this.subs[this.subs.indexOf(sub)] = null;\n        if (!this._pending) {\n            this._pending = true;\n            pendingCleanupDeps.push(this);\n        }\n    };\n    Dep.prototype.depend = function (info) {\n        if (Dep.target) {\n            Dep.target.addDep(this);\n            if (process.env.NODE_ENV !== 'production' && info && Dep.target.onTrack) {\n                Dep.target.onTrack(__assign({ effect: Dep.target }, info));\n            }\n        }\n    };\n    Dep.prototype.notify = function (info) {\n        // stabilize the subscriber list first\n        var subs = this.subs.filter(function (s) { return s; });\n        if (process.env.NODE_ENV !== 'production' && !config.async) {\n            // subs aren't sorted in scheduler if not running async\n            // we need to sort them now to make sure they fire in correct\n            // order\n            subs.sort(function (a, b) { return a.id - b.id; });\n        }\n        for (var i = 0, l = subs.length; i < l; i++) {\n            var sub = subs[i];\n            if (process.env.NODE_ENV !== 'production' && info) {\n                sub.onTrigger &&\n                    sub.onTrigger(__assign({ effect: subs[i] }, info));\n            }\n            sub.update();\n        }\n    };\n    return Dep;\n}());\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\nfunction pushTarget(target) {\n    targetStack.push(target);\n    Dep.target = target;\n}\nfunction popTarget() {\n    targetStack.pop();\n    Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\nvar methodsToPatch = [\n    'push',\n    'pop',\n    'shift',\n    'unshift',\n    'splice',\n    'sort',\n    'reverse'\n];\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n    // cache original method\n    var original = arrayProto[method];\n    def(arrayMethods, method, function mutator() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var result = original.apply(this, args);\n        var ob = this.__ob__;\n        var inserted;\n        switch (method) {\n            case 'push':\n            case 'unshift':\n                inserted = args;\n                break;\n            case 'splice':\n                inserted = args.slice(2);\n                break;\n        }\n        if (inserted)\n            ob.observeArray(inserted);\n        // notify change\n        if (process.env.NODE_ENV !== 'production') {\n            ob.dep.notify({\n                type: \"array mutation\" /* TriggerOpTypes.ARRAY_MUTATION */,\n                target: this,\n                key: method\n            });\n        }\n        else {\n            ob.dep.notify();\n        }\n        return result;\n    });\n});\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\nvar NO_INITIAL_VALUE = {};\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\nfunction toggleObserving(value) {\n    shouldObserve = value;\n}\n// ssr mock dep\nvar mockDep = {\n    notify: noop,\n    depend: noop,\n    addSub: noop,\n    removeSub: noop\n};\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = /** @class */ (function () {\n    function Observer(value, shallow, mock) {\n        if (shallow === void 0) { shallow = false; }\n        if (mock === void 0) { mock = false; }\n        this.value = value;\n        this.shallow = shallow;\n        this.mock = mock;\n        // this.value = value\n        this.dep = mock ? mockDep : new Dep();\n        this.vmCount = 0;\n        def(value, '__ob__', this);\n        if (isArray(value)) {\n            if (!mock) {\n                if (hasProto) {\n                    value.__proto__ = arrayMethods;\n                    /* eslint-enable no-proto */\n                }\n                else {\n                    for (var i = 0, l = arrayKeys.length; i < l; i++) {\n                        var key = arrayKeys[i];\n                        def(value, key, arrayMethods[key]);\n                    }\n                }\n            }\n            if (!shallow) {\n                this.observeArray(value);\n            }\n        }\n        else {\n            /**\n             * Walk through all properties and convert them into\n             * getter/setters. This method should only be called when\n             * value type is Object.\n             */\n            var keys = Object.keys(value);\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock);\n            }\n        }\n    }\n    /**\n     * Observe a list of Array items.\n     */\n    Observer.prototype.observeArray = function (value) {\n        for (var i = 0, l = value.length; i < l; i++) {\n            observe(value[i], false, this.mock);\n        }\n    };\n    return Observer;\n}());\n// helpers\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe(value, shallow, ssrMockReactivity) {\n    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n        return value.__ob__;\n    }\n    if (shouldObserve &&\n        (ssrMockReactivity || !isServerRendering()) &&\n        (isArray(value) || isPlainObject(value)) &&\n        Object.isExtensible(value) &&\n        !value.__v_skip /* ReactiveFlags.SKIP */ &&\n        !isRef(value) &&\n        !(value instanceof VNode)) {\n        return new Observer(value, shallow, ssrMockReactivity);\n    }\n}\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive(obj, key, val, customSetter, shallow, mock, observeEvenIfShallow) {\n    if (observeEvenIfShallow === void 0) { observeEvenIfShallow = false; }\n    var dep = new Dep();\n    var property = Object.getOwnPropertyDescriptor(obj, key);\n    if (property && property.configurable === false) {\n        return;\n    }\n    // cater for pre-defined getter/setters\n    var getter = property && property.get;\n    var setter = property && property.set;\n    if ((!getter || setter) &&\n        (val === NO_INITIAL_VALUE || arguments.length === 2)) {\n        val = obj[key];\n    }\n    var childOb = shallow ? val && val.__ob__ : observe(val, false, mock);\n    Object.defineProperty(obj, key, {\n        enumerable: true,\n        configurable: true,\n        get: function reactiveGetter() {\n            var value = getter ? getter.call(obj) : val;\n            if (Dep.target) {\n                if (process.env.NODE_ENV !== 'production') {\n                    dep.depend({\n                        target: obj,\n                        type: \"get\" /* TrackOpTypes.GET */,\n                        key: key\n                    });\n                }\n                else {\n                    dep.depend();\n                }\n                if (childOb) {\n                    childOb.dep.depend();\n                    if (isArray(value)) {\n                        dependArray(value);\n                    }\n                }\n            }\n            return isRef(value) && !shallow ? value.value : value;\n        },\n        set: function reactiveSetter(newVal) {\n            var value = getter ? getter.call(obj) : val;\n            if (!hasChanged(value, newVal)) {\n                return;\n            }\n            if (process.env.NODE_ENV !== 'production' && customSetter) {\n                customSetter();\n            }\n            if (setter) {\n                setter.call(obj, newVal);\n            }\n            else if (getter) {\n                // #7981: for accessor properties without setter\n                return;\n            }\n            else if (!shallow && isRef(value) && !isRef(newVal)) {\n                value.value = newVal;\n                return;\n            }\n            else {\n                val = newVal;\n            }\n            childOb = shallow ? newVal && newVal.__ob__ : observe(newVal, false, mock);\n            if (process.env.NODE_ENV !== 'production') {\n                dep.notify({\n                    type: \"set\" /* TriggerOpTypes.SET */,\n                    target: obj,\n                    key: key,\n                    newValue: newVal,\n                    oldValue: value\n                });\n            }\n            else {\n                dep.notify();\n            }\n        }\n    });\n    return dep;\n}\nfunction set(target, key, val) {\n    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n        warn$2(\"Cannot set reactive property on undefined, null, or primitive value: \".concat(target));\n    }\n    if (isReadonly(target)) {\n        process.env.NODE_ENV !== 'production' && warn$2(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n        return;\n    }\n    var ob = target.__ob__;\n    if (isArray(target) && isValidArrayIndex(key)) {\n        target.length = Math.max(target.length, key);\n        target.splice(key, 1, val);\n        // when mocking for SSR, array methods are not hijacked\n        if (ob && !ob.shallow && ob.mock) {\n            observe(val, false, true);\n        }\n        return val;\n    }\n    if (key in target && !(key in Object.prototype)) {\n        target[key] = val;\n        return val;\n    }\n    if (target._isVue || (ob && ob.vmCount)) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +\n                'at runtime - declare it upfront in the data option.');\n        return val;\n    }\n    if (!ob) {\n        target[key] = val;\n        return val;\n    }\n    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);\n    if (process.env.NODE_ENV !== 'production') {\n        ob.dep.notify({\n            type: \"add\" /* TriggerOpTypes.ADD */,\n            target: target,\n            key: key,\n            newValue: val,\n            oldValue: undefined\n        });\n    }\n    else {\n        ob.dep.notify();\n    }\n    return val;\n}\nfunction del(target, key) {\n    if (process.env.NODE_ENV !== 'production' && (isUndef(target) || isPrimitive(target))) {\n        warn$2(\"Cannot delete reactive property on undefined, null, or primitive value: \".concat(target));\n    }\n    if (isArray(target) && isValidArrayIndex(key)) {\n        target.splice(key, 1);\n        return;\n    }\n    var ob = target.__ob__;\n    if (target._isVue || (ob && ob.vmCount)) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2('Avoid deleting properties on a Vue instance or its root $data ' +\n                '- just set it to null.');\n        return;\n    }\n    if (isReadonly(target)) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2(\"Delete operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n        return;\n    }\n    if (!hasOwn(target, key)) {\n        return;\n    }\n    delete target[key];\n    if (!ob) {\n        return;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        ob.dep.notify({\n            type: \"delete\" /* TriggerOpTypes.DELETE */,\n            target: target,\n            key: key\n        });\n    }\n    else {\n        ob.dep.notify();\n    }\n}\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray(value) {\n    for (var e = void 0, i = 0, l = value.length; i < l; i++) {\n        e = value[i];\n        if (e && e.__ob__) {\n            e.__ob__.dep.depend();\n        }\n        if (isArray(e)) {\n            dependArray(e);\n        }\n    }\n}\n\nfunction reactive(target) {\n    makeReactive(target, false);\n    return target;\n}\n/**\n * Return a shallowly-reactive copy of the original object, where only the root\n * level properties are reactive. It also does not auto-unwrap refs (even at the\n * root level).\n */\nfunction shallowReactive(target) {\n    makeReactive(target, true);\n    def(target, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n    return target;\n}\nfunction makeReactive(target, shallow) {\n    // if trying to observe a readonly proxy, return the readonly version.\n    if (!isReadonly(target)) {\n        if (process.env.NODE_ENV !== 'production') {\n            if (isArray(target)) {\n                warn$2(\"Avoid using Array as root value for \".concat(shallow ? \"shallowReactive()\" : \"reactive()\", \" as it cannot be tracked in watch() or watchEffect(). Use \").concat(shallow ? \"shallowRef()\" : \"ref()\", \" instead. This is a Vue-2-only limitation.\"));\n            }\n            var existingOb = target && target.__ob__;\n            if (existingOb && existingOb.shallow !== shallow) {\n                warn$2(\"Target is already a \".concat(existingOb.shallow ? \"\" : \"non-\", \"shallow reactive object, and cannot be converted to \").concat(shallow ? \"\" : \"non-\", \"shallow.\"));\n            }\n        }\n        var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);\n        if (process.env.NODE_ENV !== 'production' && !ob) {\n            if (target == null || isPrimitive(target)) {\n                warn$2(\"value cannot be made reactive: \".concat(String(target)));\n            }\n            if (isCollectionType(target)) {\n                warn$2(\"Vue 2 does not support reactive collection types such as Map or Set.\");\n            }\n        }\n    }\n}\nfunction isReactive(value) {\n    if (isReadonly(value)) {\n        return isReactive(value[\"__v_raw\" /* ReactiveFlags.RAW */]);\n    }\n    return !!(value && value.__ob__);\n}\nfunction isShallow(value) {\n    return !!(value && value.__v_isShallow);\n}\nfunction isReadonly(value) {\n    return !!(value && value.__v_isReadonly);\n}\nfunction isProxy(value) {\n    return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n    var raw = observed && observed[\"__v_raw\" /* ReactiveFlags.RAW */];\n    return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n    // non-extensible objects won't be observed anyway\n    if (Object.isExtensible(value)) {\n        def(value, \"__v_skip\" /* ReactiveFlags.SKIP */, true);\n    }\n    return value;\n}\n/**\n * @internal\n */\nfunction isCollectionType(value) {\n    var type = toRawType(value);\n    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');\n}\n\n/**\n * @internal\n */\nvar RefFlag = \"__v_isRef\";\nfunction isRef(r) {\n    return !!(r && r.__v_isRef === true);\n}\nfunction ref$1(value) {\n    return createRef(value, false);\n}\nfunction shallowRef(value) {\n    return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n    if (isRef(rawValue)) {\n        return rawValue;\n    }\n    var ref = {};\n    def(ref, RefFlag, true);\n    def(ref, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, shallow);\n    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));\n    return ref;\n}\nfunction triggerRef(ref) {\n    if (process.env.NODE_ENV !== 'production' && !ref.dep) {\n        warn$2(\"received object is not a triggerable ref.\");\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        ref.dep &&\n            ref.dep.notify({\n                type: \"set\" /* TriggerOpTypes.SET */,\n                target: ref,\n                key: 'value'\n            });\n    }\n    else {\n        ref.dep && ref.dep.notify();\n    }\n}\nfunction unref(ref) {\n    return isRef(ref) ? ref.value : ref;\n}\nfunction proxyRefs(objectWithRefs) {\n    if (isReactive(objectWithRefs)) {\n        return objectWithRefs;\n    }\n    var proxy = {};\n    var keys = Object.keys(objectWithRefs);\n    for (var i = 0; i < keys.length; i++) {\n        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);\n    }\n    return proxy;\n}\nfunction proxyWithRefUnwrap(target, source, key) {\n    Object.defineProperty(target, key, {\n        enumerable: true,\n        configurable: true,\n        get: function () {\n            var val = source[key];\n            if (isRef(val)) {\n                return val.value;\n            }\n            else {\n                var ob = val && val.__ob__;\n                if (ob)\n                    ob.dep.depend();\n                return val;\n            }\n        },\n        set: function (value) {\n            var oldValue = source[key];\n            if (isRef(oldValue) && !isRef(value)) {\n                oldValue.value = value;\n            }\n            else {\n                source[key] = value;\n            }\n        }\n    });\n}\nfunction customRef(factory) {\n    var dep = new Dep();\n    var _a = factory(function () {\n        if (process.env.NODE_ENV !== 'production') {\n            dep.depend({\n                target: ref,\n                type: \"get\" /* TrackOpTypes.GET */,\n                key: 'value'\n            });\n        }\n        else {\n            dep.depend();\n        }\n    }, function () {\n        if (process.env.NODE_ENV !== 'production') {\n            dep.notify({\n                target: ref,\n                type: \"set\" /* TriggerOpTypes.SET */,\n                key: 'value'\n            });\n        }\n        else {\n            dep.notify();\n        }\n    }), get = _a.get, set = _a.set;\n    var ref = {\n        get value() {\n            return get();\n        },\n        set value(newVal) {\n            set(newVal);\n        }\n    };\n    def(ref, RefFlag, true);\n    return ref;\n}\nfunction toRefs(object) {\n    if (process.env.NODE_ENV !== 'production' && !isReactive(object)) {\n        warn$2(\"toRefs() expects a reactive object but received a plain one.\");\n    }\n    var ret = isArray(object) ? new Array(object.length) : {};\n    for (var key in object) {\n        ret[key] = toRef(object, key);\n    }\n    return ret;\n}\nfunction toRef(object, key, defaultValue) {\n    var val = object[key];\n    if (isRef(val)) {\n        return val;\n    }\n    var ref = {\n        get value() {\n            var val = object[key];\n            return val === undefined ? defaultValue : val;\n        },\n        set value(newVal) {\n            object[key] = newVal;\n        }\n    };\n    def(ref, RefFlag, true);\n    return ref;\n}\n\nvar rawToReadonlyFlag = \"__v_rawToReadonly\";\nvar rawToShallowReadonlyFlag = \"__v_rawToShallowReadonly\";\nfunction readonly(target) {\n    return createReadonly(target, false);\n}\nfunction createReadonly(target, shallow) {\n    if (!isPlainObject(target)) {\n        if (process.env.NODE_ENV !== 'production') {\n            if (isArray(target)) {\n                warn$2(\"Vue 2 does not support readonly arrays.\");\n            }\n            else if (isCollectionType(target)) {\n                warn$2(\"Vue 2 does not support readonly collection types such as Map or Set.\");\n            }\n            else {\n                warn$2(\"value cannot be made readonly: \".concat(typeof target));\n            }\n        }\n        return target;\n    }\n    if (process.env.NODE_ENV !== 'production' && !Object.isExtensible(target)) {\n        warn$2(\"Vue 2 does not support creating readonly proxy for non-extensible object.\");\n    }\n    // already a readonly object\n    if (isReadonly(target)) {\n        return target;\n    }\n    // already has a readonly proxy\n    var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;\n    var existingProxy = target[existingFlag];\n    if (existingProxy) {\n        return existingProxy;\n    }\n    var proxy = Object.create(Object.getPrototypeOf(target));\n    def(target, existingFlag, proxy);\n    def(proxy, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, true);\n    def(proxy, \"__v_raw\" /* ReactiveFlags.RAW */, target);\n    if (isRef(target)) {\n        def(proxy, RefFlag, true);\n    }\n    if (shallow || isShallow(target)) {\n        def(proxy, \"__v_isShallow\" /* ReactiveFlags.IS_SHALLOW */, true);\n    }\n    var keys = Object.keys(target);\n    for (var i = 0; i < keys.length; i++) {\n        defineReadonlyProperty(proxy, target, keys[i], shallow);\n    }\n    return proxy;\n}\nfunction defineReadonlyProperty(proxy, target, key, shallow) {\n    Object.defineProperty(proxy, key, {\n        enumerable: true,\n        configurable: true,\n        get: function () {\n            var val = target[key];\n            return shallow || !isPlainObject(val) ? val : readonly(val);\n        },\n        set: function () {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2(\"Set operation on key \\\"\".concat(key, \"\\\" failed: target is readonly.\"));\n        }\n    });\n}\n/**\n * Returns a reactive-copy of the original object, where only the root level\n * properties are readonly, and does NOT unwrap refs nor recursively convert\n * returned properties.\n * This is used for creating the props proxy object for stateful components.\n */\nfunction shallowReadonly(target) {\n    return createReadonly(target, true);\n}\n\nfunction computed(getterOrOptions, debugOptions) {\n    var getter;\n    var setter;\n    var onlyGetter = isFunction(getterOrOptions);\n    if (onlyGetter) {\n        getter = getterOrOptions;\n        setter = process.env.NODE_ENV !== 'production'\n            ? function () {\n                warn$2('Write operation failed: computed value is readonly');\n            }\n            : noop;\n    }\n    else {\n        getter = getterOrOptions.get;\n        setter = getterOrOptions.set;\n    }\n    var watcher = isServerRendering()\n        ? null\n        : new Watcher(currentInstance, getter, noop, { lazy: true });\n    if (process.env.NODE_ENV !== 'production' && watcher && debugOptions) {\n        watcher.onTrack = debugOptions.onTrack;\n        watcher.onTrigger = debugOptions.onTrigger;\n    }\n    var ref = {\n        // some libs rely on the presence effect for checking computed refs\n        // from normal refs, but the implementation doesn't matter\n        effect: watcher,\n        get value() {\n            if (watcher) {\n                if (watcher.dirty) {\n                    watcher.evaluate();\n                }\n                if (Dep.target) {\n                    if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {\n                        Dep.target.onTrack({\n                            effect: Dep.target,\n                            target: ref,\n                            type: \"get\" /* TrackOpTypes.GET */,\n                            key: 'value'\n                        });\n                    }\n                    watcher.depend();\n                }\n                return watcher.value;\n            }\n            else {\n                return getter();\n            }\n        },\n        set value(newVal) {\n            setter(newVal);\n        }\n    };\n    def(ref, RefFlag, true);\n    def(ref, \"__v_isReadonly\" /* ReactiveFlags.IS_READONLY */, onlyGetter);\n    return ref;\n}\n\nvar mark;\nvar measure;\nif (process.env.NODE_ENV !== 'production') {\n    var perf_1 = inBrowser && window.performance;\n    /* istanbul ignore if */\n    if (perf_1 &&\n        // @ts-ignore\n        perf_1.mark &&\n        // @ts-ignore\n        perf_1.measure &&\n        // @ts-ignore\n        perf_1.clearMarks &&\n        // @ts-ignore\n        perf_1.clearMeasures) {\n        mark = function (tag) { return perf_1.mark(tag); };\n        measure = function (name, startTag, endTag) {\n            perf_1.measure(name, startTag, endTag);\n            perf_1.clearMarks(startTag);\n            perf_1.clearMarks(endTag);\n            // perf.clearMeasures(name)\n        };\n    }\n}\n\nvar normalizeEvent = cached(function (name) {\n    var passive = name.charAt(0) === '&';\n    name = passive ? name.slice(1) : name;\n    var once = name.charAt(0) === '~'; // Prefixed last, checked first\n    name = once ? name.slice(1) : name;\n    var capture = name.charAt(0) === '!';\n    name = capture ? name.slice(1) : name;\n    return {\n        name: name,\n        once: once,\n        capture: capture,\n        passive: passive\n    };\n});\nfunction createFnInvoker(fns, vm) {\n    function invoker() {\n        var fns = invoker.fns;\n        if (isArray(fns)) {\n            var cloned = fns.slice();\n            for (var i = 0; i < cloned.length; i++) {\n                invokeWithErrorHandling(cloned[i], null, arguments, vm, \"v-on handler\");\n            }\n        }\n        else {\n            // return handler return value for single handlers\n            return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\");\n        }\n    }\n    invoker.fns = fns;\n    return invoker;\n}\nfunction updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {\n    var name, cur, old, event;\n    for (name in on) {\n        cur = on[name];\n        old = oldOn[name];\n        event = normalizeEvent(name);\n        if (isUndef(cur)) {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2(\"Invalid handler for event \\\"\".concat(event.name, \"\\\": got \") + String(cur), vm);\n        }\n        else if (isUndef(old)) {\n            if (isUndef(cur.fns)) {\n                cur = on[name] = createFnInvoker(cur, vm);\n            }\n            if (isTrue(event.once)) {\n                cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n            }\n            add(event.name, cur, event.capture, event.passive, event.params);\n        }\n        else if (cur !== old) {\n            old.fns = cur;\n            on[name] = old;\n        }\n    }\n    for (name in oldOn) {\n        if (isUndef(on[name])) {\n            event = normalizeEvent(name);\n            remove(event.name, oldOn[name], event.capture);\n        }\n    }\n}\n\nfunction mergeVNodeHook(def, hookKey, hook) {\n    if (def instanceof VNode) {\n        def = def.data.hook || (def.data.hook = {});\n    }\n    var invoker;\n    var oldHook = def[hookKey];\n    function wrappedHook() {\n        hook.apply(this, arguments);\n        // important: remove merged hook to ensure it's called only once\n        // and prevent memory leak\n        remove$2(invoker.fns, wrappedHook);\n    }\n    if (isUndef(oldHook)) {\n        // no existing hook\n        invoker = createFnInvoker([wrappedHook]);\n    }\n    else {\n        /* istanbul ignore if */\n        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n            // already a merged invoker\n            invoker = oldHook;\n            invoker.fns.push(wrappedHook);\n        }\n        else {\n            // existing plain hook\n            invoker = createFnInvoker([oldHook, wrappedHook]);\n        }\n    }\n    invoker.merged = true;\n    def[hookKey] = invoker;\n}\n\nfunction extractPropsFromVNodeData(data, Ctor, tag) {\n    // we are only extracting raw values here.\n    // validation and default values are handled in the child\n    // component itself.\n    var propOptions = Ctor.options.props;\n    if (isUndef(propOptions)) {\n        return;\n    }\n    var res = {};\n    var attrs = data.attrs, props = data.props;\n    if (isDef(attrs) || isDef(props)) {\n        for (var key in propOptions) {\n            var altKey = hyphenate(key);\n            if (process.env.NODE_ENV !== 'production') {\n                var keyInLowerCase = key.toLowerCase();\n                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {\n                    tip(\"Prop \\\"\".concat(keyInLowerCase, \"\\\" is passed to component \") +\n                        \"\".concat(formatComponentName(\n                        // @ts-expect-error tag is string\n                        tag || Ctor), \", but the declared prop name is\") +\n                        \" \\\"\".concat(key, \"\\\". \") +\n                        \"Note that HTML attributes are case-insensitive and camelCased \" +\n                        \"props need to use their kebab-case equivalents when using in-DOM \" +\n                        \"templates. You should probably use \\\"\".concat(altKey, \"\\\" instead of \\\"\").concat(key, \"\\\".\"));\n                }\n            }\n            checkProp(res, props, key, altKey, true) ||\n                checkProp(res, attrs, key, altKey, false);\n        }\n    }\n    return res;\n}\nfunction checkProp(res, hash, key, altKey, preserve) {\n    if (isDef(hash)) {\n        if (hasOwn(hash, key)) {\n            res[key] = hash[key];\n            if (!preserve) {\n                delete hash[key];\n            }\n            return true;\n        }\n        else if (hasOwn(hash, altKey)) {\n            res[key] = hash[altKey];\n            if (!preserve) {\n                delete hash[altKey];\n            }\n            return true;\n        }\n    }\n    return false;\n}\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren(children) {\n    for (var i = 0; i < children.length; i++) {\n        if (isArray(children[i])) {\n            return Array.prototype.concat.apply([], children);\n        }\n    }\n    return children;\n}\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren(children) {\n    return isPrimitive(children)\n        ? [createTextVNode(children)]\n        : isArray(children)\n            ? normalizeArrayChildren(children)\n            : undefined;\n}\nfunction isTextNode(node) {\n    return isDef(node) && isDef(node.text) && isFalse(node.isComment);\n}\nfunction normalizeArrayChildren(children, nestedIndex) {\n    var res = [];\n    var i, c, lastIndex, last;\n    for (i = 0; i < children.length; i++) {\n        c = children[i];\n        if (isUndef(c) || typeof c === 'boolean')\n            continue;\n        lastIndex = res.length - 1;\n        last = res[lastIndex];\n        //  nested\n        if (isArray(c)) {\n            if (c.length > 0) {\n                c = normalizeArrayChildren(c, \"\".concat(nestedIndex || '', \"_\").concat(i));\n                // merge adjacent text nodes\n                if (isTextNode(c[0]) && isTextNode(last)) {\n                    res[lastIndex] = createTextVNode(last.text + c[0].text);\n                    c.shift();\n                }\n                res.push.apply(res, c);\n            }\n        }\n        else if (isPrimitive(c)) {\n            if (isTextNode(last)) {\n                // merge adjacent text nodes\n                // this is necessary for SSR hydration because text nodes are\n                // essentially merged when rendered to HTML strings\n                res[lastIndex] = createTextVNode(last.text + c);\n            }\n            else if (c !== '') {\n                // convert primitive to vnode\n                res.push(createTextVNode(c));\n            }\n        }\n        else {\n            if (isTextNode(c) && isTextNode(last)) {\n                // merge adjacent text nodes\n                res[lastIndex] = createTextVNode(last.text + c.text);\n            }\n            else {\n                // default key for nested array children (likely generated by v-for)\n                if (isTrue(children._isVList) &&\n                    isDef(c.tag) &&\n                    isUndef(c.key) &&\n                    isDef(nestedIndex)) {\n                    c.key = \"__vlist\".concat(nestedIndex, \"_\").concat(i, \"__\");\n                }\n                res.push(c);\n            }\n        }\n    }\n    return res;\n}\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {\n    if (isArray(data) || isPrimitive(data)) {\n        normalizationType = children;\n        children = data;\n        data = undefined;\n    }\n    if (isTrue(alwaysNormalize)) {\n        normalizationType = ALWAYS_NORMALIZE;\n    }\n    return _createElement(context, tag, data, children, normalizationType);\n}\nfunction _createElement(context, tag, data, children, normalizationType) {\n    if (isDef(data) && isDef(data.__ob__)) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2(\"Avoid using observed data object as vnode data: \".concat(JSON.stringify(data), \"\\n\") + 'Always create fresh vnode data objects in each render!', context);\n        return createEmptyVNode();\n    }\n    // object syntax in v-bind\n    if (isDef(data) && isDef(data.is)) {\n        tag = data.is;\n    }\n    if (!tag) {\n        // in case of component :is set to falsy value\n        return createEmptyVNode();\n    }\n    // warn against non-primitive key\n    if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {\n        warn$2('Avoid using non-primitive value as key, ' +\n            'use string/number value instead.', context);\n    }\n    // support single function children as default scoped slot\n    if (isArray(children) && isFunction(children[0])) {\n        data = data || {};\n        data.scopedSlots = { default: children[0] };\n        children.length = 0;\n    }\n    if (normalizationType === ALWAYS_NORMALIZE) {\n        children = normalizeChildren(children);\n    }\n    else if (normalizationType === SIMPLE_NORMALIZE) {\n        children = simpleNormalizeChildren(children);\n    }\n    var vnode, ns;\n    if (typeof tag === 'string') {\n        var Ctor = void 0;\n        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n        if (config.isReservedTag(tag)) {\n            // platform built-in elements\n            if (process.env.NODE_ENV !== 'production' &&\n                isDef(data) &&\n                isDef(data.nativeOn) &&\n                data.tag !== 'component') {\n                warn$2(\"The .native modifier for v-on is only valid on components but it was used on <\".concat(tag, \">.\"), context);\n            }\n            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);\n        }\n        else if ((!data || !data.pre) &&\n            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {\n            // component\n            vnode = createComponent(Ctor, data, context, children, tag);\n        }\n        else {\n            // unknown or unlisted namespaced elements\n            // check at runtime because it may get assigned a namespace when its\n            // parent normalizes children\n            vnode = new VNode(tag, data, children, undefined, undefined, context);\n        }\n    }\n    else {\n        // direct component options / constructor\n        vnode = createComponent(tag, data, context, children);\n    }\n    if (isArray(vnode)) {\n        return vnode;\n    }\n    else if (isDef(vnode)) {\n        if (isDef(ns))\n            applyNS(vnode, ns);\n        if (isDef(data))\n            registerDeepBindings(data);\n        return vnode;\n    }\n    else {\n        return createEmptyVNode();\n    }\n}\nfunction applyNS(vnode, ns, force) {\n    vnode.ns = ns;\n    if (vnode.tag === 'foreignObject') {\n        // use default namespace inside foreignObject\n        ns = undefined;\n        force = true;\n    }\n    if (isDef(vnode.children)) {\n        for (var i = 0, l = vnode.children.length; i < l; i++) {\n            var child = vnode.children[i];\n            if (isDef(child.tag) &&\n                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n                applyNS(child, ns, force);\n            }\n        }\n    }\n}\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings(data) {\n    if (isObject(data.style)) {\n        traverse(data.style);\n    }\n    if (isObject(data.class)) {\n        traverse(data.class);\n    }\n}\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList(val, render) {\n    var ret = null, i, l, keys, key;\n    if (isArray(val) || typeof val === 'string') {\n        ret = new Array(val.length);\n        for (i = 0, l = val.length; i < l; i++) {\n            ret[i] = render(val[i], i);\n        }\n    }\n    else if (typeof val === 'number') {\n        ret = new Array(val);\n        for (i = 0; i < val; i++) {\n            ret[i] = render(i + 1, i);\n        }\n    }\n    else if (isObject(val)) {\n        if (hasSymbol && val[Symbol.iterator]) {\n            ret = [];\n            var iterator = val[Symbol.iterator]();\n            var result = iterator.next();\n            while (!result.done) {\n                ret.push(render(result.value, ret.length));\n                result = iterator.next();\n            }\n        }\n        else {\n            keys = Object.keys(val);\n            ret = new Array(keys.length);\n            for (i = 0, l = keys.length; i < l; i++) {\n                key = keys[i];\n                ret[i] = render(val[key], key, i);\n            }\n        }\n    }\n    if (!isDef(ret)) {\n        ret = [];\n    }\n    ret._isVList = true;\n    return ret;\n}\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot(name, fallbackRender, props, bindObject) {\n    var scopedSlotFn = this.$scopedSlots[name];\n    var nodes;\n    if (scopedSlotFn) {\n        // scoped slot\n        props = props || {};\n        if (bindObject) {\n            if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {\n                warn$2('slot v-bind without argument expects an Object', this);\n            }\n            props = extend(extend({}, bindObject), props);\n        }\n        nodes =\n            scopedSlotFn(props) ||\n                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\n    }\n    else {\n        nodes =\n            this.$slots[name] ||\n                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);\n    }\n    var target = props && props.slot;\n    if (target) {\n        return this.$createElement('template', { slot: target }, nodes);\n    }\n    else {\n        return nodes;\n    }\n}\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter(id) {\n    return resolveAsset(this.$options, 'filters', id, true) || identity;\n}\n\nfunction isKeyNotMatch(expect, actual) {\n    if (isArray(expect)) {\n        return expect.indexOf(actual) === -1;\n    }\n    else {\n        return expect !== actual;\n    }\n}\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {\n    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n        return isKeyNotMatch(builtInKeyName, eventKeyName);\n    }\n    else if (mappedKeyCode) {\n        return isKeyNotMatch(mappedKeyCode, eventKeyCode);\n    }\n    else if (eventKeyName) {\n        return hyphenate(eventKeyName) !== key;\n    }\n    return eventKeyCode === undefined;\n}\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps(data, tag, value, asProp, isSync) {\n    if (value) {\n        if (!isObject(value)) {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2('v-bind without argument expects an Object or Array value', this);\n        }\n        else {\n            if (isArray(value)) {\n                value = toObject(value);\n            }\n            var hash = void 0;\n            var _loop_1 = function (key) {\n                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {\n                    hash = data;\n                }\n                else {\n                    var type = data.attrs && data.attrs.type;\n                    hash =\n                        asProp || config.mustUseProp(tag, type, key)\n                            ? data.domProps || (data.domProps = {})\n                            : data.attrs || (data.attrs = {});\n                }\n                var camelizedKey = camelize(key);\n                var hyphenatedKey = hyphenate(key);\n                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n                    hash[key] = value[key];\n                    if (isSync) {\n                        var on = data.on || (data.on = {});\n                        on[\"update:\".concat(key)] = function ($event) {\n                            value[key] = $event;\n                        };\n                    }\n                }\n            };\n            for (var key in value) {\n                _loop_1(key);\n            }\n        }\n    }\n    return data;\n}\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic(index, isInFor) {\n    var cached = this._staticTrees || (this._staticTrees = []);\n    var tree = cached[index];\n    // if has already-rendered static tree and not inside v-for,\n    // we can reuse the same tree.\n    if (tree && !isInFor) {\n        return tree;\n    }\n    // otherwise, render a fresh tree.\n    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates\n    );\n    markStatic$1(tree, \"__static__\".concat(index), false);\n    return tree;\n}\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce(tree, index, key) {\n    markStatic$1(tree, \"__once__\".concat(index).concat(key ? \"_\".concat(key) : \"\"), true);\n    return tree;\n}\nfunction markStatic$1(tree, key, isOnce) {\n    if (isArray(tree)) {\n        for (var i = 0; i < tree.length; i++) {\n            if (tree[i] && typeof tree[i] !== 'string') {\n                markStaticNode(tree[i], \"\".concat(key, \"_\").concat(i), isOnce);\n            }\n        }\n    }\n    else {\n        markStaticNode(tree, key, isOnce);\n    }\n}\nfunction markStaticNode(node, key, isOnce) {\n    node.isStatic = true;\n    node.key = key;\n    node.isOnce = isOnce;\n}\n\nfunction bindObjectListeners(data, value) {\n    if (value) {\n        if (!isPlainObject(value)) {\n            process.env.NODE_ENV !== 'production' && warn$2('v-on without argument expects an Object value', this);\n        }\n        else {\n            var on = (data.on = data.on ? extend({}, data.on) : {});\n            for (var key in value) {\n                var existing = on[key];\n                var ours = value[key];\n                on[key] = existing ? [].concat(existing, ours) : ours;\n            }\n        }\n    }\n    return data;\n}\n\nfunction resolveScopedSlots(fns, res, \n// the following are added in 2.6\nhasDynamicKeys, contentHashKey) {\n    res = res || { $stable: !hasDynamicKeys };\n    for (var i = 0; i < fns.length; i++) {\n        var slot = fns[i];\n        if (isArray(slot)) {\n            resolveScopedSlots(slot, res, hasDynamicKeys);\n        }\n        else if (slot) {\n            // marker for reverse proxying v-slot without scope on this.$slots\n            // @ts-expect-error\n            if (slot.proxy) {\n                // @ts-expect-error\n                slot.fn.proxy = true;\n            }\n            res[slot.key] = slot.fn;\n        }\n    }\n    if (contentHashKey) {\n        res.$key = contentHashKey;\n    }\n    return res;\n}\n\n// helper to process dynamic keys for dynamic arguments in v-bind and v-on.\nfunction bindDynamicKeys(baseObj, values) {\n    for (var i = 0; i < values.length; i += 2) {\n        var key = values[i];\n        if (typeof key === 'string' && key) {\n            baseObj[values[i]] = values[i + 1];\n        }\n        else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {\n            // null is a special value for explicitly removing a binding\n            warn$2(\"Invalid value for dynamic directive argument (expected string or null): \".concat(key), this);\n        }\n    }\n    return baseObj;\n}\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier(value, symbol) {\n    return typeof value === 'string' ? symbol + value : value;\n}\n\nfunction installRenderHelpers(target) {\n    target._o = markOnce;\n    target._n = toNumber;\n    target._s = toString;\n    target._l = renderList;\n    target._t = renderSlot;\n    target._q = looseEqual;\n    target._i = looseIndexOf;\n    target._m = renderStatic;\n    target._f = resolveFilter;\n    target._k = checkKeyCodes;\n    target._b = bindObjectProps;\n    target._v = createTextVNode;\n    target._e = createEmptyVNode;\n    target._u = resolveScopedSlots;\n    target._g = bindObjectListeners;\n    target._d = bindDynamicKeys;\n    target._p = prependModifier;\n}\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots(children, context) {\n    if (!children || !children.length) {\n        return {};\n    }\n    var slots = {};\n    for (var i = 0, l = children.length; i < l; i++) {\n        var child = children[i];\n        var data = child.data;\n        // remove slot attribute if the node is resolved as a Vue slot node\n        if (data && data.attrs && data.attrs.slot) {\n            delete data.attrs.slot;\n        }\n        // named slots should only be respected if the vnode was rendered in the\n        // same context.\n        if ((child.context === context || child.fnContext === context) &&\n            data &&\n            data.slot != null) {\n            var name_1 = data.slot;\n            var slot = slots[name_1] || (slots[name_1] = []);\n            if (child.tag === 'template') {\n                slot.push.apply(slot, child.children || []);\n            }\n            else {\n                slot.push(child);\n            }\n        }\n        else {\n            (slots.default || (slots.default = [])).push(child);\n        }\n    }\n    // ignore slots that contains only whitespace\n    for (var name_2 in slots) {\n        if (slots[name_2].every(isWhitespace)) {\n            delete slots[name_2];\n        }\n    }\n    return slots;\n}\nfunction isWhitespace(node) {\n    return (node.isComment && !node.asyncFactory) || node.text === ' ';\n}\n\nfunction isAsyncPlaceholder(node) {\n    // @ts-expect-error not really boolean type\n    return node.isComment && node.asyncFactory;\n}\n\nfunction normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {\n    var res;\n    var hasNormalSlots = Object.keys(normalSlots).length > 0;\n    var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;\n    var key = scopedSlots && scopedSlots.$key;\n    if (!scopedSlots) {\n        res = {};\n    }\n    else if (scopedSlots._normalized) {\n        // fast path 1: child component re-render only, parent did not change\n        return scopedSlots._normalized;\n    }\n    else if (isStable &&\n        prevScopedSlots &&\n        prevScopedSlots !== emptyObject &&\n        key === prevScopedSlots.$key &&\n        !hasNormalSlots &&\n        !prevScopedSlots.$hasNormal) {\n        // fast path 2: stable scoped slots w/ no normal slots to proxy,\n        // only need to normalize once\n        return prevScopedSlots;\n    }\n    else {\n        res = {};\n        for (var key_1 in scopedSlots) {\n            if (scopedSlots[key_1] && key_1[0] !== '$') {\n                res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);\n            }\n        }\n    }\n    // expose normal slots on scopedSlots\n    for (var key_2 in normalSlots) {\n        if (!(key_2 in res)) {\n            res[key_2] = proxyNormalSlot(normalSlots, key_2);\n        }\n    }\n    // avoriaz seems to mock a non-extensible $scopedSlots object\n    // and when that is passed down this would cause an error\n    if (scopedSlots && Object.isExtensible(scopedSlots)) {\n        scopedSlots._normalized = res;\n    }\n    def(res, '$stable', isStable);\n    def(res, '$key', key);\n    def(res, '$hasNormal', hasNormalSlots);\n    return res;\n}\nfunction normalizeScopedSlot(vm, normalSlots, key, fn) {\n    var normalized = function () {\n        var cur = currentInstance;\n        setCurrentInstance(vm);\n        var res = arguments.length ? fn.apply(null, arguments) : fn({});\n        res =\n            res && typeof res === 'object' && !isArray(res)\n                ? [res] // single vnode\n                : normalizeChildren(res);\n        var vnode = res && res[0];\n        setCurrentInstance(cur);\n        return res &&\n            (!vnode ||\n                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391\n            ? undefined\n            : res;\n    };\n    // this is a slot using the new v-slot syntax without scope. although it is\n    // compiled as a scoped slot, render fn users would expect it to be present\n    // on this.$slots because the usage is semantically a normal slot.\n    if (fn.proxy) {\n        Object.defineProperty(normalSlots, key, {\n            get: normalized,\n            enumerable: true,\n            configurable: true\n        });\n    }\n    return normalized;\n}\nfunction proxyNormalSlot(slots, key) {\n    return function () { return slots[key]; };\n}\n\nfunction initSetup(vm) {\n    var options = vm.$options;\n    var setup = options.setup;\n    if (setup) {\n        var ctx = (vm._setupContext = createSetupContext(vm));\n        setCurrentInstance(vm);\n        pushTarget();\n        var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, \"setup\");\n        popTarget();\n        setCurrentInstance();\n        if (isFunction(setupResult)) {\n            // render function\n            // @ts-ignore\n            options.render = setupResult;\n        }\n        else if (isObject(setupResult)) {\n            // bindings\n            if (process.env.NODE_ENV !== 'production' && setupResult instanceof VNode) {\n                warn$2(\"setup() should not return VNodes directly - \" +\n                    \"return a render function instead.\");\n            }\n            vm._setupState = setupResult;\n            // __sfc indicates compiled bindings from <script setup>\n            if (!setupResult.__sfc) {\n                for (var key in setupResult) {\n                    if (!isReserved(key)) {\n                        proxyWithRefUnwrap(vm, setupResult, key);\n                    }\n                    else if (process.env.NODE_ENV !== 'production') {\n                        warn$2(\"Avoid using variables that start with _ or $ in setup().\");\n                    }\n                }\n            }\n            else {\n                // exposed for compiled render fn\n                var proxy = (vm._setupProxy = {});\n                for (var key in setupResult) {\n                    if (key !== '__sfc') {\n                        proxyWithRefUnwrap(proxy, setupResult, key);\n                    }\n                }\n            }\n        }\n        else if (process.env.NODE_ENV !== 'production' && setupResult !== undefined) {\n            warn$2(\"setup() should return an object. Received: \".concat(setupResult === null ? 'null' : typeof setupResult));\n        }\n    }\n}\nfunction createSetupContext(vm) {\n    var exposeCalled = false;\n    return {\n        get attrs() {\n            if (!vm._attrsProxy) {\n                var proxy = (vm._attrsProxy = {});\n                def(proxy, '_v_attr_proxy', true);\n                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');\n            }\n            return vm._attrsProxy;\n        },\n        get listeners() {\n            if (!vm._listenersProxy) {\n                var proxy = (vm._listenersProxy = {});\n                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');\n            }\n            return vm._listenersProxy;\n        },\n        get slots() {\n            return initSlotsProxy(vm);\n        },\n        emit: bind$1(vm.$emit, vm),\n        expose: function (exposed) {\n            if (process.env.NODE_ENV !== 'production') {\n                if (exposeCalled) {\n                    warn$2(\"expose() should be called only once per setup().\", vm);\n                }\n                exposeCalled = true;\n            }\n            if (exposed) {\n                Object.keys(exposed).forEach(function (key) {\n                    return proxyWithRefUnwrap(vm, exposed, key);\n                });\n            }\n        }\n    };\n}\nfunction syncSetupProxy(to, from, prev, instance, type) {\n    var changed = false;\n    for (var key in from) {\n        if (!(key in to)) {\n            changed = true;\n            defineProxyAttr(to, key, instance, type);\n        }\n        else if (from[key] !== prev[key]) {\n            changed = true;\n        }\n    }\n    for (var key in to) {\n        if (!(key in from)) {\n            changed = true;\n            delete to[key];\n        }\n    }\n    return changed;\n}\nfunction defineProxyAttr(proxy, key, instance, type) {\n    Object.defineProperty(proxy, key, {\n        enumerable: true,\n        configurable: true,\n        get: function () {\n            return instance[type][key];\n        }\n    });\n}\nfunction initSlotsProxy(vm) {\n    if (!vm._slotsProxy) {\n        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);\n    }\n    return vm._slotsProxy;\n}\nfunction syncSetupSlots(to, from) {\n    for (var key in from) {\n        to[key] = from[key];\n    }\n    for (var key in to) {\n        if (!(key in from)) {\n            delete to[key];\n        }\n    }\n}\n/**\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useSlots() {\n    return getContext().slots;\n}\n/**\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useAttrs() {\n    return getContext().attrs;\n}\n/**\n * Vue 2 only\n * @internal use manual type def because public setup context type relies on\n * legacy VNode types\n */\nfunction useListeners() {\n    return getContext().listeners;\n}\nfunction getContext() {\n    if (process.env.NODE_ENV !== 'production' && !currentInstance) {\n        warn$2(\"useContext() called without active instance.\");\n    }\n    var vm = currentInstance;\n    return vm._setupContext || (vm._setupContext = createSetupContext(vm));\n}\n/**\n * Runtime helper for merging default declarations. Imported by compiled code\n * only.\n * @internal\n */\nfunction mergeDefaults(raw, defaults) {\n    var props = isArray(raw)\n        ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})\n        : raw;\n    for (var key in defaults) {\n        var opt = props[key];\n        if (opt) {\n            if (isArray(opt) || isFunction(opt)) {\n                props[key] = { type: opt, default: defaults[key] };\n            }\n            else {\n                opt.default = defaults[key];\n            }\n        }\n        else if (opt === null) {\n            props[key] = { default: defaults[key] };\n        }\n        else if (process.env.NODE_ENV !== 'production') {\n            warn$2(\"props default key \\\"\".concat(key, \"\\\" has no corresponding declaration.\"));\n        }\n    }\n    return props;\n}\n\nfunction initRender(vm) {\n    vm._vnode = null; // the root of the child tree\n    vm._staticTrees = null; // v-once cached trees\n    var options = vm.$options;\n    var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree\n    var renderContext = parentVnode && parentVnode.context;\n    vm.$slots = resolveSlots(options._renderChildren, renderContext);\n    vm.$scopedSlots = parentVnode\n        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)\n        : emptyObject;\n    // bind the createElement fn to this instance\n    // so that we get proper render context inside it.\n    // args order: tag, data, children, normalizationType, alwaysNormalize\n    // internal version is used by render functions compiled from templates\n    // @ts-expect-error\n    vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };\n    // normalization is always applied for the public version, used in\n    // user-written render functions.\n    // @ts-expect-error\n    vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };\n    // $attrs & $listeners are exposed for easier HOC creation.\n    // they need to be reactive so that HOCs using them are always updated\n    var parentData = parentVnode && parentVnode.data;\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== 'production') {\n        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {\n            !isUpdatingChildComponent && warn$2(\"$attrs is readonly.\", vm);\n        }, true);\n        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {\n            !isUpdatingChildComponent && warn$2(\"$listeners is readonly.\", vm);\n        }, true);\n    }\n    else {\n        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, null, true);\n        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n    }\n}\nvar currentRenderingInstance = null;\nfunction renderMixin(Vue) {\n    // install runtime convenience helpers\n    installRenderHelpers(Vue.prototype);\n    Vue.prototype.$nextTick = function (fn) {\n        return nextTick(fn, this);\n    };\n    Vue.prototype._render = function () {\n        var vm = this;\n        var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;\n        if (_parentVnode && vm._isMounted) {\n            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);\n            if (vm._slotsProxy) {\n                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);\n            }\n        }\n        // set parent vnode. this allows render functions to have access\n        // to the data on the placeholder node.\n        vm.$vnode = _parentVnode;\n        // render self\n        var prevInst = currentInstance;\n        var prevRenderInst = currentRenderingInstance;\n        var vnode;\n        try {\n            setCurrentInstance(vm);\n            currentRenderingInstance = vm;\n            vnode = render.call(vm._renderProxy, vm.$createElement);\n        }\n        catch (e) {\n            handleError(e, vm, \"render\");\n            // return error render result,\n            // or previous vnode to prevent render error causing blank component\n            /* istanbul ignore else */\n            if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {\n                try {\n                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n                }\n                catch (e) {\n                    handleError(e, vm, \"renderError\");\n                    vnode = vm._vnode;\n                }\n            }\n            else {\n                vnode = vm._vnode;\n            }\n        }\n        finally {\n            currentRenderingInstance = prevRenderInst;\n            setCurrentInstance(prevInst);\n        }\n        // if the returned array contains only a single node, allow it\n        if (isArray(vnode) && vnode.length === 1) {\n            vnode = vnode[0];\n        }\n        // return empty vnode in case the render function errored out\n        if (!(vnode instanceof VNode)) {\n            if (process.env.NODE_ENV !== 'production' && isArray(vnode)) {\n                warn$2('Multiple root nodes returned from render function. Render function ' +\n                    'should return a single root node.', vm);\n            }\n            vnode = createEmptyVNode();\n        }\n        // set parent\n        vnode.parent = _parentVnode;\n        return vnode;\n    };\n}\n\nfunction ensureCtor(comp, base) {\n    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {\n        comp = comp.default;\n    }\n    return isObject(comp) ? base.extend(comp) : comp;\n}\nfunction createAsyncPlaceholder(factory, data, context, children, tag) {\n    var node = createEmptyVNode();\n    node.asyncFactory = factory;\n    node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n    return node;\n}\nfunction resolveAsyncComponent(factory, baseCtor) {\n    if (isTrue(factory.error) && isDef(factory.errorComp)) {\n        return factory.errorComp;\n    }\n    if (isDef(factory.resolved)) {\n        return factory.resolved;\n    }\n    var owner = currentRenderingInstance;\n    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n        // already pending\n        factory.owners.push(owner);\n    }\n    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n        return factory.loadingComp;\n    }\n    if (owner && !isDef(factory.owners)) {\n        var owners_1 = (factory.owners = [owner]);\n        var sync_1 = true;\n        var timerLoading_1 = null;\n        var timerTimeout_1 = null;\n        owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });\n        var forceRender_1 = function (renderCompleted) {\n            for (var i = 0, l = owners_1.length; i < l; i++) {\n                owners_1[i].$forceUpdate();\n            }\n            if (renderCompleted) {\n                owners_1.length = 0;\n                if (timerLoading_1 !== null) {\n                    clearTimeout(timerLoading_1);\n                    timerLoading_1 = null;\n                }\n                if (timerTimeout_1 !== null) {\n                    clearTimeout(timerTimeout_1);\n                    timerTimeout_1 = null;\n                }\n            }\n        };\n        var resolve = once(function (res) {\n            // cache resolved\n            factory.resolved = ensureCtor(res, baseCtor);\n            // invoke callbacks only if this is not a synchronous resolve\n            // (async resolves are shimmed as synchronous during SSR)\n            if (!sync_1) {\n                forceRender_1(true);\n            }\n            else {\n                owners_1.length = 0;\n            }\n        });\n        var reject_1 = once(function (reason) {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2(\"Failed to resolve async component: \".concat(String(factory)) +\n                    (reason ? \"\\nReason: \".concat(reason) : ''));\n            if (isDef(factory.errorComp)) {\n                factory.error = true;\n                forceRender_1(true);\n            }\n        });\n        var res_1 = factory(resolve, reject_1);\n        if (isObject(res_1)) {\n            if (isPromise(res_1)) {\n                // () => Promise\n                if (isUndef(factory.resolved)) {\n                    res_1.then(resolve, reject_1);\n                }\n            }\n            else if (isPromise(res_1.component)) {\n                res_1.component.then(resolve, reject_1);\n                if (isDef(res_1.error)) {\n                    factory.errorComp = ensureCtor(res_1.error, baseCtor);\n                }\n                if (isDef(res_1.loading)) {\n                    factory.loadingComp = ensureCtor(res_1.loading, baseCtor);\n                    if (res_1.delay === 0) {\n                        factory.loading = true;\n                    }\n                    else {\n                        // @ts-expect-error NodeJS timeout type\n                        timerLoading_1 = setTimeout(function () {\n                            timerLoading_1 = null;\n                            if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                                factory.loading = true;\n                                forceRender_1(false);\n                            }\n                        }, res_1.delay || 200);\n                    }\n                }\n                if (isDef(res_1.timeout)) {\n                    // @ts-expect-error NodeJS timeout type\n                    timerTimeout_1 = setTimeout(function () {\n                        timerTimeout_1 = null;\n                        if (isUndef(factory.resolved)) {\n                            reject_1(process.env.NODE_ENV !== 'production' ? \"timeout (\".concat(res_1.timeout, \"ms)\") : null);\n                        }\n                    }, res_1.timeout);\n                }\n            }\n        }\n        sync_1 = false;\n        // return in case resolved synchronously\n        return factory.loading ? factory.loadingComp : factory.resolved;\n    }\n}\n\nfunction getFirstComponentChild(children) {\n    if (isArray(children)) {\n        for (var i = 0; i < children.length; i++) {\n            var c = children[i];\n            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n                return c;\n            }\n        }\n    }\n}\n\nfunction initEvents(vm) {\n    vm._events = Object.create(null);\n    vm._hasHookEvent = false;\n    // init parent attached events\n    var listeners = vm.$options._parentListeners;\n    if (listeners) {\n        updateComponentListeners(vm, listeners);\n    }\n}\nvar target$1;\nfunction add$1(event, fn) {\n    target$1.$on(event, fn);\n}\nfunction remove$1(event, fn) {\n    target$1.$off(event, fn);\n}\nfunction createOnceHandler$1(event, fn) {\n    var _target = target$1;\n    return function onceHandler() {\n        var res = fn.apply(null, arguments);\n        if (res !== null) {\n            _target.$off(event, onceHandler);\n        }\n    };\n}\nfunction updateComponentListeners(vm, listeners, oldListeners) {\n    target$1 = vm;\n    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);\n    target$1 = undefined;\n}\nfunction eventsMixin(Vue) {\n    var hookRE = /^hook:/;\n    Vue.prototype.$on = function (event, fn) {\n        var vm = this;\n        if (isArray(event)) {\n            for (var i = 0, l = event.length; i < l; i++) {\n                vm.$on(event[i], fn);\n            }\n        }\n        else {\n            (vm._events[event] || (vm._events[event] = [])).push(fn);\n            // optimize hook:event cost by using a boolean flag marked at registration\n            // instead of a hash lookup\n            if (hookRE.test(event)) {\n                vm._hasHookEvent = true;\n            }\n        }\n        return vm;\n    };\n    Vue.prototype.$once = function (event, fn) {\n        var vm = this;\n        function on() {\n            vm.$off(event, on);\n            fn.apply(vm, arguments);\n        }\n        on.fn = fn;\n        vm.$on(event, on);\n        return vm;\n    };\n    Vue.prototype.$off = function (event, fn) {\n        var vm = this;\n        // all\n        if (!arguments.length) {\n            vm._events = Object.create(null);\n            return vm;\n        }\n        // array of events\n        if (isArray(event)) {\n            for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {\n                vm.$off(event[i_1], fn);\n            }\n            return vm;\n        }\n        // specific event\n        var cbs = vm._events[event];\n        if (!cbs) {\n            return vm;\n        }\n        if (!fn) {\n            vm._events[event] = null;\n            return vm;\n        }\n        // specific handler\n        var cb;\n        var i = cbs.length;\n        while (i--) {\n            cb = cbs[i];\n            if (cb === fn || cb.fn === fn) {\n                cbs.splice(i, 1);\n                break;\n            }\n        }\n        return vm;\n    };\n    Vue.prototype.$emit = function (event) {\n        var vm = this;\n        if (process.env.NODE_ENV !== 'production') {\n            var lowerCaseEvent = event.toLowerCase();\n            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n                tip(\"Event \\\"\".concat(lowerCaseEvent, \"\\\" is emitted in component \") +\n                    \"\".concat(formatComponentName(vm), \" but the handler is registered for \\\"\").concat(event, \"\\\". \") +\n                    \"Note that HTML attributes are case-insensitive and you cannot use \" +\n                    \"v-on to listen to camelCase events when using in-DOM templates. \" +\n                    \"You should probably use \\\"\".concat(hyphenate(event), \"\\\" instead of \\\"\").concat(event, \"\\\".\"));\n            }\n        }\n        var cbs = vm._events[event];\n        if (cbs) {\n            cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n            var args = toArray(arguments, 1);\n            var info = \"event handler for \\\"\".concat(event, \"\\\"\");\n            for (var i = 0, l = cbs.length; i < l; i++) {\n                invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n            }\n        }\n        return vm;\n    };\n}\n\nvar activeEffectScope;\nvar EffectScope = /** @class */ (function () {\n    function EffectScope(detached) {\n        if (detached === void 0) { detached = false; }\n        this.detached = detached;\n        /**\n         * @internal\n         */\n        this.active = true;\n        /**\n         * @internal\n         */\n        this.effects = [];\n        /**\n         * @internal\n         */\n        this.cleanups = [];\n        this.parent = activeEffectScope;\n        if (!detached && activeEffectScope) {\n            this.index =\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\n        }\n    }\n    EffectScope.prototype.run = function (fn) {\n        if (this.active) {\n            var currentEffectScope = activeEffectScope;\n            try {\n                activeEffectScope = this;\n                return fn();\n            }\n            finally {\n                activeEffectScope = currentEffectScope;\n            }\n        }\n        else if (process.env.NODE_ENV !== 'production') {\n            warn$2(\"cannot run an inactive effect scope.\");\n        }\n    };\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    EffectScope.prototype.on = function () {\n        activeEffectScope = this;\n    };\n    /**\n     * This should only be called on non-detached scopes\n     * @internal\n     */\n    EffectScope.prototype.off = function () {\n        activeEffectScope = this.parent;\n    };\n    EffectScope.prototype.stop = function (fromParent) {\n        if (this.active) {\n            var i = void 0, l = void 0;\n            for (i = 0, l = this.effects.length; i < l; i++) {\n                this.effects[i].teardown();\n            }\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\n                this.cleanups[i]();\n            }\n            if (this.scopes) {\n                for (i = 0, l = this.scopes.length; i < l; i++) {\n                    this.scopes[i].stop(true);\n                }\n            }\n            // nested scope, dereference from parent to avoid memory leaks\n            if (!this.detached && this.parent && !fromParent) {\n                // optimized O(1) removal\n                var last = this.parent.scopes.pop();\n                if (last && last !== this) {\n                    this.parent.scopes[this.index] = last;\n                    last.index = this.index;\n                }\n            }\n            this.parent = undefined;\n            this.active = false;\n        }\n    };\n    return EffectScope;\n}());\nfunction effectScope(detached) {\n    return new EffectScope(detached);\n}\n/**\n * @internal\n */\nfunction recordEffectScope(effect, scope) {\n    if (scope === void 0) { scope = activeEffectScope; }\n    if (scope && scope.active) {\n        scope.effects.push(effect);\n    }\n}\nfunction getCurrentScope() {\n    return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n    if (activeEffectScope) {\n        activeEffectScope.cleanups.push(fn);\n    }\n    else if (process.env.NODE_ENV !== 'production') {\n        warn$2(\"onScopeDispose() is called when there is no active effect scope\" +\n            \" to be associated with.\");\n    }\n}\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\nfunction setActiveInstance(vm) {\n    var prevActiveInstance = activeInstance;\n    activeInstance = vm;\n    return function () {\n        activeInstance = prevActiveInstance;\n    };\n}\nfunction initLifecycle(vm) {\n    var options = vm.$options;\n    // locate first non-abstract parent\n    var parent = options.parent;\n    if (parent && !options.abstract) {\n        while (parent.$options.abstract && parent.$parent) {\n            parent = parent.$parent;\n        }\n        parent.$children.push(vm);\n    }\n    vm.$parent = parent;\n    vm.$root = parent ? parent.$root : vm;\n    vm.$children = [];\n    vm.$refs = {};\n    vm._provided = parent ? parent._provided : Object.create(null);\n    vm._watcher = null;\n    vm._inactive = null;\n    vm._directInactive = false;\n    vm._isMounted = false;\n    vm._isDestroyed = false;\n    vm._isBeingDestroyed = false;\n}\nfunction lifecycleMixin(Vue) {\n    Vue.prototype._update = function (vnode, hydrating) {\n        var vm = this;\n        var prevEl = vm.$el;\n        var prevVnode = vm._vnode;\n        var restoreActiveInstance = setActiveInstance(vm);\n        vm._vnode = vnode;\n        // Vue.prototype.__patch__ is injected in entry points\n        // based on the rendering backend used.\n        if (!prevVnode) {\n            // initial render\n            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n        }\n        else {\n            // updates\n            vm.$el = vm.__patch__(prevVnode, vnode);\n        }\n        restoreActiveInstance();\n        // update __vue__ reference\n        if (prevEl) {\n            prevEl.__vue__ = null;\n        }\n        if (vm.$el) {\n            vm.$el.__vue__ = vm;\n        }\n        // if parent is an HOC, update its $el as well\n        var wrapper = vm;\n        while (wrapper &&\n            wrapper.$vnode &&\n            wrapper.$parent &&\n            wrapper.$vnode === wrapper.$parent._vnode) {\n            wrapper.$parent.$el = wrapper.$el;\n            wrapper = wrapper.$parent;\n        }\n        // updated hook is called by the scheduler to ensure that children are\n        // updated in a parent's updated hook.\n    };\n    Vue.prototype.$forceUpdate = function () {\n        var vm = this;\n        if (vm._watcher) {\n            vm._watcher.update();\n        }\n    };\n    Vue.prototype.$destroy = function () {\n        var vm = this;\n        if (vm._isBeingDestroyed) {\n            return;\n        }\n        callHook$1(vm, 'beforeDestroy');\n        vm._isBeingDestroyed = true;\n        // remove self from parent\n        var parent = vm.$parent;\n        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n            remove$2(parent.$children, vm);\n        }\n        // teardown scope. this includes both the render watcher and other\n        // watchers created\n        vm._scope.stop();\n        // remove reference from data ob\n        // frozen object may not have observer.\n        if (vm._data.__ob__) {\n            vm._data.__ob__.vmCount--;\n        }\n        // call the last hook...\n        vm._isDestroyed = true;\n        // invoke destroy hooks on current rendered tree\n        vm.__patch__(vm._vnode, null);\n        // fire destroyed hook\n        callHook$1(vm, 'destroyed');\n        // turn off all instance listeners.\n        vm.$off();\n        // remove __vue__ reference\n        if (vm.$el) {\n            vm.$el.__vue__ = null;\n        }\n        // release circular reference (#6759)\n        if (vm.$vnode) {\n            vm.$vnode.parent = null;\n        }\n    };\n}\nfunction mountComponent(vm, el, hydrating) {\n    vm.$el = el;\n    if (!vm.$options.render) {\n        // @ts-expect-error invalid type\n        vm.$options.render = createEmptyVNode;\n        if (process.env.NODE_ENV !== 'production') {\n            /* istanbul ignore if */\n            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n                vm.$options.el ||\n                el) {\n                warn$2('You are using the runtime-only build of Vue where the template ' +\n                    'compiler is not available. Either pre-compile the templates into ' +\n                    'render functions, or use the compiler-included build.', vm);\n            }\n            else {\n                warn$2('Failed to mount component: template or render function not defined.', vm);\n            }\n        }\n    }\n    callHook$1(vm, 'beforeMount');\n    var updateComponent;\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n        updateComponent = function () {\n            var name = vm._name;\n            var id = vm._uid;\n            var startTag = \"vue-perf-start:\".concat(id);\n            var endTag = \"vue-perf-end:\".concat(id);\n            mark(startTag);\n            var vnode = vm._render();\n            mark(endTag);\n            measure(\"vue \".concat(name, \" render\"), startTag, endTag);\n            mark(startTag);\n            vm._update(vnode, hydrating);\n            mark(endTag);\n            measure(\"vue \".concat(name, \" patch\"), startTag, endTag);\n        };\n    }\n    else {\n        updateComponent = function () {\n            vm._update(vm._render(), hydrating);\n        };\n    }\n    var watcherOptions = {\n        before: function () {\n            if (vm._isMounted && !vm._isDestroyed) {\n                callHook$1(vm, 'beforeUpdate');\n            }\n        }\n    };\n    if (process.env.NODE_ENV !== 'production') {\n        watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };\n        watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };\n    }\n    // we set this to vm._watcher inside the watcher's constructor\n    // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n    // component's mounted hook), which relies on vm._watcher being already defined\n    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);\n    hydrating = false;\n    // flush buffer for flush: \"pre\" watchers queued in setup()\n    var preWatchers = vm._preWatchers;\n    if (preWatchers) {\n        for (var i = 0; i < preWatchers.length; i++) {\n            preWatchers[i].run();\n        }\n    }\n    // manually mounted instance, call mounted on self\n    // mounted is called for render-created child components in its inserted hook\n    if (vm.$vnode == null) {\n        vm._isMounted = true;\n        callHook$1(vm, 'mounted');\n    }\n    return vm;\n}\nfunction updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {\n    if (process.env.NODE_ENV !== 'production') {\n        isUpdatingChildComponent = true;\n    }\n    // determine whether component has slot children\n    // we need to do this before overwriting $options._renderChildren.\n    // check if there are dynamic scopedSlots (hand-written or compiled but with\n    // dynamic slot names). Static scoped slots compiled from template has the\n    // \"$stable\" marker.\n    var newScopedSlots = parentVnode.data.scopedSlots;\n    var oldScopedSlots = vm.$scopedSlots;\n    var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||\n        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||\n        (!newScopedSlots && vm.$scopedSlots.$key));\n    // Any static slot children from the parent may have changed during parent's\n    // update. Dynamic scoped slots may also have changed. In such cases, a forced\n    // update is necessary to ensure correctness.\n    var needsForceUpdate = !!(renderChildren || // has new static slots\n        vm.$options._renderChildren || // has old static slots\n        hasDynamicScopedSlot);\n    var prevVNode = vm.$vnode;\n    vm.$options._parentVnode = parentVnode;\n    vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n    if (vm._vnode) {\n        // update child tree's parent\n        vm._vnode.parent = parentVnode;\n    }\n    vm.$options._renderChildren = renderChildren;\n    // update $attrs and $listeners hash\n    // these are also reactive so they may trigger child update if the child\n    // used them during render\n    var attrs = parentVnode.data.attrs || emptyObject;\n    if (vm._attrsProxy) {\n        // force update if attrs are accessed and has changed since it may be\n        // passed to a child component.\n        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {\n            needsForceUpdate = true;\n        }\n    }\n    vm.$attrs = attrs;\n    // update listeners\n    listeners = listeners || emptyObject;\n    var prevListeners = vm.$options._parentListeners;\n    if (vm._listenersProxy) {\n        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');\n    }\n    vm.$listeners = vm.$options._parentListeners = listeners;\n    updateComponentListeners(vm, listeners, prevListeners);\n    // update props\n    if (propsData && vm.$options.props) {\n        toggleObserving(false);\n        var props = vm._props;\n        var propKeys = vm.$options._propKeys || [];\n        for (var i = 0; i < propKeys.length; i++) {\n            var key = propKeys[i];\n            var propOptions = vm.$options.props; // wtf flow?\n            props[key] = validateProp(key, propOptions, propsData, vm);\n        }\n        toggleObserving(true);\n        // keep a copy of raw propsData\n        vm.$options.propsData = propsData;\n    }\n    // resolve slots + force update if has children\n    if (needsForceUpdate) {\n        vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n        vm.$forceUpdate();\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        isUpdatingChildComponent = false;\n    }\n}\nfunction isInInactiveTree(vm) {\n    while (vm && (vm = vm.$parent)) {\n        if (vm._inactive)\n            return true;\n    }\n    return false;\n}\nfunction activateChildComponent(vm, direct) {\n    if (direct) {\n        vm._directInactive = false;\n        if (isInInactiveTree(vm)) {\n            return;\n        }\n    }\n    else if (vm._directInactive) {\n        return;\n    }\n    if (vm._inactive || vm._inactive === null) {\n        vm._inactive = false;\n        for (var i = 0; i < vm.$children.length; i++) {\n            activateChildComponent(vm.$children[i]);\n        }\n        callHook$1(vm, 'activated');\n    }\n}\nfunction deactivateChildComponent(vm, direct) {\n    if (direct) {\n        vm._directInactive = true;\n        if (isInInactiveTree(vm)) {\n            return;\n        }\n    }\n    if (!vm._inactive) {\n        vm._inactive = true;\n        for (var i = 0; i < vm.$children.length; i++) {\n            deactivateChildComponent(vm.$children[i]);\n        }\n        callHook$1(vm, 'deactivated');\n    }\n}\nfunction callHook$1(vm, hook, args, setContext) {\n    if (setContext === void 0) { setContext = true; }\n    // #7573 disable dep collection when invoking lifecycle hooks\n    pushTarget();\n    var prevInst = currentInstance;\n    var prevScope = getCurrentScope();\n    setContext && setCurrentInstance(vm);\n    var handlers = vm.$options[hook];\n    var info = \"\".concat(hook, \" hook\");\n    if (handlers) {\n        for (var i = 0, j = handlers.length; i < j; i++) {\n            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);\n        }\n    }\n    if (vm._hasHookEvent) {\n        vm.$emit('hook:' + hook);\n    }\n    if (setContext) {\n        setCurrentInstance(prevInst);\n        prevScope && prevScope.on();\n    }\n    popTarget();\n}\n\nvar MAX_UPDATE_COUNT = 100;\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index$1 = 0;\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState() {\n    index$1 = queue.length = activatedChildren.length = 0;\n    has = {};\n    if (process.env.NODE_ENV !== 'production') {\n        circular = {};\n    }\n    waiting = flushing = false;\n}\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n    var performance_1 = window.performance;\n    if (performance_1 &&\n        typeof performance_1.now === 'function' &&\n        getNow() > document.createEvent('Event').timeStamp) {\n        // if the event timestamp, although evaluated AFTER the Date.now(), is\n        // smaller than it, it means the event is using a hi-res timestamp,\n        // and we need to use the hi-res version for event listener timestamps as\n        // well.\n        getNow = function () { return performance_1.now(); };\n    }\n}\nvar sortCompareFn = function (a, b) {\n    if (a.post) {\n        if (!b.post)\n            return 1;\n    }\n    else if (b.post) {\n        return -1;\n    }\n    return a.id - b.id;\n};\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue() {\n    currentFlushTimestamp = getNow();\n    flushing = true;\n    var watcher, id;\n    // Sort queue before flush.\n    // This ensures that:\n    // 1. Components are updated from parent to child. (because parent is always\n    //    created before the child)\n    // 2. A component's user watchers are run before its render watcher (because\n    //    user watchers are created before the render watcher)\n    // 3. If a component is destroyed during a parent component's watcher run,\n    //    its watchers can be skipped.\n    queue.sort(sortCompareFn);\n    // do not cache length because more watchers might be pushed\n    // as we run existing watchers\n    for (index$1 = 0; index$1 < queue.length; index$1++) {\n        watcher = queue[index$1];\n        if (watcher.before) {\n            watcher.before();\n        }\n        id = watcher.id;\n        has[id] = null;\n        watcher.run();\n        // in dev build, check and stop circular updates.\n        if (process.env.NODE_ENV !== 'production' && has[id] != null) {\n            circular[id] = (circular[id] || 0) + 1;\n            if (circular[id] > MAX_UPDATE_COUNT) {\n                warn$2('You may have an infinite update loop ' +\n                    (watcher.user\n                        ? \"in watcher with expression \\\"\".concat(watcher.expression, \"\\\"\")\n                        : \"in a component render function.\"), watcher.vm);\n                break;\n            }\n        }\n    }\n    // keep copies of post queues before resetting state\n    var activatedQueue = activatedChildren.slice();\n    var updatedQueue = queue.slice();\n    resetSchedulerState();\n    // call component updated and activated hooks\n    callActivatedHooks(activatedQueue);\n    callUpdatedHooks(updatedQueue);\n    cleanupDeps();\n    // devtool hook\n    /* istanbul ignore if */\n    if (devtools && config.devtools) {\n        devtools.emit('flush');\n    }\n}\nfunction callUpdatedHooks(queue) {\n    var i = queue.length;\n    while (i--) {\n        var watcher = queue[i];\n        var vm = watcher.vm;\n        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n            callHook$1(vm, 'updated');\n        }\n    }\n}\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent(vm) {\n    // setting _inactive to false here so that a render function can\n    // rely on checking whether it's in an inactive tree (e.g. router-view)\n    vm._inactive = false;\n    activatedChildren.push(vm);\n}\nfunction callActivatedHooks(queue) {\n    for (var i = 0; i < queue.length; i++) {\n        queue[i]._inactive = true;\n        activateChildComponent(queue[i], true /* true */);\n    }\n}\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher(watcher) {\n    var id = watcher.id;\n    if (has[id] != null) {\n        return;\n    }\n    if (watcher === Dep.target && watcher.noRecurse) {\n        return;\n    }\n    has[id] = true;\n    if (!flushing) {\n        queue.push(watcher);\n    }\n    else {\n        // if already flushing, splice the watcher based on its id\n        // if already past its id, it will be run next immediately.\n        var i = queue.length - 1;\n        while (i > index$1 && queue[i].id > watcher.id) {\n            i--;\n        }\n        queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n        waiting = true;\n        if (process.env.NODE_ENV !== 'production' && !config.async) {\n            flushSchedulerQueue();\n            return;\n        }\n        nextTick(flushSchedulerQueue);\n    }\n}\n\nvar WATCHER = \"watcher\";\nvar WATCHER_CB = \"\".concat(WATCHER, \" callback\");\nvar WATCHER_GETTER = \"\".concat(WATCHER, \" getter\");\nvar WATCHER_CLEANUP = \"\".concat(WATCHER, \" cleanup\");\n// Simple effect.\nfunction watchEffect(effect, options) {\n    return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n    return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n        ? __assign(__assign({}, options), { flush: 'post' }) : { flush: 'post' }));\n}\nfunction watchSyncEffect(effect, options) {\n    return doWatch(effect, null, (process.env.NODE_ENV !== 'production'\n        ? __assign(__assign({}, options), { flush: 'sync' }) : { flush: 'sync' }));\n}\n// initial value for watchers to trigger on undefined initial values\nvar INITIAL_WATCHER_VALUE = {};\n// implementation\nfunction watch(source, cb, options) {\n    if (process.env.NODE_ENV !== 'production' && typeof cb !== 'function') {\n        warn$2(\"`watch(fn, options?)` signature has been moved to a separate API. \" +\n            \"Use `watchEffect(fn, options?)` instead. `watch` now only \" +\n            \"supports `watch(source, cb, options?) signature.\");\n    }\n    return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, _a) {\n    var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;\n    if (process.env.NODE_ENV !== 'production' && !cb) {\n        if (immediate !== undefined) {\n            warn$2(\"watch() \\\"immediate\\\" option is only respected when using the \" +\n                \"watch(source, callback, options?) signature.\");\n        }\n        if (deep !== undefined) {\n            warn$2(\"watch() \\\"deep\\\" option is only respected when using the \" +\n                \"watch(source, callback, options?) signature.\");\n        }\n    }\n    var warnInvalidSource = function (s) {\n        warn$2(\"Invalid watch source: \".concat(s, \". A watch source can only be a getter/effect \") +\n            \"function, a ref, a reactive object, or an array of these types.\");\n    };\n    var instance = currentInstance;\n    var call = function (fn, type, args) {\n        if (args === void 0) { args = null; }\n        var res = invokeWithErrorHandling(fn, null, args, instance, type);\n        if (deep && res && res.__ob__)\n            res.__ob__.dep.depend();\n        return res;\n    };\n    var getter;\n    var forceTrigger = false;\n    var isMultiSource = false;\n    if (isRef(source)) {\n        getter = function () { return source.value; };\n        forceTrigger = isShallow(source);\n    }\n    else if (isReactive(source)) {\n        getter = function () {\n            source.__ob__.dep.depend();\n            return source;\n        };\n        deep = true;\n    }\n    else if (isArray(source)) {\n        isMultiSource = true;\n        forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });\n        getter = function () {\n            return source.map(function (s) {\n                if (isRef(s)) {\n                    return s.value;\n                }\n                else if (isReactive(s)) {\n                    s.__ob__.dep.depend();\n                    return traverse(s);\n                }\n                else if (isFunction(s)) {\n                    return call(s, WATCHER_GETTER);\n                }\n                else {\n                    process.env.NODE_ENV !== 'production' && warnInvalidSource(s);\n                }\n            });\n        };\n    }\n    else if (isFunction(source)) {\n        if (cb) {\n            // getter with cb\n            getter = function () { return call(source, WATCHER_GETTER); };\n        }\n        else {\n            // no cb -> simple effect\n            getter = function () {\n                if (instance && instance._isDestroyed) {\n                    return;\n                }\n                if (cleanup) {\n                    cleanup();\n                }\n                return call(source, WATCHER, [onCleanup]);\n            };\n        }\n    }\n    else {\n        getter = noop;\n        process.env.NODE_ENV !== 'production' && warnInvalidSource(source);\n    }\n    if (cb && deep) {\n        var baseGetter_1 = getter;\n        getter = function () { return traverse(baseGetter_1()); };\n    }\n    var cleanup;\n    var onCleanup = function (fn) {\n        cleanup = watcher.onStop = function () {\n            call(fn, WATCHER_CLEANUP);\n        };\n    };\n    // in SSR there is no need to setup an actual effect, and it should be noop\n    // unless it's eager\n    if (isServerRendering()) {\n        // we will also not call the invalidate callback (+ runner is not set up)\n        onCleanup = noop;\n        if (!cb) {\n            getter();\n        }\n        else if (immediate) {\n            call(cb, WATCHER_CB, [\n                getter(),\n                isMultiSource ? [] : undefined,\n                onCleanup\n            ]);\n        }\n        return noop;\n    }\n    var watcher = new Watcher(currentInstance, getter, noop, {\n        lazy: true\n    });\n    watcher.noRecurse = !cb;\n    var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;\n    // overwrite default run\n    watcher.run = function () {\n        if (!watcher.active) {\n            return;\n        }\n        if (cb) {\n            // watch(source, cb)\n            var newValue = watcher.get();\n            if (deep ||\n                forceTrigger ||\n                (isMultiSource\n                    ? newValue.some(function (v, i) {\n                        return hasChanged(v, oldValue[i]);\n                    })\n                    : hasChanged(newValue, oldValue))) {\n                // cleanup before running cb again\n                if (cleanup) {\n                    cleanup();\n                }\n                call(cb, WATCHER_CB, [\n                    newValue,\n                    // pass undefined as the old value when it's changed for the first time\n                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,\n                    onCleanup\n                ]);\n                oldValue = newValue;\n            }\n        }\n        else {\n            // watchEffect\n            watcher.get();\n        }\n    };\n    if (flush === 'sync') {\n        watcher.update = watcher.run;\n    }\n    else if (flush === 'post') {\n        watcher.post = true;\n        watcher.update = function () { return queueWatcher(watcher); };\n    }\n    else {\n        // pre\n        watcher.update = function () {\n            if (instance && instance === currentInstance && !instance._isMounted) {\n                // pre-watcher triggered before\n                var buffer = instance._preWatchers || (instance._preWatchers = []);\n                if (buffer.indexOf(watcher) < 0)\n                    buffer.push(watcher);\n            }\n            else {\n                queueWatcher(watcher);\n            }\n        };\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        watcher.onTrack = onTrack;\n        watcher.onTrigger = onTrigger;\n    }\n    // initial run\n    if (cb) {\n        if (immediate) {\n            watcher.run();\n        }\n        else {\n            oldValue = watcher.get();\n        }\n    }\n    else if (flush === 'post' && instance) {\n        instance.$once('hook:mounted', function () { return watcher.get(); });\n    }\n    else {\n        watcher.get();\n    }\n    return function () {\n        watcher.teardown();\n    };\n}\n\nfunction provide(key, value) {\n    if (!currentInstance) {\n        if (process.env.NODE_ENV !== 'production') {\n            warn$2(\"provide() can only be used inside setup().\");\n        }\n    }\n    else {\n        // TS doesn't allow symbol as index type\n        resolveProvided(currentInstance)[key] = value;\n    }\n}\nfunction resolveProvided(vm) {\n    // by default an instance inherits its parent's provides object\n    // but when it needs to provide values of its own, it creates its\n    // own provides object using parent provides object as prototype.\n    // this way in `inject` we can simply look up injections from direct\n    // parent and let the prototype chain do the work.\n    var existing = vm._provided;\n    var parentProvides = vm.$parent && vm.$parent._provided;\n    if (parentProvides === existing) {\n        return (vm._provided = Object.create(parentProvides));\n    }\n    else {\n        return existing;\n    }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory) {\n    if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }\n    // fallback to `currentRenderingInstance` so that this can be called in\n    // a functional component\n    var instance = currentInstance;\n    if (instance) {\n        // #2400\n        // to support `app.use` plugins,\n        // fallback to appContext's `provides` if the instance is at root\n        var provides = instance.$parent && instance.$parent._provided;\n        if (provides && key in provides) {\n            // TS doesn't allow symbol as index type\n            return provides[key];\n        }\n        else if (arguments.length > 1) {\n            return treatDefaultAsFactory && isFunction(defaultValue)\n                ? defaultValue.call(instance)\n                : defaultValue;\n        }\n        else if (process.env.NODE_ENV !== 'production') {\n            warn$2(\"injection \\\"\".concat(String(key), \"\\\" not found.\"));\n        }\n    }\n    else if (process.env.NODE_ENV !== 'production') {\n        warn$2(\"inject() can only be used inside setup() or functional components.\");\n    }\n}\n\n/**\n * @internal this function needs manual public type declaration because it relies\n * on previously manually authored types from Vue 2\n */\nfunction h(type, props, children) {\n    if (!currentInstance) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2(\"globally imported h() can only be invoked when there is an active \" +\n                \"component instance, e.g. synchronously in a component's render or setup function.\");\n    }\n    return createElement$1(currentInstance, type, props, children, 2, true);\n}\n\nfunction handleError(err, vm, info) {\n    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n    // See: https://github.com/vuejs/vuex/issues/1505\n    pushTarget();\n    try {\n        if (vm) {\n            var cur = vm;\n            while ((cur = cur.$parent)) {\n                var hooks = cur.$options.errorCaptured;\n                if (hooks) {\n                    for (var i = 0; i < hooks.length; i++) {\n                        try {\n                            var capture = hooks[i].call(cur, err, vm, info) === false;\n                            if (capture)\n                                return;\n                        }\n                        catch (e) {\n                            globalHandleError(e, cur, 'errorCaptured hook');\n                        }\n                    }\n                }\n            }\n        }\n        globalHandleError(err, vm, info);\n    }\n    finally {\n        popTarget();\n    }\n}\nfunction invokeWithErrorHandling(handler, context, args, vm, info) {\n    var res;\n    try {\n        res = args ? handler.apply(context, args) : handler.call(context);\n        if (res && !res._isVue && isPromise(res) && !res._handled) {\n            res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n            res._handled = true;\n        }\n    }\n    catch (e) {\n        handleError(e, vm, info);\n    }\n    return res;\n}\nfunction globalHandleError(err, vm, info) {\n    if (config.errorHandler) {\n        try {\n            return config.errorHandler.call(null, err, vm, info);\n        }\n        catch (e) {\n            // if the user intentionally throws the original error in the handler,\n            // do not log it twice\n            if (e !== err) {\n                logError(e, null, 'config.errorHandler');\n            }\n        }\n    }\n    logError(err, vm, info);\n}\nfunction logError(err, vm, info) {\n    if (process.env.NODE_ENV !== 'production') {\n        warn$2(\"Error in \".concat(info, \": \\\"\").concat(err.toString(), \"\\\"\"), vm);\n    }\n    /* istanbul ignore else */\n    if (inBrowser && typeof console !== 'undefined') {\n        console.error(err);\n    }\n    else {\n        throw err;\n    }\n}\n\n/* globals MutationObserver */\nvar isUsingMicroTask = false;\nvar callbacks = [];\nvar pending = false;\nfunction flushCallbacks() {\n    pending = false;\n    var copies = callbacks.slice(0);\n    callbacks.length = 0;\n    for (var i = 0; i < copies.length; i++) {\n        copies[i]();\n    }\n}\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n    var p_1 = Promise.resolve();\n    timerFunc = function () {\n        p_1.then(flushCallbacks);\n        // In problematic UIWebViews, Promise.then doesn't completely break, but\n        // it can get stuck in a weird state where callbacks are pushed into the\n        // microtask queue but the queue isn't being flushed, until the browser\n        // needs to do some other work, e.g. handle a timer. Therefore we can\n        // \"force\" the microtask queue to be flushed by adding an empty timer.\n        if (isIOS)\n            setTimeout(noop);\n    };\n    isUsingMicroTask = true;\n}\nelse if (!isIE &&\n    typeof MutationObserver !== 'undefined' &&\n    (isNative(MutationObserver) ||\n        // PhantomJS and iOS 7.x\n        MutationObserver.toString() === '[object MutationObserverConstructor]')) {\n    // Use MutationObserver where native Promise is not available,\n    // e.g. PhantomJS, iOS7, Android 4.4\n    // (#6466 MutationObserver is unreliable in IE11)\n    var counter_1 = 1;\n    var observer = new MutationObserver(flushCallbacks);\n    var textNode_1 = document.createTextNode(String(counter_1));\n    observer.observe(textNode_1, {\n        characterData: true\n    });\n    timerFunc = function () {\n        counter_1 = (counter_1 + 1) % 2;\n        textNode_1.data = String(counter_1);\n    };\n    isUsingMicroTask = true;\n}\nelse if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n    // Fallback to setImmediate.\n    // Technically it leverages the (macro) task queue,\n    // but it is still a better choice than setTimeout.\n    timerFunc = function () {\n        setImmediate(flushCallbacks);\n    };\n}\nelse {\n    // Fallback to setTimeout.\n    timerFunc = function () {\n        setTimeout(flushCallbacks, 0);\n    };\n}\n/**\n * @internal\n */\nfunction nextTick(cb, ctx) {\n    var _resolve;\n    callbacks.push(function () {\n        if (cb) {\n            try {\n                cb.call(ctx);\n            }\n            catch (e) {\n                handleError(e, ctx, 'nextTick');\n            }\n        }\n        else if (_resolve) {\n            _resolve(ctx);\n        }\n    });\n    if (!pending) {\n        pending = true;\n        timerFunc();\n    }\n    // $flow-disable-line\n    if (!cb && typeof Promise !== 'undefined') {\n        return new Promise(function (resolve) {\n            _resolve = resolve;\n        });\n    }\n}\n\nfunction useCssModule(name) {\n    if (name === void 0) { name = '$style'; }\n    /* istanbul ignore else */\n    {\n        if (!currentInstance) {\n            process.env.NODE_ENV !== 'production' && warn$2(\"useCssModule must be called inside setup()\");\n            return emptyObject;\n        }\n        var mod = currentInstance[name];\n        if (!mod) {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2(\"Current instance does not have CSS module named \\\"\".concat(name, \"\\\".\"));\n            return emptyObject;\n        }\n        return mod;\n    }\n}\n\n/**\n * Runtime helper for SFC's CSS variable injection feature.\n * @private\n */\nfunction useCssVars(getter) {\n    if (!inBrowser && !false)\n        return;\n    var instance = currentInstance;\n    if (!instance) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2(\"useCssVars is called without current active component instance.\");\n        return;\n    }\n    watchPostEffect(function () {\n        var el = instance.$el;\n        var vars = getter(instance, instance._setupProxy);\n        if (el && el.nodeType === 1) {\n            var style = el.style;\n            for (var key in vars) {\n                style.setProperty(\"--\".concat(key), vars[key]);\n            }\n        }\n    });\n}\n\n/**\n * v3-compatible async component API.\n * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts\n * because it relies on existing manual types\n */\nfunction defineAsyncComponent(source) {\n    if (isFunction(source)) {\n        source = { loader: source };\n    }\n    var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out\n    _b = source.suspensible, // undefined = never times out\n    suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true\n    userOnError = source.onError;\n    if (process.env.NODE_ENV !== 'production' && suspensible) {\n        warn$2(\"The suspensible option for async components is not supported in Vue2. It is ignored.\");\n    }\n    var pendingRequest = null;\n    var retries = 0;\n    var retry = function () {\n        retries++;\n        pendingRequest = null;\n        return load();\n    };\n    var load = function () {\n        var thisRequest;\n        return (pendingRequest ||\n            (thisRequest = pendingRequest =\n                loader()\n                    .catch(function (err) {\n                    err = err instanceof Error ? err : new Error(String(err));\n                    if (userOnError) {\n                        return new Promise(function (resolve, reject) {\n                            var userRetry = function () { return resolve(retry()); };\n                            var userFail = function () { return reject(err); };\n                            userOnError(err, userRetry, userFail, retries + 1);\n                        });\n                    }\n                    else {\n                        throw err;\n                    }\n                })\n                    .then(function (comp) {\n                    if (thisRequest !== pendingRequest && pendingRequest) {\n                        return pendingRequest;\n                    }\n                    if (process.env.NODE_ENV !== 'production' && !comp) {\n                        warn$2(\"Async component loader resolved to undefined. \" +\n                            \"If you are using retry(), make sure to return its return value.\");\n                    }\n                    // interop module default\n                    if (comp &&\n                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {\n                        comp = comp.default;\n                    }\n                    if (process.env.NODE_ENV !== 'production' && comp && !isObject(comp) && !isFunction(comp)) {\n                        throw new Error(\"Invalid async component load result: \".concat(comp));\n                    }\n                    return comp;\n                })));\n    };\n    return function () {\n        var component = load();\n        return {\n            component: component,\n            delay: delay,\n            timeout: timeout,\n            error: errorComponent,\n            loading: loadingComponent\n        };\n    };\n}\n\nfunction createLifeCycle(hookName) {\n    return function (fn, target) {\n        if (target === void 0) { target = currentInstance; }\n        if (!target) {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2(\"\".concat(formatName(hookName), \" is called when there is no active component instance to be \") +\n                    \"associated with. \" +\n                    \"Lifecycle injection APIs can only be used during execution of setup().\");\n            return;\n        }\n        return injectHook(target, hookName, fn);\n    };\n}\nfunction formatName(name) {\n    if (name === 'beforeDestroy') {\n        name = 'beforeUnmount';\n    }\n    else if (name === 'destroyed') {\n        name = 'unmounted';\n    }\n    return \"on\".concat(name[0].toUpperCase() + name.slice(1));\n}\nfunction injectHook(instance, hookName, fn) {\n    var options = instance.$options;\n    options[hookName] = mergeLifecycleHook(options[hookName], fn);\n}\nvar onBeforeMount = createLifeCycle('beforeMount');\nvar onMounted = createLifeCycle('mounted');\nvar onBeforeUpdate = createLifeCycle('beforeUpdate');\nvar onUpdated = createLifeCycle('updated');\nvar onBeforeUnmount = createLifeCycle('beforeDestroy');\nvar onUnmounted = createLifeCycle('destroyed');\nvar onActivated = createLifeCycle('activated');\nvar onDeactivated = createLifeCycle('deactivated');\nvar onServerPrefetch = createLifeCycle('serverPrefetch');\nvar onRenderTracked = createLifeCycle('renderTracked');\nvar onRenderTriggered = createLifeCycle('renderTriggered');\nvar injectErrorCapturedHook = createLifeCycle('errorCaptured');\nfunction onErrorCaptured(hook, target) {\n    if (target === void 0) { target = currentInstance; }\n    injectErrorCapturedHook(hook, target);\n}\n\n/**\n * Note: also update dist/vue.runtime.mjs when adding new exports to this file.\n */\nvar version = '2.7.16';\n/**\n * @internal type is manually declared in <root>/types/v3-define-component.d.ts\n */\nfunction defineComponent(options) {\n    return options;\n}\n\nvar seenObjects = new _Set();\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse(val) {\n    _traverse(val, seenObjects);\n    seenObjects.clear();\n    return val;\n}\nfunction _traverse(val, seen) {\n    var i, keys;\n    var isA = isArray(val);\n    if ((!isA && !isObject(val)) ||\n        val.__v_skip /* ReactiveFlags.SKIP */ ||\n        Object.isFrozen(val) ||\n        val instanceof VNode) {\n        return;\n    }\n    if (val.__ob__) {\n        var depId = val.__ob__.dep.id;\n        if (seen.has(depId)) {\n            return;\n        }\n        seen.add(depId);\n    }\n    if (isA) {\n        i = val.length;\n        while (i--)\n            _traverse(val[i], seen);\n    }\n    else if (isRef(val)) {\n        _traverse(val.value, seen);\n    }\n    else {\n        keys = Object.keys(val);\n        i = keys.length;\n        while (i--)\n            _traverse(val[keys[i]], seen);\n    }\n}\n\nvar uid$1 = 0;\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n * @internal\n */\nvar Watcher = /** @class */ (function () {\n    function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {\n        recordEffectScope(this, \n        // if the active effect scope is manually created (not a component scope),\n        // prioritize it\n        activeEffectScope && !activeEffectScope._vm\n            ? activeEffectScope\n            : vm\n                ? vm._scope\n                : undefined);\n        if ((this.vm = vm) && isRenderWatcher) {\n            vm._watcher = this;\n        }\n        // options\n        if (options) {\n            this.deep = !!options.deep;\n            this.user = !!options.user;\n            this.lazy = !!options.lazy;\n            this.sync = !!options.sync;\n            this.before = options.before;\n            if (process.env.NODE_ENV !== 'production') {\n                this.onTrack = options.onTrack;\n                this.onTrigger = options.onTrigger;\n            }\n        }\n        else {\n            this.deep = this.user = this.lazy = this.sync = false;\n        }\n        this.cb = cb;\n        this.id = ++uid$1; // uid for batching\n        this.active = true;\n        this.post = false;\n        this.dirty = this.lazy; // for lazy watchers\n        this.deps = [];\n        this.newDeps = [];\n        this.depIds = new _Set();\n        this.newDepIds = new _Set();\n        this.expression = process.env.NODE_ENV !== 'production' ? expOrFn.toString() : '';\n        // parse expression for getter\n        if (isFunction(expOrFn)) {\n            this.getter = expOrFn;\n        }\n        else {\n            this.getter = parsePath(expOrFn);\n            if (!this.getter) {\n                this.getter = noop;\n                process.env.NODE_ENV !== 'production' &&\n                    warn$2(\"Failed watching path: \\\"\".concat(expOrFn, \"\\\" \") +\n                        'Watcher only accepts simple dot-delimited paths. ' +\n                        'For full control, use a function instead.', vm);\n            }\n        }\n        this.value = this.lazy ? undefined : this.get();\n    }\n    /**\n     * Evaluate the getter, and re-collect dependencies.\n     */\n    Watcher.prototype.get = function () {\n        pushTarget(this);\n        var value;\n        var vm = this.vm;\n        try {\n            value = this.getter.call(vm, vm);\n        }\n        catch (e) {\n            if (this.user) {\n                handleError(e, vm, \"getter for watcher \\\"\".concat(this.expression, \"\\\"\"));\n            }\n            else {\n                throw e;\n            }\n        }\n        finally {\n            // \"touch\" every property so they are all tracked as\n            // dependencies for deep watching\n            if (this.deep) {\n                traverse(value);\n            }\n            popTarget();\n            this.cleanupDeps();\n        }\n        return value;\n    };\n    /**\n     * Add a dependency to this directive.\n     */\n    Watcher.prototype.addDep = function (dep) {\n        var id = dep.id;\n        if (!this.newDepIds.has(id)) {\n            this.newDepIds.add(id);\n            this.newDeps.push(dep);\n            if (!this.depIds.has(id)) {\n                dep.addSub(this);\n            }\n        }\n    };\n    /**\n     * Clean up for dependency collection.\n     */\n    Watcher.prototype.cleanupDeps = function () {\n        var i = this.deps.length;\n        while (i--) {\n            var dep = this.deps[i];\n            if (!this.newDepIds.has(dep.id)) {\n                dep.removeSub(this);\n            }\n        }\n        var tmp = this.depIds;\n        this.depIds = this.newDepIds;\n        this.newDepIds = tmp;\n        this.newDepIds.clear();\n        tmp = this.deps;\n        this.deps = this.newDeps;\n        this.newDeps = tmp;\n        this.newDeps.length = 0;\n    };\n    /**\n     * Subscriber interface.\n     * Will be called when a dependency changes.\n     */\n    Watcher.prototype.update = function () {\n        /* istanbul ignore else */\n        if (this.lazy) {\n            this.dirty = true;\n        }\n        else if (this.sync) {\n            this.run();\n        }\n        else {\n            queueWatcher(this);\n        }\n    };\n    /**\n     * Scheduler job interface.\n     * Will be called by the scheduler.\n     */\n    Watcher.prototype.run = function () {\n        if (this.active) {\n            var value = this.get();\n            if (value !== this.value ||\n                // Deep watchers and watchers on Object/Arrays should fire even\n                // when the value is the same, because the value may\n                // have mutated.\n                isObject(value) ||\n                this.deep) {\n                // set new value\n                var oldValue = this.value;\n                this.value = value;\n                if (this.user) {\n                    var info = \"callback for watcher \\\"\".concat(this.expression, \"\\\"\");\n                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);\n                }\n                else {\n                    this.cb.call(this.vm, value, oldValue);\n                }\n            }\n        }\n    };\n    /**\n     * Evaluate the value of the watcher.\n     * This only gets called for lazy watchers.\n     */\n    Watcher.prototype.evaluate = function () {\n        this.value = this.get();\n        this.dirty = false;\n    };\n    /**\n     * Depend on all deps collected by this watcher.\n     */\n    Watcher.prototype.depend = function () {\n        var i = this.deps.length;\n        while (i--) {\n            this.deps[i].depend();\n        }\n    };\n    /**\n     * Remove self from all dependencies' subscriber list.\n     */\n    Watcher.prototype.teardown = function () {\n        if (this.vm && !this.vm._isBeingDestroyed) {\n            remove$2(this.vm._scope.effects, this);\n        }\n        if (this.active) {\n            var i = this.deps.length;\n            while (i--) {\n                this.deps[i].removeSub(this);\n            }\n            this.active = false;\n            if (this.onStop) {\n                this.onStop();\n            }\n        }\n    };\n    return Watcher;\n}());\n\nvar sharedPropertyDefinition = {\n    enumerable: true,\n    configurable: true,\n    get: noop,\n    set: noop\n};\nfunction proxy(target, sourceKey, key) {\n    sharedPropertyDefinition.get = function proxyGetter() {\n        return this[sourceKey][key];\n    };\n    sharedPropertyDefinition.set = function proxySetter(val) {\n        this[sourceKey][key] = val;\n    };\n    Object.defineProperty(target, key, sharedPropertyDefinition);\n}\nfunction initState(vm) {\n    var opts = vm.$options;\n    if (opts.props)\n        initProps$1(vm, opts.props);\n    // Composition API\n    initSetup(vm);\n    if (opts.methods)\n        initMethods(vm, opts.methods);\n    if (opts.data) {\n        initData(vm);\n    }\n    else {\n        var ob = observe((vm._data = {}));\n        ob && ob.vmCount++;\n    }\n    if (opts.computed)\n        initComputed$1(vm, opts.computed);\n    if (opts.watch && opts.watch !== nativeWatch) {\n        initWatch(vm, opts.watch);\n    }\n}\nfunction initProps$1(vm, propsOptions) {\n    var propsData = vm.$options.propsData || {};\n    var props = (vm._props = shallowReactive({}));\n    // cache prop keys so that future props updates can iterate using Array\n    // instead of dynamic object key enumeration.\n    var keys = (vm.$options._propKeys = []);\n    var isRoot = !vm.$parent;\n    // root instance props should be converted\n    if (!isRoot) {\n        toggleObserving(false);\n    }\n    var _loop_1 = function (key) {\n        keys.push(key);\n        var value = validateProp(key, propsOptions, propsData, vm);\n        /* istanbul ignore else */\n        if (process.env.NODE_ENV !== 'production') {\n            var hyphenatedKey = hyphenate(key);\n            if (isReservedAttribute(hyphenatedKey) ||\n                config.isReservedAttr(hyphenatedKey)) {\n                warn$2(\"\\\"\".concat(hyphenatedKey, \"\\\" is a reserved attribute and cannot be used as component prop.\"), vm);\n            }\n            defineReactive(props, key, value, function () {\n                if (!isRoot && !isUpdatingChildComponent) {\n                    warn$2(\"Avoid mutating a prop directly since the value will be \" +\n                        \"overwritten whenever the parent component re-renders. \" +\n                        \"Instead, use a data or computed property based on the prop's \" +\n                        \"value. Prop being mutated: \\\"\".concat(key, \"\\\"\"), vm);\n                }\n            }, true /* shallow */);\n        }\n        else {\n            defineReactive(props, key, value, undefined, true /* shallow */);\n        }\n        // static props are already proxied on the component's prototype\n        // during Vue.extend(). We only need to proxy props defined at\n        // instantiation here.\n        if (!(key in vm)) {\n            proxy(vm, \"_props\", key);\n        }\n    };\n    for (var key in propsOptions) {\n        _loop_1(key);\n    }\n    toggleObserving(true);\n}\nfunction initData(vm) {\n    var data = vm.$options.data;\n    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};\n    if (!isPlainObject(data)) {\n        data = {};\n        process.env.NODE_ENV !== 'production' &&\n            warn$2('data functions should return an object:\\n' +\n                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);\n    }\n    // proxy data on instance\n    var keys = Object.keys(data);\n    var props = vm.$options.props;\n    var methods = vm.$options.methods;\n    var i = keys.length;\n    while (i--) {\n        var key = keys[i];\n        if (process.env.NODE_ENV !== 'production') {\n            if (methods && hasOwn(methods, key)) {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" has already been defined as a data property.\"), vm);\n            }\n        }\n        if (props && hasOwn(props, key)) {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2(\"The data property \\\"\".concat(key, \"\\\" is already declared as a prop. \") +\n                    \"Use prop default value instead.\", vm);\n        }\n        else if (!isReserved(key)) {\n            proxy(vm, \"_data\", key);\n        }\n    }\n    // observe data\n    var ob = observe(data);\n    ob && ob.vmCount++;\n}\nfunction getData(data, vm) {\n    // #7573 disable dep collection when invoking data getters\n    pushTarget();\n    try {\n        return data.call(vm, vm);\n    }\n    catch (e) {\n        handleError(e, vm, \"data()\");\n        return {};\n    }\n    finally {\n        popTarget();\n    }\n}\nvar computedWatcherOptions = { lazy: true };\nfunction initComputed$1(vm, computed) {\n    // $flow-disable-line\n    var watchers = (vm._computedWatchers = Object.create(null));\n    // computed properties are just getters during SSR\n    var isSSR = isServerRendering();\n    for (var key in computed) {\n        var userDef = computed[key];\n        var getter = isFunction(userDef) ? userDef : userDef.get;\n        if (process.env.NODE_ENV !== 'production' && getter == null) {\n            warn$2(\"Getter is missing for computed property \\\"\".concat(key, \"\\\".\"), vm);\n        }\n        if (!isSSR) {\n            // create internal watcher for the computed property.\n            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);\n        }\n        // component-defined computed properties are already defined on the\n        // component prototype. We only need to define computed properties defined\n        // at instantiation here.\n        if (!(key in vm)) {\n            defineComputed(vm, key, userDef);\n        }\n        else if (process.env.NODE_ENV !== 'production') {\n            if (key in vm.$data) {\n                warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined in data.\"), vm);\n            }\n            else if (vm.$options.props && key in vm.$options.props) {\n                warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined as a prop.\"), vm);\n            }\n            else if (vm.$options.methods && key in vm.$options.methods) {\n                warn$2(\"The computed property \\\"\".concat(key, \"\\\" is already defined as a method.\"), vm);\n            }\n        }\n    }\n}\nfunction defineComputed(target, key, userDef) {\n    var shouldCache = !isServerRendering();\n    if (isFunction(userDef)) {\n        sharedPropertyDefinition.get = shouldCache\n            ? createComputedGetter(key)\n            : createGetterInvoker(userDef);\n        sharedPropertyDefinition.set = noop;\n    }\n    else {\n        sharedPropertyDefinition.get = userDef.get\n            ? shouldCache && userDef.cache !== false\n                ? createComputedGetter(key)\n                : createGetterInvoker(userDef.get)\n            : noop;\n        sharedPropertyDefinition.set = userDef.set || noop;\n    }\n    if (process.env.NODE_ENV !== 'production' && sharedPropertyDefinition.set === noop) {\n        sharedPropertyDefinition.set = function () {\n            warn$2(\"Computed property \\\"\".concat(key, \"\\\" was assigned to but it has no setter.\"), this);\n        };\n    }\n    Object.defineProperty(target, key, sharedPropertyDefinition);\n}\nfunction createComputedGetter(key) {\n    return function computedGetter() {\n        var watcher = this._computedWatchers && this._computedWatchers[key];\n        if (watcher) {\n            if (watcher.dirty) {\n                watcher.evaluate();\n            }\n            if (Dep.target) {\n                if (process.env.NODE_ENV !== 'production' && Dep.target.onTrack) {\n                    Dep.target.onTrack({\n                        effect: Dep.target,\n                        target: this,\n                        type: \"get\" /* TrackOpTypes.GET */,\n                        key: key\n                    });\n                }\n                watcher.depend();\n            }\n            return watcher.value;\n        }\n    };\n}\nfunction createGetterInvoker(fn) {\n    return function computedGetter() {\n        return fn.call(this, this);\n    };\n}\nfunction initMethods(vm, methods) {\n    var props = vm.$options.props;\n    for (var key in methods) {\n        if (process.env.NODE_ENV !== 'production') {\n            if (typeof methods[key] !== 'function') {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" has type \\\"\").concat(typeof methods[key], \"\\\" in the component definition. \") +\n                    \"Did you reference the function correctly?\", vm);\n            }\n            if (props && hasOwn(props, key)) {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" has already been defined as a prop.\"), vm);\n            }\n            if (key in vm && isReserved(key)) {\n                warn$2(\"Method \\\"\".concat(key, \"\\\" conflicts with an existing Vue instance method. \") +\n                    \"Avoid defining component methods that start with _ or $.\");\n            }\n        }\n        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);\n    }\n}\nfunction initWatch(vm, watch) {\n    for (var key in watch) {\n        var handler = watch[key];\n        if (isArray(handler)) {\n            for (var i = 0; i < handler.length; i++) {\n                createWatcher(vm, key, handler[i]);\n            }\n        }\n        else {\n            createWatcher(vm, key, handler);\n        }\n    }\n}\nfunction createWatcher(vm, expOrFn, handler, options) {\n    if (isPlainObject(handler)) {\n        options = handler;\n        handler = handler.handler;\n    }\n    if (typeof handler === 'string') {\n        handler = vm[handler];\n    }\n    return vm.$watch(expOrFn, handler, options);\n}\nfunction stateMixin(Vue) {\n    // flow somehow has problems with directly declared definition object\n    // when using Object.defineProperty, so we have to procedurally build up\n    // the object here.\n    var dataDef = {};\n    dataDef.get = function () {\n        return this._data;\n    };\n    var propsDef = {};\n    propsDef.get = function () {\n        return this._props;\n    };\n    if (process.env.NODE_ENV !== 'production') {\n        dataDef.set = function () {\n            warn$2('Avoid replacing instance root $data. ' +\n                'Use nested data properties instead.', this);\n        };\n        propsDef.set = function () {\n            warn$2(\"$props is readonly.\", this);\n        };\n    }\n    Object.defineProperty(Vue.prototype, '$data', dataDef);\n    Object.defineProperty(Vue.prototype, '$props', propsDef);\n    Vue.prototype.$set = set;\n    Vue.prototype.$delete = del;\n    Vue.prototype.$watch = function (expOrFn, cb, options) {\n        var vm = this;\n        if (isPlainObject(cb)) {\n            return createWatcher(vm, expOrFn, cb, options);\n        }\n        options = options || {};\n        options.user = true;\n        var watcher = new Watcher(vm, expOrFn, cb, options);\n        if (options.immediate) {\n            var info = \"callback for immediate watcher \\\"\".concat(watcher.expression, \"\\\"\");\n            pushTarget();\n            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);\n            popTarget();\n        }\n        return function unwatchFn() {\n            watcher.teardown();\n        };\n    };\n}\n\nfunction initProvide(vm) {\n    var provideOption = vm.$options.provide;\n    if (provideOption) {\n        var provided = isFunction(provideOption)\n            ? provideOption.call(vm)\n            : provideOption;\n        if (!isObject(provided)) {\n            return;\n        }\n        var source = resolveProvided(vm);\n        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to\n        // iterate the keys ourselves.\n        var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));\n        }\n    }\n}\nfunction initInjections(vm) {\n    var result = resolveInject(vm.$options.inject, vm);\n    if (result) {\n        toggleObserving(false);\n        Object.keys(result).forEach(function (key) {\n            /* istanbul ignore else */\n            if (process.env.NODE_ENV !== 'production') {\n                defineReactive(vm, key, result[key], function () {\n                    warn$2(\"Avoid mutating an injected value directly since the changes will be \" +\n                        \"overwritten whenever the provided component re-renders. \" +\n                        \"injection being mutated: \\\"\".concat(key, \"\\\"\"), vm);\n                });\n            }\n            else {\n                defineReactive(vm, key, result[key]);\n            }\n        });\n        toggleObserving(true);\n    }\n}\nfunction resolveInject(inject, vm) {\n    if (inject) {\n        // inject is :any because flow is not smart enough to figure out cached\n        var result = Object.create(null);\n        var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            // #6574 in case the inject object is observed...\n            if (key === '__ob__')\n                continue;\n            var provideKey = inject[key].from;\n            if (provideKey in vm._provided) {\n                result[key] = vm._provided[provideKey];\n            }\n            else if ('default' in inject[key]) {\n                var provideDefault = inject[key].default;\n                result[key] = isFunction(provideDefault)\n                    ? provideDefault.call(vm)\n                    : provideDefault;\n            }\n            else if (process.env.NODE_ENV !== 'production') {\n                warn$2(\"Injection \\\"\".concat(key, \"\\\" not found\"), vm);\n            }\n        }\n        return result;\n    }\n}\n\nvar uid = 0;\nfunction initMixin$1(Vue) {\n    Vue.prototype._init = function (options) {\n        var vm = this;\n        // a uid\n        vm._uid = uid++;\n        var startTag, endTag;\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n            startTag = \"vue-perf-start:\".concat(vm._uid);\n            endTag = \"vue-perf-end:\".concat(vm._uid);\n            mark(startTag);\n        }\n        // a flag to mark this as a Vue instance without having to do instanceof\n        // check\n        vm._isVue = true;\n        // avoid instances from being observed\n        vm.__v_skip = true;\n        // effect scope\n        vm._scope = new EffectScope(true /* detached */);\n        // #13134 edge case where a child component is manually created during the\n        // render of a parent component\n        vm._scope.parent = undefined;\n        vm._scope._vm = true;\n        // merge options\n        if (options && options._isComponent) {\n            // optimize internal component instantiation\n            // since dynamic options merging is pretty slow, and none of the\n            // internal component options needs special treatment.\n            initInternalComponent(vm, options);\n        }\n        else {\n            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);\n        }\n        /* istanbul ignore else */\n        if (process.env.NODE_ENV !== 'production') {\n            initProxy(vm);\n        }\n        else {\n            vm._renderProxy = vm;\n        }\n        // expose real self\n        vm._self = vm;\n        initLifecycle(vm);\n        initEvents(vm);\n        initRender(vm);\n        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);\n        initInjections(vm); // resolve injections before data/props\n        initState(vm);\n        initProvide(vm); // resolve provide after data/props\n        callHook$1(vm, 'created');\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n            vm._name = formatComponentName(vm, false);\n            mark(endTag);\n            measure(\"vue \".concat(vm._name, \" init\"), startTag, endTag);\n        }\n        if (vm.$options.el) {\n            vm.$mount(vm.$options.el);\n        }\n    };\n}\nfunction initInternalComponent(vm, options) {\n    var opts = (vm.$options = Object.create(vm.constructor.options));\n    // doing this because it's faster than dynamic enumeration.\n    var parentVnode = options._parentVnode;\n    opts.parent = options.parent;\n    opts._parentVnode = parentVnode;\n    var vnodeComponentOptions = parentVnode.componentOptions;\n    opts.propsData = vnodeComponentOptions.propsData;\n    opts._parentListeners = vnodeComponentOptions.listeners;\n    opts._renderChildren = vnodeComponentOptions.children;\n    opts._componentTag = vnodeComponentOptions.tag;\n    if (options.render) {\n        opts.render = options.render;\n        opts.staticRenderFns = options.staticRenderFns;\n    }\n}\nfunction resolveConstructorOptions(Ctor) {\n    var options = Ctor.options;\n    if (Ctor.super) {\n        var superOptions = resolveConstructorOptions(Ctor.super);\n        var cachedSuperOptions = Ctor.superOptions;\n        if (superOptions !== cachedSuperOptions) {\n            // super option changed,\n            // need to resolve new options.\n            Ctor.superOptions = superOptions;\n            // check if there are any late-modified/attached options (#4976)\n            var modifiedOptions = resolveModifiedOptions(Ctor);\n            // update base extend options\n            if (modifiedOptions) {\n                extend(Ctor.extendOptions, modifiedOptions);\n            }\n            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n            if (options.name) {\n                options.components[options.name] = Ctor;\n            }\n        }\n    }\n    return options;\n}\nfunction resolveModifiedOptions(Ctor) {\n    var modified;\n    var latest = Ctor.options;\n    var sealed = Ctor.sealedOptions;\n    for (var key in latest) {\n        if (latest[key] !== sealed[key]) {\n            if (!modified)\n                modified = {};\n            modified[key] = latest[key];\n        }\n    }\n    return modified;\n}\n\nfunction FunctionalRenderContext(data, props, children, parent, Ctor) {\n    var _this = this;\n    var options = Ctor.options;\n    // ensure the createElement function in functional components\n    // gets a unique context - this is necessary for correct named slot check\n    var contextVm;\n    if (hasOwn(parent, '_uid')) {\n        contextVm = Object.create(parent);\n        contextVm._original = parent;\n    }\n    else {\n        // the context vm passed in is a functional context as well.\n        // in this case we want to make sure we are able to get a hold to the\n        // real context instance.\n        contextVm = parent;\n        // @ts-ignore\n        parent = parent._original;\n    }\n    var isCompiled = isTrue(options._compiled);\n    var needNormalization = !isCompiled;\n    this.data = data;\n    this.props = props;\n    this.children = children;\n    this.parent = parent;\n    this.listeners = data.on || emptyObject;\n    this.injections = resolveInject(options.inject, parent);\n    this.slots = function () {\n        if (!_this.$slots) {\n            normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));\n        }\n        return _this.$slots;\n    };\n    Object.defineProperty(this, 'scopedSlots', {\n        enumerable: true,\n        get: function () {\n            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());\n        }\n    });\n    // support for compiled functional template\n    if (isCompiled) {\n        // exposing $options for renderStatic()\n        this.$options = options;\n        // pre-resolve slots for renderSlot()\n        this.$slots = this.slots();\n        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);\n    }\n    if (options._scopeId) {\n        this._c = function (a, b, c, d) {\n            var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);\n            if (vnode && !isArray(vnode)) {\n                vnode.fnScopeId = options._scopeId;\n                vnode.fnContext = parent;\n            }\n            return vnode;\n        };\n    }\n    else {\n        this._c = function (a, b, c, d) {\n            return createElement$1(contextVm, a, b, c, d, needNormalization);\n        };\n    }\n}\ninstallRenderHelpers(FunctionalRenderContext.prototype);\nfunction createFunctionalComponent(Ctor, propsData, data, contextVm, children) {\n    var options = Ctor.options;\n    var props = {};\n    var propOptions = options.props;\n    if (isDef(propOptions)) {\n        for (var key in propOptions) {\n            props[key] = validateProp(key, propOptions, propsData || emptyObject);\n        }\n    }\n    else {\n        if (isDef(data.attrs))\n            mergeProps(props, data.attrs);\n        if (isDef(data.props))\n            mergeProps(props, data.props);\n    }\n    var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);\n    var vnode = options.render.call(null, renderContext._c, renderContext);\n    if (vnode instanceof VNode) {\n        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);\n    }\n    else if (isArray(vnode)) {\n        var vnodes = normalizeChildren(vnode) || [];\n        var res = new Array(vnodes.length);\n        for (var i = 0; i < vnodes.length; i++) {\n            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n        }\n        return res;\n    }\n}\nfunction cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {\n    // #7817 clone node before setting fnContext, otherwise if the node is reused\n    // (e.g. it was from a cached normal slot) the fnContext causes named slots\n    // that should not be matched to match.\n    var clone = cloneVNode(vnode);\n    clone.fnContext = contextVm;\n    clone.fnOptions = options;\n    if (process.env.NODE_ENV !== 'production') {\n        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =\n            renderContext;\n    }\n    if (data.slot) {\n        (clone.data || (clone.data = {})).slot = data.slot;\n    }\n    return clone;\n}\nfunction mergeProps(to, from) {\n    for (var key in from) {\n        to[camelize(key)] = from[key];\n    }\n}\n\nfunction getComponentName(options) {\n    return options.name || options.__name || options._componentTag;\n}\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n    init: function (vnode, hydrating) {\n        if (vnode.componentInstance &&\n            !vnode.componentInstance._isDestroyed &&\n            vnode.data.keepAlive) {\n            // kept-alive components, treat as a patch\n            var mountedNode = vnode; // work around flow\n            componentVNodeHooks.prepatch(mountedNode, mountedNode);\n        }\n        else {\n            var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));\n            child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n        }\n    },\n    prepatch: function (oldVnode, vnode) {\n        var options = vnode.componentOptions;\n        var child = (vnode.componentInstance = oldVnode.componentInstance);\n        updateChildComponent(child, options.propsData, // updated props\n        options.listeners, // updated listeners\n        vnode, // new parent vnode\n        options.children // new children\n        );\n    },\n    insert: function (vnode) {\n        var context = vnode.context, componentInstance = vnode.componentInstance;\n        if (!componentInstance._isMounted) {\n            componentInstance._isMounted = true;\n            callHook$1(componentInstance, 'mounted');\n        }\n        if (vnode.data.keepAlive) {\n            if (context._isMounted) {\n                // vue-router#1212\n                // During updates, a kept-alive component's child components may\n                // change, so directly walking the tree here may call activated hooks\n                // on incorrect children. Instead we push them into a queue which will\n                // be processed after the whole patch process ended.\n                queueActivatedComponent(componentInstance);\n            }\n            else {\n                activateChildComponent(componentInstance, true /* direct */);\n            }\n        }\n    },\n    destroy: function (vnode) {\n        var componentInstance = vnode.componentInstance;\n        if (!componentInstance._isDestroyed) {\n            if (!vnode.data.keepAlive) {\n                componentInstance.$destroy();\n            }\n            else {\n                deactivateChildComponent(componentInstance, true /* direct */);\n            }\n        }\n    }\n};\nvar hooksToMerge = Object.keys(componentVNodeHooks);\nfunction createComponent(Ctor, data, context, children, tag) {\n    if (isUndef(Ctor)) {\n        return;\n    }\n    var baseCtor = context.$options._base;\n    // plain options object: turn it into a constructor\n    if (isObject(Ctor)) {\n        Ctor = baseCtor.extend(Ctor);\n    }\n    // if at this stage it's not a constructor or an async component factory,\n    // reject.\n    if (typeof Ctor !== 'function') {\n        if (process.env.NODE_ENV !== 'production') {\n            warn$2(\"Invalid Component definition: \".concat(String(Ctor)), context);\n        }\n        return;\n    }\n    // async component\n    var asyncFactory;\n    // @ts-expect-error\n    if (isUndef(Ctor.cid)) {\n        asyncFactory = Ctor;\n        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n        if (Ctor === undefined) {\n            // return a placeholder node for async component, which is rendered\n            // as a comment node but preserves all the raw information for the node.\n            // the information will be used for async server-rendering and hydration.\n            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);\n        }\n    }\n    data = data || {};\n    // resolve constructor options in case global mixins are applied after\n    // component constructor creation\n    resolveConstructorOptions(Ctor);\n    // transform component v-model data into props & events\n    if (isDef(data.model)) {\n        // @ts-expect-error\n        transformModel(Ctor.options, data);\n    }\n    // extract props\n    // @ts-expect-error\n    var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n    // functional component\n    // @ts-expect-error\n    if (isTrue(Ctor.options.functional)) {\n        return createFunctionalComponent(Ctor, propsData, data, context, children);\n    }\n    // extract listeners, since these needs to be treated as\n    // child component listeners instead of DOM listeners\n    var listeners = data.on;\n    // replace with listeners with .native modifier\n    // so it gets processed during parent component patch.\n    data.on = data.nativeOn;\n    // @ts-expect-error\n    if (isTrue(Ctor.options.abstract)) {\n        // abstract components do not keep anything\n        // other than props & listeners & slot\n        // work around flow\n        var slot = data.slot;\n        data = {};\n        if (slot) {\n            data.slot = slot;\n        }\n    }\n    // install component management hooks onto the placeholder node\n    installComponentHooks(data);\n    // return a placeholder vnode\n    // @ts-expect-error\n    var name = getComponentName(Ctor.options) || tag;\n    var vnode = new VNode(\n    // @ts-expect-error\n    \"vue-component-\".concat(Ctor.cid).concat(name ? \"-\".concat(name) : ''), data, undefined, undefined, undefined, context, \n    // @ts-expect-error\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);\n    return vnode;\n}\nfunction createComponentInstanceForVnode(\n// we know it's MountedComponentVNode but flow doesn't\nvnode, \n// activeInstance in lifecycle state\nparent) {\n    var options = {\n        _isComponent: true,\n        _parentVnode: vnode,\n        parent: parent\n    };\n    // check inline-template render functions\n    var inlineTemplate = vnode.data.inlineTemplate;\n    if (isDef(inlineTemplate)) {\n        options.render = inlineTemplate.render;\n        options.staticRenderFns = inlineTemplate.staticRenderFns;\n    }\n    return new vnode.componentOptions.Ctor(options);\n}\nfunction installComponentHooks(data) {\n    var hooks = data.hook || (data.hook = {});\n    for (var i = 0; i < hooksToMerge.length; i++) {\n        var key = hooksToMerge[i];\n        var existing = hooks[key];\n        var toMerge = componentVNodeHooks[key];\n        // @ts-expect-error\n        if (existing !== toMerge && !(existing && existing._merged)) {\n            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;\n        }\n    }\n}\nfunction mergeHook(f1, f2) {\n    var merged = function (a, b) {\n        // flow complains about extra args which is why we use any\n        f1(a, b);\n        f2(a, b);\n    };\n    merged._merged = true;\n    return merged;\n}\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel(options, data) {\n    var prop = (options.model && options.model.prop) || 'value';\n    var event = (options.model && options.model.event) || 'input';\n    (data.attrs || (data.attrs = {}))[prop] = data.model.value;\n    var on = data.on || (data.on = {});\n    var existing = on[event];\n    var callback = data.model.callback;\n    if (isDef(existing)) {\n        if (isArray(existing)\n            ? existing.indexOf(callback) === -1\n            : existing !== callback) {\n            on[event] = [callback].concat(existing);\n        }\n    }\n    else {\n        on[event] = callback;\n    }\n}\n\nvar warn$2 = noop;\nvar tip = noop;\nvar generateComponentTrace; // work around flow check\nvar formatComponentName;\nif (process.env.NODE_ENV !== 'production') {\n    var hasConsole_1 = typeof console !== 'undefined';\n    var classifyRE_1 = /(?:^|[-_])(\\w)/g;\n    var classify_1 = function (str) {\n        return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');\n    };\n    warn$2 = function (msg, vm) {\n        if (vm === void 0) { vm = currentInstance; }\n        var trace = vm ? generateComponentTrace(vm) : '';\n        if (config.warnHandler) {\n            config.warnHandler.call(null, msg, vm, trace);\n        }\n        else if (hasConsole_1 && !config.silent) {\n            console.error(\"[Vue warn]: \".concat(msg).concat(trace));\n        }\n    };\n    tip = function (msg, vm) {\n        if (hasConsole_1 && !config.silent) {\n            console.warn(\"[Vue tip]: \".concat(msg) + (vm ? generateComponentTrace(vm) : ''));\n        }\n    };\n    formatComponentName = function (vm, includeFile) {\n        if (vm.$root === vm) {\n            return '<Root>';\n        }\n        var options = isFunction(vm) && vm.cid != null\n            ? vm.options\n            : vm._isVue\n                ? vm.$options || vm.constructor.options\n                : vm;\n        var name = getComponentName(options);\n        var file = options.__file;\n        if (!name && file) {\n            var match = file.match(/([^/\\\\]+)\\.vue$/);\n            name = match && match[1];\n        }\n        return ((name ? \"<\".concat(classify_1(name), \">\") : \"<Anonymous>\") +\n            (file && includeFile !== false ? \" at \".concat(file) : ''));\n    };\n    var repeat_1 = function (str, n) {\n        var res = '';\n        while (n) {\n            if (n % 2 === 1)\n                res += str;\n            if (n > 1)\n                str += str;\n            n >>= 1;\n        }\n        return res;\n    };\n    generateComponentTrace = function (vm) {\n        if (vm._isVue && vm.$parent) {\n            var tree = [];\n            var currentRecursiveSequence = 0;\n            while (vm) {\n                if (tree.length > 0) {\n                    var last = tree[tree.length - 1];\n                    if (last.constructor === vm.constructor) {\n                        currentRecursiveSequence++;\n                        vm = vm.$parent;\n                        continue;\n                    }\n                    else if (currentRecursiveSequence > 0) {\n                        tree[tree.length - 1] = [last, currentRecursiveSequence];\n                        currentRecursiveSequence = 0;\n                    }\n                }\n                tree.push(vm);\n                vm = vm.$parent;\n            }\n            return ('\\n\\nfound in\\n\\n' +\n                tree\n                    .map(function (vm, i) {\n                    return \"\".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)\n                        ? \"\".concat(formatComponentName(vm[0]), \"... (\").concat(vm[1], \" recursive calls)\")\n                        : formatComponentName(vm));\n                })\n                    .join('\\n'));\n        }\n        else {\n            return \"\\n\\n(found in \".concat(formatComponentName(vm), \")\");\n        }\n    };\n}\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n    strats.el = strats.propsData = function (parent, child, vm, key) {\n        if (!vm) {\n            warn$2(\"option \\\"\".concat(key, \"\\\" can only be used during instance \") +\n                'creation with the `new` keyword.');\n        }\n        return defaultStrat(parent, child);\n    };\n}\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData(to, from, recursive) {\n    if (recursive === void 0) { recursive = true; }\n    if (!from)\n        return to;\n    var key, toVal, fromVal;\n    var keys = hasSymbol\n        ? Reflect.ownKeys(from)\n        : Object.keys(from);\n    for (var i = 0; i < keys.length; i++) {\n        key = keys[i];\n        // in case the object is already observed...\n        if (key === '__ob__')\n            continue;\n        toVal = to[key];\n        fromVal = from[key];\n        if (!recursive || !hasOwn(to, key)) {\n            set(to, key, fromVal);\n        }\n        else if (toVal !== fromVal &&\n            isPlainObject(toVal) &&\n            isPlainObject(fromVal)) {\n            mergeData(toVal, fromVal);\n        }\n    }\n    return to;\n}\n/**\n * Data\n */\nfunction mergeDataOrFn(parentVal, childVal, vm) {\n    if (!vm) {\n        // in a Vue.extend merge, both should be functions\n        if (!childVal) {\n            return parentVal;\n        }\n        if (!parentVal) {\n            return childVal;\n        }\n        // when parentVal & childVal are both present,\n        // we need to return a function that returns the\n        // merged result of both functions... no need to\n        // check if parentVal is a function here because\n        // it has to be a function to pass previous merges.\n        return function mergedDataFn() {\n            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);\n        };\n    }\n    else {\n        return function mergedInstanceDataFn() {\n            // instance merge\n            var instanceData = isFunction(childVal)\n                ? childVal.call(vm, vm)\n                : childVal;\n            var defaultData = isFunction(parentVal)\n                ? parentVal.call(vm, vm)\n                : parentVal;\n            if (instanceData) {\n                return mergeData(instanceData, defaultData);\n            }\n            else {\n                return defaultData;\n            }\n        };\n    }\n}\nstrats.data = function (parentVal, childVal, vm) {\n    if (!vm) {\n        if (childVal && typeof childVal !== 'function') {\n            process.env.NODE_ENV !== 'production' &&\n                warn$2('The \"data\" option should be a function ' +\n                    'that returns a per-instance value in component ' +\n                    'definitions.', vm);\n            return parentVal;\n        }\n        return mergeDataOrFn(parentVal, childVal);\n    }\n    return mergeDataOrFn(parentVal, childVal, vm);\n};\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeLifecycleHook(parentVal, childVal) {\n    var res = childVal\n        ? parentVal\n            ? parentVal.concat(childVal)\n            : isArray(childVal)\n                ? childVal\n                : [childVal]\n        : parentVal;\n    return res ? dedupeHooks(res) : res;\n}\nfunction dedupeHooks(hooks) {\n    var res = [];\n    for (var i = 0; i < hooks.length; i++) {\n        if (res.indexOf(hooks[i]) === -1) {\n            res.push(hooks[i]);\n        }\n    }\n    return res;\n}\nLIFECYCLE_HOOKS.forEach(function (hook) {\n    strats[hook] = mergeLifecycleHook;\n});\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets(parentVal, childVal, vm, key) {\n    var res = Object.create(parentVal || null);\n    if (childVal) {\n        process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n        return extend(res, childVal);\n    }\n    else {\n        return res;\n    }\n}\nASSET_TYPES.forEach(function (type) {\n    strats[type + 's'] = mergeAssets;\n});\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (parentVal, childVal, vm, key) {\n    // work around Firefox's Object.prototype.watch...\n    //@ts-expect-error work around\n    if (parentVal === nativeWatch)\n        parentVal = undefined;\n    //@ts-expect-error work around\n    if (childVal === nativeWatch)\n        childVal = undefined;\n    /* istanbul ignore if */\n    if (!childVal)\n        return Object.create(parentVal || null);\n    if (process.env.NODE_ENV !== 'production') {\n        assertObjectType(key, childVal, vm);\n    }\n    if (!parentVal)\n        return childVal;\n    var ret = {};\n    extend(ret, parentVal);\n    for (var key_1 in childVal) {\n        var parent_1 = ret[key_1];\n        var child = childVal[key_1];\n        if (parent_1 && !isArray(parent_1)) {\n            parent_1 = [parent_1];\n        }\n        ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];\n    }\n    return ret;\n};\n/**\n * Other object hashes.\n */\nstrats.props =\n    strats.methods =\n        strats.inject =\n            strats.computed =\n                function (parentVal, childVal, vm, key) {\n                    if (childVal && process.env.NODE_ENV !== 'production') {\n                        assertObjectType(key, childVal, vm);\n                    }\n                    if (!parentVal)\n                        return childVal;\n                    var ret = Object.create(null);\n                    extend(ret, parentVal);\n                    if (childVal)\n                        extend(ret, childVal);\n                    return ret;\n                };\nstrats.provide = function (parentVal, childVal) {\n    if (!parentVal)\n        return childVal;\n    return function () {\n        var ret = Object.create(null);\n        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);\n        if (childVal) {\n            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive\n            );\n        }\n        return ret;\n    };\n};\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n    return childVal === undefined ? parentVal : childVal;\n};\n/**\n * Validate component names\n */\nfunction checkComponents(options) {\n    for (var key in options.components) {\n        validateComponentName(key);\n    }\n}\nfunction validateComponentName(name) {\n    if (!new RegExp(\"^[a-zA-Z][\\\\-\\\\.0-9_\".concat(unicodeRegExp.source, \"]*$\")).test(name)) {\n        warn$2('Invalid component name: \"' +\n            name +\n            '\". Component names ' +\n            'should conform to valid custom element name in html5 specification.');\n    }\n    if (isBuiltInTag(name) || config.isReservedTag(name)) {\n        warn$2('Do not use built-in or reserved HTML elements as component ' +\n            'id: ' +\n            name);\n    }\n}\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps(options, vm) {\n    var props = options.props;\n    if (!props)\n        return;\n    var res = {};\n    var i, val, name;\n    if (isArray(props)) {\n        i = props.length;\n        while (i--) {\n            val = props[i];\n            if (typeof val === 'string') {\n                name = camelize(val);\n                res[name] = { type: null };\n            }\n            else if (process.env.NODE_ENV !== 'production') {\n                warn$2('props must be strings when using array syntax.');\n            }\n        }\n    }\n    else if (isPlainObject(props)) {\n        for (var key in props) {\n            val = props[key];\n            name = camelize(key);\n            res[name] = isPlainObject(val) ? val : { type: val };\n        }\n    }\n    else if (process.env.NODE_ENV !== 'production') {\n        warn$2(\"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n            \"but got \".concat(toRawType(props), \".\"), vm);\n    }\n    options.props = res;\n}\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject(options, vm) {\n    var inject = options.inject;\n    if (!inject)\n        return;\n    var normalized = (options.inject = {});\n    if (isArray(inject)) {\n        for (var i = 0; i < inject.length; i++) {\n            normalized[inject[i]] = { from: inject[i] };\n        }\n    }\n    else if (isPlainObject(inject)) {\n        for (var key in inject) {\n            var val = inject[key];\n            normalized[key] = isPlainObject(val)\n                ? extend({ from: key }, val)\n                : { from: val };\n        }\n    }\n    else if (process.env.NODE_ENV !== 'production') {\n        warn$2(\"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n            \"but got \".concat(toRawType(inject), \".\"), vm);\n    }\n}\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives$1(options) {\n    var dirs = options.directives;\n    if (dirs) {\n        for (var key in dirs) {\n            var def = dirs[key];\n            if (isFunction(def)) {\n                dirs[key] = { bind: def, update: def };\n            }\n        }\n    }\n}\nfunction assertObjectType(name, value, vm) {\n    if (!isPlainObject(value)) {\n        warn$2(\"Invalid value for option \\\"\".concat(name, \"\\\": expected an Object, \") +\n            \"but got \".concat(toRawType(value), \".\"), vm);\n    }\n}\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions(parent, child, vm) {\n    if (process.env.NODE_ENV !== 'production') {\n        checkComponents(child);\n    }\n    if (isFunction(child)) {\n        // @ts-expect-error\n        child = child.options;\n    }\n    normalizeProps(child, vm);\n    normalizeInject(child, vm);\n    normalizeDirectives$1(child);\n    // Apply extends and mixins on the child options,\n    // but only if it is a raw options object that isn't\n    // the result of another mergeOptions call.\n    // Only merged options has the _base property.\n    if (!child._base) {\n        if (child.extends) {\n            parent = mergeOptions(parent, child.extends, vm);\n        }\n        if (child.mixins) {\n            for (var i = 0, l = child.mixins.length; i < l; i++) {\n                parent = mergeOptions(parent, child.mixins[i], vm);\n            }\n        }\n    }\n    var options = {};\n    var key;\n    for (key in parent) {\n        mergeField(key);\n    }\n    for (key in child) {\n        if (!hasOwn(parent, key)) {\n            mergeField(key);\n        }\n    }\n    function mergeField(key) {\n        var strat = strats[key] || defaultStrat;\n        options[key] = strat(parent[key], child[key], vm, key);\n    }\n    return options;\n}\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset(options, type, id, warnMissing) {\n    /* istanbul ignore if */\n    if (typeof id !== 'string') {\n        return;\n    }\n    var assets = options[type];\n    // check local registration variations first\n    if (hasOwn(assets, id))\n        return assets[id];\n    var camelizedId = camelize(id);\n    if (hasOwn(assets, camelizedId))\n        return assets[camelizedId];\n    var PascalCaseId = capitalize(camelizedId);\n    if (hasOwn(assets, PascalCaseId))\n        return assets[PascalCaseId];\n    // fallback to prototype chain\n    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n    if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);\n    }\n    return res;\n}\n\nfunction validateProp(key, propOptions, propsData, vm) {\n    var prop = propOptions[key];\n    var absent = !hasOwn(propsData, key);\n    var value = propsData[key];\n    // boolean casting\n    var booleanIndex = getTypeIndex(Boolean, prop.type);\n    if (booleanIndex > -1) {\n        if (absent && !hasOwn(prop, 'default')) {\n            value = false;\n        }\n        else if (value === '' || value === hyphenate(key)) {\n            // only cast empty string / same name to boolean if\n            // boolean has higher priority\n            var stringIndex = getTypeIndex(String, prop.type);\n            if (stringIndex < 0 || booleanIndex < stringIndex) {\n                value = true;\n            }\n        }\n    }\n    // check default value\n    if (value === undefined) {\n        value = getPropDefaultValue(vm, prop, key);\n        // since the default value is a fresh copy,\n        // make sure to observe it.\n        var prevShouldObserve = shouldObserve;\n        toggleObserving(true);\n        observe(value);\n        toggleObserving(prevShouldObserve);\n    }\n    if (process.env.NODE_ENV !== 'production') {\n        assertProp(prop, key, value, vm, absent);\n    }\n    return value;\n}\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue(vm, prop, key) {\n    // no default, return undefined\n    if (!hasOwn(prop, 'default')) {\n        return undefined;\n    }\n    var def = prop.default;\n    // warn against non-factory defaults for Object & Array\n    if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n        warn$2('Invalid default value for prop \"' +\n            key +\n            '\": ' +\n            'Props with type Object/Array must use a factory function ' +\n            'to return the default value.', vm);\n    }\n    // the raw prop value was also undefined from previous render,\n    // return previous default value to avoid unnecessary watcher trigger\n    if (vm &&\n        vm.$options.propsData &&\n        vm.$options.propsData[key] === undefined &&\n        vm._props[key] !== undefined) {\n        return vm._props[key];\n    }\n    // call factory function for non-Function types\n    // a value is Function if its prototype is function even across different execution context\n    return isFunction(def) && getType(prop.type) !== 'Function'\n        ? def.call(vm)\n        : def;\n}\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp(prop, name, value, vm, absent) {\n    if (prop.required && absent) {\n        warn$2('Missing required prop: \"' + name + '\"', vm);\n        return;\n    }\n    if (value == null && !prop.required) {\n        return;\n    }\n    var type = prop.type;\n    var valid = !type || type === true;\n    var expectedTypes = [];\n    if (type) {\n        if (!isArray(type)) {\n            type = [type];\n        }\n        for (var i = 0; i < type.length && !valid; i++) {\n            var assertedType = assertType(value, type[i], vm);\n            expectedTypes.push(assertedType.expectedType || '');\n            valid = assertedType.valid;\n        }\n    }\n    var haveExpectedTypes = expectedTypes.some(function (t) { return t; });\n    if (!valid && haveExpectedTypes) {\n        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);\n        return;\n    }\n    var validator = prop.validator;\n    if (validator) {\n        if (!validator(value)) {\n            warn$2('Invalid prop: custom validator check failed for prop \"' + name + '\".', vm);\n        }\n    }\n}\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;\nfunction assertType(value, type, vm) {\n    var valid;\n    var expectedType = getType(type);\n    if (simpleCheckRE.test(expectedType)) {\n        var t = typeof value;\n        valid = t === expectedType.toLowerCase();\n        // for primitive wrapper objects\n        if (!valid && t === 'object') {\n            valid = value instanceof type;\n        }\n    }\n    else if (expectedType === 'Object') {\n        valid = isPlainObject(value);\n    }\n    else if (expectedType === 'Array') {\n        valid = isArray(value);\n    }\n    else {\n        try {\n            valid = value instanceof type;\n        }\n        catch (e) {\n            warn$2('Invalid prop type: \"' + String(type) + '\" is not a constructor', vm);\n            valid = false;\n        }\n    }\n    return {\n        valid: valid,\n        expectedType: expectedType\n    };\n}\nvar functionTypeCheckRE = /^\\s*function (\\w+)/;\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType(fn) {\n    var match = fn && fn.toString().match(functionTypeCheckRE);\n    return match ? match[1] : '';\n}\nfunction isSameType(a, b) {\n    return getType(a) === getType(b);\n}\nfunction getTypeIndex(type, expectedTypes) {\n    if (!isArray(expectedTypes)) {\n        return isSameType(expectedTypes, type) ? 0 : -1;\n    }\n    for (var i = 0, len = expectedTypes.length; i < len; i++) {\n        if (isSameType(expectedTypes[i], type)) {\n            return i;\n        }\n    }\n    return -1;\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n    var message = \"Invalid prop: type check failed for prop \\\"\".concat(name, \"\\\".\") +\n        \" Expected \".concat(expectedTypes.map(capitalize).join(', '));\n    var expectedType = expectedTypes[0];\n    var receivedType = toRawType(value);\n    // check if we need to specify expected value\n    if (expectedTypes.length === 1 &&\n        isExplicable(expectedType) &&\n        isExplicable(typeof value) &&\n        !isBoolean(expectedType, receivedType)) {\n        message += \" with value \".concat(styleValue(value, expectedType));\n    }\n    message += \", got \".concat(receivedType, \" \");\n    // check if we need to specify received value\n    if (isExplicable(receivedType)) {\n        message += \"with value \".concat(styleValue(value, receivedType), \".\");\n    }\n    return message;\n}\nfunction styleValue(value, type) {\n    if (type === 'String') {\n        return \"\\\"\".concat(value, \"\\\"\");\n    }\n    else if (type === 'Number') {\n        return \"\".concat(Number(value));\n    }\n    else {\n        return \"\".concat(value);\n    }\n}\nvar EXPLICABLE_TYPES = ['string', 'number', 'boolean'];\nfunction isExplicable(value) {\n    return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });\n}\nfunction isBoolean() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });\n}\n\nfunction Vue(options) {\n    if (process.env.NODE_ENV !== 'production' && !(this instanceof Vue)) {\n        warn$2('Vue is a constructor and should be called with the `new` keyword');\n    }\n    this._init(options);\n}\n//@ts-expect-error Vue has function type\ninitMixin$1(Vue);\n//@ts-expect-error Vue has function type\nstateMixin(Vue);\n//@ts-expect-error Vue has function type\neventsMixin(Vue);\n//@ts-expect-error Vue has function type\nlifecycleMixin(Vue);\n//@ts-expect-error Vue has function type\nrenderMixin(Vue);\n\nfunction initUse(Vue) {\n    Vue.use = function (plugin) {\n        var installedPlugins = this._installedPlugins || (this._installedPlugins = []);\n        if (installedPlugins.indexOf(plugin) > -1) {\n            return this;\n        }\n        // additional parameters\n        var args = toArray(arguments, 1);\n        args.unshift(this);\n        if (isFunction(plugin.install)) {\n            plugin.install.apply(plugin, args);\n        }\n        else if (isFunction(plugin)) {\n            plugin.apply(null, args);\n        }\n        installedPlugins.push(plugin);\n        return this;\n    };\n}\n\nfunction initMixin(Vue) {\n    Vue.mixin = function (mixin) {\n        this.options = mergeOptions(this.options, mixin);\n        return this;\n    };\n}\n\nfunction initExtend(Vue) {\n    /**\n     * Each instance constructor, including Vue, has a unique\n     * cid. This enables us to create wrapped \"child\n     * constructors\" for prototypal inheritance and cache them.\n     */\n    Vue.cid = 0;\n    var cid = 1;\n    /**\n     * Class inheritance\n     */\n    Vue.extend = function (extendOptions) {\n        extendOptions = extendOptions || {};\n        var Super = this;\n        var SuperId = Super.cid;\n        var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n        if (cachedCtors[SuperId]) {\n            return cachedCtors[SuperId];\n        }\n        var name = getComponentName(extendOptions) || getComponentName(Super.options);\n        if (process.env.NODE_ENV !== 'production' && name) {\n            validateComponentName(name);\n        }\n        var Sub = function VueComponent(options) {\n            this._init(options);\n        };\n        Sub.prototype = Object.create(Super.prototype);\n        Sub.prototype.constructor = Sub;\n        Sub.cid = cid++;\n        Sub.options = mergeOptions(Super.options, extendOptions);\n        Sub['super'] = Super;\n        // For props and computed properties, we define the proxy getters on\n        // the Vue instances at extension time, on the extended prototype. This\n        // avoids Object.defineProperty calls for each instance created.\n        if (Sub.options.props) {\n            initProps(Sub);\n        }\n        if (Sub.options.computed) {\n            initComputed(Sub);\n        }\n        // allow further extension/mixin/plugin usage\n        Sub.extend = Super.extend;\n        Sub.mixin = Super.mixin;\n        Sub.use = Super.use;\n        // create asset registers, so extended classes\n        // can have their private assets too.\n        ASSET_TYPES.forEach(function (type) {\n            Sub[type] = Super[type];\n        });\n        // enable recursive self-lookup\n        if (name) {\n            Sub.options.components[name] = Sub;\n        }\n        // keep a reference to the super options at extension time.\n        // later at instantiation we can check if Super's options have\n        // been updated.\n        Sub.superOptions = Super.options;\n        Sub.extendOptions = extendOptions;\n        Sub.sealedOptions = extend({}, Sub.options);\n        // cache constructor\n        cachedCtors[SuperId] = Sub;\n        return Sub;\n    };\n}\nfunction initProps(Comp) {\n    var props = Comp.options.props;\n    for (var key in props) {\n        proxy(Comp.prototype, \"_props\", key);\n    }\n}\nfunction initComputed(Comp) {\n    var computed = Comp.options.computed;\n    for (var key in computed) {\n        defineComputed(Comp.prototype, key, computed[key]);\n    }\n}\n\nfunction initAssetRegisters(Vue) {\n    /**\n     * Create asset registration methods.\n     */\n    ASSET_TYPES.forEach(function (type) {\n        // @ts-expect-error function is not exact same type\n        Vue[type] = function (id, definition) {\n            if (!definition) {\n                return this.options[type + 's'][id];\n            }\n            else {\n                /* istanbul ignore if */\n                if (process.env.NODE_ENV !== 'production' && type === 'component') {\n                    validateComponentName(id);\n                }\n                if (type === 'component' && isPlainObject(definition)) {\n                    // @ts-expect-error\n                    definition.name = definition.name || id;\n                    definition = this.options._base.extend(definition);\n                }\n                if (type === 'directive' && isFunction(definition)) {\n                    definition = { bind: definition, update: definition };\n                }\n                this.options[type + 's'][id] = definition;\n                return definition;\n            }\n        };\n    });\n}\n\nfunction _getComponentName(opts) {\n    return opts && (getComponentName(opts.Ctor.options) || opts.tag);\n}\nfunction matches(pattern, name) {\n    if (isArray(pattern)) {\n        return pattern.indexOf(name) > -1;\n    }\n    else if (typeof pattern === 'string') {\n        return pattern.split(',').indexOf(name) > -1;\n    }\n    else if (isRegExp(pattern)) {\n        return pattern.test(name);\n    }\n    /* istanbul ignore next */\n    return false;\n}\nfunction pruneCache(keepAliveInstance, filter) {\n    var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode, $vnode = keepAliveInstance.$vnode;\n    for (var key in cache) {\n        var entry = cache[key];\n        if (entry) {\n            var name_1 = entry.name;\n            if (name_1 && !filter(name_1)) {\n                pruneCacheEntry(cache, key, keys, _vnode);\n            }\n        }\n    }\n    $vnode.componentOptions.children = undefined;\n}\nfunction pruneCacheEntry(cache, key, keys, current) {\n    var entry = cache[key];\n    if (entry && (!current || entry.tag !== current.tag)) {\n        // @ts-expect-error can be undefined\n        entry.componentInstance.$destroy();\n    }\n    cache[key] = null;\n    remove$2(keys, key);\n}\nvar patternTypes = [String, RegExp, Array];\n// TODO defineComponent\nvar KeepAlive = {\n    name: 'keep-alive',\n    abstract: true,\n    props: {\n        include: patternTypes,\n        exclude: patternTypes,\n        max: [String, Number]\n    },\n    methods: {\n        cacheVNode: function () {\n            var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;\n            if (vnodeToCache) {\n                var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;\n                cache[keyToCache] = {\n                    name: _getComponentName(componentOptions),\n                    tag: tag,\n                    componentInstance: componentInstance\n                };\n                keys.push(keyToCache);\n                // prune oldest entry\n                if (this.max && keys.length > parseInt(this.max)) {\n                    pruneCacheEntry(cache, keys[0], keys, this._vnode);\n                }\n                this.vnodeToCache = null;\n            }\n        }\n    },\n    created: function () {\n        this.cache = Object.create(null);\n        this.keys = [];\n    },\n    destroyed: function () {\n        for (var key in this.cache) {\n            pruneCacheEntry(this.cache, key, this.keys);\n        }\n    },\n    mounted: function () {\n        var _this = this;\n        this.cacheVNode();\n        this.$watch('include', function (val) {\n            pruneCache(_this, function (name) { return matches(val, name); });\n        });\n        this.$watch('exclude', function (val) {\n            pruneCache(_this, function (name) { return !matches(val, name); });\n        });\n    },\n    updated: function () {\n        this.cacheVNode();\n    },\n    render: function () {\n        var slot = this.$slots.default;\n        var vnode = getFirstComponentChild(slot);\n        var componentOptions = vnode && vnode.componentOptions;\n        if (componentOptions) {\n            // check pattern\n            var name_2 = _getComponentName(componentOptions);\n            var _a = this, include = _a.include, exclude = _a.exclude;\n            if (\n            // not included\n            (include && (!name_2 || !matches(include, name_2))) ||\n                // excluded\n                (exclude && name_2 && matches(exclude, name_2))) {\n                return vnode;\n            }\n            var _b = this, cache = _b.cache, keys = _b.keys;\n            var key = vnode.key == null\n                ? // same constructor may get registered as different local components\n                    // so cid alone is not enough (#3269)\n                    componentOptions.Ctor.cid +\n                        (componentOptions.tag ? \"::\".concat(componentOptions.tag) : '')\n                : vnode.key;\n            if (cache[key]) {\n                vnode.componentInstance = cache[key].componentInstance;\n                // make current key freshest\n                remove$2(keys, key);\n                keys.push(key);\n            }\n            else {\n                // delay setting the cache until update\n                this.vnodeToCache = vnode;\n                this.keyToCache = key;\n            }\n            // @ts-expect-error can vnode.data can be undefined\n            vnode.data.keepAlive = true;\n        }\n        return vnode || (slot && slot[0]);\n    }\n};\n\nvar builtInComponents = {\n    KeepAlive: KeepAlive\n};\n\nfunction initGlobalAPI(Vue) {\n    // config\n    var configDef = {};\n    configDef.get = function () { return config; };\n    if (process.env.NODE_ENV !== 'production') {\n        configDef.set = function () {\n            warn$2('Do not replace the Vue.config object, set individual fields instead.');\n        };\n    }\n    Object.defineProperty(Vue, 'config', configDef);\n    // exposed util methods.\n    // NOTE: these are not considered part of the public API - avoid relying on\n    // them unless you are aware of the risk.\n    Vue.util = {\n        warn: warn$2,\n        extend: extend,\n        mergeOptions: mergeOptions,\n        defineReactive: defineReactive\n    };\n    Vue.set = set;\n    Vue.delete = del;\n    Vue.nextTick = nextTick;\n    // 2.6 explicit observable API\n    Vue.observable = function (obj) {\n        observe(obj);\n        return obj;\n    };\n    Vue.options = Object.create(null);\n    ASSET_TYPES.forEach(function (type) {\n        Vue.options[type + 's'] = Object.create(null);\n    });\n    // this is used to identify the \"base\" constructor to extend all plain-object\n    // components with in Weex's multi-instance scenarios.\n    Vue.options._base = Vue;\n    extend(Vue.options.components, builtInComponents);\n    initUse(Vue);\n    initMixin(Vue);\n    initExtend(Vue);\n    initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\nObject.defineProperty(Vue.prototype, '$isServer', {\n    get: isServerRendering\n});\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n    get: function () {\n        /* istanbul ignore next */\n        return this.$vnode && this.$vnode.ssrContext;\n    }\n});\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n    value: FunctionalRenderContext\n});\nVue.version = version;\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||\n        (attr === 'selected' && tag === 'option') ||\n        (attr === 'checked' && tag === 'input') ||\n        (attr === 'muted' && tag === 'video'));\n};\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\nvar convertEnumeratedValue = function (key, value) {\n    return isFalsyAttrValue(value) || value === 'false'\n        ? 'false'\n        : // allow arbitrary string value for contenteditable\n            key === 'contenteditable' && isValidContentEditableValue(value)\n                ? value\n                : 'true';\n};\nvar isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n    'required,reversed,scoped,seamless,selected,sortable,' +\n    'truespeed,typemustmatch,visible');\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\nvar isXlink = function (name) {\n    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';\n};\nvar getXlinkProp = function (name) {\n    return isXlink(name) ? name.slice(6, name.length) : '';\n};\nvar isFalsyAttrValue = function (val) {\n    return val == null || val === false;\n};\n\nfunction genClassForVnode(vnode) {\n    var data = vnode.data;\n    var parentNode = vnode;\n    var childNode = vnode;\n    while (isDef(childNode.componentInstance)) {\n        childNode = childNode.componentInstance._vnode;\n        if (childNode && childNode.data) {\n            data = mergeClassData(childNode.data, data);\n        }\n    }\n    // @ts-expect-error parentNode.parent not VNodeWithData\n    while (isDef((parentNode = parentNode.parent))) {\n        if (parentNode && parentNode.data) {\n            data = mergeClassData(data, parentNode.data);\n        }\n    }\n    return renderClass(data.staticClass, data.class);\n}\nfunction mergeClassData(child, parent) {\n    return {\n        staticClass: concat(child.staticClass, parent.staticClass),\n        class: isDef(child.class) ? [child.class, parent.class] : parent.class\n    };\n}\nfunction renderClass(staticClass, dynamicClass) {\n    if (isDef(staticClass) || isDef(dynamicClass)) {\n        return concat(staticClass, stringifyClass(dynamicClass));\n    }\n    /* istanbul ignore next */\n    return '';\n}\nfunction concat(a, b) {\n    return a ? (b ? a + ' ' + b : a) : b || '';\n}\nfunction stringifyClass(value) {\n    if (Array.isArray(value)) {\n        return stringifyArray(value);\n    }\n    if (isObject(value)) {\n        return stringifyObject(value);\n    }\n    if (typeof value === 'string') {\n        return value;\n    }\n    /* istanbul ignore next */\n    return '';\n}\nfunction stringifyArray(value) {\n    var res = '';\n    var stringified;\n    for (var i = 0, l = value.length; i < l; i++) {\n        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {\n            if (res)\n                res += ' ';\n            res += stringified;\n        }\n    }\n    return res;\n}\nfunction stringifyObject(value) {\n    var res = '';\n    for (var key in value) {\n        if (value[key]) {\n            if (res)\n                res += ' ';\n            res += key;\n        }\n    }\n    return res;\n}\n\nvar namespaceMap = {\n    svg: 'http://www.w3.org/2000/svg',\n    math: 'http://www.w3.org/1998/Math/MathML'\n};\nvar isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +\n    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n    'embed,object,param,source,canvas,script,noscript,del,ins,' +\n    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n    'output,progress,select,textarea,' +\n    'details,dialog,menu,menuitem,summary,' +\n    'content,element,shadow,template,blockquote,iframe,tfoot');\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);\nvar isPreTag = function (tag) { return tag === 'pre'; };\nvar isReservedTag = function (tag) {\n    return isHTMLTag(tag) || isSVG(tag);\n};\nfunction getTagNamespace(tag) {\n    if (isSVG(tag)) {\n        return 'svg';\n    }\n    // basic support for MathML\n    // note it doesn't support other MathML elements being component roots\n    if (tag === 'math') {\n        return 'math';\n    }\n}\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement(tag) {\n    /* istanbul ignore if */\n    if (!inBrowser) {\n        return true;\n    }\n    if (isReservedTag(tag)) {\n        return false;\n    }\n    tag = tag.toLowerCase();\n    /* istanbul ignore if */\n    if (unknownElementCache[tag] != null) {\n        return unknownElementCache[tag];\n    }\n    var el = document.createElement(tag);\n    if (tag.indexOf('-') > -1) {\n        // https://stackoverflow.com/a/28210364/1070244\n        return (unknownElementCache[tag] =\n            el.constructor === window.HTMLUnknownElement ||\n                el.constructor === window.HTMLElement);\n    }\n    else {\n        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));\n    }\n}\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query(el) {\n    if (typeof el === 'string') {\n        var selected = document.querySelector(el);\n        if (!selected) {\n            process.env.NODE_ENV !== 'production' && warn$2('Cannot find element: ' + el);\n            return document.createElement('div');\n        }\n        return selected;\n    }\n    else {\n        return el;\n    }\n}\n\nfunction createElement(tagName, vnode) {\n    var elm = document.createElement(tagName);\n    if (tagName !== 'select') {\n        return elm;\n    }\n    // false or null will remove the attribute but undefined will not\n    if (vnode.data &&\n        vnode.data.attrs &&\n        vnode.data.attrs.multiple !== undefined) {\n        elm.setAttribute('multiple', 'multiple');\n    }\n    return elm;\n}\nfunction createElementNS(namespace, tagName) {\n    return document.createElementNS(namespaceMap[namespace], tagName);\n}\nfunction createTextNode(text) {\n    return document.createTextNode(text);\n}\nfunction createComment(text) {\n    return document.createComment(text);\n}\nfunction insertBefore(parentNode, newNode, referenceNode) {\n    parentNode.insertBefore(newNode, referenceNode);\n}\nfunction removeChild(node, child) {\n    node.removeChild(child);\n}\nfunction appendChild(node, child) {\n    node.appendChild(child);\n}\nfunction parentNode(node) {\n    return node.parentNode;\n}\nfunction nextSibling(node) {\n    return node.nextSibling;\n}\nfunction tagName(node) {\n    return node.tagName;\n}\nfunction setTextContent(node, text) {\n    node.textContent = text;\n}\nfunction setStyleScope(node, scopeId) {\n    node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  createElement: createElement,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\nvar ref = {\n    create: function (_, vnode) {\n        registerRef(vnode);\n    },\n    update: function (oldVnode, vnode) {\n        if (oldVnode.data.ref !== vnode.data.ref) {\n            registerRef(oldVnode, true);\n            registerRef(vnode);\n        }\n    },\n    destroy: function (vnode) {\n        registerRef(vnode, true);\n    }\n};\nfunction registerRef(vnode, isRemoval) {\n    var ref = vnode.data.ref;\n    if (!isDef(ref))\n        return;\n    var vm = vnode.context;\n    var refValue = vnode.componentInstance || vnode.elm;\n    var value = isRemoval ? null : refValue;\n    var $refsValue = isRemoval ? undefined : refValue;\n    if (isFunction(ref)) {\n        invokeWithErrorHandling(ref, vm, [value], vm, \"template ref function\");\n        return;\n    }\n    var isFor = vnode.data.refInFor;\n    var _isString = typeof ref === 'string' || typeof ref === 'number';\n    var _isRef = isRef(ref);\n    var refs = vm.$refs;\n    if (_isString || _isRef) {\n        if (isFor) {\n            var existing = _isString ? refs[ref] : ref.value;\n            if (isRemoval) {\n                isArray(existing) && remove$2(existing, refValue);\n            }\n            else {\n                if (!isArray(existing)) {\n                    if (_isString) {\n                        refs[ref] = [refValue];\n                        setSetupRef(vm, ref, refs[ref]);\n                    }\n                    else {\n                        ref.value = [refValue];\n                    }\n                }\n                else if (!existing.includes(refValue)) {\n                    existing.push(refValue);\n                }\n            }\n        }\n        else if (_isString) {\n            if (isRemoval && refs[ref] !== refValue) {\n                return;\n            }\n            refs[ref] = $refsValue;\n            setSetupRef(vm, ref, value);\n        }\n        else if (_isRef) {\n            if (isRemoval && ref.value !== refValue) {\n                return;\n            }\n            ref.value = value;\n        }\n        else if (process.env.NODE_ENV !== 'production') {\n            warn$2(\"Invalid template ref type: \".concat(typeof ref));\n        }\n    }\n}\nfunction setSetupRef(_a, key, val) {\n    var _setupState = _a._setupState;\n    if (_setupState && hasOwn(_setupState, key)) {\n        if (isRef(_setupState[key])) {\n            _setupState[key].value = val;\n        }\n        else {\n            _setupState[key] = val;\n        }\n    }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\nvar emptyNode = new VNode('', {}, []);\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\nfunction sameVnode(a, b) {\n    return (a.key === b.key &&\n        a.asyncFactory === b.asyncFactory &&\n        ((a.tag === b.tag &&\n            a.isComment === b.isComment &&\n            isDef(a.data) === isDef(b.data) &&\n            sameInputType(a, b)) ||\n            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));\n}\nfunction sameInputType(a, b) {\n    if (a.tag !== 'input')\n        return true;\n    var i;\n    var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;\n    var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;\n    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n    var i, key;\n    var map = {};\n    for (i = beginIdx; i <= endIdx; ++i) {\n        key = children[i].key;\n        if (isDef(key))\n            map[key] = i;\n    }\n    return map;\n}\nfunction createPatchFunction(backend) {\n    var i, j;\n    var cbs = {};\n    var modules = backend.modules, nodeOps = backend.nodeOps;\n    for (i = 0; i < hooks.length; ++i) {\n        cbs[hooks[i]] = [];\n        for (j = 0; j < modules.length; ++j) {\n            if (isDef(modules[j][hooks[i]])) {\n                cbs[hooks[i]].push(modules[j][hooks[i]]);\n            }\n        }\n    }\n    function emptyNodeAt(elm) {\n        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);\n    }\n    function createRmCb(childElm, listeners) {\n        function remove() {\n            if (--remove.listeners === 0) {\n                removeNode(childElm);\n            }\n        }\n        remove.listeners = listeners;\n        return remove;\n    }\n    function removeNode(el) {\n        var parent = nodeOps.parentNode(el);\n        // element may have already been removed due to v-html / v-text\n        if (isDef(parent)) {\n            nodeOps.removeChild(parent, el);\n        }\n    }\n    function isUnknownElement(vnode, inVPre) {\n        return (!inVPre &&\n            !vnode.ns &&\n            !(config.ignoredElements.length &&\n                config.ignoredElements.some(function (ignore) {\n                    return isRegExp(ignore)\n                        ? ignore.test(vnode.tag)\n                        : ignore === vnode.tag;\n                })) &&\n            config.isUnknownElement(vnode.tag));\n    }\n    var creatingElmInVPre = 0;\n    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {\n        if (isDef(vnode.elm) && isDef(ownerArray)) {\n            // This vnode was used in a previous render!\n            // now it's used as a new node, overwriting its elm would cause\n            // potential patch errors down the road when it's used as an insertion\n            // reference node. Instead, we clone the node on-demand before creating\n            // associated DOM element for it.\n            vnode = ownerArray[index] = cloneVNode(vnode);\n        }\n        vnode.isRootInsert = !nested; // for transition enter check\n        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n            return;\n        }\n        var data = vnode.data;\n        var children = vnode.children;\n        var tag = vnode.tag;\n        if (isDef(tag)) {\n            if (process.env.NODE_ENV !== 'production') {\n                if (data && data.pre) {\n                    creatingElmInVPre++;\n                }\n                if (isUnknownElement(vnode, creatingElmInVPre)) {\n                    warn$2('Unknown custom element: <' +\n                        tag +\n                        '> - did you ' +\n                        'register the component correctly? For recursive components, ' +\n                        'make sure to provide the \"name\" option.', vnode.context);\n                }\n            }\n            vnode.elm = vnode.ns\n                ? nodeOps.createElementNS(vnode.ns, tag)\n                : nodeOps.createElement(tag, vnode);\n            setScope(vnode);\n            createChildren(vnode, children, insertedVnodeQueue);\n            if (isDef(data)) {\n                invokeCreateHooks(vnode, insertedVnodeQueue);\n            }\n            insert(parentElm, vnode.elm, refElm);\n            if (process.env.NODE_ENV !== 'production' && data && data.pre) {\n                creatingElmInVPre--;\n            }\n        }\n        else if (isTrue(vnode.isComment)) {\n            vnode.elm = nodeOps.createComment(vnode.text);\n            insert(parentElm, vnode.elm, refElm);\n        }\n        else {\n            vnode.elm = nodeOps.createTextNode(vnode.text);\n            insert(parentElm, vnode.elm, refElm);\n        }\n    }\n    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\n        var i = vnode.data;\n        if (isDef(i)) {\n            var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n            if (isDef((i = i.hook)) && isDef((i = i.init))) {\n                i(vnode, false /* hydrating */);\n            }\n            // after calling the init hook, if the vnode is a child component\n            // it should've created a child instance and mounted it. the child\n            // component also has set the placeholder vnode's elm.\n            // in that case we can just return the element and be done.\n            if (isDef(vnode.componentInstance)) {\n                initComponent(vnode, insertedVnodeQueue);\n                insert(parentElm, vnode.elm, refElm);\n                if (isTrue(isReactivated)) {\n                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n                }\n                return true;\n            }\n        }\n    }\n    function initComponent(vnode, insertedVnodeQueue) {\n        if (isDef(vnode.data.pendingInsert)) {\n            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n            vnode.data.pendingInsert = null;\n        }\n        vnode.elm = vnode.componentInstance.$el;\n        if (isPatchable(vnode)) {\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            setScope(vnode);\n        }\n        else {\n            // empty component root.\n            // skip all element-related modules except for ref (#3455)\n            registerRef(vnode);\n            // make sure to invoke the insert hook\n            insertedVnodeQueue.push(vnode);\n        }\n    }\n    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {\n        var i;\n        // hack for #4339: a reactivated component with inner transition\n        // does not trigger because the inner node's created hooks are not called\n        // again. It's not ideal to involve module-specific logic in here but\n        // there doesn't seem to be a better way to do it.\n        var innerNode = vnode;\n        while (innerNode.componentInstance) {\n            innerNode = innerNode.componentInstance._vnode;\n            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {\n                for (i = 0; i < cbs.activate.length; ++i) {\n                    cbs.activate[i](emptyNode, innerNode);\n                }\n                insertedVnodeQueue.push(innerNode);\n                break;\n            }\n        }\n        // unlike a newly created component,\n        // a reactivated keep-alive component doesn't insert itself\n        insert(parentElm, vnode.elm, refElm);\n    }\n    function insert(parent, elm, ref) {\n        if (isDef(parent)) {\n            if (isDef(ref)) {\n                if (nodeOps.parentNode(ref) === parent) {\n                    nodeOps.insertBefore(parent, elm, ref);\n                }\n            }\n            else {\n                nodeOps.appendChild(parent, elm);\n            }\n        }\n    }\n    function createChildren(vnode, children, insertedVnodeQueue) {\n        if (isArray(children)) {\n            if (process.env.NODE_ENV !== 'production') {\n                checkDuplicateKeys(children);\n            }\n            for (var i_1 = 0; i_1 < children.length; ++i_1) {\n                createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);\n            }\n        }\n        else if (isPrimitive(vnode.text)) {\n            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n        }\n    }\n    function isPatchable(vnode) {\n        while (vnode.componentInstance) {\n            vnode = vnode.componentInstance._vnode;\n        }\n        return isDef(vnode.tag);\n    }\n    function invokeCreateHooks(vnode, insertedVnodeQueue) {\n        for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {\n            cbs.create[i_2](emptyNode, vnode);\n        }\n        i = vnode.data.hook; // Reuse variable\n        if (isDef(i)) {\n            if (isDef(i.create))\n                i.create(emptyNode, vnode);\n            if (isDef(i.insert))\n                insertedVnodeQueue.push(vnode);\n        }\n    }\n    // set scope id attribute for scoped CSS.\n    // this is implemented as a special case to avoid the overhead\n    // of going through the normal attribute patching process.\n    function setScope(vnode) {\n        var i;\n        if (isDef((i = vnode.fnScopeId))) {\n            nodeOps.setStyleScope(vnode.elm, i);\n        }\n        else {\n            var ancestor = vnode;\n            while (ancestor) {\n                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {\n                    nodeOps.setStyleScope(vnode.elm, i);\n                }\n                ancestor = ancestor.parent;\n            }\n        }\n        // for slot content they should also get the scopeId from the host instance.\n        if (isDef((i = activeInstance)) &&\n            i !== vnode.context &&\n            i !== vnode.fnContext &&\n            isDef((i = i.$options._scopeId))) {\n            nodeOps.setStyleScope(vnode.elm, i);\n        }\n    }\n    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n        for (; startIdx <= endIdx; ++startIdx) {\n            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n        }\n    }\n    function invokeDestroyHook(vnode) {\n        var i, j;\n        var data = vnode.data;\n        if (isDef(data)) {\n            if (isDef((i = data.hook)) && isDef((i = i.destroy)))\n                i(vnode);\n            for (i = 0; i < cbs.destroy.length; ++i)\n                cbs.destroy[i](vnode);\n        }\n        if (isDef((i = vnode.children))) {\n            for (j = 0; j < vnode.children.length; ++j) {\n                invokeDestroyHook(vnode.children[j]);\n            }\n        }\n    }\n    function removeVnodes(vnodes, startIdx, endIdx) {\n        for (; startIdx <= endIdx; ++startIdx) {\n            var ch = vnodes[startIdx];\n            if (isDef(ch)) {\n                if (isDef(ch.tag)) {\n                    removeAndInvokeRemoveHook(ch);\n                    invokeDestroyHook(ch);\n                }\n                else {\n                    // Text node\n                    removeNode(ch.elm);\n                }\n            }\n        }\n    }\n    function removeAndInvokeRemoveHook(vnode, rm) {\n        if (isDef(rm) || isDef(vnode.data)) {\n            var i_3;\n            var listeners = cbs.remove.length + 1;\n            if (isDef(rm)) {\n                // we have a recursively passed down rm callback\n                // increase the listeners count\n                rm.listeners += listeners;\n            }\n            else {\n                // directly removing\n                rm = createRmCb(vnode.elm, listeners);\n            }\n            // recursively invoke hooks on child component root node\n            if (isDef((i_3 = vnode.componentInstance)) &&\n                isDef((i_3 = i_3._vnode)) &&\n                isDef(i_3.data)) {\n                removeAndInvokeRemoveHook(i_3, rm);\n            }\n            for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {\n                cbs.remove[i_3](vnode, rm);\n            }\n            if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {\n                i_3(vnode, rm);\n            }\n            else {\n                rm();\n            }\n        }\n        else {\n            removeNode(vnode.elm);\n        }\n    }\n    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n        var oldStartIdx = 0;\n        var newStartIdx = 0;\n        var oldEndIdx = oldCh.length - 1;\n        var oldStartVnode = oldCh[0];\n        var oldEndVnode = oldCh[oldEndIdx];\n        var newEndIdx = newCh.length - 1;\n        var newStartVnode = newCh[0];\n        var newEndVnode = newCh[newEndIdx];\n        var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n        // removeOnly is a special flag used only by <transition-group>\n        // to ensure removed elements stay in correct relative positions\n        // during leaving transitions\n        var canMove = !removeOnly;\n        if (process.env.NODE_ENV !== 'production') {\n            checkDuplicateKeys(newCh);\n        }\n        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n            if (isUndef(oldStartVnode)) {\n                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n            }\n            else if (isUndef(oldEndVnode)) {\n                oldEndVnode = oldCh[--oldEndIdx];\n            }\n            else if (sameVnode(oldStartVnode, newStartVnode)) {\n                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n                oldStartVnode = oldCh[++oldStartIdx];\n                newStartVnode = newCh[++newStartIdx];\n            }\n            else if (sameVnode(oldEndVnode, newEndVnode)) {\n                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n                oldEndVnode = oldCh[--oldEndIdx];\n                newEndVnode = newCh[--newEndIdx];\n            }\n            else if (sameVnode(oldStartVnode, newEndVnode)) {\n                // Vnode moved right\n                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n                canMove &&\n                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n                oldStartVnode = oldCh[++oldStartIdx];\n                newEndVnode = newCh[--newEndIdx];\n            }\n            else if (sameVnode(oldEndVnode, newStartVnode)) {\n                // Vnode moved left\n                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n                canMove &&\n                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n                oldEndVnode = oldCh[--oldEndIdx];\n                newStartVnode = newCh[++newStartIdx];\n            }\n            else {\n                if (isUndef(oldKeyToIdx))\n                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n                idxInOld = isDef(newStartVnode.key)\n                    ? oldKeyToIdx[newStartVnode.key]\n                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n                if (isUndef(idxInOld)) {\n                    // New element\n                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n                }\n                else {\n                    vnodeToMove = oldCh[idxInOld];\n                    if (sameVnode(vnodeToMove, newStartVnode)) {\n                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n                        oldCh[idxInOld] = undefined;\n                        canMove &&\n                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n                    }\n                    else {\n                        // same key but different element. treat as new element\n                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n                    }\n                }\n                newStartVnode = newCh[++newStartIdx];\n            }\n        }\n        if (oldStartIdx > oldEndIdx) {\n            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n        }\n        else if (newStartIdx > newEndIdx) {\n            removeVnodes(oldCh, oldStartIdx, oldEndIdx);\n        }\n    }\n    function checkDuplicateKeys(children) {\n        var seenKeys = {};\n        for (var i_4 = 0; i_4 < children.length; i_4++) {\n            var vnode = children[i_4];\n            var key = vnode.key;\n            if (isDef(key)) {\n                if (seenKeys[key]) {\n                    warn$2(\"Duplicate keys detected: '\".concat(key, \"'. This may cause an update error.\"), vnode.context);\n                }\n                else {\n                    seenKeys[key] = true;\n                }\n            }\n        }\n    }\n    function findIdxInOld(node, oldCh, start, end) {\n        for (var i_5 = start; i_5 < end; i_5++) {\n            var c = oldCh[i_5];\n            if (isDef(c) && sameVnode(node, c))\n                return i_5;\n        }\n    }\n    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {\n        if (oldVnode === vnode) {\n            return;\n        }\n        if (isDef(vnode.elm) && isDef(ownerArray)) {\n            // clone reused vnode\n            vnode = ownerArray[index] = cloneVNode(vnode);\n        }\n        var elm = (vnode.elm = oldVnode.elm);\n        if (isTrue(oldVnode.isAsyncPlaceholder)) {\n            if (isDef(vnode.asyncFactory.resolved)) {\n                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n            }\n            else {\n                vnode.isAsyncPlaceholder = true;\n            }\n            return;\n        }\n        // reuse element for static trees.\n        // note we only do this if the vnode is cloned -\n        // if the new node is not cloned it means the render functions have been\n        // reset by the hot-reload-api and we need to do a proper re-render.\n        if (isTrue(vnode.isStatic) &&\n            isTrue(oldVnode.isStatic) &&\n            vnode.key === oldVnode.key &&\n            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {\n            vnode.componentInstance = oldVnode.componentInstance;\n            return;\n        }\n        var i;\n        var data = vnode.data;\n        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {\n            i(oldVnode, vnode);\n        }\n        var oldCh = oldVnode.children;\n        var ch = vnode.children;\n        if (isDef(data) && isPatchable(vnode)) {\n            for (i = 0; i < cbs.update.length; ++i)\n                cbs.update[i](oldVnode, vnode);\n            if (isDef((i = data.hook)) && isDef((i = i.update)))\n                i(oldVnode, vnode);\n        }\n        if (isUndef(vnode.text)) {\n            if (isDef(oldCh) && isDef(ch)) {\n                if (oldCh !== ch)\n                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);\n            }\n            else if (isDef(ch)) {\n                if (process.env.NODE_ENV !== 'production') {\n                    checkDuplicateKeys(ch);\n                }\n                if (isDef(oldVnode.text))\n                    nodeOps.setTextContent(elm, '');\n                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n            }\n            else if (isDef(oldCh)) {\n                removeVnodes(oldCh, 0, oldCh.length - 1);\n            }\n            else if (isDef(oldVnode.text)) {\n                nodeOps.setTextContent(elm, '');\n            }\n        }\n        else if (oldVnode.text !== vnode.text) {\n            nodeOps.setTextContent(elm, vnode.text);\n        }\n        if (isDef(data)) {\n            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))\n                i(oldVnode, vnode);\n        }\n    }\n    function invokeInsertHook(vnode, queue, initial) {\n        // delay insert hooks for component root nodes, invoke them after the\n        // element is really inserted\n        if (isTrue(initial) && isDef(vnode.parent)) {\n            vnode.parent.data.pendingInsert = queue;\n        }\n        else {\n            for (var i_6 = 0; i_6 < queue.length; ++i_6) {\n                queue[i_6].data.hook.insert(queue[i_6]);\n            }\n        }\n    }\n    var hydrationBailed = false;\n    // list of modules that can skip create hook during hydration because they\n    // are already rendered on the client or has no need for initialization\n    // Note: style is excluded because it relies on initial clone for future\n    // deep updates (#7063).\n    var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n    // Note: this is a browser-only function so we can assume elms are DOM nodes.\n    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {\n        var i;\n        var tag = vnode.tag, data = vnode.data, children = vnode.children;\n        inVPre = inVPre || (data && data.pre);\n        vnode.elm = elm;\n        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n            vnode.isAsyncPlaceholder = true;\n            return true;\n        }\n        // assert node match\n        if (process.env.NODE_ENV !== 'production') {\n            if (!assertNodeMatch(elm, vnode, inVPre)) {\n                return false;\n            }\n        }\n        if (isDef(data)) {\n            if (isDef((i = data.hook)) && isDef((i = i.init)))\n                i(vnode, true /* hydrating */);\n            if (isDef((i = vnode.componentInstance))) {\n                // child component. it should have hydrated its own tree.\n                initComponent(vnode, insertedVnodeQueue);\n                return true;\n            }\n        }\n        if (isDef(tag)) {\n            if (isDef(children)) {\n                // empty element, allow client to pick up and populate children\n                if (!elm.hasChildNodes()) {\n                    createChildren(vnode, children, insertedVnodeQueue);\n                }\n                else {\n                    // v-html and domProps: innerHTML\n                    if (isDef((i = data)) &&\n                        isDef((i = i.domProps)) &&\n                        isDef((i = i.innerHTML))) {\n                        if (i !== elm.innerHTML) {\n                            /* istanbul ignore if */\n                            if (process.env.NODE_ENV !== 'production' &&\n                                typeof console !== 'undefined' &&\n                                !hydrationBailed) {\n                                hydrationBailed = true;\n                                console.warn('Parent: ', elm);\n                                console.warn('server innerHTML: ', i);\n                                console.warn('client innerHTML: ', elm.innerHTML);\n                            }\n                            return false;\n                        }\n                    }\n                    else {\n                        // iterate and compare children lists\n                        var childrenMatch = true;\n                        var childNode = elm.firstChild;\n                        for (var i_7 = 0; i_7 < children.length; i_7++) {\n                            if (!childNode ||\n                                !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {\n                                childrenMatch = false;\n                                break;\n                            }\n                            childNode = childNode.nextSibling;\n                        }\n                        // if childNode is not null, it means the actual childNodes list is\n                        // longer than the virtual children list.\n                        if (!childrenMatch || childNode) {\n                            /* istanbul ignore if */\n                            if (process.env.NODE_ENV !== 'production' &&\n                                typeof console !== 'undefined' &&\n                                !hydrationBailed) {\n                                hydrationBailed = true;\n                                console.warn('Parent: ', elm);\n                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n                            }\n                            return false;\n                        }\n                    }\n                }\n            }\n            if (isDef(data)) {\n                var fullInvoke = false;\n                for (var key in data) {\n                    if (!isRenderedModule(key)) {\n                        fullInvoke = true;\n                        invokeCreateHooks(vnode, insertedVnodeQueue);\n                        break;\n                    }\n                }\n                if (!fullInvoke && data['class']) {\n                    // ensure collecting deps for deep class bindings for future updates\n                    traverse(data['class']);\n                }\n            }\n        }\n        else if (elm.data !== vnode.text) {\n            elm.data = vnode.text;\n        }\n        return true;\n    }\n    function assertNodeMatch(node, vnode, inVPre) {\n        if (isDef(vnode.tag)) {\n            return (vnode.tag.indexOf('vue-component') === 0 ||\n                (!isUnknownElement(vnode, inVPre) &&\n                    vnode.tag.toLowerCase() ===\n                        (node.tagName && node.tagName.toLowerCase())));\n        }\n        else {\n            return node.nodeType === (vnode.isComment ? 8 : 3);\n        }\n    }\n    return function patch(oldVnode, vnode, hydrating, removeOnly) {\n        if (isUndef(vnode)) {\n            if (isDef(oldVnode))\n                invokeDestroyHook(oldVnode);\n            return;\n        }\n        var isInitialPatch = false;\n        var insertedVnodeQueue = [];\n        if (isUndef(oldVnode)) {\n            // empty mount (likely as component), create new root element\n            isInitialPatch = true;\n            createElm(vnode, insertedVnodeQueue);\n        }\n        else {\n            var isRealElement = isDef(oldVnode.nodeType);\n            if (!isRealElement && sameVnode(oldVnode, vnode)) {\n                // patch existing root node\n                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n            }\n            else {\n                if (isRealElement) {\n                    // mounting to a real element\n                    // check if this is server-rendered content and if we can perform\n                    // a successful hydration.\n                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n                        oldVnode.removeAttribute(SSR_ATTR);\n                        hydrating = true;\n                    }\n                    if (isTrue(hydrating)) {\n                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n                            invokeInsertHook(vnode, insertedVnodeQueue, true);\n                            return oldVnode;\n                        }\n                        else if (process.env.NODE_ENV !== 'production') {\n                            warn$2('The client-side rendered virtual DOM tree is not matching ' +\n                                'server-rendered content. This is likely caused by incorrect ' +\n                                'HTML markup, for example nesting block-level elements inside ' +\n                                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                                'full client-side render.');\n                        }\n                    }\n                    // either not server-rendered, or hydration failed.\n                    // create an empty node and replace it\n                    oldVnode = emptyNodeAt(oldVnode);\n                }\n                // replacing existing element\n                var oldElm = oldVnode.elm;\n                var parentElm = nodeOps.parentNode(oldElm);\n                // create new node\n                createElm(vnode, insertedVnodeQueue, \n                // extremely rare edge case: do not insert if old element is in a\n                // leaving transition. Only happens when combining transition +\n                // keep-alive + HOCs. (#4590)\n                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));\n                // update parent placeholder node element, recursively\n                if (isDef(vnode.parent)) {\n                    var ancestor = vnode.parent;\n                    var patchable = isPatchable(vnode);\n                    while (ancestor) {\n                        for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {\n                            cbs.destroy[i_8](ancestor);\n                        }\n                        ancestor.elm = vnode.elm;\n                        if (patchable) {\n                            for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {\n                                cbs.create[i_9](emptyNode, ancestor);\n                            }\n                            // #6513\n                            // invoke insert hooks that may have been merged by create hooks.\n                            // e.g. for directives that uses the \"inserted\" hook.\n                            var insert_1 = ancestor.data.hook.insert;\n                            if (insert_1.merged) {\n                                // start at index 1 to avoid re-invoking component mounted hook\n                                // clone insert hooks to avoid being mutated during iteration.\n                                // e.g. for customed directives under transition group.\n                                var cloned = insert_1.fns.slice(1);\n                                for (var i_10 = 0; i_10 < cloned.length; i_10++) {\n                                    cloned[i_10]();\n                                }\n                            }\n                        }\n                        else {\n                            registerRef(ancestor);\n                        }\n                        ancestor = ancestor.parent;\n                    }\n                }\n                // destroy old node\n                if (isDef(parentElm)) {\n                    removeVnodes([oldVnode], 0, 0);\n                }\n                else if (isDef(oldVnode.tag)) {\n                    invokeDestroyHook(oldVnode);\n                }\n            }\n        }\n        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n        return vnode.elm;\n    };\n}\n\nvar directives$1 = {\n    create: updateDirectives,\n    update: updateDirectives,\n    destroy: function unbindDirectives(vnode) {\n        // @ts-expect-error emptyNode is not VNodeWithData\n        updateDirectives(vnode, emptyNode);\n    }\n};\nfunction updateDirectives(oldVnode, vnode) {\n    if (oldVnode.data.directives || vnode.data.directives) {\n        _update(oldVnode, vnode);\n    }\n}\nfunction _update(oldVnode, vnode) {\n    var isCreate = oldVnode === emptyNode;\n    var isDestroy = vnode === emptyNode;\n    var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);\n    var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);\n    var dirsWithInsert = [];\n    var dirsWithPostpatch = [];\n    var key, oldDir, dir;\n    for (key in newDirs) {\n        oldDir = oldDirs[key];\n        dir = newDirs[key];\n        if (!oldDir) {\n            // new directive, bind\n            callHook(dir, 'bind', vnode, oldVnode);\n            if (dir.def && dir.def.inserted) {\n                dirsWithInsert.push(dir);\n            }\n        }\n        else {\n            // existing directive, update\n            dir.oldValue = oldDir.value;\n            dir.oldArg = oldDir.arg;\n            callHook(dir, 'update', vnode, oldVnode);\n            if (dir.def && dir.def.componentUpdated) {\n                dirsWithPostpatch.push(dir);\n            }\n        }\n    }\n    if (dirsWithInsert.length) {\n        var callInsert = function () {\n            for (var i = 0; i < dirsWithInsert.length; i++) {\n                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n            }\n        };\n        if (isCreate) {\n            mergeVNodeHook(vnode, 'insert', callInsert);\n        }\n        else {\n            callInsert();\n        }\n    }\n    if (dirsWithPostpatch.length) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n            for (var i = 0; i < dirsWithPostpatch.length; i++) {\n                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n            }\n        });\n    }\n    if (!isCreate) {\n        for (key in oldDirs) {\n            if (!newDirs[key]) {\n                // no longer present, unbind\n                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n            }\n        }\n    }\n}\nvar emptyModifiers = Object.create(null);\nfunction normalizeDirectives(dirs, vm) {\n    var res = Object.create(null);\n    if (!dirs) {\n        // $flow-disable-line\n        return res;\n    }\n    var i, dir;\n    for (i = 0; i < dirs.length; i++) {\n        dir = dirs[i];\n        if (!dir.modifiers) {\n            // $flow-disable-line\n            dir.modifiers = emptyModifiers;\n        }\n        res[getRawDirName(dir)] = dir;\n        if (vm._setupState && vm._setupState.__sfc) {\n            var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);\n            if (typeof setupDef === 'function') {\n                dir.def = {\n                    bind: setupDef,\n                    update: setupDef,\n                };\n            }\n            else {\n                dir.def = setupDef;\n            }\n        }\n        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);\n    }\n    // $flow-disable-line\n    return res;\n}\nfunction getRawDirName(dir) {\n    return (dir.rawName || \"\".concat(dir.name, \".\").concat(Object.keys(dir.modifiers || {}).join('.')));\n}\nfunction callHook(dir, hook, vnode, oldVnode, isDestroy) {\n    var fn = dir.def && dir.def[hook];\n    if (fn) {\n        try {\n            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n        }\n        catch (e) {\n            handleError(e, vnode.context, \"directive \".concat(dir.name, \" \").concat(hook, \" hook\"));\n        }\n    }\n}\n\nvar baseModules = [ref, directives$1];\n\nfunction updateAttrs(oldVnode, vnode) {\n    var opts = vnode.componentOptions;\n    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n        return;\n    }\n    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n        return;\n    }\n    var key, cur, old;\n    var elm = vnode.elm;\n    var oldAttrs = oldVnode.data.attrs || {};\n    var attrs = vnode.data.attrs || {};\n    // clone observed objects, as the user probably wants to mutate it\n    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {\n        attrs = vnode.data.attrs = extend({}, attrs);\n    }\n    for (key in attrs) {\n        cur = attrs[key];\n        old = oldAttrs[key];\n        if (old !== cur) {\n            setAttr(elm, key, cur, vnode.data.pre);\n        }\n    }\n    // #4391: in IE9, setting type can reset value for input[type=radio]\n    // #6666: IE/Edge forces progress value down to 1 before setting a max\n    /* istanbul ignore if */\n    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n        setAttr(elm, 'value', attrs.value);\n    }\n    for (key in oldAttrs) {\n        if (isUndef(attrs[key])) {\n            if (isXlink(key)) {\n                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n            }\n            else if (!isEnumeratedAttr(key)) {\n                elm.removeAttribute(key);\n            }\n        }\n    }\n}\nfunction setAttr(el, key, value, isInPre) {\n    if (isInPre || el.tagName.indexOf('-') > -1) {\n        baseSetAttr(el, key, value);\n    }\n    else if (isBooleanAttr(key)) {\n        // set attribute for blank value\n        // e.g. <option disabled>Select one</option>\n        if (isFalsyAttrValue(value)) {\n            el.removeAttribute(key);\n        }\n        else {\n            // technically allowfullscreen is a boolean attribute for <iframe>,\n            // but Flash expects a value of \"true\" when used on <embed> tag\n            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;\n            el.setAttribute(key, value);\n        }\n    }\n    else if (isEnumeratedAttr(key)) {\n        el.setAttribute(key, convertEnumeratedValue(key, value));\n    }\n    else if (isXlink(key)) {\n        if (isFalsyAttrValue(value)) {\n            el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n        }\n        else {\n            el.setAttributeNS(xlinkNS, key, value);\n        }\n    }\n    else {\n        baseSetAttr(el, key, value);\n    }\n}\nfunction baseSetAttr(el, key, value) {\n    if (isFalsyAttrValue(value)) {\n        el.removeAttribute(key);\n    }\n    else {\n        // #7138: IE10 & 11 fires input event when setting placeholder on\n        // <textarea>... block the first input event and remove the blocker\n        // immediately.\n        /* istanbul ignore if */\n        if (isIE &&\n            !isIE9 &&\n            el.tagName === 'TEXTAREA' &&\n            key === 'placeholder' &&\n            value !== '' &&\n            !el.__ieph) {\n            var blocker_1 = function (e) {\n                e.stopImmediatePropagation();\n                el.removeEventListener('input', blocker_1);\n            };\n            el.addEventListener('input', blocker_1);\n            // $flow-disable-line\n            el.__ieph = true; /* IE placeholder patched */\n        }\n        el.setAttribute(key, value);\n    }\n}\nvar attrs = {\n    create: updateAttrs,\n    update: updateAttrs\n};\n\nfunction updateClass(oldVnode, vnode) {\n    var el = vnode.elm;\n    var data = vnode.data;\n    var oldData = oldVnode.data;\n    if (isUndef(data.staticClass) &&\n        isUndef(data.class) &&\n        (isUndef(oldData) ||\n            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {\n        return;\n    }\n    var cls = genClassForVnode(vnode);\n    // handle transition classes\n    var transitionClass = el._transitionClasses;\n    if (isDef(transitionClass)) {\n        cls = concat(cls, stringifyClass(transitionClass));\n    }\n    // set the class\n    if (cls !== el._prevClass) {\n        el.setAttribute('class', cls);\n        el._prevClass = cls;\n    }\n}\nvar klass$1 = {\n    create: updateClass,\n    update: updateClass\n};\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nfunction parseFilters(exp) {\n    var inSingle = false;\n    var inDouble = false;\n    var inTemplateString = false;\n    var inRegex = false;\n    var curly = 0;\n    var square = 0;\n    var paren = 0;\n    var lastFilterIndex = 0;\n    var c, prev, i, expression, filters;\n    for (i = 0; i < exp.length; i++) {\n        prev = c;\n        c = exp.charCodeAt(i);\n        if (inSingle) {\n            if (c === 0x27 && prev !== 0x5c)\n                inSingle = false;\n        }\n        else if (inDouble) {\n            if (c === 0x22 && prev !== 0x5c)\n                inDouble = false;\n        }\n        else if (inTemplateString) {\n            if (c === 0x60 && prev !== 0x5c)\n                inTemplateString = false;\n        }\n        else if (inRegex) {\n            if (c === 0x2f && prev !== 0x5c)\n                inRegex = false;\n        }\n        else if (c === 0x7c && // pipe\n            exp.charCodeAt(i + 1) !== 0x7c &&\n            exp.charCodeAt(i - 1) !== 0x7c &&\n            !curly &&\n            !square &&\n            !paren) {\n            if (expression === undefined) {\n                // first filter, end of expression\n                lastFilterIndex = i + 1;\n                expression = exp.slice(0, i).trim();\n            }\n            else {\n                pushFilter();\n            }\n        }\n        else {\n            switch (c) {\n                case 0x22:\n                    inDouble = true;\n                    break; // \"\n                case 0x27:\n                    inSingle = true;\n                    break; // '\n                case 0x60:\n                    inTemplateString = true;\n                    break; // `\n                case 0x28:\n                    paren++;\n                    break; // (\n                case 0x29:\n                    paren--;\n                    break; // )\n                case 0x5b:\n                    square++;\n                    break; // [\n                case 0x5d:\n                    square--;\n                    break; // ]\n                case 0x7b:\n                    curly++;\n                    break; // {\n                case 0x7d:\n                    curly--;\n                    break; // }\n            }\n            if (c === 0x2f) {\n                // /\n                var j = i - 1;\n                var p \n                // find first non-whitespace prev char\n                = void 0;\n                // find first non-whitespace prev char\n                for (; j >= 0; j--) {\n                    p = exp.charAt(j);\n                    if (p !== ' ')\n                        break;\n                }\n                if (!p || !validDivisionCharRE.test(p)) {\n                    inRegex = true;\n                }\n            }\n        }\n    }\n    if (expression === undefined) {\n        expression = exp.slice(0, i).trim();\n    }\n    else if (lastFilterIndex !== 0) {\n        pushFilter();\n    }\n    function pushFilter() {\n        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n        lastFilterIndex = i + 1;\n    }\n    if (filters) {\n        for (i = 0; i < filters.length; i++) {\n            expression = wrapFilter(expression, filters[i]);\n        }\n    }\n    return expression;\n}\nfunction wrapFilter(exp, filter) {\n    var i = filter.indexOf('(');\n    if (i < 0) {\n        // _f: resolveFilter\n        return \"_f(\\\"\".concat(filter, \"\\\")(\").concat(exp, \")\");\n    }\n    else {\n        var name_1 = filter.slice(0, i);\n        var args = filter.slice(i + 1);\n        return \"_f(\\\"\".concat(name_1, \"\\\")(\").concat(exp).concat(args !== ')' ? ',' + args : args);\n    }\n}\n\n/* eslint-disable no-unused-vars */\nfunction baseWarn(msg, range) {\n    console.error(\"[Vue compiler]: \".concat(msg));\n}\n/* eslint-enable no-unused-vars */\nfunction pluckModuleFunction(modules, key) {\n    return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];\n}\nfunction addProp(el, name, value, range, dynamic) {\n    (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n    el.plain = false;\n}\nfunction addAttr(el, name, value, range, dynamic) {\n    var attrs = dynamic\n        ? el.dynamicAttrs || (el.dynamicAttrs = [])\n        : el.attrs || (el.attrs = []);\n    attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n    el.plain = false;\n}\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr(el, name, value, range) {\n    el.attrsMap[name] = value;\n    el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n}\nfunction addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {\n    (el.directives || (el.directives = [])).push(rangeSetItem({\n        name: name,\n        rawName: rawName,\n        value: value,\n        arg: arg,\n        isDynamicArg: isDynamicArg,\n        modifiers: modifiers\n    }, range));\n    el.plain = false;\n}\nfunction prependModifierMarker(symbol, name, dynamic) {\n    return dynamic ? \"_p(\".concat(name, \",\\\"\").concat(symbol, \"\\\")\") : symbol + name; // mark the event as captured\n}\nfunction addHandler(el, name, value, modifiers, important, warn, range, dynamic) {\n    modifiers = modifiers || emptyObject;\n    // warn prevent and passive modifier\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && warn && modifiers.prevent && modifiers.passive) {\n        warn(\"passive and prevent can't be used together. \" +\n            \"Passive handler can't prevent default event.\", range);\n    }\n    // normalize click.right and click.middle since they don't actually fire\n    // this is technically browser-specific, but at least for now browsers are\n    // the only target envs that have right/middle clicks.\n    if (modifiers.right) {\n        if (dynamic) {\n            name = \"(\".concat(name, \")==='click'?'contextmenu':(\").concat(name, \")\");\n        }\n        else if (name === 'click') {\n            name = 'contextmenu';\n            delete modifiers.right;\n        }\n    }\n    else if (modifiers.middle) {\n        if (dynamic) {\n            name = \"(\".concat(name, \")==='click'?'mouseup':(\").concat(name, \")\");\n        }\n        else if (name === 'click') {\n            name = 'mouseup';\n        }\n    }\n    // check capture modifier\n    if (modifiers.capture) {\n        delete modifiers.capture;\n        name = prependModifierMarker('!', name, dynamic);\n    }\n    if (modifiers.once) {\n        delete modifiers.once;\n        name = prependModifierMarker('~', name, dynamic);\n    }\n    /* istanbul ignore if */\n    if (modifiers.passive) {\n        delete modifiers.passive;\n        name = prependModifierMarker('&', name, dynamic);\n    }\n    var events;\n    if (modifiers.native) {\n        delete modifiers.native;\n        events = el.nativeEvents || (el.nativeEvents = {});\n    }\n    else {\n        events = el.events || (el.events = {});\n    }\n    var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n    if (modifiers !== emptyObject) {\n        newHandler.modifiers = modifiers;\n    }\n    var handlers = events[name];\n    /* istanbul ignore if */\n    if (Array.isArray(handlers)) {\n        important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n    }\n    else if (handlers) {\n        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n    }\n    else {\n        events[name] = newHandler;\n    }\n    el.plain = false;\n}\nfunction getRawBindingAttr(el, name) {\n    return (el.rawAttrsMap[':' + name] ||\n        el.rawAttrsMap['v-bind:' + name] ||\n        el.rawAttrsMap[name]);\n}\nfunction getBindingAttr(el, name, getStatic) {\n    var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);\n    if (dynamicValue != null) {\n        return parseFilters(dynamicValue);\n    }\n    else if (getStatic !== false) {\n        var staticValue = getAndRemoveAttr(el, name);\n        if (staticValue != null) {\n            return JSON.stringify(staticValue);\n        }\n    }\n}\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr(el, name, removeFromMap) {\n    var val;\n    if ((val = el.attrsMap[name]) != null) {\n        var list = el.attrsList;\n        for (var i = 0, l = list.length; i < l; i++) {\n            if (list[i].name === name) {\n                list.splice(i, 1);\n                break;\n            }\n        }\n    }\n    if (removeFromMap) {\n        delete el.attrsMap[name];\n    }\n    return val;\n}\nfunction getAndRemoveAttrByRegex(el, name) {\n    var list = el.attrsList;\n    for (var i = 0, l = list.length; i < l; i++) {\n        var attr = list[i];\n        if (name.test(attr.name)) {\n            list.splice(i, 1);\n            return attr;\n        }\n    }\n}\nfunction rangeSetItem(item, range) {\n    if (range) {\n        if (range.start != null) {\n            item.start = range.start;\n        }\n        if (range.end != null) {\n            item.end = range.end;\n        }\n    }\n    return item;\n}\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel(el, value, modifiers) {\n    var _a = modifiers || {}, number = _a.number, trim = _a.trim;\n    var baseValueExpression = '$$v';\n    var valueExpression = baseValueExpression;\n    if (trim) {\n        valueExpression =\n            \"(typeof \".concat(baseValueExpression, \" === 'string'\") +\n                \"? \".concat(baseValueExpression, \".trim()\") +\n                \": \".concat(baseValueExpression, \")\");\n    }\n    if (number) {\n        valueExpression = \"_n(\".concat(valueExpression, \")\");\n    }\n    var assignment = genAssignmentCode(value, valueExpression);\n    el.model = {\n        value: \"(\".concat(value, \")\"),\n        expression: JSON.stringify(value),\n        callback: \"function (\".concat(baseValueExpression, \") {\").concat(assignment, \"}\")\n    };\n}\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode(value, assignment) {\n    var res = parseModel(value);\n    if (res.key === null) {\n        return \"\".concat(value, \"=\").concat(assignment);\n    }\n    else {\n        return \"$set(\".concat(res.exp, \", \").concat(res.key, \", \").concat(assignment, \")\");\n    }\n}\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\nvar len, str, chr, index, expressionPos, expressionEndPos;\nfunction parseModel(val) {\n    // Fix https://github.com/vuejs/vue/pull/7730\n    // allow v-model=\"obj.val \" (trailing whitespace)\n    val = val.trim();\n    len = val.length;\n    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n        index = val.lastIndexOf('.');\n        if (index > -1) {\n            return {\n                exp: val.slice(0, index),\n                key: '\"' + val.slice(index + 1) + '\"'\n            };\n        }\n        else {\n            return {\n                exp: val,\n                key: null\n            };\n        }\n    }\n    str = val;\n    index = expressionPos = expressionEndPos = 0;\n    while (!eof()) {\n        chr = next();\n        /* istanbul ignore if */\n        if (isStringStart(chr)) {\n            parseString(chr);\n        }\n        else if (chr === 0x5b) {\n            parseBracket(chr);\n        }\n    }\n    return {\n        exp: val.slice(0, expressionPos),\n        key: val.slice(expressionPos + 1, expressionEndPos)\n    };\n}\nfunction next() {\n    return str.charCodeAt(++index);\n}\nfunction eof() {\n    return index >= len;\n}\nfunction isStringStart(chr) {\n    return chr === 0x22 || chr === 0x27;\n}\nfunction parseBracket(chr) {\n    var inBracket = 1;\n    expressionPos = index;\n    while (!eof()) {\n        chr = next();\n        if (isStringStart(chr)) {\n            parseString(chr);\n            continue;\n        }\n        if (chr === 0x5b)\n            inBracket++;\n        if (chr === 0x5d)\n            inBracket--;\n        if (inBracket === 0) {\n            expressionEndPos = index;\n            break;\n        }\n    }\n}\nfunction parseString(chr) {\n    var stringQuote = chr;\n    while (!eof()) {\n        chr = next();\n        if (chr === stringQuote) {\n            break;\n        }\n    }\n}\n\nvar warn$1;\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\nfunction model$1(el, dir, _warn) {\n    warn$1 = _warn;\n    var value = dir.value;\n    var modifiers = dir.modifiers;\n    var tag = el.tag;\n    var type = el.attrsMap.type;\n    if (process.env.NODE_ENV !== 'production') {\n        // inputs with type=\"file\" are read only and setting the input's\n        // value will throw an error.\n        if (tag === 'input' && type === 'file') {\n            warn$1(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\" type=\\\"file\\\">:\\n\") +\n                \"File inputs are read only. Use a v-on:change listener instead.\", el.rawAttrsMap['v-model']);\n        }\n    }\n    if (el.component) {\n        genComponentModel(el, value, modifiers);\n        // component v-model doesn't need extra runtime\n        return false;\n    }\n    else if (tag === 'select') {\n        genSelect(el, value, modifiers);\n    }\n    else if (tag === 'input' && type === 'checkbox') {\n        genCheckboxModel(el, value, modifiers);\n    }\n    else if (tag === 'input' && type === 'radio') {\n        genRadioModel(el, value, modifiers);\n    }\n    else if (tag === 'input' || tag === 'textarea') {\n        genDefaultModel(el, value, modifiers);\n    }\n    else if (!config.isReservedTag(tag)) {\n        genComponentModel(el, value, modifiers);\n        // component v-model doesn't need extra runtime\n        return false;\n    }\n    else if (process.env.NODE_ENV !== 'production') {\n        warn$1(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\">: \") +\n            \"v-model is not supported on this element type. \" +\n            \"If you are working with contenteditable, it's recommended to \" +\n            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);\n    }\n    // ensure runtime directive metadata\n    return true;\n}\nfunction genCheckboxModel(el, value, modifiers) {\n    var number = modifiers && modifiers.number;\n    var valueBinding = getBindingAttr(el, 'value') || 'null';\n    var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n    var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n    addProp(el, 'checked', \"Array.isArray(\".concat(value, \")\") +\n        \"?_i(\".concat(value, \",\").concat(valueBinding, \")>-1\") +\n        (trueValueBinding === 'true'\n            ? \":(\".concat(value, \")\")\n            : \":_q(\".concat(value, \",\").concat(trueValueBinding, \")\")));\n    addHandler(el, 'change', \"var $$a=\".concat(value, \",\") +\n        '$$el=$event.target,' +\n        \"$$c=$$el.checked?(\".concat(trueValueBinding, \"):(\").concat(falseValueBinding, \");\") +\n        'if(Array.isArray($$a)){' +\n        \"var $$v=\".concat(number ? '_n(' + valueBinding + ')' : valueBinding, \",\") +\n        '$$i=_i($$a,$$v);' +\n        \"if($$el.checked){$$i<0&&(\".concat(genAssignmentCode(value, '$$a.concat([$$v])'), \")}\") +\n        \"else{$$i>-1&&(\".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), \")}\") +\n        \"}else{\".concat(genAssignmentCode(value, '$$c'), \"}\"), null, true);\n}\nfunction genRadioModel(el, value, modifiers) {\n    var number = modifiers && modifiers.number;\n    var valueBinding = getBindingAttr(el, 'value') || 'null';\n    valueBinding = number ? \"_n(\".concat(valueBinding, \")\") : valueBinding;\n    addProp(el, 'checked', \"_q(\".concat(value, \",\").concat(valueBinding, \")\"));\n    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\nfunction genSelect(el, value, modifiers) {\n    var number = modifiers && modifiers.number;\n    var selectedVal = \"Array.prototype.filter\" +\n        \".call($event.target.options,function(o){return o.selected})\" +\n        \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n        \"return \".concat(number ? '_n(val)' : 'val', \"})\");\n    var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n    var code = \"var $$selectedVal = \".concat(selectedVal, \";\");\n    code = \"\".concat(code, \" \").concat(genAssignmentCode(value, assignment));\n    addHandler(el, 'change', code, null, true);\n}\nfunction genDefaultModel(el, value, modifiers) {\n    var type = el.attrsMap.type;\n    // warn if v-bind:value conflicts with v-model\n    // except for inputs with v-bind:type\n    if (process.env.NODE_ENV !== 'production') {\n        var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n        var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n        if (value_1 && !typeBinding) {\n            var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n            warn$1(\"\".concat(binding, \"=\\\"\").concat(value_1, \"\\\" conflicts with v-model on the same element \") +\n                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);\n        }\n    }\n    var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;\n    var needCompositionGuard = !lazy && type !== 'range';\n    var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';\n    var valueExpression = '$event.target.value';\n    if (trim) {\n        valueExpression = \"$event.target.value.trim()\";\n    }\n    if (number) {\n        valueExpression = \"_n(\".concat(valueExpression, \")\");\n    }\n    var code = genAssignmentCode(value, valueExpression);\n    if (needCompositionGuard) {\n        code = \"if($event.target.composing)return;\".concat(code);\n    }\n    addProp(el, 'value', \"(\".concat(value, \")\"));\n    addHandler(el, event, code, null, true);\n    if (trim || number) {\n        addHandler(el, 'blur', '$forceUpdate()');\n    }\n}\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents(on) {\n    /* istanbul ignore if */\n    if (isDef(on[RANGE_TOKEN])) {\n        // IE input[type=range] only supports `change` event\n        var event_1 = isIE ? 'change' : 'input';\n        on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);\n        delete on[RANGE_TOKEN];\n    }\n    // This was originally intended to fix #4521 but no longer necessary\n    // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n    /* istanbul ignore if */\n    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n        delete on[CHECKBOX_RADIO_TOKEN];\n    }\n}\nvar target;\nfunction createOnceHandler(event, handler, capture) {\n    var _target = target; // save current target element in closure\n    return function onceHandler() {\n        var res = handler.apply(null, arguments);\n        if (res !== null) {\n            remove(event, onceHandler, capture, _target);\n        }\n    };\n}\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\nfunction add(name, handler, capture, passive) {\n    // async edge case #6566: inner click event triggers patch, event handler\n    // attached to outer element during patch, and triggered again. This\n    // happens because browsers fire microtask ticks between event propagation.\n    // the solution is simple: we save the timestamp when a handler is attached,\n    // and the handler would only fire if the event passed to it was fired\n    // AFTER it was attached.\n    if (useMicrotaskFix) {\n        var attachedTimestamp_1 = currentFlushTimestamp;\n        var original_1 = handler;\n        //@ts-expect-error\n        handler = original_1._wrapper = function (e) {\n            if (\n            // no bubbling, should always fire.\n            // this is just a safety net in case event.timeStamp is unreliable in\n            // certain weird environments...\n            e.target === e.currentTarget ||\n                // event is fired after handler attachment\n                e.timeStamp >= attachedTimestamp_1 ||\n                // bail for environments that have buggy event.timeStamp implementations\n                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n                // #9681 QtWebEngine event.timeStamp is negative value\n                e.timeStamp <= 0 ||\n                // #9448 bail if event is fired in another document in a multi-page\n                // electron/nw.js app, since event.timeStamp will be using a different\n                // starting reference\n                e.target.ownerDocument !== document) {\n                return original_1.apply(this, arguments);\n            }\n        };\n    }\n    target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);\n}\nfunction remove(name, handler, capture, _target) {\n    (_target || target).removeEventListener(name, \n    //@ts-expect-error\n    handler._wrapper || handler, capture);\n}\nfunction updateDOMListeners(oldVnode, vnode) {\n    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n        return;\n    }\n    var on = vnode.data.on || {};\n    var oldOn = oldVnode.data.on || {};\n    // vnode is empty when removing all listeners,\n    // and use old vnode dom element\n    target = vnode.elm || oldVnode.elm;\n    normalizeEvents(on);\n    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);\n    target = undefined;\n}\nvar events = {\n    create: updateDOMListeners,\n    update: updateDOMListeners,\n    // @ts-expect-error emptyNode has actually data\n    destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }\n};\n\nvar svgContainer;\nfunction updateDOMProps(oldVnode, vnode) {\n    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n        return;\n    }\n    var key, cur;\n    var elm = vnode.elm;\n    var oldProps = oldVnode.data.domProps || {};\n    var props = vnode.data.domProps || {};\n    // clone observed objects, as the user probably wants to mutate it\n    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {\n        props = vnode.data.domProps = extend({}, props);\n    }\n    for (key in oldProps) {\n        if (!(key in props)) {\n            elm[key] = '';\n        }\n    }\n    for (key in props) {\n        cur = props[key];\n        // ignore children if the node has textContent or innerHTML,\n        // as these will throw away existing DOM nodes and cause removal errors\n        // on subsequent patches (#3360)\n        if (key === 'textContent' || key === 'innerHTML') {\n            if (vnode.children)\n                vnode.children.length = 0;\n            if (cur === oldProps[key])\n                continue;\n            // #6601 work around Chrome version <= 55 bug where single textNode\n            // replaced by innerHTML/textContent retains its parentNode property\n            if (elm.childNodes.length === 1) {\n                elm.removeChild(elm.childNodes[0]);\n            }\n        }\n        if (key === 'value' && elm.tagName !== 'PROGRESS') {\n            // store value as _value as well since\n            // non-string values will be stringified\n            elm._value = cur;\n            // avoid resetting cursor position when value is the same\n            var strCur = isUndef(cur) ? '' : String(cur);\n            if (shouldUpdateValue(elm, strCur)) {\n                elm.value = strCur;\n            }\n        }\n        else if (key === 'innerHTML' &&\n            isSVG(elm.tagName) &&\n            isUndef(elm.innerHTML)) {\n            // IE doesn't support innerHTML for SVG elements\n            svgContainer = svgContainer || document.createElement('div');\n            svgContainer.innerHTML = \"<svg>\".concat(cur, \"</svg>\");\n            var svg = svgContainer.firstChild;\n            while (elm.firstChild) {\n                elm.removeChild(elm.firstChild);\n            }\n            while (svg.firstChild) {\n                elm.appendChild(svg.firstChild);\n            }\n        }\n        else if (\n        // skip the update if old and new VDOM state is the same.\n        // `value` is handled separately because the DOM value may be temporarily\n        // out of sync with VDOM state due to focus, composition and modifiers.\n        // This  #4521 by skipping the unnecessary `checked` update.\n        cur !== oldProps[key]) {\n            // some property updates can throw\n            // e.g. `value` on <progress> w/ non-finite value\n            try {\n                elm[key] = cur;\n            }\n            catch (e) { }\n        }\n    }\n}\nfunction shouldUpdateValue(elm, checkVal) {\n    return (\n    //@ts-expect-error\n    !elm.composing &&\n        (elm.tagName === 'OPTION' ||\n            isNotInFocusAndDirty(elm, checkVal) ||\n            isDirtyWithModifiers(elm, checkVal)));\n}\nfunction isNotInFocusAndDirty(elm, checkVal) {\n    // return true when textbox (.number and .trim) loses focus and its value is\n    // not equal to the updated value\n    var notInFocus = true;\n    // #6157\n    // work around IE bug when accessing document.activeElement in an iframe\n    try {\n        notInFocus = document.activeElement !== elm;\n    }\n    catch (e) { }\n    return notInFocus && elm.value !== checkVal;\n}\nfunction isDirtyWithModifiers(elm, newVal) {\n    var value = elm.value;\n    var modifiers = elm._vModifiers; // injected by v-model runtime\n    if (isDef(modifiers)) {\n        if (modifiers.number) {\n            return toNumber(value) !== toNumber(newVal);\n        }\n        if (modifiers.trim) {\n            return value.trim() !== newVal.trim();\n        }\n    }\n    return value !== newVal;\n}\nvar domProps = {\n    create: updateDOMProps,\n    update: updateDOMProps\n};\n\nvar parseStyleText = cached(function (cssText) {\n    var res = {};\n    var listDelimiter = /;(?![^(]*\\))/g;\n    var propertyDelimiter = /:(.+)/;\n    cssText.split(listDelimiter).forEach(function (item) {\n        if (item) {\n            var tmp = item.split(propertyDelimiter);\n            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n        }\n    });\n    return res;\n});\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData(data) {\n    var style = normalizeStyleBinding(data.style);\n    // static style is pre-processed into an object during compilation\n    // and is always a fresh object, so it's safe to merge into it\n    return data.staticStyle ? extend(data.staticStyle, style) : style;\n}\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding(bindingStyle) {\n    if (Array.isArray(bindingStyle)) {\n        return toObject(bindingStyle);\n    }\n    if (typeof bindingStyle === 'string') {\n        return parseStyleText(bindingStyle);\n    }\n    return bindingStyle;\n}\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle(vnode, checkChild) {\n    var res = {};\n    var styleData;\n    if (checkChild) {\n        var childNode = vnode;\n        while (childNode.componentInstance) {\n            childNode = childNode.componentInstance._vnode;\n            if (childNode &&\n                childNode.data &&\n                (styleData = normalizeStyleData(childNode.data))) {\n                extend(res, styleData);\n            }\n        }\n    }\n    if ((styleData = normalizeStyleData(vnode.data))) {\n        extend(res, styleData);\n    }\n    var parentNode = vnode;\n    // @ts-expect-error parentNode.parent not VNodeWithData\n    while ((parentNode = parentNode.parent)) {\n        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n            extend(res, styleData);\n        }\n    }\n    return res;\n}\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n    /* istanbul ignore if */\n    if (cssVarRE.test(name)) {\n        el.style.setProperty(name, val);\n    }\n    else if (importantRE.test(val)) {\n        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n    }\n    else {\n        var normalizedName = normalize(name);\n        if (Array.isArray(val)) {\n            // Support values array created by autoprefixer, e.g.\n            // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n            // Set them one by one, and the browser will only set those it can recognize\n            for (var i = 0, len = val.length; i < len; i++) {\n                el.style[normalizedName] = val[i];\n            }\n        }\n        else {\n            el.style[normalizedName] = val;\n        }\n    }\n};\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n    emptyStyle = emptyStyle || document.createElement('div').style;\n    prop = camelize(prop);\n    if (prop !== 'filter' && prop in emptyStyle) {\n        return prop;\n    }\n    var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n    for (var i = 0; i < vendorNames.length; i++) {\n        var name_1 = vendorNames[i] + capName;\n        if (name_1 in emptyStyle) {\n            return name_1;\n        }\n    }\n});\nfunction updateStyle(oldVnode, vnode) {\n    var data = vnode.data;\n    var oldData = oldVnode.data;\n    if (isUndef(data.staticStyle) &&\n        isUndef(data.style) &&\n        isUndef(oldData.staticStyle) &&\n        isUndef(oldData.style)) {\n        return;\n    }\n    var cur, name;\n    var el = vnode.elm;\n    var oldStaticStyle = oldData.staticStyle;\n    var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n    // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n    var oldStyle = oldStaticStyle || oldStyleBinding;\n    var style = normalizeStyleBinding(vnode.data.style) || {};\n    // store normalized style under a different key for next diff\n    // make sure to clone it if it's reactive, since the user likely wants\n    // to mutate it.\n    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;\n    var newStyle = getStyle(vnode, true);\n    for (name in oldStyle) {\n        if (isUndef(newStyle[name])) {\n            setProp(el, name, '');\n        }\n    }\n    for (name in newStyle) {\n        cur = newStyle[name];\n        // ie9 setting to null has no effect, must use empty string\n        setProp(el, name, cur == null ? '' : cur);\n    }\n}\nvar style$1 = {\n    create: updateStyle,\n    update: updateStyle\n};\n\nvar whitespaceRE$1 = /\\s+/;\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass(el, cls) {\n    /* istanbul ignore if */\n    if (!cls || !(cls = cls.trim())) {\n        return;\n    }\n    /* istanbul ignore else */\n    if (el.classList) {\n        if (cls.indexOf(' ') > -1) {\n            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });\n        }\n        else {\n            el.classList.add(cls);\n        }\n    }\n    else {\n        var cur = \" \".concat(el.getAttribute('class') || '', \" \");\n        if (cur.indexOf(' ' + cls + ' ') < 0) {\n            el.setAttribute('class', (cur + cls).trim());\n        }\n    }\n}\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass(el, cls) {\n    /* istanbul ignore if */\n    if (!cls || !(cls = cls.trim())) {\n        return;\n    }\n    /* istanbul ignore else */\n    if (el.classList) {\n        if (cls.indexOf(' ') > -1) {\n            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });\n        }\n        else {\n            el.classList.remove(cls);\n        }\n        if (!el.classList.length) {\n            el.removeAttribute('class');\n        }\n    }\n    else {\n        var cur = \" \".concat(el.getAttribute('class') || '', \" \");\n        var tar = ' ' + cls + ' ';\n        while (cur.indexOf(tar) >= 0) {\n            cur = cur.replace(tar, ' ');\n        }\n        cur = cur.trim();\n        if (cur) {\n            el.setAttribute('class', cur);\n        }\n        else {\n            el.removeAttribute('class');\n        }\n    }\n}\n\nfunction resolveTransition(def) {\n    if (!def) {\n        return;\n    }\n    /* istanbul ignore else */\n    if (typeof def === 'object') {\n        var res = {};\n        if (def.css !== false) {\n            extend(res, autoCssTransition(def.name || 'v'));\n        }\n        extend(res, def);\n        return res;\n    }\n    else if (typeof def === 'string') {\n        return autoCssTransition(def);\n    }\n}\nvar autoCssTransition = cached(function (name) {\n    return {\n        enterClass: \"\".concat(name, \"-enter\"),\n        enterToClass: \"\".concat(name, \"-enter-to\"),\n        enterActiveClass: \"\".concat(name, \"-enter-active\"),\n        leaveClass: \"\".concat(name, \"-leave\"),\n        leaveToClass: \"\".concat(name, \"-leave-to\"),\n        leaveActiveClass: \"\".concat(name, \"-leave-active\")\n    };\n});\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n    /* istanbul ignore if */\n    if (window.ontransitionend === undefined &&\n        window.onwebkittransitionend !== undefined) {\n        transitionProp = 'WebkitTransition';\n        transitionEndEvent = 'webkitTransitionEnd';\n    }\n    if (window.onanimationend === undefined &&\n        window.onwebkitanimationend !== undefined) {\n        animationProp = 'WebkitAnimation';\n        animationEndEvent = 'webkitAnimationEnd';\n    }\n}\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n    ? window.requestAnimationFrame\n        ? window.requestAnimationFrame.bind(window)\n        : setTimeout\n    : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };\nfunction nextFrame(fn) {\n    raf(function () {\n        // @ts-expect-error\n        raf(fn);\n    });\n}\nfunction addTransitionClass(el, cls) {\n    var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n    if (transitionClasses.indexOf(cls) < 0) {\n        transitionClasses.push(cls);\n        addClass(el, cls);\n    }\n}\nfunction removeTransitionClass(el, cls) {\n    if (el._transitionClasses) {\n        remove$2(el._transitionClasses, cls);\n    }\n    removeClass(el, cls);\n}\nfunction whenTransitionEnds(el, expectedType, cb) {\n    var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;\n    if (!type)\n        return cb();\n    var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n    var ended = 0;\n    var end = function () {\n        el.removeEventListener(event, onEnd);\n        cb();\n    };\n    var onEnd = function (e) {\n        if (e.target === el) {\n            if (++ended >= propCount) {\n                end();\n            }\n        }\n    };\n    setTimeout(function () {\n        if (ended < propCount) {\n            end();\n        }\n    }, timeout + 1);\n    el.addEventListener(event, onEnd);\n}\nvar transformRE = /\\b(transform|all)(,|$)/;\nfunction getTransitionInfo(el, expectedType) {\n    var styles = window.getComputedStyle(el);\n    // JSDOM may return undefined for transition properties\n    var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n    var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n    var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n    var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n    var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n    var animationTimeout = getTimeout(animationDelays, animationDurations);\n    var type;\n    var timeout = 0;\n    var propCount = 0;\n    /* istanbul ignore if */\n    if (expectedType === TRANSITION) {\n        if (transitionTimeout > 0) {\n            type = TRANSITION;\n            timeout = transitionTimeout;\n            propCount = transitionDurations.length;\n        }\n    }\n    else if (expectedType === ANIMATION) {\n        if (animationTimeout > 0) {\n            type = ANIMATION;\n            timeout = animationTimeout;\n            propCount = animationDurations.length;\n        }\n    }\n    else {\n        timeout = Math.max(transitionTimeout, animationTimeout);\n        type =\n            timeout > 0\n                ? transitionTimeout > animationTimeout\n                    ? TRANSITION\n                    : ANIMATION\n                : null;\n        propCount = type\n            ? type === TRANSITION\n                ? transitionDurations.length\n                : animationDurations.length\n            : 0;\n    }\n    var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);\n    return {\n        type: type,\n        timeout: timeout,\n        propCount: propCount,\n        hasTransform: hasTransform\n    };\n}\nfunction getTimeout(delays, durations) {\n    /* istanbul ignore next */\n    while (delays.length < durations.length) {\n        delays = delays.concat(delays);\n    }\n    return Math.max.apply(null, durations.map(function (d, i) {\n        return toMs(d) + toMs(delays[i]);\n    }));\n}\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs(s) {\n    return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n}\n\nfunction enter(vnode, toggleDisplay) {\n    var el = vnode.elm;\n    // call leave callback now\n    if (isDef(el._leaveCb)) {\n        el._leaveCb.cancelled = true;\n        el._leaveCb();\n    }\n    var data = resolveTransition(vnode.data.transition);\n    if (isUndef(data)) {\n        return;\n    }\n    /* istanbul ignore if */\n    if (isDef(el._enterCb) || el.nodeType !== 1) {\n        return;\n    }\n    var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;\n    // activeInstance will always be the <transition> component managing this\n    // transition. One edge case to check is when the <transition> is placed\n    // as the root node of a child component. In that case we need to check\n    // <transition>'s parent for appear check.\n    var context = activeInstance;\n    var transitionNode = activeInstance.$vnode;\n    while (transitionNode && transitionNode.parent) {\n        context = transitionNode.context;\n        transitionNode = transitionNode.parent;\n    }\n    var isAppear = !context._isMounted || !vnode.isRootInsert;\n    if (isAppear && !appear && appear !== '') {\n        return;\n    }\n    var startClass = isAppear && appearClass ? appearClass : enterClass;\n    var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;\n    var toClass = isAppear && appearToClass ? appearToClass : enterToClass;\n    var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;\n    var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;\n    var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;\n    var enterCancelledHook = isAppear\n        ? appearCancelled || enterCancelled\n        : enterCancelled;\n    var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);\n    if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {\n        checkDuration(explicitEnterDuration, 'enter', vnode);\n    }\n    var expectsCSS = css !== false && !isIE9;\n    var userWantsControl = getHookArgumentsLength(enterHook);\n    var cb = (el._enterCb = once(function () {\n        if (expectsCSS) {\n            removeTransitionClass(el, toClass);\n            removeTransitionClass(el, activeClass);\n        }\n        // @ts-expect-error\n        if (cb.cancelled) {\n            if (expectsCSS) {\n                removeTransitionClass(el, startClass);\n            }\n            enterCancelledHook && enterCancelledHook(el);\n        }\n        else {\n            afterEnterHook && afterEnterHook(el);\n        }\n        el._enterCb = null;\n    }));\n    if (!vnode.data.show) {\n        // remove pending leave element on enter by injecting an insert hook\n        mergeVNodeHook(vnode, 'insert', function () {\n            var parent = el.parentNode;\n            var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n            if (pendingNode &&\n                pendingNode.tag === vnode.tag &&\n                pendingNode.elm._leaveCb) {\n                pendingNode.elm._leaveCb();\n            }\n            enterHook && enterHook(el, cb);\n        });\n    }\n    // start enter transition\n    beforeEnterHook && beforeEnterHook(el);\n    if (expectsCSS) {\n        addTransitionClass(el, startClass);\n        addTransitionClass(el, activeClass);\n        nextFrame(function () {\n            removeTransitionClass(el, startClass);\n            // @ts-expect-error\n            if (!cb.cancelled) {\n                addTransitionClass(el, toClass);\n                if (!userWantsControl) {\n                    if (isValidDuration(explicitEnterDuration)) {\n                        setTimeout(cb, explicitEnterDuration);\n                    }\n                    else {\n                        whenTransitionEnds(el, type, cb);\n                    }\n                }\n            }\n        });\n    }\n    if (vnode.data.show) {\n        toggleDisplay && toggleDisplay();\n        enterHook && enterHook(el, cb);\n    }\n    if (!expectsCSS && !userWantsControl) {\n        cb();\n    }\n}\nfunction leave(vnode, rm) {\n    var el = vnode.elm;\n    // call enter callback now\n    if (isDef(el._enterCb)) {\n        el._enterCb.cancelled = true;\n        el._enterCb();\n    }\n    var data = resolveTransition(vnode.data.transition);\n    if (isUndef(data) || el.nodeType !== 1) {\n        return rm();\n    }\n    /* istanbul ignore if */\n    if (isDef(el._leaveCb)) {\n        return;\n    }\n    var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;\n    var expectsCSS = css !== false && !isIE9;\n    var userWantsControl = getHookArgumentsLength(leave);\n    var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);\n    if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {\n        checkDuration(explicitLeaveDuration, 'leave', vnode);\n    }\n    var cb = (el._leaveCb = once(function () {\n        if (el.parentNode && el.parentNode._pending) {\n            el.parentNode._pending[vnode.key] = null;\n        }\n        if (expectsCSS) {\n            removeTransitionClass(el, leaveToClass);\n            removeTransitionClass(el, leaveActiveClass);\n        }\n        // @ts-expect-error\n        if (cb.cancelled) {\n            if (expectsCSS) {\n                removeTransitionClass(el, leaveClass);\n            }\n            leaveCancelled && leaveCancelled(el);\n        }\n        else {\n            rm();\n            afterLeave && afterLeave(el);\n        }\n        el._leaveCb = null;\n    }));\n    if (delayLeave) {\n        delayLeave(performLeave);\n    }\n    else {\n        performLeave();\n    }\n    function performLeave() {\n        // the delayed leave may have already been cancelled\n        // @ts-expect-error\n        if (cb.cancelled) {\n            return;\n        }\n        // record leaving element\n        if (!vnode.data.show && el.parentNode) {\n            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =\n                vnode;\n        }\n        beforeLeave && beforeLeave(el);\n        if (expectsCSS) {\n            addTransitionClass(el, leaveClass);\n            addTransitionClass(el, leaveActiveClass);\n            nextFrame(function () {\n                removeTransitionClass(el, leaveClass);\n                // @ts-expect-error\n                if (!cb.cancelled) {\n                    addTransitionClass(el, leaveToClass);\n                    if (!userWantsControl) {\n                        if (isValidDuration(explicitLeaveDuration)) {\n                            setTimeout(cb, explicitLeaveDuration);\n                        }\n                        else {\n                            whenTransitionEnds(el, type, cb);\n                        }\n                    }\n                }\n            });\n        }\n        leave && leave(el, cb);\n        if (!expectsCSS && !userWantsControl) {\n            cb();\n        }\n    }\n}\n// only used in dev mode\nfunction checkDuration(val, name, vnode) {\n    if (typeof val !== 'number') {\n        warn$2(\"<transition> explicit \".concat(name, \" duration is not a valid number - \") +\n            \"got \".concat(JSON.stringify(val), \".\"), vnode.context);\n    }\n    else if (isNaN(val)) {\n        warn$2(\"<transition> explicit \".concat(name, \" duration is NaN - \") +\n            'the duration expression might be incorrect.', vnode.context);\n    }\n}\nfunction isValidDuration(val) {\n    return typeof val === 'number' && !isNaN(val);\n}\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength(fn) {\n    if (isUndef(fn)) {\n        return false;\n    }\n    // @ts-expect-error\n    var invokerFns = fn.fns;\n    if (isDef(invokerFns)) {\n        // invoker\n        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);\n    }\n    else {\n        // @ts-expect-error\n        return (fn._length || fn.length) > 1;\n    }\n}\nfunction _enter(_, vnode) {\n    if (vnode.data.show !== true) {\n        enter(vnode);\n    }\n}\nvar transition = inBrowser\n    ? {\n        create: _enter,\n        activate: _enter,\n        remove: function (vnode, rm) {\n            /* istanbul ignore else */\n            if (vnode.data.show !== true) {\n                // @ts-expect-error\n                leave(vnode, rm);\n            }\n            else {\n                rm();\n            }\n        }\n    }\n    : {};\n\nvar platformModules = [attrs, klass$1, events, domProps, style$1, transition];\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules$1 = platformModules.concat(baseModules);\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n/* istanbul ignore if */\nif (isIE9) {\n    // http://www.matts411.com/post/internet-explorer-9-oninput/\n    document.addEventListener('selectionchange', function () {\n        var el = document.activeElement;\n        // @ts-expect-error\n        if (el && el.vmodel) {\n            trigger(el, 'input');\n        }\n    });\n}\nvar directive = {\n    inserted: function (el, binding, vnode, oldVnode) {\n        if (vnode.tag === 'select') {\n            // #6903\n            if (oldVnode.elm && !oldVnode.elm._vOptions) {\n                mergeVNodeHook(vnode, 'postpatch', function () {\n                    directive.componentUpdated(el, binding, vnode);\n                });\n            }\n            else {\n                setSelected(el, binding, vnode.context);\n            }\n            el._vOptions = [].map.call(el.options, getValue);\n        }\n        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n            el._vModifiers = binding.modifiers;\n            if (!binding.modifiers.lazy) {\n                el.addEventListener('compositionstart', onCompositionStart);\n                el.addEventListener('compositionend', onCompositionEnd);\n                // Safari < 10.2 & UIWebView doesn't fire compositionend when\n                // switching focus before confirming composition choice\n                // this also fixes the issue where some browsers e.g. iOS Chrome\n                // fires \"change\" instead of \"input\" on autocomplete.\n                el.addEventListener('change', onCompositionEnd);\n                /* istanbul ignore if */\n                if (isIE9) {\n                    el.vmodel = true;\n                }\n            }\n        }\n    },\n    componentUpdated: function (el, binding, vnode) {\n        if (vnode.tag === 'select') {\n            setSelected(el, binding, vnode.context);\n            // in case the options rendered by v-for have changed,\n            // it's possible that the value is out-of-sync with the rendered options.\n            // detect such cases and filter out values that no longer has a matching\n            // option in the DOM.\n            var prevOptions_1 = el._vOptions;\n            var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));\n            if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {\n                // trigger change event if\n                // no matching option found for at least one value\n                var needReset = el.multiple\n                    ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })\n                    : binding.value !== binding.oldValue &&\n                        hasNoMatchingOption(binding.value, curOptions_1);\n                if (needReset) {\n                    trigger(el, 'change');\n                }\n            }\n        }\n    }\n};\nfunction setSelected(el, binding, vm) {\n    actuallySetSelected(el, binding, vm);\n    /* istanbul ignore if */\n    if (isIE || isEdge) {\n        setTimeout(function () {\n            actuallySetSelected(el, binding, vm);\n        }, 0);\n    }\n}\nfunction actuallySetSelected(el, binding, vm) {\n    var value = binding.value;\n    var isMultiple = el.multiple;\n    if (isMultiple && !Array.isArray(value)) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2(\"<select multiple v-model=\\\"\".concat(binding.expression, \"\\\"> \") +\n                \"expects an Array value for its binding, but got \".concat(Object.prototype.toString\n                    .call(value)\n                    .slice(8, -1)), vm);\n        return;\n    }\n    var selected, option;\n    for (var i = 0, l = el.options.length; i < l; i++) {\n        option = el.options[i];\n        if (isMultiple) {\n            selected = looseIndexOf(value, getValue(option)) > -1;\n            if (option.selected !== selected) {\n                option.selected = selected;\n            }\n        }\n        else {\n            if (looseEqual(getValue(option), value)) {\n                if (el.selectedIndex !== i) {\n                    el.selectedIndex = i;\n                }\n                return;\n            }\n        }\n    }\n    if (!isMultiple) {\n        el.selectedIndex = -1;\n    }\n}\nfunction hasNoMatchingOption(value, options) {\n    return options.every(function (o) { return !looseEqual(o, value); });\n}\nfunction getValue(option) {\n    return '_value' in option ? option._value : option.value;\n}\nfunction onCompositionStart(e) {\n    e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n    // prevent triggering an input event for no reason\n    if (!e.target.composing)\n        return;\n    e.target.composing = false;\n    trigger(e.target, 'input');\n}\nfunction trigger(el, type) {\n    var e = document.createEvent('HTMLEvents');\n    e.initEvent(type, true, true);\n    el.dispatchEvent(e);\n}\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode(vnode) {\n    // @ts-expect-error\n    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n        ? locateNode(vnode.componentInstance._vnode)\n        : vnode;\n}\nvar show = {\n    bind: function (el, _a, vnode) {\n        var value = _a.value;\n        vnode = locateNode(vnode);\n        var transition = vnode.data && vnode.data.transition;\n        var originalDisplay = (el.__vOriginalDisplay =\n            el.style.display === 'none' ? '' : el.style.display);\n        if (value && transition) {\n            vnode.data.show = true;\n            enter(vnode, function () {\n                el.style.display = originalDisplay;\n            });\n        }\n        else {\n            el.style.display = value ? originalDisplay : 'none';\n        }\n    },\n    update: function (el, _a, vnode) {\n        var value = _a.value, oldValue = _a.oldValue;\n        /* istanbul ignore if */\n        if (!value === !oldValue)\n            return;\n        vnode = locateNode(vnode);\n        var transition = vnode.data && vnode.data.transition;\n        if (transition) {\n            vnode.data.show = true;\n            if (value) {\n                enter(vnode, function () {\n                    el.style.display = el.__vOriginalDisplay;\n                });\n            }\n            else {\n                leave(vnode, function () {\n                    el.style.display = 'none';\n                });\n            }\n        }\n        else {\n            el.style.display = value ? el.__vOriginalDisplay : 'none';\n        }\n    },\n    unbind: function (el, binding, vnode, oldVnode, isDestroy) {\n        if (!isDestroy) {\n            el.style.display = el.__vOriginalDisplay;\n        }\n    }\n};\n\nvar platformDirectives = {\n    model: directive,\n    show: show\n};\n\n// Provides transition support for a single element/component.\nvar transitionProps = {\n    name: String,\n    appear: Boolean,\n    css: Boolean,\n    mode: String,\n    type: String,\n    enterClass: String,\n    leaveClass: String,\n    enterToClass: String,\n    leaveToClass: String,\n    enterActiveClass: String,\n    leaveActiveClass: String,\n    appearClass: String,\n    appearActiveClass: String,\n    appearToClass: String,\n    duration: [Number, String, Object]\n};\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild(vnode) {\n    var compOptions = vnode && vnode.componentOptions;\n    if (compOptions && compOptions.Ctor.options.abstract) {\n        return getRealChild(getFirstComponentChild(compOptions.children));\n    }\n    else {\n        return vnode;\n    }\n}\nfunction extractTransitionData(comp) {\n    var data = {};\n    var options = comp.$options;\n    // props\n    for (var key in options.propsData) {\n        data[key] = comp[key];\n    }\n    // events.\n    // extract listeners and pass them directly to the transition methods\n    var listeners = options._parentListeners;\n    for (var key in listeners) {\n        data[camelize(key)] = listeners[key];\n    }\n    return data;\n}\nfunction placeholder(h, rawChild) {\n    // @ts-expect-error\n    if (/\\d-keep-alive$/.test(rawChild.tag)) {\n        return h('keep-alive', {\n            props: rawChild.componentOptions.propsData\n        });\n    }\n}\nfunction hasParentTransition(vnode) {\n    while ((vnode = vnode.parent)) {\n        if (vnode.data.transition) {\n            return true;\n        }\n    }\n}\nfunction isSameChild(child, oldChild) {\n    return oldChild.key === child.key && oldChild.tag === child.tag;\n}\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\nvar isVShowDirective = function (d) { return d.name === 'show'; };\nvar Transition = {\n    name: 'transition',\n    props: transitionProps,\n    abstract: true,\n    render: function (h) {\n        var _this = this;\n        var children = this.$slots.default;\n        if (!children) {\n            return;\n        }\n        // filter out text nodes (possible whitespaces)\n        children = children.filter(isNotTextNode);\n        /* istanbul ignore if */\n        if (!children.length) {\n            return;\n        }\n        // warn multiple elements\n        if (process.env.NODE_ENV !== 'production' && children.length > 1) {\n            warn$2('<transition> can only be used on a single element. Use ' +\n                '<transition-group> for lists.', this.$parent);\n        }\n        var mode = this.mode;\n        // warn invalid mode\n        if (process.env.NODE_ENV !== 'production' && mode && mode !== 'in-out' && mode !== 'out-in') {\n            warn$2('invalid <transition> mode: ' + mode, this.$parent);\n        }\n        var rawChild = children[0];\n        // if this is a component root node and the component's\n        // parent container node also has transition, skip.\n        if (hasParentTransition(this.$vnode)) {\n            return rawChild;\n        }\n        // apply transition data to child\n        // use getRealChild() to ignore abstract components e.g. keep-alive\n        var child = getRealChild(rawChild);\n        /* istanbul ignore if */\n        if (!child) {\n            return rawChild;\n        }\n        if (this._leaving) {\n            return placeholder(h, rawChild);\n        }\n        // ensure a key that is unique to the vnode type and to this transition\n        // component instance. This key will be used to remove pending leaving nodes\n        // during entering.\n        var id = \"__transition-\".concat(this._uid, \"-\");\n        child.key =\n            child.key == null\n                ? child.isComment\n                    ? id + 'comment'\n                    : id + child.tag\n                : isPrimitive(child.key)\n                    ? String(child.key).indexOf(id) === 0\n                        ? child.key\n                        : id + child.key\n                    : child.key;\n        var data = ((child.data || (child.data = {})).transition =\n            extractTransitionData(this));\n        var oldRawChild = this._vnode;\n        var oldChild = getRealChild(oldRawChild);\n        // mark v-show\n        // so that the transition module can hand over the control to the directive\n        if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n            child.data.show = true;\n        }\n        if (oldChild &&\n            oldChild.data &&\n            !isSameChild(child, oldChild) &&\n            !isAsyncPlaceholder(oldChild) &&\n            // #6687 component root is a comment node\n            !(oldChild.componentInstance &&\n                oldChild.componentInstance._vnode.isComment)) {\n            // replace old child transition data with fresh one\n            // important for dynamic transitions!\n            var oldData = (oldChild.data.transition = extend({}, data));\n            // handle transition mode\n            if (mode === 'out-in') {\n                // return placeholder node and queue update when leave finishes\n                this._leaving = true;\n                mergeVNodeHook(oldData, 'afterLeave', function () {\n                    _this._leaving = false;\n                    _this.$forceUpdate();\n                });\n                return placeholder(h, rawChild);\n            }\n            else if (mode === 'in-out') {\n                if (isAsyncPlaceholder(child)) {\n                    return oldRawChild;\n                }\n                var delayedLeave_1;\n                var performLeave = function () {\n                    delayedLeave_1();\n                };\n                mergeVNodeHook(data, 'afterEnter', performLeave);\n                mergeVNodeHook(data, 'enterCancelled', performLeave);\n                mergeVNodeHook(oldData, 'delayLeave', function (leave) {\n                    delayedLeave_1 = leave;\n                });\n            }\n        }\n        return rawChild;\n    }\n};\n\n// Provides transition support for list items.\nvar props = extend({\n    tag: String,\n    moveClass: String\n}, transitionProps);\ndelete props.mode;\nvar TransitionGroup = {\n    props: props,\n    beforeMount: function () {\n        var _this = this;\n        var update = this._update;\n        this._update = function (vnode, hydrating) {\n            var restoreActiveInstance = setActiveInstance(_this);\n            // force removing pass\n            _this.__patch__(_this._vnode, _this.kept, false, // hydrating\n            true // removeOnly (!important, avoids unnecessary moves)\n            );\n            _this._vnode = _this.kept;\n            restoreActiveInstance();\n            update.call(_this, vnode, hydrating);\n        };\n    },\n    render: function (h) {\n        var tag = this.tag || this.$vnode.data.tag || 'span';\n        var map = Object.create(null);\n        var prevChildren = (this.prevChildren = this.children);\n        var rawChildren = this.$slots.default || [];\n        var children = (this.children = []);\n        var transitionData = extractTransitionData(this);\n        for (var i = 0; i < rawChildren.length; i++) {\n            var c = rawChildren[i];\n            if (c.tag) {\n                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n                    children.push(c);\n                    map[c.key] = c;\n                    (c.data || (c.data = {})).transition = transitionData;\n                }\n                else if (process.env.NODE_ENV !== 'production') {\n                    var opts = c.componentOptions;\n                    var name_1 = opts\n                        ? getComponentName(opts.Ctor.options) || opts.tag || ''\n                        : c.tag;\n                    warn$2(\"<transition-group> children must be keyed: <\".concat(name_1, \">\"));\n                }\n            }\n        }\n        if (prevChildren) {\n            var kept = [];\n            var removed = [];\n            for (var i = 0; i < prevChildren.length; i++) {\n                var c = prevChildren[i];\n                c.data.transition = transitionData;\n                // @ts-expect-error .getBoundingClientRect is not typed in Node\n                c.data.pos = c.elm.getBoundingClientRect();\n                if (map[c.key]) {\n                    kept.push(c);\n                }\n                else {\n                    removed.push(c);\n                }\n            }\n            this.kept = h(tag, null, kept);\n            this.removed = removed;\n        }\n        return h(tag, null, children);\n    },\n    updated: function () {\n        var children = this.prevChildren;\n        var moveClass = this.moveClass || (this.name || 'v') + '-move';\n        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n            return;\n        }\n        // we divide the work into three loops to avoid mixing DOM reads and writes\n        // in each iteration - which helps prevent layout thrashing.\n        children.forEach(callPendingCbs);\n        children.forEach(recordPosition);\n        children.forEach(applyTranslation);\n        // force reflow to put everything in position\n        // assign to this to avoid being removed in tree-shaking\n        // $flow-disable-line\n        this._reflow = document.body.offsetHeight;\n        children.forEach(function (c) {\n            if (c.data.moved) {\n                var el_1 = c.elm;\n                var s = el_1.style;\n                addTransitionClass(el_1, moveClass);\n                s.transform = s.WebkitTransform = s.transitionDuration = '';\n                el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {\n                    if (e && e.target !== el_1) {\n                        return;\n                    }\n                    if (!e || /transform$/.test(e.propertyName)) {\n                        el_1.removeEventListener(transitionEndEvent, cb);\n                        el_1._moveCb = null;\n                        removeTransitionClass(el_1, moveClass);\n                    }\n                }));\n            }\n        });\n    },\n    methods: {\n        hasMove: function (el, moveClass) {\n            /* istanbul ignore if */\n            if (!hasTransition) {\n                return false;\n            }\n            /* istanbul ignore if */\n            if (this._hasMove) {\n                return this._hasMove;\n            }\n            // Detect whether an element with the move class applied has\n            // CSS transitions. Since the element may be inside an entering\n            // transition at this very moment, we make a clone of it and remove\n            // all other transition classes applied to ensure only the move class\n            // is applied.\n            var clone = el.cloneNode();\n            if (el._transitionClasses) {\n                el._transitionClasses.forEach(function (cls) {\n                    removeClass(clone, cls);\n                });\n            }\n            addClass(clone, moveClass);\n            clone.style.display = 'none';\n            this.$el.appendChild(clone);\n            var info = getTransitionInfo(clone);\n            this.$el.removeChild(clone);\n            return (this._hasMove = info.hasTransform);\n        }\n    }\n};\nfunction callPendingCbs(c) {\n    /* istanbul ignore if */\n    if (c.elm._moveCb) {\n        c.elm._moveCb();\n    }\n    /* istanbul ignore if */\n    if (c.elm._enterCb) {\n        c.elm._enterCb();\n    }\n}\nfunction recordPosition(c) {\n    c.data.newPos = c.elm.getBoundingClientRect();\n}\nfunction applyTranslation(c) {\n    var oldPos = c.data.pos;\n    var newPos = c.data.newPos;\n    var dx = oldPos.left - newPos.left;\n    var dy = oldPos.top - newPos.top;\n    if (dx || dy) {\n        c.data.moved = true;\n        var s = c.elm.style;\n        s.transform = s.WebkitTransform = \"translate(\".concat(dx, \"px,\").concat(dy, \"px)\");\n        s.transitionDuration = '0s';\n    }\n}\n\nvar platformComponents = {\n    Transition: Transition,\n    TransitionGroup: TransitionGroup\n};\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n// public mount method\nVue.prototype.$mount = function (el, hydrating) {\n    el = el && inBrowser ? query(el) : undefined;\n    return mountComponent(this, el, hydrating);\n};\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n    setTimeout(function () {\n        if (config.devtools) {\n            if (devtools) {\n                devtools.emit('init', Vue);\n            }\n            else if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {\n                // @ts-expect-error\n                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\\n' +\n                    'https://github.com/vuejs/vue-devtools');\n            }\n        }\n        if (process.env.NODE_ENV !== 'production' &&\n            process.env.NODE_ENV !== 'test' &&\n            config.productionTip !== false &&\n            typeof console !== 'undefined') {\n            // @ts-expect-error\n            console[console.info ? 'info' : 'log'](\"You are running Vue in development mode.\\n\" +\n                \"Make sure to turn on production mode when deploying for production.\\n\" +\n                \"See more tips at https://vuejs.org/guide/deployment.html\");\n        }\n    }, 0);\n}\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\nvar buildRegex = cached(function (delimiters) {\n    var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n    var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n    return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g');\n});\nfunction parseText(text, delimiters) {\n    //@ts-expect-error\n    var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n    if (!tagRE.test(text)) {\n        return;\n    }\n    var tokens = [];\n    var rawTokens = [];\n    var lastIndex = (tagRE.lastIndex = 0);\n    var match, index, tokenValue;\n    while ((match = tagRE.exec(text))) {\n        index = match.index;\n        // push text token\n        if (index > lastIndex) {\n            rawTokens.push((tokenValue = text.slice(lastIndex, index)));\n            tokens.push(JSON.stringify(tokenValue));\n        }\n        // tag token\n        var exp = parseFilters(match[1].trim());\n        tokens.push(\"_s(\".concat(exp, \")\"));\n        rawTokens.push({ '@binding': exp });\n        lastIndex = index + match[0].length;\n    }\n    if (lastIndex < text.length) {\n        rawTokens.push((tokenValue = text.slice(lastIndex)));\n        tokens.push(JSON.stringify(tokenValue));\n    }\n    return {\n        expression: tokens.join('+'),\n        tokens: rawTokens\n    };\n}\n\nfunction transformNode$1(el, options) {\n    var warn = options.warn || baseWarn;\n    var staticClass = getAndRemoveAttr(el, 'class');\n    if (process.env.NODE_ENV !== 'production' && staticClass) {\n        var res = parseText(staticClass, options.delimiters);\n        if (res) {\n            warn(\"class=\\\"\".concat(staticClass, \"\\\": \") +\n                'Interpolation inside attributes has been removed. ' +\n                'Use v-bind or the colon shorthand instead. For example, ' +\n                'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.', el.rawAttrsMap['class']);\n        }\n    }\n    if (staticClass) {\n        el.staticClass = JSON.stringify(staticClass.replace(/\\s+/g, ' ').trim());\n    }\n    var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n    if (classBinding) {\n        el.classBinding = classBinding;\n    }\n}\nfunction genData$2(el) {\n    var data = '';\n    if (el.staticClass) {\n        data += \"staticClass:\".concat(el.staticClass, \",\");\n    }\n    if (el.classBinding) {\n        data += \"class:\".concat(el.classBinding, \",\");\n    }\n    return data;\n}\nvar klass = {\n    staticKeys: ['staticClass'],\n    transformNode: transformNode$1,\n    genData: genData$2\n};\n\nfunction transformNode(el, options) {\n    var warn = options.warn || baseWarn;\n    var staticStyle = getAndRemoveAttr(el, 'style');\n    if (staticStyle) {\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production') {\n            var res = parseText(staticStyle, options.delimiters);\n            if (res) {\n                warn(\"style=\\\"\".concat(staticStyle, \"\\\": \") +\n                    'Interpolation inside attributes has been removed. ' +\n                    'Use v-bind or the colon shorthand instead. For example, ' +\n                    'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.', el.rawAttrsMap['style']);\n            }\n        }\n        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n    }\n    var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n    if (styleBinding) {\n        el.styleBinding = styleBinding;\n    }\n}\nfunction genData$1(el) {\n    var data = '';\n    if (el.staticStyle) {\n        data += \"staticStyle:\".concat(el.staticStyle, \",\");\n    }\n    if (el.styleBinding) {\n        data += \"style:(\".concat(el.styleBinding, \"),\");\n    }\n    return data;\n}\nvar style = {\n    staticKeys: ['staticStyle'],\n    transformNode: transformNode,\n    genData: genData$1\n};\n\nvar decoder;\nvar he = {\n    decode: function (html) {\n        decoder = decoder || document.createElement('div');\n        decoder.innerHTML = html;\n        return decoder.textContent;\n    }\n};\n\nvar isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n    'link,meta,param,source,track,wbr');\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n    'title,tr,track');\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+?\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\".concat(unicodeRegExp.source, \"]*\");\nvar qnameCapture = \"((?:\".concat(ncname, \"\\\\:)?\").concat(ncname, \")\");\nvar startTagOpen = new RegExp(\"^<\".concat(qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp(\"^<\\\\/\".concat(qnameCapture, \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being passed as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\nvar decodingMap = {\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&amp;': '&',\n    '&#10;': '\\n',\n    '&#9;': '\\t',\n    '&#39;': \"'\"\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) {\n    return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n';\n};\nfunction decodeAttr(value, shouldDecodeNewlines) {\n    var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n    return value.replace(re, function (match) { return decodingMap[match]; });\n}\nfunction parseHTML(html, options) {\n    var stack = [];\n    var expectHTML = options.expectHTML;\n    var isUnaryTag = options.isUnaryTag || no;\n    var canBeLeftOpenTag = options.canBeLeftOpenTag || no;\n    var index = 0;\n    var last, lastTag;\n    var _loop_1 = function () {\n        last = html;\n        // Make sure we're not in a plaintext content element like script/style\n        if (!lastTag || !isPlainTextElement(lastTag)) {\n            var textEnd = html.indexOf('<');\n            if (textEnd === 0) {\n                // Comment:\n                if (comment.test(html)) {\n                    var commentEnd = html.indexOf('-->');\n                    if (commentEnd >= 0) {\n                        if (options.shouldKeepComment && options.comment) {\n                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n                        }\n                        advance(commentEnd + 3);\n                        return \"continue\";\n                    }\n                }\n                // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n                if (conditionalComment.test(html)) {\n                    var conditionalEnd = html.indexOf(']>');\n                    if (conditionalEnd >= 0) {\n                        advance(conditionalEnd + 2);\n                        return \"continue\";\n                    }\n                }\n                // Doctype:\n                var doctypeMatch = html.match(doctype);\n                if (doctypeMatch) {\n                    advance(doctypeMatch[0].length);\n                    return \"continue\";\n                }\n                // End tag:\n                var endTagMatch = html.match(endTag);\n                if (endTagMatch) {\n                    var curIndex = index;\n                    advance(endTagMatch[0].length);\n                    parseEndTag(endTagMatch[1], curIndex, index);\n                    return \"continue\";\n                }\n                // Start tag:\n                var startTagMatch = parseStartTag();\n                if (startTagMatch) {\n                    handleStartTag(startTagMatch);\n                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n                        advance(1);\n                    }\n                    return \"continue\";\n                }\n            }\n            var text = void 0, rest = void 0, next = void 0;\n            if (textEnd >= 0) {\n                rest = html.slice(textEnd);\n                while (!endTag.test(rest) &&\n                    !startTagOpen.test(rest) &&\n                    !comment.test(rest) &&\n                    !conditionalComment.test(rest)) {\n                    // < in plain text, be forgiving and treat it as text\n                    next = rest.indexOf('<', 1);\n                    if (next < 0)\n                        break;\n                    textEnd += next;\n                    rest = html.slice(textEnd);\n                }\n                text = html.substring(0, textEnd);\n            }\n            if (textEnd < 0) {\n                text = html;\n            }\n            if (text) {\n                advance(text.length);\n            }\n            if (options.chars && text) {\n                options.chars(text, index - text.length, index);\n            }\n        }\n        else {\n            var endTagLength_1 = 0;\n            var stackedTag_1 = lastTag.toLowerCase();\n            var reStackedTag = reCache[stackedTag_1] ||\n                (reCache[stackedTag_1] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));\n            var rest = html.replace(reStackedTag, function (all, text, endTag) {\n                endTagLength_1 = endTag.length;\n                if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {\n                    text = text\n                        .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n                        .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n                }\n                if (shouldIgnoreFirstNewline(stackedTag_1, text)) {\n                    text = text.slice(1);\n                }\n                if (options.chars) {\n                    options.chars(text);\n                }\n                return '';\n            });\n            index += html.length - rest.length;\n            html = rest;\n            parseEndTag(stackedTag_1, index - endTagLength_1, index);\n        }\n        if (html === last) {\n            options.chars && options.chars(html);\n            if (process.env.NODE_ENV !== 'production' && !stack.length && options.warn) {\n                options.warn(\"Mal-formatted tag at end of template: \\\"\".concat(html, \"\\\"\"), {\n                    start: index + html.length\n                });\n            }\n            return \"break\";\n        }\n    };\n    while (html) {\n        var state_1 = _loop_1();\n        if (state_1 === \"break\")\n            break;\n    }\n    // Clean up any remaining tags\n    parseEndTag();\n    function advance(n) {\n        index += n;\n        html = html.substring(n);\n    }\n    function parseStartTag() {\n        var start = html.match(startTagOpen);\n        if (start) {\n            var match = {\n                tagName: start[1],\n                attrs: [],\n                start: index\n            };\n            advance(start[0].length);\n            var end = void 0, attr = void 0;\n            while (!(end = html.match(startTagClose)) &&\n                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n                attr.start = index;\n                advance(attr[0].length);\n                attr.end = index;\n                match.attrs.push(attr);\n            }\n            if (end) {\n                match.unarySlash = end[1];\n                advance(end[0].length);\n                match.end = index;\n                return match;\n            }\n        }\n    }\n    function handleStartTag(match) {\n        var tagName = match.tagName;\n        var unarySlash = match.unarySlash;\n        if (expectHTML) {\n            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n                parseEndTag(lastTag);\n            }\n            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {\n                parseEndTag(tagName);\n            }\n        }\n        var unary = isUnaryTag(tagName) || !!unarySlash;\n        var l = match.attrs.length;\n        var attrs = new Array(l);\n        for (var i = 0; i < l; i++) {\n            var args = match.attrs[i];\n            var value = args[3] || args[4] || args[5] || '';\n            var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n                ? options.shouldDecodeNewlinesForHref\n                : options.shouldDecodeNewlines;\n            attrs[i] = {\n                name: args[1],\n                value: decodeAttr(value, shouldDecodeNewlines)\n            };\n            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n                attrs[i].start = args.start + args[0].match(/^\\s*/).length;\n                attrs[i].end = args.end;\n            }\n        }\n        if (!unary) {\n            stack.push({\n                tag: tagName,\n                lowerCasedTag: tagName.toLowerCase(),\n                attrs: attrs,\n                start: match.start,\n                end: match.end\n            });\n            lastTag = tagName;\n        }\n        if (options.start) {\n            options.start(tagName, attrs, unary, match.start, match.end);\n        }\n    }\n    function parseEndTag(tagName, start, end) {\n        var pos, lowerCasedTagName;\n        if (start == null)\n            start = index;\n        if (end == null)\n            end = index;\n        // Find the closest opened tag of the same type\n        if (tagName) {\n            lowerCasedTagName = tagName.toLowerCase();\n            for (pos = stack.length - 1; pos >= 0; pos--) {\n                if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n                    break;\n                }\n            }\n        }\n        else {\n            // If no tag name is provided, clean shop\n            pos = 0;\n        }\n        if (pos >= 0) {\n            // Close all the open elements, up the stack\n            for (var i = stack.length - 1; i >= pos; i--) {\n                if (process.env.NODE_ENV !== 'production' && (i > pos || !tagName) && options.warn) {\n                    options.warn(\"tag <\".concat(stack[i].tag, \"> has no matching end tag.\"), {\n                        start: stack[i].start,\n                        end: stack[i].end\n                    });\n                }\n                if (options.end) {\n                    options.end(stack[i].tag, start, end);\n                }\n            }\n            // Remove the open elements from the stack\n            stack.length = pos;\n            lastTag = pos && stack[pos - 1].tag;\n        }\n        else if (lowerCasedTagName === 'br') {\n            if (options.start) {\n                options.start(tagName, [], true, start, end);\n            }\n        }\n        else if (lowerCasedTagName === 'p') {\n            if (options.start) {\n                options.start(tagName, [], false, start, end);\n            }\n            if (options.end) {\n                options.end(tagName, start, end);\n            }\n        }\n    }\n}\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:|^#/;\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\nvar dynamicArgRE = /^\\[.*\\]$/;\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^\\.|^v-bind:/;\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\nvar slotRE = /^v-slot(:|$)|^#/;\nvar lineBreakRE = /[\\r\\n]/;\nvar whitespaceRE = /[ \\f\\t\\r\\n]+/g;\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\nvar decodeHTMLCached = cached(he.decode);\nvar emptySlotScopeToken = \"_empty_\";\n// configurable state\nvar warn;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\nvar maybeComponent;\nfunction createASTElement(tag, attrs, parent) {\n    return {\n        type: 1,\n        tag: tag,\n        attrsList: attrs,\n        attrsMap: makeAttrsMap(attrs),\n        rawAttrsMap: {},\n        parent: parent,\n        children: []\n    };\n}\n/**\n * Convert HTML string to AST.\n */\nfunction parse(template, options) {\n    warn = options.warn || baseWarn;\n    platformIsPreTag = options.isPreTag || no;\n    platformMustUseProp = options.mustUseProp || no;\n    platformGetTagNamespace = options.getTagNamespace || no;\n    var isReservedTag = options.isReservedTag || no;\n    maybeComponent = function (el) {\n        return !!(el.component ||\n            el.attrsMap[':is'] ||\n            el.attrsMap['v-bind:is'] ||\n            !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));\n    };\n    transforms = pluckModuleFunction(options.modules, 'transformNode');\n    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n    delimiters = options.delimiters;\n    var stack = [];\n    var preserveWhitespace = options.preserveWhitespace !== false;\n    var whitespaceOption = options.whitespace;\n    var root;\n    var currentParent;\n    var inVPre = false;\n    var inPre = false;\n    var warned = false;\n    function warnOnce(msg, range) {\n        if (!warned) {\n            warned = true;\n            warn(msg, range);\n        }\n    }\n    function closeElement(element) {\n        trimEndingWhitespace(element);\n        if (!inVPre && !element.processed) {\n            element = processElement(element, options);\n        }\n        // tree management\n        if (!stack.length && element !== root) {\n            // allow root elements with v-if, v-else-if and v-else\n            if (root.if && (element.elseif || element.else)) {\n                if (process.env.NODE_ENV !== 'production') {\n                    checkRootConstraints(element);\n                }\n                addIfCondition(root, {\n                    exp: element.elseif,\n                    block: element\n                });\n            }\n            else if (process.env.NODE_ENV !== 'production') {\n                warnOnce(\"Component template should contain exactly one root element. \" +\n                    \"If you are using v-if on multiple elements, \" +\n                    \"use v-else-if to chain them instead.\", { start: element.start });\n            }\n        }\n        if (currentParent && !element.forbidden) {\n            if (element.elseif || element.else) {\n                processIfConditions(element, currentParent);\n            }\n            else {\n                if (element.slotScope) {\n                    // scoped slot\n                    // keep it in the children list so that v-else(-if) conditions can\n                    // find it as the prev node.\n                    var name_1 = element.slotTarget || '\"default\"';\n                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;\n                }\n                currentParent.children.push(element);\n                element.parent = currentParent;\n            }\n        }\n        // final children cleanup\n        // filter out scoped slots\n        element.children = element.children.filter(function (c) { return !c.slotScope; });\n        // remove trailing whitespace node again\n        trimEndingWhitespace(element);\n        // check pre state\n        if (element.pre) {\n            inVPre = false;\n        }\n        if (platformIsPreTag(element.tag)) {\n            inPre = false;\n        }\n        // apply post-transforms\n        for (var i = 0; i < postTransforms.length; i++) {\n            postTransforms[i](element, options);\n        }\n    }\n    function trimEndingWhitespace(el) {\n        // remove trailing whitespace node\n        if (!inPre) {\n            var lastNode = void 0;\n            while ((lastNode = el.children[el.children.length - 1]) &&\n                lastNode.type === 3 &&\n                lastNode.text === ' ') {\n                el.children.pop();\n            }\n        }\n    }\n    function checkRootConstraints(el) {\n        if (el.tag === 'slot' || el.tag === 'template') {\n            warnOnce(\"Cannot use <\".concat(el.tag, \"> as component root element because it may \") +\n                'contain multiple nodes.', { start: el.start });\n        }\n        if (el.attrsMap.hasOwnProperty('v-for')) {\n            warnOnce('Cannot use v-for on stateful component root element because ' +\n                'it renders multiple elements.', el.rawAttrsMap['v-for']);\n        }\n    }\n    parseHTML(template, {\n        warn: warn,\n        expectHTML: options.expectHTML,\n        isUnaryTag: options.isUnaryTag,\n        canBeLeftOpenTag: options.canBeLeftOpenTag,\n        shouldDecodeNewlines: options.shouldDecodeNewlines,\n        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n        shouldKeepComment: options.comments,\n        outputSourceRange: options.outputSourceRange,\n        start: function (tag, attrs, unary, start, end) {\n            // check namespace.\n            // inherit parent ns if there is one\n            var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n            // handle IE svg bug\n            /* istanbul ignore if */\n            if (isIE && ns === 'svg') {\n                attrs = guardIESVGBug(attrs);\n            }\n            var element = createASTElement(tag, attrs, currentParent);\n            if (ns) {\n                element.ns = ns;\n            }\n            if (process.env.NODE_ENV !== 'production') {\n                if (options.outputSourceRange) {\n                    element.start = start;\n                    element.end = end;\n                    element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n                        cumulated[attr.name] = attr;\n                        return cumulated;\n                    }, {});\n                }\n                attrs.forEach(function (attr) {\n                    if (invalidAttributeRE.test(attr.name)) {\n                        warn(\"Invalid dynamic argument expression: attribute names cannot contain \" +\n                            \"spaces, quotes, <, >, / or =.\", options.outputSourceRange\n                            ? {\n                                start: attr.start + attr.name.indexOf(\"[\"),\n                                end: attr.start + attr.name.length\n                            }\n                            : undefined);\n                    }\n                });\n            }\n            if (isForbiddenTag(element) && !isServerRendering()) {\n                element.forbidden = true;\n                process.env.NODE_ENV !== 'production' &&\n                    warn('Templates should only be responsible for mapping the state to the ' +\n                        'UI. Avoid placing tags with side-effects in your templates, such as ' +\n                        \"<\".concat(tag, \">\") +\n                        ', as they will not be parsed.', { start: element.start });\n            }\n            // apply pre-transforms\n            for (var i = 0; i < preTransforms.length; i++) {\n                element = preTransforms[i](element, options) || element;\n            }\n            if (!inVPre) {\n                processPre(element);\n                if (element.pre) {\n                    inVPre = true;\n                }\n            }\n            if (platformIsPreTag(element.tag)) {\n                inPre = true;\n            }\n            if (inVPre) {\n                processRawAttrs(element);\n            }\n            else if (!element.processed) {\n                // structural directives\n                processFor(element);\n                processIf(element);\n                processOnce(element);\n            }\n            if (!root) {\n                root = element;\n                if (process.env.NODE_ENV !== 'production') {\n                    checkRootConstraints(root);\n                }\n            }\n            if (!unary) {\n                currentParent = element;\n                stack.push(element);\n            }\n            else {\n                closeElement(element);\n            }\n        },\n        end: function (tag, start, end) {\n            var element = stack[stack.length - 1];\n            // pop stack\n            stack.length -= 1;\n            currentParent = stack[stack.length - 1];\n            if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n                element.end = end;\n            }\n            closeElement(element);\n        },\n        chars: function (text, start, end) {\n            if (!currentParent) {\n                if (process.env.NODE_ENV !== 'production') {\n                    if (text === template) {\n                        warnOnce('Component template requires a root element, rather than just text.', { start: start });\n                    }\n                    else if ((text = text.trim())) {\n                        warnOnce(\"text \\\"\".concat(text, \"\\\" outside root element will be ignored.\"), {\n                            start: start\n                        });\n                    }\n                }\n                return;\n            }\n            // IE textarea placeholder bug\n            /* istanbul ignore if */\n            if (isIE &&\n                currentParent.tag === 'textarea' &&\n                currentParent.attrsMap.placeholder === text) {\n                return;\n            }\n            var children = currentParent.children;\n            if (inPre || text.trim()) {\n                text = isTextTag(currentParent)\n                    ? text\n                    : decodeHTMLCached(text);\n            }\n            else if (!children.length) {\n                // remove the whitespace-only node right after an opening tag\n                text = '';\n            }\n            else if (whitespaceOption) {\n                if (whitespaceOption === 'condense') {\n                    // in condense mode, remove the whitespace node if it contains\n                    // line break, otherwise condense to a single space\n                    text = lineBreakRE.test(text) ? '' : ' ';\n                }\n                else {\n                    text = ' ';\n                }\n            }\n            else {\n                text = preserveWhitespace ? ' ' : '';\n            }\n            if (text) {\n                if (!inPre && whitespaceOption === 'condense') {\n                    // condense consecutive whitespaces into single space\n                    text = text.replace(whitespaceRE, ' ');\n                }\n                var res = void 0;\n                var child = void 0;\n                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n                    child = {\n                        type: 2,\n                        expression: res.expression,\n                        tokens: res.tokens,\n                        text: text\n                    };\n                }\n                else if (text !== ' ' ||\n                    !children.length ||\n                    children[children.length - 1].text !== ' ') {\n                    child = {\n                        type: 3,\n                        text: text\n                    };\n                }\n                if (child) {\n                    if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n                        child.start = start;\n                        child.end = end;\n                    }\n                    children.push(child);\n                }\n            }\n        },\n        comment: function (text, start, end) {\n            // adding anything as a sibling to the root node is forbidden\n            // comments should still be allowed, but ignored\n            if (currentParent) {\n                var child = {\n                    type: 3,\n                    text: text,\n                    isComment: true\n                };\n                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n                    child.start = start;\n                    child.end = end;\n                }\n                currentParent.children.push(child);\n            }\n        }\n    });\n    return root;\n}\nfunction processPre(el) {\n    if (getAndRemoveAttr(el, 'v-pre') != null) {\n        el.pre = true;\n    }\n}\nfunction processRawAttrs(el) {\n    var list = el.attrsList;\n    var len = list.length;\n    if (len) {\n        var attrs = (el.attrs = new Array(len));\n        for (var i = 0; i < len; i++) {\n            attrs[i] = {\n                name: list[i].name,\n                value: JSON.stringify(list[i].value)\n            };\n            if (list[i].start != null) {\n                attrs[i].start = list[i].start;\n                attrs[i].end = list[i].end;\n            }\n        }\n    }\n    else if (!el.pre) {\n        // non root node in pre blocks with no attributes\n        el.plain = true;\n    }\n}\nfunction processElement(element, options) {\n    processKey(element);\n    // determine whether this is a plain element after\n    // removing structural attributes\n    element.plain =\n        !element.key && !element.scopedSlots && !element.attrsList.length;\n    processRef(element);\n    processSlotContent(element);\n    processSlotOutlet(element);\n    processComponent(element);\n    for (var i = 0; i < transforms.length; i++) {\n        element = transforms[i](element, options) || element;\n    }\n    processAttrs(element);\n    return element;\n}\nfunction processKey(el) {\n    var exp = getBindingAttr(el, 'key');\n    if (exp) {\n        if (process.env.NODE_ENV !== 'production') {\n            if (el.tag === 'template') {\n                warn(\"<template> cannot be keyed. Place the key on real elements instead.\", getRawBindingAttr(el, 'key'));\n            }\n            if (el.for) {\n                var iterator = el.iterator2 || el.iterator1;\n                var parent_1 = el.parent;\n                if (iterator &&\n                    iterator === exp &&\n                    parent_1 &&\n                    parent_1.tag === 'transition-group') {\n                    warn(\"Do not use v-for index as key on <transition-group> children, \" +\n                        \"this is the same as not using keys.\", getRawBindingAttr(el, 'key'), true /* tip */);\n                }\n            }\n        }\n        el.key = exp;\n    }\n}\nfunction processRef(el) {\n    var ref = getBindingAttr(el, 'ref');\n    if (ref) {\n        el.ref = ref;\n        el.refInFor = checkInFor(el);\n    }\n}\nfunction processFor(el) {\n    var exp;\n    if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n        var res = parseFor(exp);\n        if (res) {\n            extend(el, res);\n        }\n        else if (process.env.NODE_ENV !== 'production') {\n            warn(\"Invalid v-for expression: \".concat(exp), el.rawAttrsMap['v-for']);\n        }\n    }\n}\nfunction parseFor(exp) {\n    var inMatch = exp.match(forAliasRE);\n    if (!inMatch)\n        return;\n    var res = {};\n    res.for = inMatch[2].trim();\n    var alias = inMatch[1].trim().replace(stripParensRE, '');\n    var iteratorMatch = alias.match(forIteratorRE);\n    if (iteratorMatch) {\n        res.alias = alias.replace(forIteratorRE, '').trim();\n        res.iterator1 = iteratorMatch[1].trim();\n        if (iteratorMatch[2]) {\n            res.iterator2 = iteratorMatch[2].trim();\n        }\n    }\n    else {\n        res.alias = alias;\n    }\n    return res;\n}\nfunction processIf(el) {\n    var exp = getAndRemoveAttr(el, 'v-if');\n    if (exp) {\n        el.if = exp;\n        addIfCondition(el, {\n            exp: exp,\n            block: el\n        });\n    }\n    else {\n        if (getAndRemoveAttr(el, 'v-else') != null) {\n            el.else = true;\n        }\n        var elseif = getAndRemoveAttr(el, 'v-else-if');\n        if (elseif) {\n            el.elseif = elseif;\n        }\n    }\n}\nfunction processIfConditions(el, parent) {\n    var prev = findPrevElement(parent.children);\n    if (prev && prev.if) {\n        addIfCondition(prev, {\n            exp: el.elseif,\n            block: el\n        });\n    }\n    else if (process.env.NODE_ENV !== 'production') {\n        warn(\"v-\".concat(el.elseif ? 'else-if=\"' + el.elseif + '\"' : 'else', \" \") +\n            \"used on element <\".concat(el.tag, \"> without corresponding v-if.\"), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);\n    }\n}\nfunction findPrevElement(children) {\n    var i = children.length;\n    while (i--) {\n        if (children[i].type === 1) {\n            return children[i];\n        }\n        else {\n            if (process.env.NODE_ENV !== 'production' && children[i].text !== ' ') {\n                warn(\"text \\\"\".concat(children[i].text.trim(), \"\\\" between v-if and v-else(-if) \") +\n                    \"will be ignored.\", children[i]);\n            }\n            children.pop();\n        }\n    }\n}\nfunction addIfCondition(el, condition) {\n    if (!el.ifConditions) {\n        el.ifConditions = [];\n    }\n    el.ifConditions.push(condition);\n}\nfunction processOnce(el) {\n    var once = getAndRemoveAttr(el, 'v-once');\n    if (once != null) {\n        el.once = true;\n    }\n}\n// handle content being passed to a component as slot,\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\nfunction processSlotContent(el) {\n    var slotScope;\n    if (el.tag === 'template') {\n        slotScope = getAndRemoveAttr(el, 'scope');\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production' && slotScope) {\n            warn(\"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n                \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n                \"can also be used on plain elements in addition to <template> to \" +\n                \"denote scoped slots.\", el.rawAttrsMap['scope'], true);\n        }\n        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n    }\n    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production' && el.attrsMap['v-for']) {\n            warn(\"Ambiguous combined usage of slot-scope and v-for on <\".concat(el.tag, \"> \") +\n                \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n                \"scoped slot to make it clearer.\", el.rawAttrsMap['slot-scope'], true);\n        }\n        el.slotScope = slotScope;\n    }\n    // slot=\"xxx\"\n    var slotTarget = getBindingAttr(el, 'slot');\n    if (slotTarget) {\n        el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n        // preserve slot as an attribute for native shadow DOM compat\n        // only for non-scoped slots.\n        if (el.tag !== 'template' && !el.slotScope) {\n            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n        }\n    }\n    // 2.6 v-slot syntax\n    {\n        if (el.tag === 'template') {\n            // v-slot on <template>\n            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n            if (slotBinding) {\n                if (process.env.NODE_ENV !== 'production') {\n                    if (el.slotTarget || el.slotScope) {\n                        warn(\"Unexpected mixed usage of different slot syntaxes.\", el);\n                    }\n                    if (el.parent && !maybeComponent(el.parent)) {\n                        warn(\"<template v-slot> can only appear at the root level inside \" +\n                            \"the receiving component\", el);\n                    }\n                }\n                var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;\n                el.slotTarget = name_2;\n                el.slotTargetDynamic = dynamic;\n                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\n            }\n        }\n        else {\n            // v-slot on component, denotes default slot\n            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n            if (slotBinding) {\n                if (process.env.NODE_ENV !== 'production') {\n                    if (!maybeComponent(el)) {\n                        warn(\"v-slot can only be used on components or <template>.\", slotBinding);\n                    }\n                    if (el.slotScope || el.slotTarget) {\n                        warn(\"Unexpected mixed usage of different slot syntaxes.\", el);\n                    }\n                    if (el.scopedSlots) {\n                        warn(\"To avoid scope ambiguity, the default slot should also use \" +\n                            \"<template> syntax when there are other named slots.\", slotBinding);\n                    }\n                }\n                // add the component's children to its default slot\n                var slots = el.scopedSlots || (el.scopedSlots = {});\n                var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;\n                var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));\n                slotContainer_1.slotTarget = name_3;\n                slotContainer_1.slotTargetDynamic = dynamic;\n                slotContainer_1.children = el.children.filter(function (c) {\n                    if (!c.slotScope) {\n                        c.parent = slotContainer_1;\n                        return true;\n                    }\n                });\n                slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;\n                // remove children as they are returned from scopedSlots now\n                el.children = [];\n                // mark el non-plain so data gets generated\n                el.plain = false;\n            }\n        }\n    }\n}\nfunction getSlotName(binding) {\n    var name = binding.name.replace(slotRE, '');\n    if (!name) {\n        if (binding.name[0] !== '#') {\n            name = 'default';\n        }\n        else if (process.env.NODE_ENV !== 'production') {\n            warn(\"v-slot shorthand syntax requires a slot name.\", binding);\n        }\n    }\n    return dynamicArgRE.test(name)\n        ? // dynamic [name]\n            { name: name.slice(1, -1), dynamic: true }\n        : // static name\n            { name: \"\\\"\".concat(name, \"\\\"\"), dynamic: false };\n}\n// handle <slot/> outlets\nfunction processSlotOutlet(el) {\n    if (el.tag === 'slot') {\n        el.slotName = getBindingAttr(el, 'name');\n        if (process.env.NODE_ENV !== 'production' && el.key) {\n            warn(\"`key` does not work on <slot> because slots are abstract outlets \" +\n                \"and can possibly expand into multiple elements. \" +\n                \"Use the key on a wrapping element instead.\", getRawBindingAttr(el, 'key'));\n        }\n    }\n}\nfunction processComponent(el) {\n    var binding;\n    if ((binding = getBindingAttr(el, 'is'))) {\n        el.component = binding;\n    }\n    if (getAndRemoveAttr(el, 'inline-template') != null) {\n        el.inlineTemplate = true;\n    }\n}\nfunction processAttrs(el) {\n    var list = el.attrsList;\n    var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n    for (i = 0, l = list.length; i < l; i++) {\n        name = rawName = list[i].name;\n        value = list[i].value;\n        if (dirRE.test(name)) {\n            // mark element as dynamic\n            el.hasBindings = true;\n            // modifiers\n            modifiers = parseModifiers(name.replace(dirRE, ''));\n            // support .foo shorthand syntax for the .prop modifier\n            if (modifiers) {\n                name = name.replace(modifierRE, '');\n            }\n            if (bindRE.test(name)) {\n                // v-bind\n                name = name.replace(bindRE, '');\n                value = parseFilters(value);\n                isDynamic = dynamicArgRE.test(name);\n                if (isDynamic) {\n                    name = name.slice(1, -1);\n                }\n                if (process.env.NODE_ENV !== 'production' && value.trim().length === 0) {\n                    warn(\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\".concat(name, \"\\\"\"));\n                }\n                if (modifiers) {\n                    if (modifiers.prop && !isDynamic) {\n                        name = camelize(name);\n                        if (name === 'innerHtml')\n                            name = 'innerHTML';\n                    }\n                    if (modifiers.camel && !isDynamic) {\n                        name = camelize(name);\n                    }\n                    if (modifiers.sync) {\n                        syncGen = genAssignmentCode(value, \"$event\");\n                        if (!isDynamic) {\n                            addHandler(el, \"update:\".concat(camelize(name)), syncGen, null, false, warn, list[i]);\n                            if (hyphenate(name) !== camelize(name)) {\n                                addHandler(el, \"update:\".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);\n                            }\n                        }\n                        else {\n                            // handler w/ dynamic event name\n                            addHandler(el, \"\\\"update:\\\"+(\".concat(name, \")\"), syncGen, null, false, warn, list[i], true // dynamic\n                            );\n                        }\n                    }\n                }\n                if ((modifiers && modifiers.prop) ||\n                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {\n                    addProp(el, name, value, list[i], isDynamic);\n                }\n                else {\n                    addAttr(el, name, value, list[i], isDynamic);\n                }\n            }\n            else if (onRE.test(name)) {\n                // v-on\n                name = name.replace(onRE, '');\n                isDynamic = dynamicArgRE.test(name);\n                if (isDynamic) {\n                    name = name.slice(1, -1);\n                }\n                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);\n            }\n            else {\n                // normal directives\n                name = name.replace(dirRE, '');\n                // parse arg\n                var argMatch = name.match(argRE);\n                var arg = argMatch && argMatch[1];\n                isDynamic = false;\n                if (arg) {\n                    name = name.slice(0, -(arg.length + 1));\n                    if (dynamicArgRE.test(arg)) {\n                        arg = arg.slice(1, -1);\n                        isDynamic = true;\n                    }\n                }\n                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n                if (process.env.NODE_ENV !== 'production' && name === 'model') {\n                    checkForAliasModel(el, value);\n                }\n            }\n        }\n        else {\n            // literal attribute\n            if (process.env.NODE_ENV !== 'production') {\n                var res = parseText(value, delimiters);\n                if (res) {\n                    warn(\"\".concat(name, \"=\\\"\").concat(value, \"\\\": \") +\n                        'Interpolation inside attributes has been removed. ' +\n                        'Use v-bind or the colon shorthand instead. For example, ' +\n                        'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.', list[i]);\n                }\n            }\n            addAttr(el, name, JSON.stringify(value), list[i]);\n            // #6887 firefox doesn't update muted state if set via attribute\n            // even immediately after element creation\n            if (!el.component &&\n                name === 'muted' &&\n                platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n                addProp(el, name, 'true', list[i]);\n            }\n        }\n    }\n}\nfunction checkInFor(el) {\n    var parent = el;\n    while (parent) {\n        if (parent.for !== undefined) {\n            return true;\n        }\n        parent = parent.parent;\n    }\n    return false;\n}\nfunction parseModifiers(name) {\n    var match = name.match(modifierRE);\n    if (match) {\n        var ret_1 = {};\n        match.forEach(function (m) {\n            ret_1[m.slice(1)] = true;\n        });\n        return ret_1;\n    }\n}\nfunction makeAttrsMap(attrs) {\n    var map = {};\n    for (var i = 0, l = attrs.length; i < l; i++) {\n        if (process.env.NODE_ENV !== 'production' && map[attrs[i].name] && !isIE && !isEdge) {\n            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);\n        }\n        map[attrs[i].name] = attrs[i].value;\n    }\n    return map;\n}\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag(el) {\n    return el.tag === 'script' || el.tag === 'style';\n}\nfunction isForbiddenTag(el) {\n    return (el.tag === 'style' ||\n        (el.tag === 'script' &&\n            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));\n}\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n/* istanbul ignore next */\nfunction guardIESVGBug(attrs) {\n    var res = [];\n    for (var i = 0; i < attrs.length; i++) {\n        var attr = attrs[i];\n        if (!ieNSBug.test(attr.name)) {\n            attr.name = attr.name.replace(ieNSPrefix, '');\n            res.push(attr);\n        }\n    }\n    return res;\n}\nfunction checkForAliasModel(el, value) {\n    var _el = el;\n    while (_el) {\n        if (_el.for && _el.alias === value) {\n            warn(\"<\".concat(el.tag, \" v-model=\\\"\").concat(value, \"\\\">: \") +\n                \"You are binding v-model directly to a v-for iteration alias. \" +\n                \"This will not be able to modify the v-for source array because \" +\n                \"writing to the alias is like modifying a function local variable. \" +\n                \"Consider using an array of objects and use v-model on an object property instead.\", el.rawAttrsMap['v-model']);\n        }\n        _el = _el.parent;\n    }\n}\n\n/**\n * Expand input[v-model] with dynamic type bindings into v-if-else chains\n * Turn this:\n *   <input v-model=\"data[type]\" :type=\"type\">\n * into this:\n *   <input v-if=\"type === 'checkbox'\" type=\"checkbox\" v-model=\"data[type]\">\n *   <input v-else-if=\"type === 'radio'\" type=\"radio\" v-model=\"data[type]\">\n *   <input v-else :type=\"type\" v-model=\"data[type]\">\n */\nfunction preTransformNode(el, options) {\n    if (el.tag === 'input') {\n        var map = el.attrsMap;\n        if (!map['v-model']) {\n            return;\n        }\n        var typeBinding = void 0;\n        if (map[':type'] || map['v-bind:type']) {\n            typeBinding = getBindingAttr(el, 'type');\n        }\n        if (!map.type && !typeBinding && map['v-bind']) {\n            typeBinding = \"(\".concat(map['v-bind'], \").type\");\n        }\n        if (typeBinding) {\n            var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n            var ifConditionExtra = ifCondition ? \"&&(\".concat(ifCondition, \")\") : \"\";\n            var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n            var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n            // 1. checkbox\n            var branch0 = cloneASTElement(el);\n            // process for on the main node\n            processFor(branch0);\n            addRawAttr(branch0, 'type', 'checkbox');\n            processElement(branch0, options);\n            branch0.processed = true; // prevent it from double-processed\n            branch0.if = \"(\".concat(typeBinding, \")==='checkbox'\") + ifConditionExtra;\n            addIfCondition(branch0, {\n                exp: branch0.if,\n                block: branch0\n            });\n            // 2. add radio else-if condition\n            var branch1 = cloneASTElement(el);\n            getAndRemoveAttr(branch1, 'v-for', true);\n            addRawAttr(branch1, 'type', 'radio');\n            processElement(branch1, options);\n            addIfCondition(branch0, {\n                exp: \"(\".concat(typeBinding, \")==='radio'\") + ifConditionExtra,\n                block: branch1\n            });\n            // 3. other\n            var branch2 = cloneASTElement(el);\n            getAndRemoveAttr(branch2, 'v-for', true);\n            addRawAttr(branch2, ':type', typeBinding);\n            processElement(branch2, options);\n            addIfCondition(branch0, {\n                exp: ifCondition,\n                block: branch2\n            });\n            if (hasElse) {\n                branch0.else = true;\n            }\n            else if (elseIfCondition) {\n                branch0.elseif = elseIfCondition;\n            }\n            return branch0;\n        }\n    }\n}\nfunction cloneASTElement(el) {\n    return createASTElement(el.tag, el.attrsList.slice(), el.parent);\n}\nvar model = {\n    preTransformNode: preTransformNode\n};\n\nvar modules = [klass, style, model];\n\nfunction text(el, dir) {\n    if (dir.value) {\n        addProp(el, 'textContent', \"_s(\".concat(dir.value, \")\"), dir);\n    }\n}\n\nfunction html(el, dir) {\n    if (dir.value) {\n        addProp(el, 'innerHTML', \"_s(\".concat(dir.value, \")\"), dir);\n    }\n}\n\nvar directives = {\n    model: model$1,\n    text: text,\n    html: html\n};\n\nvar baseOptions = {\n    expectHTML: true,\n    modules: modules,\n    directives: directives,\n    isPreTag: isPreTag,\n    isUnaryTag: isUnaryTag,\n    mustUseProp: mustUseProp,\n    canBeLeftOpenTag: canBeLeftOpenTag,\n    isReservedTag: isReservedTag,\n    getTagNamespace: getTagNamespace,\n    staticKeys: genStaticKeys$1(modules)\n};\n\nvar isStaticKey;\nvar isPlatformReservedTag;\nvar genStaticKeysCached = cached(genStaticKeys);\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n *    create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize(root, options) {\n    if (!root)\n        return;\n    isStaticKey = genStaticKeysCached(options.staticKeys || '');\n    isPlatformReservedTag = options.isReservedTag || no;\n    // first pass: mark all non-static nodes.\n    markStatic(root);\n    // second pass: mark static roots.\n    markStaticRoots(root, false);\n}\nfunction genStaticKeys(keys) {\n    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n        (keys ? ',' + keys : ''));\n}\nfunction markStatic(node) {\n    node.static = isStatic(node);\n    if (node.type === 1) {\n        // do not make component slot content static. this avoids\n        // 1. components not able to mutate slot nodes\n        // 2. static slot content fails for hot-reloading\n        if (!isPlatformReservedTag(node.tag) &&\n            node.tag !== 'slot' &&\n            node.attrsMap['inline-template'] == null) {\n            return;\n        }\n        for (var i = 0, l = node.children.length; i < l; i++) {\n            var child = node.children[i];\n            markStatic(child);\n            if (!child.static) {\n                node.static = false;\n            }\n        }\n        if (node.ifConditions) {\n            for (var i = 1, l = node.ifConditions.length; i < l; i++) {\n                var block = node.ifConditions[i].block;\n                markStatic(block);\n                if (!block.static) {\n                    node.static = false;\n                }\n            }\n        }\n    }\n}\nfunction markStaticRoots(node, isInFor) {\n    if (node.type === 1) {\n        if (node.static || node.once) {\n            node.staticInFor = isInFor;\n        }\n        // For a node to qualify as a static root, it should have children that\n        // are not just static text. Otherwise the cost of hoisting out will\n        // outweigh the benefits and it's better off to just always render it fresh.\n        if (node.static &&\n            node.children.length &&\n            !(node.children.length === 1 && node.children[0].type === 3)) {\n            node.staticRoot = true;\n            return;\n        }\n        else {\n            node.staticRoot = false;\n        }\n        if (node.children) {\n            for (var i = 0, l = node.children.length; i < l; i++) {\n                markStaticRoots(node.children[i], isInFor || !!node.for);\n            }\n        }\n        if (node.ifConditions) {\n            for (var i = 1, l = node.ifConditions.length; i < l; i++) {\n                markStaticRoots(node.ifConditions[i].block, isInFor);\n            }\n        }\n    }\n}\nfunction isStatic(node) {\n    if (node.type === 2) {\n        // expression\n        return false;\n    }\n    if (node.type === 3) {\n        // text\n        return true;\n    }\n    return !!(node.pre ||\n        (!node.hasBindings && // no dynamic bindings\n            !node.if &&\n            !node.for && // not v-if or v-for or v-else\n            !isBuiltInTag(node.tag) && // not a built-in\n            isPlatformReservedTag(node.tag) && // not a component\n            !isDirectChildOfTemplateFor(node) &&\n            Object.keys(node).every(isStaticKey)));\n}\nfunction isDirectChildOfTemplateFor(node) {\n    while (node.parent) {\n        node = node.parent;\n        if (node.tag !== 'template') {\n            return false;\n        }\n        if (node.for) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n    esc: 27,\n    tab: 9,\n    enter: 13,\n    space: 32,\n    up: 38,\n    left: 37,\n    right: 39,\n    down: 40,\n    delete: [8, 46]\n};\n// KeyboardEvent.key aliases\nvar keyNames = {\n    // #7880: IE11 and Edge use `Esc` for Escape key name.\n    esc: ['Esc', 'Escape'],\n    tab: 'Tab',\n    enter: 'Enter',\n    // #9112: IE11 uses `Spacebar` for Space key name.\n    space: [' ', 'Spacebar'],\n    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n    up: ['Up', 'ArrowUp'],\n    left: ['Left', 'ArrowLeft'],\n    right: ['Right', 'ArrowRight'],\n    down: ['Down', 'ArrowDown'],\n    // #9112: IE11 uses `Del` for Delete key name.\n    delete: ['Backspace', 'Delete', 'Del']\n};\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return \"if(\".concat(condition, \")return null;\"); };\nvar modifierCode = {\n    stop: '$event.stopPropagation();',\n    prevent: '$event.preventDefault();',\n    self: genGuard(\"$event.target !== $event.currentTarget\"),\n    ctrl: genGuard(\"!$event.ctrlKey\"),\n    shift: genGuard(\"!$event.shiftKey\"),\n    alt: genGuard(\"!$event.altKey\"),\n    meta: genGuard(\"!$event.metaKey\"),\n    left: genGuard(\"'button' in $event && $event.button !== 0\"),\n    middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n    right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\nfunction genHandlers(events, isNative) {\n    var prefix = isNative ? 'nativeOn:' : 'on:';\n    var staticHandlers = \"\";\n    var dynamicHandlers = \"\";\n    for (var name_1 in events) {\n        var handlerCode = genHandler(events[name_1]);\n        //@ts-expect-error\n        if (events[name_1] && events[name_1].dynamic) {\n            dynamicHandlers += \"\".concat(name_1, \",\").concat(handlerCode, \",\");\n        }\n        else {\n            staticHandlers += \"\\\"\".concat(name_1, \"\\\":\").concat(handlerCode, \",\");\n        }\n    }\n    staticHandlers = \"{\".concat(staticHandlers.slice(0, -1), \"}\");\n    if (dynamicHandlers) {\n        return prefix + \"_d(\".concat(staticHandlers, \",[\").concat(dynamicHandlers.slice(0, -1), \"])\");\n    }\n    else {\n        return prefix + staticHandlers;\n    }\n}\nfunction genHandler(handler) {\n    if (!handler) {\n        return 'function(){}';\n    }\n    if (Array.isArray(handler)) {\n        return \"[\".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), \"]\");\n    }\n    var isMethodPath = simplePathRE.test(handler.value);\n    var isFunctionExpression = fnExpRE.test(handler.value);\n    var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n    if (!handler.modifiers) {\n        if (isMethodPath || isFunctionExpression) {\n            return handler.value;\n        }\n        return \"function($event){\".concat(isFunctionInvocation ? \"return \".concat(handler.value) : handler.value, \"}\"); // inline statement\n    }\n    else {\n        var code = '';\n        var genModifierCode = '';\n        var keys = [];\n        var _loop_1 = function (key) {\n            if (modifierCode[key]) {\n                genModifierCode += modifierCode[key];\n                // left/right\n                if (keyCodes[key]) {\n                    keys.push(key);\n                }\n            }\n            else if (key === 'exact') {\n                var modifiers_1 = handler.modifiers;\n                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']\n                    .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })\n                    .map(function (keyModifier) { return \"$event.\".concat(keyModifier, \"Key\"); })\n                    .join('||'));\n            }\n            else {\n                keys.push(key);\n            }\n        };\n        for (var key in handler.modifiers) {\n            _loop_1(key);\n        }\n        if (keys.length) {\n            code += genKeyFilter(keys);\n        }\n        // Make sure modifiers like prevent and stop get executed after key filtering\n        if (genModifierCode) {\n            code += genModifierCode;\n        }\n        var handlerCode = isMethodPath\n            ? \"return \".concat(handler.value, \".apply(null, arguments)\")\n            : isFunctionExpression\n                ? \"return (\".concat(handler.value, \").apply(null, arguments)\")\n                : isFunctionInvocation\n                    ? \"return \".concat(handler.value)\n                    : handler.value;\n        return \"function($event){\".concat(code).concat(handlerCode, \"}\");\n    }\n}\nfunction genKeyFilter(keys) {\n    return (\n    // make sure the key filters only apply to KeyboardEvents\n    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n    // key events that do not have keyCode property...\n    \"if(!$event.type.indexOf('key')&&\" +\n        \"\".concat(keys.map(genFilterCode).join('&&'), \")return null;\"));\n}\nfunction genFilterCode(key) {\n    var keyVal = parseInt(key, 10);\n    if (keyVal) {\n        return \"$event.keyCode!==\".concat(keyVal);\n    }\n    var keyCode = keyCodes[key];\n    var keyName = keyNames[key];\n    return (\"_k($event.keyCode,\" +\n        \"\".concat(JSON.stringify(key), \",\") +\n        \"\".concat(JSON.stringify(keyCode), \",\") +\n        \"$event.key,\" +\n        \"\".concat(JSON.stringify(keyName)) +\n        \")\");\n}\n\nfunction on(el, dir) {\n    if (process.env.NODE_ENV !== 'production' && dir.modifiers) {\n        warn$2(\"v-on without argument does not support modifiers.\");\n    }\n    el.wrapListeners = function (code) { return \"_g(\".concat(code, \",\").concat(dir.value, \")\"); };\n}\n\nfunction bind(el, dir) {\n    el.wrapData = function (code) {\n        return \"_b(\".concat(code, \",'\").concat(el.tag, \"',\").concat(dir.value, \",\").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', \")\");\n    };\n}\n\nvar baseDirectives = {\n    on: on,\n    bind: bind,\n    cloak: noop\n};\n\nvar CodegenState = /** @class */ (function () {\n    function CodegenState(options) {\n        this.options = options;\n        this.warn = options.warn || baseWarn;\n        this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n        this.directives = extend(extend({}, baseDirectives), options.directives);\n        var isReservedTag = options.isReservedTag || no;\n        this.maybeComponent = function (el) {\n            return !!el.component || !isReservedTag(el.tag);\n        };\n        this.onceId = 0;\n        this.staticRenderFns = [];\n        this.pre = false;\n    }\n    return CodegenState;\n}());\nfunction generate(ast, options) {\n    var state = new CodegenState(options);\n    // fix #11483, Root level <script> tags should not be rendered.\n    var code = ast\n        ? ast.tag === 'script'\n            ? 'null'\n            : genElement(ast, state)\n        : '_c(\"div\")';\n    return {\n        render: \"with(this){return \".concat(code, \"}\"),\n        staticRenderFns: state.staticRenderFns\n    };\n}\nfunction genElement(el, state) {\n    if (el.parent) {\n        el.pre = el.pre || el.parent.pre;\n    }\n    if (el.staticRoot && !el.staticProcessed) {\n        return genStatic(el, state);\n    }\n    else if (el.once && !el.onceProcessed) {\n        return genOnce(el, state);\n    }\n    else if (el.for && !el.forProcessed) {\n        return genFor(el, state);\n    }\n    else if (el.if && !el.ifProcessed) {\n        return genIf(el, state);\n    }\n    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n        return genChildren(el, state) || 'void 0';\n    }\n    else if (el.tag === 'slot') {\n        return genSlot(el, state);\n    }\n    else {\n        // component or element\n        var code = void 0;\n        if (el.component) {\n            code = genComponent(el.component, el, state);\n        }\n        else {\n            var data = void 0;\n            var maybeComponent = state.maybeComponent(el);\n            if (!el.plain || (el.pre && maybeComponent)) {\n                data = genData(el, state);\n            }\n            var tag \n            // check if this is a component in <script setup>\n            = void 0;\n            // check if this is a component in <script setup>\n            var bindings = state.options.bindings;\n            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {\n                tag = checkBindingType(bindings, el.tag);\n            }\n            if (!tag)\n                tag = \"'\".concat(el.tag, \"'\");\n            var children = el.inlineTemplate ? null : genChildren(el, state, true);\n            code = \"_c(\".concat(tag).concat(data ? \",\".concat(data) : '' // data\n            ).concat(children ? \",\".concat(children) : '' // children\n            , \")\");\n        }\n        // module transforms\n        for (var i = 0; i < state.transforms.length; i++) {\n            code = state.transforms[i](el, code);\n        }\n        return code;\n    }\n}\nfunction checkBindingType(bindings, key) {\n    var camelName = camelize(key);\n    var PascalName = capitalize(camelName);\n    var checkType = function (type) {\n        if (bindings[key] === type) {\n            return key;\n        }\n        if (bindings[camelName] === type) {\n            return camelName;\n        }\n        if (bindings[PascalName] === type) {\n            return PascalName;\n        }\n    };\n    var fromConst = checkType(\"setup-const\" /* BindingTypes.SETUP_CONST */) ||\n        checkType(\"setup-reactive-const\" /* BindingTypes.SETUP_REACTIVE_CONST */);\n    if (fromConst) {\n        return fromConst;\n    }\n    var fromMaybeRef = checkType(\"setup-let\" /* BindingTypes.SETUP_LET */) ||\n        checkType(\"setup-ref\" /* BindingTypes.SETUP_REF */) ||\n        checkType(\"setup-maybe-ref\" /* BindingTypes.SETUP_MAYBE_REF */);\n    if (fromMaybeRef) {\n        return fromMaybeRef;\n    }\n}\n// hoist static sub-trees out\nfunction genStatic(el, state) {\n    el.staticProcessed = true;\n    // Some elements (templates) need to behave differently inside of a v-pre\n    // node.  All pre nodes are static roots, so we can use this as a location to\n    // wrap a state change and reset it upon exiting the pre node.\n    var originalPreState = state.pre;\n    if (el.pre) {\n        state.pre = el.pre;\n    }\n    state.staticRenderFns.push(\"with(this){return \".concat(genElement(el, state), \"}\"));\n    state.pre = originalPreState;\n    return \"_m(\".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', \")\");\n}\n// v-once\nfunction genOnce(el, state) {\n    el.onceProcessed = true;\n    if (el.if && !el.ifProcessed) {\n        return genIf(el, state);\n    }\n    else if (el.staticInFor) {\n        var key = '';\n        var parent_1 = el.parent;\n        while (parent_1) {\n            if (parent_1.for) {\n                key = parent_1.key;\n                break;\n            }\n            parent_1 = parent_1.parent;\n        }\n        if (!key) {\n            process.env.NODE_ENV !== 'production' &&\n                state.warn(\"v-once can only be used inside v-for that is keyed. \", el.rawAttrsMap['v-once']);\n            return genElement(el, state);\n        }\n        return \"_o(\".concat(genElement(el, state), \",\").concat(state.onceId++, \",\").concat(key, \")\");\n    }\n    else {\n        return genStatic(el, state);\n    }\n}\nfunction genIf(el, state, altGen, altEmpty) {\n    el.ifProcessed = true; // avoid recursion\n    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);\n}\nfunction genIfConditions(conditions, state, altGen, altEmpty) {\n    if (!conditions.length) {\n        return altEmpty || '_e()';\n    }\n    var condition = conditions.shift();\n    if (condition.exp) {\n        return \"(\".concat(condition.exp, \")?\").concat(genTernaryExp(condition.block), \":\").concat(genIfConditions(conditions, state, altGen, altEmpty));\n    }\n    else {\n        return \"\".concat(genTernaryExp(condition.block));\n    }\n    // v-if with v-once should generate code like (a)?_m(0):_m(1)\n    function genTernaryExp(el) {\n        return altGen\n            ? altGen(el, state)\n            : el.once\n                ? genOnce(el, state)\n                : genElement(el, state);\n    }\n}\nfunction genFor(el, state, altGen, altHelper) {\n    var exp = el.for;\n    var alias = el.alias;\n    var iterator1 = el.iterator1 ? \",\".concat(el.iterator1) : '';\n    var iterator2 = el.iterator2 ? \",\".concat(el.iterator2) : '';\n    if (process.env.NODE_ENV !== 'production' &&\n        state.maybeComponent(el) &&\n        el.tag !== 'slot' &&\n        el.tag !== 'template' &&\n        !el.key) {\n        state.warn(\"<\".concat(el.tag, \" v-for=\\\"\").concat(alias, \" in \").concat(exp, \"\\\">: component lists rendered with \") +\n            \"v-for should have explicit keys. \" +\n            \"See https://v2.vuejs.org/v2/guide/list.html#key for more info.\", el.rawAttrsMap['v-for'], true /* tip */);\n    }\n    el.forProcessed = true; // avoid recursion\n    return (\"\".concat(altHelper || '_l', \"((\").concat(exp, \"),\") +\n        \"function(\".concat(alias).concat(iterator1).concat(iterator2, \"){\") +\n        \"return \".concat((altGen || genElement)(el, state)) +\n        '})');\n}\nfunction genData(el, state) {\n    var data = '{';\n    // directives first.\n    // directives may mutate the el's other properties before they are generated.\n    var dirs = genDirectives(el, state);\n    if (dirs)\n        data += dirs + ',';\n    // key\n    if (el.key) {\n        data += \"key:\".concat(el.key, \",\");\n    }\n    // ref\n    if (el.ref) {\n        data += \"ref:\".concat(el.ref, \",\");\n    }\n    if (el.refInFor) {\n        data += \"refInFor:true,\";\n    }\n    // pre\n    if (el.pre) {\n        data += \"pre:true,\";\n    }\n    // record original tag name for components using \"is\" attribute\n    if (el.component) {\n        data += \"tag:\\\"\".concat(el.tag, \"\\\",\");\n    }\n    // module data generation functions\n    for (var i = 0; i < state.dataGenFns.length; i++) {\n        data += state.dataGenFns[i](el);\n    }\n    // attributes\n    if (el.attrs) {\n        data += \"attrs:\".concat(genProps(el.attrs), \",\");\n    }\n    // DOM props\n    if (el.props) {\n        data += \"domProps:\".concat(genProps(el.props), \",\");\n    }\n    // event handlers\n    if (el.events) {\n        data += \"\".concat(genHandlers(el.events, false), \",\");\n    }\n    if (el.nativeEvents) {\n        data += \"\".concat(genHandlers(el.nativeEvents, true), \",\");\n    }\n    // slot target\n    // only for non-scoped slots\n    if (el.slotTarget && !el.slotScope) {\n        data += \"slot:\".concat(el.slotTarget, \",\");\n    }\n    // scoped slots\n    if (el.scopedSlots) {\n        data += \"\".concat(genScopedSlots(el, el.scopedSlots, state), \",\");\n    }\n    // component v-model\n    if (el.model) {\n        data += \"model:{value:\".concat(el.model.value, \",callback:\").concat(el.model.callback, \",expression:\").concat(el.model.expression, \"},\");\n    }\n    // inline-template\n    if (el.inlineTemplate) {\n        var inlineTemplate = genInlineTemplate(el, state);\n        if (inlineTemplate) {\n            data += \"\".concat(inlineTemplate, \",\");\n        }\n    }\n    data = data.replace(/,$/, '') + '}';\n    // v-bind dynamic argument wrap\n    // v-bind with dynamic arguments must be applied using the same v-bind object\n    // merge helper so that class/style/mustUseProp attrs are handled correctly.\n    if (el.dynamicAttrs) {\n        data = \"_b(\".concat(data, \",\\\"\").concat(el.tag, \"\\\",\").concat(genProps(el.dynamicAttrs), \")\");\n    }\n    // v-bind data wrap\n    if (el.wrapData) {\n        data = el.wrapData(data);\n    }\n    // v-on data wrap\n    if (el.wrapListeners) {\n        data = el.wrapListeners(data);\n    }\n    return data;\n}\nfunction genDirectives(el, state) {\n    var dirs = el.directives;\n    if (!dirs)\n        return;\n    var res = 'directives:[';\n    var hasRuntime = false;\n    var i, l, dir, needRuntime;\n    for (i = 0, l = dirs.length; i < l; i++) {\n        dir = dirs[i];\n        needRuntime = true;\n        var gen = state.directives[dir.name];\n        if (gen) {\n            // compile-time directive that manipulates AST.\n            // returns true if it also needs a runtime counterpart.\n            needRuntime = !!gen(el, dir, state.warn);\n        }\n        if (needRuntime) {\n            hasRuntime = true;\n            res += \"{name:\\\"\".concat(dir.name, \"\\\",rawName:\\\"\").concat(dir.rawName, \"\\\"\").concat(dir.value\n                ? \",value:(\".concat(dir.value, \"),expression:\").concat(JSON.stringify(dir.value))\n                : '').concat(dir.arg ? \",arg:\".concat(dir.isDynamicArg ? dir.arg : \"\\\"\".concat(dir.arg, \"\\\"\")) : '').concat(dir.modifiers ? \",modifiers:\".concat(JSON.stringify(dir.modifiers)) : '', \"},\");\n        }\n    }\n    if (hasRuntime) {\n        return res.slice(0, -1) + ']';\n    }\n}\nfunction genInlineTemplate(el, state) {\n    var ast = el.children[0];\n    if (process.env.NODE_ENV !== 'production' && (el.children.length !== 1 || ast.type !== 1)) {\n        state.warn('Inline-template components must have exactly one child element.', { start: el.start });\n    }\n    if (ast && ast.type === 1) {\n        var inlineRenderFns = generate(ast, state.options);\n        return \"inlineTemplate:{render:function(){\".concat(inlineRenderFns.render, \"},staticRenderFns:[\").concat(inlineRenderFns.staticRenderFns\n            .map(function (code) { return \"function(){\".concat(code, \"}\"); })\n            .join(','), \"]}\");\n    }\n}\nfunction genScopedSlots(el, slots, state) {\n    // by default scoped slots are considered \"stable\", this allows child\n    // components with only scoped slots to skip forced updates from parent.\n    // but in some cases we have to bail-out of this optimization\n    // for example if the slot contains dynamic names, has v-if or v-for on them...\n    var needsForceUpdate = el.for ||\n        Object.keys(slots).some(function (key) {\n            var slot = slots[key];\n            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n            );\n        });\n    // #9534: if a component with scoped slots is inside a conditional branch,\n    // it's possible for the same component to be reused but with different\n    // compiled slot content. To avoid that, we generate a unique key based on\n    // the generated code of all the slot contents.\n    var needsKey = !!el.if;\n    // OR when it is inside another scoped slot or v-for (the reactivity may be\n    // disconnected due to the intermediate scope variable)\n    // #9438, #9506\n    // TODO: this can be further optimized by properly analyzing in-scope bindings\n    // and skip force updating ones that do not actually use scope variables.\n    if (!needsForceUpdate) {\n        var parent_2 = el.parent;\n        while (parent_2) {\n            if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||\n                parent_2.for) {\n                needsForceUpdate = true;\n                break;\n            }\n            if (parent_2.if) {\n                needsKey = true;\n            }\n            parent_2 = parent_2.parent;\n        }\n    }\n    var generatedSlots = Object.keys(slots)\n        .map(function (key) { return genScopedSlot(slots[key], state); })\n        .join(',');\n    return \"scopedSlots:_u([\".concat(generatedSlots, \"]\").concat(needsForceUpdate ? \",null,true\" : \"\").concat(!needsForceUpdate && needsKey ? \",null,false,\".concat(hash(generatedSlots)) : \"\", \")\");\n}\nfunction hash(str) {\n    var hash = 5381;\n    var i = str.length;\n    while (i) {\n        hash = (hash * 33) ^ str.charCodeAt(--i);\n    }\n    return hash >>> 0;\n}\nfunction containsSlotChild(el) {\n    if (el.type === 1) {\n        if (el.tag === 'slot') {\n            return true;\n        }\n        return el.children.some(containsSlotChild);\n    }\n    return false;\n}\nfunction genScopedSlot(el, state) {\n    var isLegacySyntax = el.attrsMap['slot-scope'];\n    if (el.if && !el.ifProcessed && !isLegacySyntax) {\n        return genIf(el, state, genScopedSlot, \"null\");\n    }\n    if (el.for && !el.forProcessed) {\n        return genFor(el, state, genScopedSlot);\n    }\n    var slotScope = el.slotScope === emptySlotScopeToken ? \"\" : String(el.slotScope);\n    var fn = \"function(\".concat(slotScope, \"){\") +\n        \"return \".concat(el.tag === 'template'\n            ? el.if && isLegacySyntax\n                ? \"(\".concat(el.if, \")?\").concat(genChildren(el, state) || 'undefined', \":undefined\")\n                : genChildren(el, state) || 'undefined'\n            : genElement(el, state), \"}\");\n    // reverse proxy v-slot without scope on this.$slots\n    var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n    return \"{key:\".concat(el.slotTarget || \"\\\"default\\\"\", \",fn:\").concat(fn).concat(reverseProxy, \"}\");\n}\nfunction genChildren(el, state, checkSkip, altGenElement, altGenNode) {\n    var children = el.children;\n    if (children.length) {\n        var el_1 = children[0];\n        // optimize single v-for\n        if (children.length === 1 &&\n            el_1.for &&\n            el_1.tag !== 'template' &&\n            el_1.tag !== 'slot') {\n            var normalizationType_1 = checkSkip\n                ? state.maybeComponent(el_1)\n                    ? \",1\"\n                    : \",0\"\n                : \"\";\n            return \"\".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);\n        }\n        var normalizationType = checkSkip\n            ? getNormalizationType(children, state.maybeComponent)\n            : 0;\n        var gen_1 = altGenNode || genNode;\n        return \"[\".concat(children.map(function (c) { return gen_1(c, state); }).join(','), \"]\").concat(normalizationType ? \",\".concat(normalizationType) : '');\n    }\n}\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType(children, maybeComponent) {\n    var res = 0;\n    for (var i = 0; i < children.length; i++) {\n        var el = children[i];\n        if (el.type !== 1) {\n            continue;\n        }\n        if (needsNormalization(el) ||\n            (el.ifConditions &&\n                el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n            res = 2;\n            break;\n        }\n        if (maybeComponent(el) ||\n            (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n            res = 1;\n        }\n    }\n    return res;\n}\nfunction needsNormalization(el) {\n    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';\n}\nfunction genNode(node, state) {\n    if (node.type === 1) {\n        return genElement(node, state);\n    }\n    else if (node.type === 3 && node.isComment) {\n        return genComment(node);\n    }\n    else {\n        return genText(node);\n    }\n}\nfunction genText(text) {\n    return \"_v(\".concat(text.type === 2\n        ? text.expression // no need for () because already wrapped in _s()\n        : transformSpecialNewlines(JSON.stringify(text.text)), \")\");\n}\nfunction genComment(comment) {\n    return \"_e(\".concat(JSON.stringify(comment.text), \")\");\n}\nfunction genSlot(el, state) {\n    var slotName = el.slotName || '\"default\"';\n    var children = genChildren(el, state);\n    var res = \"_t(\".concat(slotName).concat(children ? \",function(){return \".concat(children, \"}\") : '');\n    var attrs = el.attrs || el.dynamicAttrs\n        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n            // slot props are camelized\n            name: camelize(attr.name),\n            value: attr.value,\n            dynamic: attr.dynamic\n        }); }))\n        : null;\n    var bind = el.attrsMap['v-bind'];\n    if ((attrs || bind) && !children) {\n        res += \",null\";\n    }\n    if (attrs) {\n        res += \",\".concat(attrs);\n    }\n    if (bind) {\n        res += \"\".concat(attrs ? '' : ',null', \",\").concat(bind);\n    }\n    return res + ')';\n}\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent(componentName, el, state) {\n    var children = el.inlineTemplate ? null : genChildren(el, state, true);\n    return \"_c(\".concat(componentName, \",\").concat(genData(el, state)).concat(children ? \",\".concat(children) : '', \")\");\n}\nfunction genProps(props) {\n    var staticProps = \"\";\n    var dynamicProps = \"\";\n    for (var i = 0; i < props.length; i++) {\n        var prop = props[i];\n        var value = transformSpecialNewlines(prop.value);\n        if (prop.dynamic) {\n            dynamicProps += \"\".concat(prop.name, \",\").concat(value, \",\");\n        }\n        else {\n            staticProps += \"\\\"\".concat(prop.name, \"\\\":\").concat(value, \",\");\n        }\n    }\n    staticProps = \"{\".concat(staticProps.slice(0, -1), \"}\");\n    if (dynamicProps) {\n        return \"_d(\".concat(staticProps, \",[\").concat(dynamicProps.slice(0, -1), \"])\");\n    }\n    else {\n        return staticProps;\n    }\n}\n// #3895, #4268\nfunction transformSpecialNewlines(text) {\n    return text.replace(/\\u2028/g, '\\\\u2028').replace(/\\u2029/g, '\\\\u2029');\n}\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' +\n    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n        'super,throw,while,yield,delete,export,import,return,switch,default,' +\n        'extends,finally,continue,debugger,function,arguments')\n        .split(',')\n        .join('\\\\b|\\\\b') +\n    '\\\\b');\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' +\n    'delete,typeof,void'.split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') +\n    '\\\\s*\\\\([^\\\\)]*\\\\)');\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n// detect problematic expressions in a template\nfunction detectErrors(ast, warn) {\n    if (ast) {\n        checkNode(ast, warn);\n    }\n}\nfunction checkNode(node, warn) {\n    if (node.type === 1) {\n        for (var name_1 in node.attrsMap) {\n            if (dirRE.test(name_1)) {\n                var value = node.attrsMap[name_1];\n                if (value) {\n                    var range = node.rawAttrsMap[name_1];\n                    if (name_1 === 'v-for') {\n                        checkFor(node, \"v-for=\\\"\".concat(value, \"\\\"\"), warn, range);\n                    }\n                    else if (name_1 === 'v-slot' || name_1[0] === '#') {\n                        checkFunctionParameterExpression(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\n                    }\n                    else if (onRE.test(name_1)) {\n                        checkEvent(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\n                    }\n                    else {\n                        checkExpression(value, \"\".concat(name_1, \"=\\\"\").concat(value, \"\\\"\"), warn, range);\n                    }\n                }\n            }\n        }\n        if (node.children) {\n            for (var i = 0; i < node.children.length; i++) {\n                checkNode(node.children[i], warn);\n            }\n        }\n    }\n    else if (node.type === 2) {\n        checkExpression(node.expression, node.text, warn, node);\n    }\n}\nfunction checkEvent(exp, text, warn, range) {\n    var stripped = exp.replace(stripStringRE, '');\n    var keywordMatch = stripped.match(unaryOperatorsRE);\n    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {\n        warn(\"avoid using JavaScript unary operator as property name: \" +\n            \"\\\"\".concat(keywordMatch[0], \"\\\" in expression \").concat(text.trim()), range);\n    }\n    checkExpression(exp, text, warn, range);\n}\nfunction checkFor(node, text, warn, range) {\n    checkExpression(node.for || '', text, warn, range);\n    checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\nfunction checkIdentifier(ident, type, text, warn, range) {\n    if (typeof ident === 'string') {\n        try {\n            new Function(\"var \".concat(ident, \"=_\"));\n        }\n        catch (e) {\n            warn(\"invalid \".concat(type, \" \\\"\").concat(ident, \"\\\" in expression: \").concat(text.trim()), range);\n        }\n    }\n}\nfunction checkExpression(exp, text, warn, range) {\n    try {\n        new Function(\"return \".concat(exp));\n    }\n    catch (e) {\n        var keywordMatch = exp\n            .replace(stripStringRE, '')\n            .match(prohibitedKeywordRE);\n        if (keywordMatch) {\n            warn(\"avoid using JavaScript keyword as property name: \" +\n                \"\\\"\".concat(keywordMatch[0], \"\\\"\\n  Raw expression: \").concat(text.trim()), range);\n        }\n        else {\n            warn(\"invalid expression: \".concat(e.message, \" in\\n\\n\") +\n                \"    \".concat(exp, \"\\n\\n\") +\n                \"  Raw expression: \".concat(text.trim(), \"\\n\"), range);\n        }\n    }\n}\nfunction checkFunctionParameterExpression(exp, text, warn, range) {\n    try {\n        new Function(exp, '');\n    }\n    catch (e) {\n        warn(\"invalid function parameter expression: \".concat(e.message, \" in\\n\\n\") +\n            \"    \".concat(exp, \"\\n\\n\") +\n            \"  Raw expression: \".concat(text.trim(), \"\\n\"), range);\n    }\n}\n\nvar range = 2;\nfunction generateCodeFrame(source, start, end) {\n    if (start === void 0) { start = 0; }\n    if (end === void 0) { end = source.length; }\n    var lines = source.split(/\\r?\\n/);\n    var count = 0;\n    var res = [];\n    for (var i = 0; i < lines.length; i++) {\n        count += lines[i].length + 1;\n        if (count >= start) {\n            for (var j = i - range; j <= i + range || end > count; j++) {\n                if (j < 0 || j >= lines.length)\n                    continue;\n                res.push(\"\".concat(j + 1).concat(repeat(\" \", 3 - String(j + 1).length), \"|  \").concat(lines[j]));\n                var lineLength = lines[j].length;\n                if (j === i) {\n                    // push underline\n                    var pad = start - (count - lineLength) + 1;\n                    var length_1 = end > count ? lineLength - pad : end - start;\n                    res.push(\"   |  \" + repeat(\" \", pad) + repeat(\"^\", length_1));\n                }\n                else if (j > i) {\n                    if (end > count) {\n                        var length_2 = Math.min(end - count, lineLength);\n                        res.push(\"   |  \" + repeat(\"^\", length_2));\n                    }\n                    count += lineLength + 1;\n                }\n            }\n            break;\n        }\n    }\n    return res.join('\\n');\n}\nfunction repeat(str, n) {\n    var result = '';\n    if (n > 0) {\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n            // eslint-disable-line\n            if (n & 1)\n                result += str;\n            n >>>= 1;\n            if (n <= 0)\n                break;\n            str += str;\n        }\n    }\n    return result;\n}\n\nfunction createFunction(code, errors) {\n    try {\n        return new Function(code);\n    }\n    catch (err) {\n        errors.push({ err: err, code: code });\n        return noop;\n    }\n}\nfunction createCompileToFunctionFn(compile) {\n    var cache = Object.create(null);\n    return function compileToFunctions(template, options, vm) {\n        options = extend({}, options);\n        var warn = options.warn || warn$2;\n        delete options.warn;\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production') {\n            // detect possible CSP restriction\n            try {\n                new Function('return 1');\n            }\n            catch (e) {\n                if (e.toString().match(/unsafe-eval|CSP/)) {\n                    warn('It seems you are using the standalone build of Vue.js in an ' +\n                        'environment with Content Security Policy that prohibits unsafe-eval. ' +\n                        'The template compiler cannot work in this environment. Consider ' +\n                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n                        'templates into render functions.');\n                }\n            }\n        }\n        // check cache\n        var key = options.delimiters\n            ? String(options.delimiters) + template\n            : template;\n        if (cache[key]) {\n            return cache[key];\n        }\n        // compile\n        var compiled = compile(template, options);\n        // check compilation errors/tips\n        if (process.env.NODE_ENV !== 'production') {\n            if (compiled.errors && compiled.errors.length) {\n                if (options.outputSourceRange) {\n                    compiled.errors.forEach(function (e) {\n                        warn(\"Error compiling template:\\n\\n\".concat(e.msg, \"\\n\\n\") +\n                            generateCodeFrame(template, e.start, e.end), vm);\n                    });\n                }\n                else {\n                    warn(\"Error compiling template:\\n\\n\".concat(template, \"\\n\\n\") +\n                        compiled.errors.map(function (e) { return \"- \".concat(e); }).join('\\n') +\n                        '\\n', vm);\n                }\n            }\n            if (compiled.tips && compiled.tips.length) {\n                if (options.outputSourceRange) {\n                    compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n                }\n                else {\n                    compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n                }\n            }\n        }\n        // turn code into functions\n        var res = {};\n        var fnGenErrors = [];\n        res.render = createFunction(compiled.render, fnGenErrors);\n        res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n            return createFunction(code, fnGenErrors);\n        });\n        // check function generation errors.\n        // this should only happen if there is a bug in the compiler itself.\n        // mostly for codegen development use\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production') {\n            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n                warn(\"Failed to generate render function:\\n\\n\" +\n                    fnGenErrors\n                        .map(function (_a) {\n                        var err = _a.err, code = _a.code;\n                        return \"\".concat(err.toString(), \" in\\n\\n\").concat(code, \"\\n\");\n                    })\n                        .join('\\n'), vm);\n            }\n        }\n        return (cache[key] = res);\n    };\n}\n\nfunction createCompilerCreator(baseCompile) {\n    return function createCompiler(baseOptions) {\n        function compile(template, options) {\n            var finalOptions = Object.create(baseOptions);\n            var errors = [];\n            var tips = [];\n            var warn = function (msg, range, tip) {\n                (tip ? tips : errors).push(msg);\n            };\n            if (options) {\n                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n                    // $flow-disable-line\n                    var leadingSpaceLength_1 = template.match(/^\\s*/)[0].length;\n                    warn = function (msg, range, tip) {\n                        var data = typeof msg === 'string' ? { msg: msg } : msg;\n                        if (range) {\n                            if (range.start != null) {\n                                data.start = range.start + leadingSpaceLength_1;\n                            }\n                            if (range.end != null) {\n                                data.end = range.end + leadingSpaceLength_1;\n                            }\n                        }\n                        (tip ? tips : errors).push(data);\n                    };\n                }\n                // merge custom modules\n                if (options.modules) {\n                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);\n                }\n                // merge custom directives\n                if (options.directives) {\n                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);\n                }\n                // copy other options\n                for (var key in options) {\n                    if (key !== 'modules' && key !== 'directives') {\n                        finalOptions[key] = options[key];\n                    }\n                }\n            }\n            finalOptions.warn = warn;\n            var compiled = baseCompile(template.trim(), finalOptions);\n            if (process.env.NODE_ENV !== 'production') {\n                detectErrors(compiled.ast, warn);\n            }\n            compiled.errors = errors;\n            compiled.tips = tips;\n            return compiled;\n        }\n        return {\n            compile: compile,\n            compileToFunctions: createCompileToFunctionFn(compile)\n        };\n    };\n}\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile(template, options) {\n    var ast = parse(template.trim(), options);\n    if (options.optimize !== false) {\n        optimize(ast, options);\n    }\n    var code = generate(ast, options);\n    return {\n        ast: ast,\n        render: code.render,\n        staticRenderFns: code.staticRenderFns\n    };\n});\n\nvar _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode(href) {\n    div = div || document.createElement('div');\n    div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n    return div.innerHTML.indexOf('&#10;') > 0;\n}\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser\n    ? getShouldDecode(true)\n    : false;\n\nvar idToTemplate = cached(function (id) {\n    var el = query(id);\n    return el && el.innerHTML;\n});\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (el, hydrating) {\n    el = el && query(el);\n    /* istanbul ignore if */\n    if (el === document.body || el === document.documentElement) {\n        process.env.NODE_ENV !== 'production' &&\n            warn$2(\"Do not mount Vue to <html> or <body> - mount to normal elements instead.\");\n        return this;\n    }\n    var options = this.$options;\n    // resolve template/el and convert to render function\n    if (!options.render) {\n        var template = options.template;\n        if (template) {\n            if (typeof template === 'string') {\n                if (template.charAt(0) === '#') {\n                    template = idToTemplate(template);\n                    /* istanbul ignore if */\n                    if (process.env.NODE_ENV !== 'production' && !template) {\n                        warn$2(\"Template element not found or is empty: \".concat(options.template), this);\n                    }\n                }\n            }\n            else if (template.nodeType) {\n                template = template.innerHTML;\n            }\n            else {\n                if (process.env.NODE_ENV !== 'production') {\n                    warn$2('invalid template option:' + template, this);\n                }\n                return this;\n            }\n        }\n        else if (el) {\n            // @ts-expect-error\n            template = getOuterHTML(el);\n        }\n        if (template) {\n            /* istanbul ignore if */\n            if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n                mark('compile');\n            }\n            var _a = compileToFunctions(template, {\n                outputSourceRange: process.env.NODE_ENV !== 'production',\n                shouldDecodeNewlines: shouldDecodeNewlines,\n                shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n                delimiters: options.delimiters,\n                comments: options.comments\n            }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;\n            options.render = render;\n            options.staticRenderFns = staticRenderFns;\n            /* istanbul ignore if */\n            if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n                mark('compile end');\n                measure(\"vue \".concat(this._name, \" compile\"), 'compile', 'compile end');\n            }\n        }\n    }\n    return mount.call(this, el, hydrating);\n};\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML(el) {\n    if (el.outerHTML) {\n        return el.outerHTML;\n    }\n    else {\n        var container = document.createElement('div');\n        container.appendChild(el.cloneNode(true));\n        return container.innerHTML;\n    }\n}\nVue.compile = compileToFunctions;\n\nexport { EffectScope, computed, customRef, Vue as default, defineAsyncComponent, defineComponent, del, effectScope, getCurrentInstance, getCurrentScope, h, inject, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, mergeDefaults, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onScopeDispose, onServerPrefetch, onUnmounted, onUpdated, provide, proxyRefs, reactive, readonly, ref$1 as ref, set, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, useAttrs, useCssModule, useCssVars, useListeners, useSlots, version, watch, watchEffect, watchPostEffect, watchSyncEffect };\n", "/*!\n * Cropper.js v1.6.1\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-09-17T03:44:19.860Z\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n  function ownKeys(e, r) {\n    var t = Object.keys(e);\n    if (Object.getOwnPropertySymbols) {\n      var o = Object.getOwnPropertySymbols(e);\n      r && (o = o.filter(function (r) {\n        return Object.getOwnPropertyDescriptor(e, r).enumerable;\n      })), t.push.apply(t, o);\n    }\n    return t;\n  }\n  function _objectSpread2(e) {\n    for (var r = 1; r < arguments.length; r++) {\n      var t = null != arguments[r] ? arguments[r] : {};\n      r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n        _defineProperty(e, r, t[r]);\n      }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n        Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n      });\n    }\n    return e;\n  }\n  function _typeof(o) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n      return typeof o;\n    } : function (o) {\n      return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n    }, _typeof(o);\n  }\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n    }\n  }\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    Object.defineProperty(Constructor, \"prototype\", {\n      writable: false\n    });\n    return Constructor;\n  }\n  function _defineProperty(obj, key, value) {\n    key = _toPropertyKey(key);\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n    return obj;\n  }\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n    return arr2;\n  }\n  function _nonIterableSpread() {\n    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  }\n  function _toPrimitive(input, hint) {\n    if (typeof input !== \"object\" || input === null) return input;\n    var prim = input[Symbol.toPrimitive];\n    if (prim !== undefined) {\n      var res = prim.call(input, hint || \"default\");\n      if (typeof res !== \"object\") return res;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (hint === \"string\" ? String : Number)(input);\n  }\n  function _toPropertyKey(arg) {\n    var key = _toPrimitive(arg, \"string\");\n    return typeof key === \"symbol\" ? key : String(key);\n  }\n\n  var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n  var WINDOW = IS_BROWSER ? window : {};\n  var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n  var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n  var NAMESPACE = 'cropper';\n\n  // Actions\n  var ACTION_ALL = 'all';\n  var ACTION_CROP = 'crop';\n  var ACTION_MOVE = 'move';\n  var ACTION_ZOOM = 'zoom';\n  var ACTION_EAST = 'e';\n  var ACTION_WEST = 'w';\n  var ACTION_SOUTH = 's';\n  var ACTION_NORTH = 'n';\n  var ACTION_NORTH_EAST = 'ne';\n  var ACTION_NORTH_WEST = 'nw';\n  var ACTION_SOUTH_EAST = 'se';\n  var ACTION_SOUTH_WEST = 'sw';\n\n  // Classes\n  var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n  var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n  var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n  var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n  var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n  var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n  var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n  // Data keys\n  var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n  var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n  // Drag modes\n  var DRAG_MODE_CROP = 'crop';\n  var DRAG_MODE_MOVE = 'move';\n  var DRAG_MODE_NONE = 'none';\n\n  // Events\n  var EVENT_CROP = 'crop';\n  var EVENT_CROP_END = 'cropend';\n  var EVENT_CROP_MOVE = 'cropmove';\n  var EVENT_CROP_START = 'cropstart';\n  var EVENT_DBLCLICK = 'dblclick';\n  var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n  var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n  var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n  var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n  var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n  var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n  var EVENT_READY = 'ready';\n  var EVENT_RESIZE = 'resize';\n  var EVENT_WHEEL = 'wheel';\n  var EVENT_ZOOM = 'zoom';\n\n  // Mime types\n  var MIME_TYPE_JPEG = 'image/jpeg';\n\n  // RegExps\n  var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n  var REGEXP_DATA_URL = /^data:/;\n  var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n  var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n  // Misc\n  // Inspired by the default width and height of a canvas element.\n  var MIN_CONTAINER_WIDTH = 200;\n  var MIN_CONTAINER_HEIGHT = 100;\n\n  var DEFAULTS = {\n    // Define the view mode of the cropper\n    viewMode: 0,\n    // 0, 1, 2, 3\n\n    // Define the dragging mode of the cropper\n    dragMode: DRAG_MODE_CROP,\n    // 'crop', 'move' or 'none'\n\n    // Define the initial aspect ratio of the crop box\n    initialAspectRatio: NaN,\n    // Define the aspect ratio of the crop box\n    aspectRatio: NaN,\n    // An object with the previous cropping result data\n    data: null,\n    // A selector for adding extra containers to preview\n    preview: '',\n    // Re-render the cropper when resize the window\n    responsive: true,\n    // Restore the cropped area after resize the window\n    restore: true,\n    // Check if the current image is a cross-origin image\n    checkCrossOrigin: true,\n    // Check the current image's Exif Orientation information\n    checkOrientation: true,\n    // Show the black modal\n    modal: true,\n    // Show the dashed lines for guiding\n    guides: true,\n    // Show the center indicator for guiding\n    center: true,\n    // Show the white modal to highlight the crop box\n    highlight: true,\n    // Show the grid background\n    background: true,\n    // Enable to crop the image automatically when initialize\n    autoCrop: true,\n    // Define the percentage of automatic cropping area when initializes\n    autoCropArea: 0.8,\n    // Enable to move the image\n    movable: true,\n    // Enable to rotate the image\n    rotatable: true,\n    // Enable to scale the image\n    scalable: true,\n    // Enable to zoom the image\n    zoomable: true,\n    // Enable to zoom the image by dragging touch\n    zoomOnTouch: true,\n    // Enable to zoom the image by wheeling mouse\n    zoomOnWheel: true,\n    // Define zoom ratio when zoom the image by wheeling mouse\n    wheelZoomRatio: 0.1,\n    // Enable to move the crop box\n    cropBoxMovable: true,\n    // Enable to resize the crop box\n    cropBoxResizable: true,\n    // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n    toggleDragModeOnDblclick: true,\n    // Size limitation\n    minCanvasWidth: 0,\n    minCanvasHeight: 0,\n    minCropBoxWidth: 0,\n    minCropBoxHeight: 0,\n    minContainerWidth: MIN_CONTAINER_WIDTH,\n    minContainerHeight: MIN_CONTAINER_HEIGHT,\n    // Shortcuts of events\n    ready: null,\n    cropstart: null,\n    cropmove: null,\n    cropend: null,\n    crop: null,\n    zoom: null\n  };\n\n  var TEMPLATE = '<div class=\"cropper-container\" touch-action=\"none\">' + '<div class=\"cropper-wrap-box\">' + '<div class=\"cropper-canvas\"></div>' + '</div>' + '<div class=\"cropper-drag-box\"></div>' + '<div class=\"cropper-crop-box\">' + '<span class=\"cropper-view-box\"></span>' + '<span class=\"cropper-dashed dashed-h\"></span>' + '<span class=\"cropper-dashed dashed-v\"></span>' + '<span class=\"cropper-center\"></span>' + '<span class=\"cropper-face\"></span>' + '<span class=\"cropper-line line-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-line line-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-line line-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-line line-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-e\" data-cropper-action=\"e\"></span>' + '<span class=\"cropper-point point-n\" data-cropper-action=\"n\"></span>' + '<span class=\"cropper-point point-w\" data-cropper-action=\"w\"></span>' + '<span class=\"cropper-point point-s\" data-cropper-action=\"s\"></span>' + '<span class=\"cropper-point point-ne\" data-cropper-action=\"ne\"></span>' + '<span class=\"cropper-point point-nw\" data-cropper-action=\"nw\"></span>' + '<span class=\"cropper-point point-sw\" data-cropper-action=\"sw\"></span>' + '<span class=\"cropper-point point-se\" data-cropper-action=\"se\"></span>' + '</div>' + '</div>';\n\n  /**\n   * Check if the given value is not a number.\n   */\n  var isNaN = Number.isNaN || WINDOW.isNaN;\n\n  /**\n   * Check if the given value is a number.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n   */\n  function isNumber(value) {\n    return typeof value === 'number' && !isNaN(value);\n  }\n\n  /**\n   * Check if the given value is a positive number.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n   */\n  var isPositiveNumber = function isPositiveNumber(value) {\n    return value > 0 && value < Infinity;\n  };\n\n  /**\n   * Check if the given value is undefined.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n   */\n  function isUndefined(value) {\n    return typeof value === 'undefined';\n  }\n\n  /**\n   * Check if the given value is an object.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n   */\n  function isObject(value) {\n    return _typeof(value) === 'object' && value !== null;\n  }\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n  /**\n   * Check if the given value is a plain object.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n   */\n  function isPlainObject(value) {\n    if (!isObject(value)) {\n      return false;\n    }\n    try {\n      var _constructor = value.constructor;\n      var prototype = _constructor.prototype;\n      return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n    } catch (error) {\n      return false;\n    }\n  }\n\n  /**\n   * Check if the given value is a function.\n   * @param {*} value - The value to check.\n   * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n   */\n  function isFunction(value) {\n    return typeof value === 'function';\n  }\n  var slice = Array.prototype.slice;\n\n  /**\n   * Convert array-like or iterable object to an array.\n   * @param {*} value - The value to convert.\n   * @returns {Array} Returns a new array.\n   */\n  function toArray(value) {\n    return Array.from ? Array.from(value) : slice.call(value);\n  }\n\n  /**\n   * Iterate the given data.\n   * @param {*} data - The data to iterate.\n   * @param {Function} callback - The process function for each element.\n   * @returns {*} The original data.\n   */\n  function forEach(data, callback) {\n    if (data && isFunction(callback)) {\n      if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n        toArray(data).forEach(function (value, key) {\n          callback.call(data, value, key, data);\n        });\n      } else if (isObject(data)) {\n        Object.keys(data).forEach(function (key) {\n          callback.call(data, data[key], key, data);\n        });\n      }\n    }\n    return data;\n  }\n\n  /**\n   * Extend the given object.\n   * @param {*} target - The target object to extend.\n   * @param {*} args - The rest objects for merging to the target object.\n   * @returns {Object} The extended object.\n   */\n  var assign = Object.assign || function assign(target) {\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    if (isObject(target) && args.length > 0) {\n      args.forEach(function (arg) {\n        if (isObject(arg)) {\n          Object.keys(arg).forEach(function (key) {\n            target[key] = arg[key];\n          });\n        }\n      });\n    }\n    return target;\n  };\n  var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n  /**\n   * Normalize decimal number.\n   * Check out {@link https://0.30000000000000004.com/}\n   * @param {number} value - The value to normalize.\n   * @param {number} [times=100000000000] - The times for normalizing.\n   * @returns {number} Returns the normalized number.\n   */\n  function normalizeDecimalNumber(value) {\n    var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n    return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n  }\n  var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n  /**\n   * Apply styles to the given element.\n   * @param {Element} element - The target element.\n   * @param {Object} styles - The styles for applying.\n   */\n  function setStyle(element, styles) {\n    var style = element.style;\n    forEach(styles, function (value, property) {\n      if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n        value = \"\".concat(value, \"px\");\n      }\n      style[property] = value;\n    });\n  }\n\n  /**\n   * Check if the given element has a special class.\n   * @param {Element} element - The element to check.\n   * @param {string} value - The class to search.\n   * @returns {boolean} Returns `true` if the special class was found.\n   */\n  function hasClass(element, value) {\n    return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n  }\n\n  /**\n   * Add classes to the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be added.\n   */\n  function addClass(element, value) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        addClass(elem, value);\n      });\n      return;\n    }\n    if (element.classList) {\n      element.classList.add(value);\n      return;\n    }\n    var className = element.className.trim();\n    if (!className) {\n      element.className = value;\n    } else if (className.indexOf(value) < 0) {\n      element.className = \"\".concat(className, \" \").concat(value);\n    }\n  }\n\n  /**\n   * Remove classes from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be removed.\n   */\n  function removeClass(element, value) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        removeClass(elem, value);\n      });\n      return;\n    }\n    if (element.classList) {\n      element.classList.remove(value);\n      return;\n    }\n    if (element.className.indexOf(value) >= 0) {\n      element.className = element.className.replace(value, '');\n    }\n  }\n\n  /**\n   * Add or remove classes from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} value - The classes to be toggled.\n   * @param {boolean} added - Add only.\n   */\n  function toggleClass(element, value, added) {\n    if (!value) {\n      return;\n    }\n    if (isNumber(element.length)) {\n      forEach(element, function (elem) {\n        toggleClass(elem, value, added);\n      });\n      return;\n    }\n\n    // IE10-11 doesn't support the second parameter of `classList.toggle`\n    if (added) {\n      addClass(element, value);\n    } else {\n      removeClass(element, value);\n    }\n  }\n  var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n  /**\n   * Transform the given string from camelCase to kebab-case\n   * @param {string} value - The value to transform.\n   * @returns {string} The transformed value.\n   */\n  function toParamCase(value) {\n    return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n  }\n\n  /**\n   * Get data from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to get.\n   * @returns {string} The data value.\n   */\n  function getData(element, name) {\n    if (isObject(element[name])) {\n      return element[name];\n    }\n    if (element.dataset) {\n      return element.dataset[name];\n    }\n    return element.getAttribute(\"data-\".concat(toParamCase(name)));\n  }\n\n  /**\n   * Set data to the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to set.\n   * @param {string} data - The data value.\n   */\n  function setData(element, name, data) {\n    if (isObject(data)) {\n      element[name] = data;\n    } else if (element.dataset) {\n      element.dataset[name] = data;\n    } else {\n      element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n    }\n  }\n\n  /**\n   * Remove data from the given element.\n   * @param {Element} element - The target element.\n   * @param {string} name - The data key to remove.\n   */\n  function removeData(element, name) {\n    if (isObject(element[name])) {\n      try {\n        delete element[name];\n      } catch (error) {\n        element[name] = undefined;\n      }\n    } else if (element.dataset) {\n      // #128 Safari not allows to delete dataset property\n      try {\n        delete element.dataset[name];\n      } catch (error) {\n        element.dataset[name] = undefined;\n      }\n    } else {\n      element.removeAttribute(\"data-\".concat(toParamCase(name)));\n    }\n  }\n  var REGEXP_SPACES = /\\s\\s*/;\n  var onceSupported = function () {\n    var supported = false;\n    if (IS_BROWSER) {\n      var once = false;\n      var listener = function listener() {};\n      var options = Object.defineProperty({}, 'once', {\n        get: function get() {\n          supported = true;\n          return once;\n        },\n        /**\n         * This setter can fix a `TypeError` in strict mode\n         * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n         * @param {boolean} value - The value to set\n         */\n        set: function set(value) {\n          once = value;\n        }\n      });\n      WINDOW.addEventListener('test', listener, options);\n      WINDOW.removeEventListener('test', listener, options);\n    }\n    return supported;\n  }();\n\n  /**\n   * Remove event listener from the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Function} listener - The event listener.\n   * @param {Object} options - The event options.\n   */\n  function removeListener(element, type, listener) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var handler = listener;\n    type.trim().split(REGEXP_SPACES).forEach(function (event) {\n      if (!onceSupported) {\n        var listeners = element.listeners;\n        if (listeners && listeners[event] && listeners[event][listener]) {\n          handler = listeners[event][listener];\n          delete listeners[event][listener];\n          if (Object.keys(listeners[event]).length === 0) {\n            delete listeners[event];\n          }\n          if (Object.keys(listeners).length === 0) {\n            delete element.listeners;\n          }\n        }\n      }\n      element.removeEventListener(event, handler, options);\n    });\n  }\n\n  /**\n   * Add event listener to the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Function} listener - The event listener.\n   * @param {Object} options - The event options.\n   */\n  function addListener(element, type, listener) {\n    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    var _handler = listener;\n    type.trim().split(REGEXP_SPACES).forEach(function (event) {\n      if (options.once && !onceSupported) {\n        var _element$listeners = element.listeners,\n          listeners = _element$listeners === void 0 ? {} : _element$listeners;\n        _handler = function handler() {\n          delete listeners[event][listener];\n          element.removeEventListener(event, _handler, options);\n          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n          listener.apply(element, args);\n        };\n        if (!listeners[event]) {\n          listeners[event] = {};\n        }\n        if (listeners[event][listener]) {\n          element.removeEventListener(event, listeners[event][listener], options);\n        }\n        listeners[event][listener] = _handler;\n        element.listeners = listeners;\n      }\n      element.addEventListener(event, _handler, options);\n    });\n  }\n\n  /**\n   * Dispatch event on the target element.\n   * @param {Element} element - The event target.\n   * @param {string} type - The event type(s).\n   * @param {Object} data - The additional event data.\n   * @returns {boolean} Indicate if the event is default prevented or not.\n   */\n  function dispatchEvent(element, type, data) {\n    var event;\n\n    // Event and CustomEvent on IE9-11 are global objects, not constructors\n    if (isFunction(Event) && isFunction(CustomEvent)) {\n      event = new CustomEvent(type, {\n        detail: data,\n        bubbles: true,\n        cancelable: true\n      });\n    } else {\n      event = document.createEvent('CustomEvent');\n      event.initCustomEvent(type, true, true, data);\n    }\n    return element.dispatchEvent(event);\n  }\n\n  /**\n   * Get the offset base on the document.\n   * @param {Element} element - The target element.\n   * @returns {Object} The offset data.\n   */\n  function getOffset(element) {\n    var box = element.getBoundingClientRect();\n    return {\n      left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n      top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n    };\n  }\n  var location = WINDOW.location;\n  var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n  /**\n   * Check if the given URL is a cross origin URL.\n   * @param {string} url - The target URL.\n   * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n   */\n  function isCrossOriginURL(url) {\n    var parts = url.match(REGEXP_ORIGINS);\n    return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n  }\n\n  /**\n   * Add timestamp to the given URL.\n   * @param {string} url - The target URL.\n   * @returns {string} The result URL.\n   */\n  function addTimestamp(url) {\n    var timestamp = \"timestamp=\".concat(new Date().getTime());\n    return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n  }\n\n  /**\n   * Get transforms base on the given object.\n   * @param {Object} obj - The target object.\n   * @returns {string} A string contains transform values.\n   */\n  function getTransforms(_ref) {\n    var rotate = _ref.rotate,\n      scaleX = _ref.scaleX,\n      scaleY = _ref.scaleY,\n      translateX = _ref.translateX,\n      translateY = _ref.translateY;\n    var values = [];\n    if (isNumber(translateX) && translateX !== 0) {\n      values.push(\"translateX(\".concat(translateX, \"px)\"));\n    }\n    if (isNumber(translateY) && translateY !== 0) {\n      values.push(\"translateY(\".concat(translateY, \"px)\"));\n    }\n\n    // Rotate should come first before scale to match orientation transform\n    if (isNumber(rotate) && rotate !== 0) {\n      values.push(\"rotate(\".concat(rotate, \"deg)\"));\n    }\n    if (isNumber(scaleX) && scaleX !== 1) {\n      values.push(\"scaleX(\".concat(scaleX, \")\"));\n    }\n    if (isNumber(scaleY) && scaleY !== 1) {\n      values.push(\"scaleY(\".concat(scaleY, \")\"));\n    }\n    var transform = values.length ? values.join(' ') : 'none';\n    return {\n      WebkitTransform: transform,\n      msTransform: transform,\n      transform: transform\n    };\n  }\n\n  /**\n   * Get the max ratio of a group of pointers.\n   * @param {string} pointers - The target pointers.\n   * @returns {number} The result ratio.\n   */\n  function getMaxZoomRatio(pointers) {\n    var pointers2 = _objectSpread2({}, pointers);\n    var maxRatio = 0;\n    forEach(pointers, function (pointer, pointerId) {\n      delete pointers2[pointerId];\n      forEach(pointers2, function (pointer2) {\n        var x1 = Math.abs(pointer.startX - pointer2.startX);\n        var y1 = Math.abs(pointer.startY - pointer2.startY);\n        var x2 = Math.abs(pointer.endX - pointer2.endX);\n        var y2 = Math.abs(pointer.endY - pointer2.endY);\n        var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n        var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n        var ratio = (z2 - z1) / z1;\n        if (Math.abs(ratio) > Math.abs(maxRatio)) {\n          maxRatio = ratio;\n        }\n      });\n    });\n    return maxRatio;\n  }\n\n  /**\n   * Get a pointer from an event object.\n   * @param {Object} event - The target event object.\n   * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n   * @returns {Object} The result pointer contains start and/or end point coordinates.\n   */\n  function getPointer(_ref2, endOnly) {\n    var pageX = _ref2.pageX,\n      pageY = _ref2.pageY;\n    var end = {\n      endX: pageX,\n      endY: pageY\n    };\n    return endOnly ? end : _objectSpread2({\n      startX: pageX,\n      startY: pageY\n    }, end);\n  }\n\n  /**\n   * Get the center point coordinate of a group of pointers.\n   * @param {Object} pointers - The target pointers.\n   * @returns {Object} The center point coordinate.\n   */\n  function getPointersCenter(pointers) {\n    var pageX = 0;\n    var pageY = 0;\n    var count = 0;\n    forEach(pointers, function (_ref3) {\n      var startX = _ref3.startX,\n        startY = _ref3.startY;\n      pageX += startX;\n      pageY += startY;\n      count += 1;\n    });\n    pageX /= count;\n    pageY /= count;\n    return {\n      pageX: pageX,\n      pageY: pageY\n    };\n  }\n\n  /**\n   * Get the max sizes in a rectangle under the given aspect ratio.\n   * @param {Object} data - The original sizes.\n   * @param {string} [type='contain'] - The adjust type.\n   * @returns {Object} The result sizes.\n   */\n  function getAdjustedSizes(_ref4) {\n    var aspectRatio = _ref4.aspectRatio,\n      height = _ref4.height,\n      width = _ref4.width;\n    var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n    var isValidWidth = isPositiveNumber(width);\n    var isValidHeight = isPositiveNumber(height);\n    if (isValidWidth && isValidHeight) {\n      var adjustedWidth = height * aspectRatio;\n      if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n        height = width / aspectRatio;\n      } else {\n        width = height * aspectRatio;\n      }\n    } else if (isValidWidth) {\n      height = width / aspectRatio;\n    } else if (isValidHeight) {\n      width = height * aspectRatio;\n    }\n    return {\n      width: width,\n      height: height\n    };\n  }\n\n  /**\n   * Get the new sizes of a rectangle after rotated.\n   * @param {Object} data - The original sizes.\n   * @returns {Object} The result sizes.\n   */\n  function getRotatedSizes(_ref5) {\n    var width = _ref5.width,\n      height = _ref5.height,\n      degree = _ref5.degree;\n    degree = Math.abs(degree) % 180;\n    if (degree === 90) {\n      return {\n        width: height,\n        height: width\n      };\n    }\n    var arc = degree % 90 * Math.PI / 180;\n    var sinArc = Math.sin(arc);\n    var cosArc = Math.cos(arc);\n    var newWidth = width * cosArc + height * sinArc;\n    var newHeight = width * sinArc + height * cosArc;\n    return degree > 90 ? {\n      width: newHeight,\n      height: newWidth\n    } : {\n      width: newWidth,\n      height: newHeight\n    };\n  }\n\n  /**\n   * Get a canvas which drew the given image.\n   * @param {HTMLImageElement} image - The image for drawing.\n   * @param {Object} imageData - The image data.\n   * @param {Object} canvasData - The canvas data.\n   * @param {Object} options - The options.\n   * @returns {HTMLCanvasElement} The result canvas.\n   */\n  function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n    var imageAspectRatio = _ref6.aspectRatio,\n      imageNaturalWidth = _ref6.naturalWidth,\n      imageNaturalHeight = _ref6.naturalHeight,\n      _ref6$rotate = _ref6.rotate,\n      rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n      _ref6$scaleX = _ref6.scaleX,\n      scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n      _ref6$scaleY = _ref6.scaleY,\n      scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n    var aspectRatio = _ref7.aspectRatio,\n      naturalWidth = _ref7.naturalWidth,\n      naturalHeight = _ref7.naturalHeight;\n    var _ref8$fillColor = _ref8.fillColor,\n      fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n      _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n      imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n      _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n      imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n      _ref8$maxWidth = _ref8.maxWidth,\n      maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n      _ref8$maxHeight = _ref8.maxHeight,\n      maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n      _ref8$minWidth = _ref8.minWidth,\n      minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n      _ref8$minHeight = _ref8.minHeight,\n      minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n    var canvas = document.createElement('canvas');\n    var context = canvas.getContext('2d');\n    var maxSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: maxWidth,\n      height: maxHeight\n    });\n    var minSizes = getAdjustedSizes({\n      aspectRatio: aspectRatio,\n      width: minWidth,\n      height: minHeight\n    }, 'cover');\n    var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n    var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n    // Note: should always use image's natural sizes for drawing as\n    // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n    var destMaxSizes = getAdjustedSizes({\n      aspectRatio: imageAspectRatio,\n      width: maxWidth,\n      height: maxHeight\n    });\n    var destMinSizes = getAdjustedSizes({\n      aspectRatio: imageAspectRatio,\n      width: minWidth,\n      height: minHeight\n    }, 'cover');\n    var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n    var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n    var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n    canvas.width = normalizeDecimalNumber(width);\n    canvas.height = normalizeDecimalNumber(height);\n    context.fillStyle = fillColor;\n    context.fillRect(0, 0, width, height);\n    context.save();\n    context.translate(width / 2, height / 2);\n    context.rotate(rotate * Math.PI / 180);\n    context.scale(scaleX, scaleY);\n    context.imageSmoothingEnabled = imageSmoothingEnabled;\n    context.imageSmoothingQuality = imageSmoothingQuality;\n    context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n      return Math.floor(normalizeDecimalNumber(param));\n    }))));\n    context.restore();\n    return canvas;\n  }\n  var fromCharCode = String.fromCharCode;\n\n  /**\n   * Get string from char code in data view.\n   * @param {DataView} dataView - The data view for read.\n   * @param {number} start - The start index.\n   * @param {number} length - The read length.\n   * @returns {string} The read result.\n   */\n  function getStringFromCharCode(dataView, start, length) {\n    var str = '';\n    length += start;\n    for (var i = start; i < length; i += 1) {\n      str += fromCharCode(dataView.getUint8(i));\n    }\n    return str;\n  }\n  var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n  /**\n   * Transform Data URL to array buffer.\n   * @param {string} dataURL - The Data URL to transform.\n   * @returns {ArrayBuffer} The result array buffer.\n   */\n  function dataURLToArrayBuffer(dataURL) {\n    var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n    var binary = atob(base64);\n    var arrayBuffer = new ArrayBuffer(binary.length);\n    var uint8 = new Uint8Array(arrayBuffer);\n    forEach(uint8, function (value, i) {\n      uint8[i] = binary.charCodeAt(i);\n    });\n    return arrayBuffer;\n  }\n\n  /**\n   * Transform array buffer to Data URL.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n   * @param {string} mimeType - The mime type of the Data URL.\n   * @returns {string} The result Data URL.\n   */\n  function arrayBufferToDataURL(arrayBuffer, mimeType) {\n    var chunks = [];\n\n    // Chunk Typed Array for better performance (#435)\n    var chunkSize = 8192;\n    var uint8 = new Uint8Array(arrayBuffer);\n    while (uint8.length > 0) {\n      // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n      // eslint-disable-next-line prefer-spread\n      chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n      uint8 = uint8.subarray(chunkSize);\n    }\n    return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n  }\n\n  /**\n   * Get orientation value from given array buffer.\n   * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n   * @returns {number} The read orientation value.\n   */\n  function resetAndGetOrientation(arrayBuffer) {\n    var dataView = new DataView(arrayBuffer);\n    var orientation;\n\n    // Ignores range error when the image does not have correct Exif information\n    try {\n      var littleEndian;\n      var app1Start;\n      var ifdStart;\n\n      // Only handle JPEG image (start by 0xFFD8)\n      if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n        var length = dataView.byteLength;\n        var offset = 2;\n        while (offset + 1 < length) {\n          if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n            app1Start = offset;\n            break;\n          }\n          offset += 1;\n        }\n      }\n      if (app1Start) {\n        var exifIDCode = app1Start + 4;\n        var tiffOffset = app1Start + 10;\n        if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n          var endianness = dataView.getUint16(tiffOffset);\n          littleEndian = endianness === 0x4949;\n          if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n            if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n              var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n              if (firstIFDOffset >= 0x00000008) {\n                ifdStart = tiffOffset + firstIFDOffset;\n              }\n            }\n          }\n        }\n      }\n      if (ifdStart) {\n        var _length = dataView.getUint16(ifdStart, littleEndian);\n        var _offset;\n        var i;\n        for (i = 0; i < _length; i += 1) {\n          _offset = ifdStart + i * 12 + 2;\n          if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n            // 8 is the offset of the current tag's value\n            _offset += 8;\n\n            // Get the original orientation value\n            orientation = dataView.getUint16(_offset, littleEndian);\n\n            // Override the orientation with its default value\n            dataView.setUint16(_offset, 1, littleEndian);\n            break;\n          }\n        }\n      }\n    } catch (error) {\n      orientation = 1;\n    }\n    return orientation;\n  }\n\n  /**\n   * Parse Exif Orientation value.\n   * @param {number} orientation - The orientation to parse.\n   * @returns {Object} The parsed result.\n   */\n  function parseOrientation(orientation) {\n    var rotate = 0;\n    var scaleX = 1;\n    var scaleY = 1;\n    switch (orientation) {\n      // Flip horizontal\n      case 2:\n        scaleX = -1;\n        break;\n\n      // Rotate left 180\u00B0\n      case 3:\n        rotate = -180;\n        break;\n\n      // Flip vertical\n      case 4:\n        scaleY = -1;\n        break;\n\n      // Flip vertical and rotate right 90\u00B0\n      case 5:\n        rotate = 90;\n        scaleY = -1;\n        break;\n\n      // Rotate right 90\u00B0\n      case 6:\n        rotate = 90;\n        break;\n\n      // Flip horizontal and rotate right 90\u00B0\n      case 7:\n        rotate = 90;\n        scaleX = -1;\n        break;\n\n      // Rotate left 90\u00B0\n      case 8:\n        rotate = -90;\n        break;\n    }\n    return {\n      rotate: rotate,\n      scaleX: scaleX,\n      scaleY: scaleY\n    };\n  }\n\n  var render = {\n    render: function render() {\n      this.initContainer();\n      this.initCanvas();\n      this.initCropBox();\n      this.renderCanvas();\n      if (this.cropped) {\n        this.renderCropBox();\n      }\n    },\n    initContainer: function initContainer() {\n      var element = this.element,\n        options = this.options,\n        container = this.container,\n        cropper = this.cropper;\n      var minWidth = Number(options.minContainerWidth);\n      var minHeight = Number(options.minContainerHeight);\n      addClass(cropper, CLASS_HIDDEN);\n      removeClass(element, CLASS_HIDDEN);\n      var containerData = {\n        width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n        height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n      };\n      this.containerData = containerData;\n      setStyle(cropper, {\n        width: containerData.width,\n        height: containerData.height\n      });\n      addClass(element, CLASS_HIDDEN);\n      removeClass(cropper, CLASS_HIDDEN);\n    },\n    // Canvas (image wrapper)\n    initCanvas: function initCanvas() {\n      var containerData = this.containerData,\n        imageData = this.imageData;\n      var viewMode = this.options.viewMode;\n      var rotated = Math.abs(imageData.rotate) % 180 === 90;\n      var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n      var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n      var aspectRatio = naturalWidth / naturalHeight;\n      var canvasWidth = containerData.width;\n      var canvasHeight = containerData.height;\n      if (containerData.height * aspectRatio > containerData.width) {\n        if (viewMode === 3) {\n          canvasWidth = containerData.height * aspectRatio;\n        } else {\n          canvasHeight = containerData.width / aspectRatio;\n        }\n      } else if (viewMode === 3) {\n        canvasHeight = containerData.width / aspectRatio;\n      } else {\n        canvasWidth = containerData.height * aspectRatio;\n      }\n      var canvasData = {\n        aspectRatio: aspectRatio,\n        naturalWidth: naturalWidth,\n        naturalHeight: naturalHeight,\n        width: canvasWidth,\n        height: canvasHeight\n      };\n      this.canvasData = canvasData;\n      this.limited = viewMode === 1 || viewMode === 2;\n      this.limitCanvas(true, true);\n      canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n      canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n      canvasData.left = (containerData.width - canvasData.width) / 2;\n      canvasData.top = (containerData.height - canvasData.height) / 2;\n      canvasData.oldLeft = canvasData.left;\n      canvasData.oldTop = canvasData.top;\n      this.initialCanvasData = assign({}, canvasData);\n    },\n    limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n      var options = this.options,\n        containerData = this.containerData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var viewMode = options.viewMode;\n      var aspectRatio = canvasData.aspectRatio;\n      var cropped = this.cropped && cropBoxData;\n      if (sizeLimited) {\n        var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n        var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n        if (viewMode > 1) {\n          minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n          minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n          if (viewMode === 3) {\n            if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n              minCanvasWidth = minCanvasHeight * aspectRatio;\n            } else {\n              minCanvasHeight = minCanvasWidth / aspectRatio;\n            }\n          }\n        } else if (viewMode > 0) {\n          if (minCanvasWidth) {\n            minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n          } else if (minCanvasHeight) {\n            minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n          } else if (cropped) {\n            minCanvasWidth = cropBoxData.width;\n            minCanvasHeight = cropBoxData.height;\n            if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n              minCanvasWidth = minCanvasHeight * aspectRatio;\n            } else {\n              minCanvasHeight = minCanvasWidth / aspectRatio;\n            }\n          }\n        }\n        var _getAdjustedSizes = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: minCanvasWidth,\n          height: minCanvasHeight\n        });\n        minCanvasWidth = _getAdjustedSizes.width;\n        minCanvasHeight = _getAdjustedSizes.height;\n        canvasData.minWidth = minCanvasWidth;\n        canvasData.minHeight = minCanvasHeight;\n        canvasData.maxWidth = Infinity;\n        canvasData.maxHeight = Infinity;\n      }\n      if (positionLimited) {\n        if (viewMode > (cropped ? 0 : 1)) {\n          var newCanvasLeft = containerData.width - canvasData.width;\n          var newCanvasTop = containerData.height - canvasData.height;\n          canvasData.minLeft = Math.min(0, newCanvasLeft);\n          canvasData.minTop = Math.min(0, newCanvasTop);\n          canvasData.maxLeft = Math.max(0, newCanvasLeft);\n          canvasData.maxTop = Math.max(0, newCanvasTop);\n          if (cropped && this.limited) {\n            canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n            canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n            canvasData.maxLeft = cropBoxData.left;\n            canvasData.maxTop = cropBoxData.top;\n            if (viewMode === 2) {\n              if (canvasData.width >= containerData.width) {\n                canvasData.minLeft = Math.min(0, newCanvasLeft);\n                canvasData.maxLeft = Math.max(0, newCanvasLeft);\n              }\n              if (canvasData.height >= containerData.height) {\n                canvasData.minTop = Math.min(0, newCanvasTop);\n                canvasData.maxTop = Math.max(0, newCanvasTop);\n              }\n            }\n          }\n        } else {\n          canvasData.minLeft = -canvasData.width;\n          canvasData.minTop = -canvasData.height;\n          canvasData.maxLeft = containerData.width;\n          canvasData.maxTop = containerData.height;\n        }\n      }\n    },\n    renderCanvas: function renderCanvas(changed, transformed) {\n      var canvasData = this.canvasData,\n        imageData = this.imageData;\n      if (transformed) {\n        var _getRotatedSizes = getRotatedSizes({\n            width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n            height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n            degree: imageData.rotate || 0\n          }),\n          naturalWidth = _getRotatedSizes.width,\n          naturalHeight = _getRotatedSizes.height;\n        var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n        var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n        canvasData.left -= (width - canvasData.width) / 2;\n        canvasData.top -= (height - canvasData.height) / 2;\n        canvasData.width = width;\n        canvasData.height = height;\n        canvasData.aspectRatio = naturalWidth / naturalHeight;\n        canvasData.naturalWidth = naturalWidth;\n        canvasData.naturalHeight = naturalHeight;\n        this.limitCanvas(true, false);\n      }\n      if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n        canvasData.left = canvasData.oldLeft;\n      }\n      if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n        canvasData.top = canvasData.oldTop;\n      }\n      canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n      canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n      this.limitCanvas(false, true);\n      canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n      canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n      canvasData.oldLeft = canvasData.left;\n      canvasData.oldTop = canvasData.top;\n      setStyle(this.canvas, assign({\n        width: canvasData.width,\n        height: canvasData.height\n      }, getTransforms({\n        translateX: canvasData.left,\n        translateY: canvasData.top\n      })));\n      this.renderImage(changed);\n      if (this.cropped && this.limited) {\n        this.limitCropBox(true, true);\n      }\n    },\n    renderImage: function renderImage(changed) {\n      var canvasData = this.canvasData,\n        imageData = this.imageData;\n      var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n      var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n      assign(imageData, {\n        width: width,\n        height: height,\n        left: (canvasData.width - width) / 2,\n        top: (canvasData.height - height) / 2\n      });\n      setStyle(this.image, assign({\n        width: imageData.width,\n        height: imageData.height\n      }, getTransforms(assign({\n        translateX: imageData.left,\n        translateY: imageData.top\n      }, imageData))));\n      if (changed) {\n        this.output();\n      }\n    },\n    initCropBox: function initCropBox() {\n      var options = this.options,\n        canvasData = this.canvasData;\n      var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n      var autoCropArea = Number(options.autoCropArea) || 0.8;\n      var cropBoxData = {\n        width: canvasData.width,\n        height: canvasData.height\n      };\n      if (aspectRatio) {\n        if (canvasData.height * aspectRatio > canvasData.width) {\n          cropBoxData.height = cropBoxData.width / aspectRatio;\n        } else {\n          cropBoxData.width = cropBoxData.height * aspectRatio;\n        }\n      }\n      this.cropBoxData = cropBoxData;\n      this.limitCropBox(true, true);\n\n      // Initialize auto crop area\n      cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n      cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n      // The width/height of auto crop area must large than \"minWidth/Height\"\n      cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n      cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n      cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n      cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n      cropBoxData.oldLeft = cropBoxData.left;\n      cropBoxData.oldTop = cropBoxData.top;\n      this.initialCropBoxData = assign({}, cropBoxData);\n    },\n    limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n      var options = this.options,\n        containerData = this.containerData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData,\n        limited = this.limited;\n      var aspectRatio = options.aspectRatio;\n      if (sizeLimited) {\n        var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n        var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n        var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n        var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n        // The min/maxCropBoxWidth/Height must be less than container's width/height\n        minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n        minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n        if (aspectRatio) {\n          if (minCropBoxWidth && minCropBoxHeight) {\n            if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n              minCropBoxHeight = minCropBoxWidth / aspectRatio;\n            } else {\n              minCropBoxWidth = minCropBoxHeight * aspectRatio;\n            }\n          } else if (minCropBoxWidth) {\n            minCropBoxHeight = minCropBoxWidth / aspectRatio;\n          } else if (minCropBoxHeight) {\n            minCropBoxWidth = minCropBoxHeight * aspectRatio;\n          }\n          if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n            maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n          } else {\n            maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n          }\n        }\n\n        // The minWidth/Height must be less than maxWidth/Height\n        cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n        cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n        cropBoxData.maxWidth = maxCropBoxWidth;\n        cropBoxData.maxHeight = maxCropBoxHeight;\n      }\n      if (positionLimited) {\n        if (limited) {\n          cropBoxData.minLeft = Math.max(0, canvasData.left);\n          cropBoxData.minTop = Math.max(0, canvasData.top);\n          cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n          cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n        } else {\n          cropBoxData.minLeft = 0;\n          cropBoxData.minTop = 0;\n          cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n          cropBoxData.maxTop = containerData.height - cropBoxData.height;\n        }\n      }\n    },\n    renderCropBox: function renderCropBox() {\n      var options = this.options,\n        containerData = this.containerData,\n        cropBoxData = this.cropBoxData;\n      if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n        cropBoxData.left = cropBoxData.oldLeft;\n      }\n      if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n        cropBoxData.top = cropBoxData.oldTop;\n      }\n      cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n      cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n      this.limitCropBox(false, true);\n      cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n      cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n      cropBoxData.oldLeft = cropBoxData.left;\n      cropBoxData.oldTop = cropBoxData.top;\n      if (options.movable && options.cropBoxMovable) {\n        // Turn to move the canvas when the crop box is equal to the container\n        setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n      }\n      setStyle(this.cropBox, assign({\n        width: cropBoxData.width,\n        height: cropBoxData.height\n      }, getTransforms({\n        translateX: cropBoxData.left,\n        translateY: cropBoxData.top\n      })));\n      if (this.cropped && this.limited) {\n        this.limitCanvas(true, true);\n      }\n      if (!this.disabled) {\n        this.output();\n      }\n    },\n    output: function output() {\n      this.preview();\n      dispatchEvent(this.element, EVENT_CROP, this.getData());\n    }\n  };\n\n  var preview = {\n    initPreview: function initPreview() {\n      var element = this.element,\n        crossOrigin = this.crossOrigin;\n      var preview = this.options.preview;\n      var url = crossOrigin ? this.crossOriginUrl : this.url;\n      var alt = element.alt || 'The image to preview';\n      var image = document.createElement('img');\n      if (crossOrigin) {\n        image.crossOrigin = crossOrigin;\n      }\n      image.src = url;\n      image.alt = alt;\n      this.viewBox.appendChild(image);\n      this.viewBoxImage = image;\n      if (!preview) {\n        return;\n      }\n      var previews = preview;\n      if (typeof preview === 'string') {\n        previews = element.ownerDocument.querySelectorAll(preview);\n      } else if (preview.querySelector) {\n        previews = [preview];\n      }\n      this.previews = previews;\n      forEach(previews, function (el) {\n        var img = document.createElement('img');\n\n        // Save the original size for recover\n        setData(el, DATA_PREVIEW, {\n          width: el.offsetWidth,\n          height: el.offsetHeight,\n          html: el.innerHTML\n        });\n        if (crossOrigin) {\n          img.crossOrigin = crossOrigin;\n        }\n        img.src = url;\n        img.alt = alt;\n\n        /**\n         * Override img element styles\n         * Add `display:block` to avoid margin top issue\n         * Add `height:auto` to override `height` attribute on IE8\n         * (Occur only when margin-top <= -height)\n         */\n        img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n        el.innerHTML = '';\n        el.appendChild(img);\n      });\n    },\n    resetPreview: function resetPreview() {\n      forEach(this.previews, function (element) {\n        var data = getData(element, DATA_PREVIEW);\n        setStyle(element, {\n          width: data.width,\n          height: data.height\n        });\n        element.innerHTML = data.html;\n        removeData(element, DATA_PREVIEW);\n      });\n    },\n    preview: function preview() {\n      var imageData = this.imageData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var cropBoxWidth = cropBoxData.width,\n        cropBoxHeight = cropBoxData.height;\n      var width = imageData.width,\n        height = imageData.height;\n      var left = cropBoxData.left - canvasData.left - imageData.left;\n      var top = cropBoxData.top - canvasData.top - imageData.top;\n      if (!this.cropped || this.disabled) {\n        return;\n      }\n      setStyle(this.viewBoxImage, assign({\n        width: width,\n        height: height\n      }, getTransforms(assign({\n        translateX: -left,\n        translateY: -top\n      }, imageData))));\n      forEach(this.previews, function (element) {\n        var data = getData(element, DATA_PREVIEW);\n        var originalWidth = data.width;\n        var originalHeight = data.height;\n        var newWidth = originalWidth;\n        var newHeight = originalHeight;\n        var ratio = 1;\n        if (cropBoxWidth) {\n          ratio = originalWidth / cropBoxWidth;\n          newHeight = cropBoxHeight * ratio;\n        }\n        if (cropBoxHeight && newHeight > originalHeight) {\n          ratio = originalHeight / cropBoxHeight;\n          newWidth = cropBoxWidth * ratio;\n          newHeight = originalHeight;\n        }\n        setStyle(element, {\n          width: newWidth,\n          height: newHeight\n        });\n        setStyle(element.getElementsByTagName('img')[0], assign({\n          width: width * ratio,\n          height: height * ratio\n        }, getTransforms(assign({\n          translateX: -left * ratio,\n          translateY: -top * ratio\n        }, imageData))));\n      });\n    }\n  };\n\n  var events = {\n    bind: function bind() {\n      var element = this.element,\n        options = this.options,\n        cropper = this.cropper;\n      if (isFunction(options.cropstart)) {\n        addListener(element, EVENT_CROP_START, options.cropstart);\n      }\n      if (isFunction(options.cropmove)) {\n        addListener(element, EVENT_CROP_MOVE, options.cropmove);\n      }\n      if (isFunction(options.cropend)) {\n        addListener(element, EVENT_CROP_END, options.cropend);\n      }\n      if (isFunction(options.crop)) {\n        addListener(element, EVENT_CROP, options.crop);\n      }\n      if (isFunction(options.zoom)) {\n        addListener(element, EVENT_ZOOM, options.zoom);\n      }\n      addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n      if (options.zoomable && options.zoomOnWheel) {\n        addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n          passive: false,\n          capture: true\n        });\n      }\n      if (options.toggleDragModeOnDblclick) {\n        addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n      }\n      addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n      addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n      if (options.responsive) {\n        addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n      }\n    },\n    unbind: function unbind() {\n      var element = this.element,\n        options = this.options,\n        cropper = this.cropper;\n      if (isFunction(options.cropstart)) {\n        removeListener(element, EVENT_CROP_START, options.cropstart);\n      }\n      if (isFunction(options.cropmove)) {\n        removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n      }\n      if (isFunction(options.cropend)) {\n        removeListener(element, EVENT_CROP_END, options.cropend);\n      }\n      if (isFunction(options.crop)) {\n        removeListener(element, EVENT_CROP, options.crop);\n      }\n      if (isFunction(options.zoom)) {\n        removeListener(element, EVENT_ZOOM, options.zoom);\n      }\n      removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n      if (options.zoomable && options.zoomOnWheel) {\n        removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n          passive: false,\n          capture: true\n        });\n      }\n      if (options.toggleDragModeOnDblclick) {\n        removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n      }\n      removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n      removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n      if (options.responsive) {\n        removeListener(window, EVENT_RESIZE, this.onResize);\n      }\n    }\n  };\n\n  var handlers = {\n    resize: function resize() {\n      if (this.disabled) {\n        return;\n      }\n      var options = this.options,\n        container = this.container,\n        containerData = this.containerData;\n      var ratioX = container.offsetWidth / containerData.width;\n      var ratioY = container.offsetHeight / containerData.height;\n      var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n      // Resize when width changed or height changed\n      if (ratio !== 1) {\n        var canvasData;\n        var cropBoxData;\n        if (options.restore) {\n          canvasData = this.getCanvasData();\n          cropBoxData = this.getCropBoxData();\n        }\n        this.render();\n        if (options.restore) {\n          this.setCanvasData(forEach(canvasData, function (n, i) {\n            canvasData[i] = n * ratio;\n          }));\n          this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n            cropBoxData[i] = n * ratio;\n          }));\n        }\n      }\n    },\n    dblclick: function dblclick() {\n      if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n        return;\n      }\n      this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n    },\n    wheel: function wheel(event) {\n      var _this = this;\n      var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n      var delta = 1;\n      if (this.disabled) {\n        return;\n      }\n      event.preventDefault();\n\n      // Limit wheel speed to prevent zoom too fast (#21)\n      if (this.wheeling) {\n        return;\n      }\n      this.wheeling = true;\n      setTimeout(function () {\n        _this.wheeling = false;\n      }, 50);\n      if (event.deltaY) {\n        delta = event.deltaY > 0 ? 1 : -1;\n      } else if (event.wheelDelta) {\n        delta = -event.wheelDelta / 120;\n      } else if (event.detail) {\n        delta = event.detail > 0 ? 1 : -1;\n      }\n      this.zoom(-delta * ratio, event);\n    },\n    cropStart: function cropStart(event) {\n      var buttons = event.buttons,\n        button = event.button;\n      if (this.disabled\n\n      // Handle mouse event and pointer event and ignore touch event\n      || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n      // No primary button (Usually the left button)\n      isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n      // Open context menu\n      || event.ctrlKey)) {\n        return;\n      }\n      var options = this.options,\n        pointers = this.pointers;\n      var action;\n      if (event.changedTouches) {\n        // Handle touch event\n        forEach(event.changedTouches, function (touch) {\n          pointers[touch.identifier] = getPointer(touch);\n        });\n      } else {\n        // Handle mouse event and pointer event\n        pointers[event.pointerId || 0] = getPointer(event);\n      }\n      if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n        action = ACTION_ZOOM;\n      } else {\n        action = getData(event.target, DATA_ACTION);\n      }\n      if (!REGEXP_ACTIONS.test(action)) {\n        return;\n      }\n      if (dispatchEvent(this.element, EVENT_CROP_START, {\n        originalEvent: event,\n        action: action\n      }) === false) {\n        return;\n      }\n\n      // This line is required for preventing page zooming in iOS browsers\n      event.preventDefault();\n      this.action = action;\n      this.cropping = false;\n      if (action === ACTION_CROP) {\n        this.cropping = true;\n        addClass(this.dragBox, CLASS_MODAL);\n      }\n    },\n    cropMove: function cropMove(event) {\n      var action = this.action;\n      if (this.disabled || !action) {\n        return;\n      }\n      var pointers = this.pointers;\n      event.preventDefault();\n      if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n        originalEvent: event,\n        action: action\n      }) === false) {\n        return;\n      }\n      if (event.changedTouches) {\n        forEach(event.changedTouches, function (touch) {\n          // The first parameter should not be undefined (#432)\n          assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n        });\n      } else {\n        assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n      }\n      this.change(event);\n    },\n    cropEnd: function cropEnd(event) {\n      if (this.disabled) {\n        return;\n      }\n      var action = this.action,\n        pointers = this.pointers;\n      if (event.changedTouches) {\n        forEach(event.changedTouches, function (touch) {\n          delete pointers[touch.identifier];\n        });\n      } else {\n        delete pointers[event.pointerId || 0];\n      }\n      if (!action) {\n        return;\n      }\n      event.preventDefault();\n      if (!Object.keys(pointers).length) {\n        this.action = '';\n      }\n      if (this.cropping) {\n        this.cropping = false;\n        toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n      }\n      dispatchEvent(this.element, EVENT_CROP_END, {\n        originalEvent: event,\n        action: action\n      });\n    }\n  };\n\n  var change = {\n    change: function change(event) {\n      var options = this.options,\n        canvasData = this.canvasData,\n        containerData = this.containerData,\n        cropBoxData = this.cropBoxData,\n        pointers = this.pointers;\n      var action = this.action;\n      var aspectRatio = options.aspectRatio;\n      var left = cropBoxData.left,\n        top = cropBoxData.top,\n        width = cropBoxData.width,\n        height = cropBoxData.height;\n      var right = left + width;\n      var bottom = top + height;\n      var minLeft = 0;\n      var minTop = 0;\n      var maxWidth = containerData.width;\n      var maxHeight = containerData.height;\n      var renderable = true;\n      var offset;\n\n      // Locking aspect ratio in \"free mode\" by holding shift key\n      if (!aspectRatio && event.shiftKey) {\n        aspectRatio = width && height ? width / height : 1;\n      }\n      if (this.limited) {\n        minLeft = cropBoxData.minLeft;\n        minTop = cropBoxData.minTop;\n        maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n        maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n      }\n      var pointer = pointers[Object.keys(pointers)[0]];\n      var range = {\n        x: pointer.endX - pointer.startX,\n        y: pointer.endY - pointer.startY\n      };\n      var check = function check(side) {\n        switch (side) {\n          case ACTION_EAST:\n            if (right + range.x > maxWidth) {\n              range.x = maxWidth - right;\n            }\n            break;\n          case ACTION_WEST:\n            if (left + range.x < minLeft) {\n              range.x = minLeft - left;\n            }\n            break;\n          case ACTION_NORTH:\n            if (top + range.y < minTop) {\n              range.y = minTop - top;\n            }\n            break;\n          case ACTION_SOUTH:\n            if (bottom + range.y > maxHeight) {\n              range.y = maxHeight - bottom;\n            }\n            break;\n        }\n      };\n      switch (action) {\n        // Move crop box\n        case ACTION_ALL:\n          left += range.x;\n          top += range.y;\n          break;\n\n        // Resize crop box\n        case ACTION_EAST:\n          if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_EAST);\n          width += range.x;\n          if (width < 0) {\n            action = ACTION_WEST;\n            width = -width;\n            left -= width;\n          }\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top += (cropBoxData.height - height) / 2;\n          }\n          break;\n        case ACTION_NORTH:\n          if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_NORTH);\n          height -= range.y;\n          top += range.y;\n          if (height < 0) {\n            action = ACTION_SOUTH;\n            height = -height;\n            top -= height;\n          }\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left += (cropBoxData.width - width) / 2;\n          }\n          break;\n        case ACTION_WEST:\n          if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_WEST);\n          width -= range.x;\n          left += range.x;\n          if (width < 0) {\n            action = ACTION_EAST;\n            width = -width;\n            left -= width;\n          }\n          if (aspectRatio) {\n            height = width / aspectRatio;\n            top += (cropBoxData.height - height) / 2;\n          }\n          break;\n        case ACTION_SOUTH:\n          if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n            renderable = false;\n            break;\n          }\n          check(ACTION_SOUTH);\n          height += range.y;\n          if (height < 0) {\n            action = ACTION_NORTH;\n            height = -height;\n            top -= height;\n          }\n          if (aspectRatio) {\n            width = height * aspectRatio;\n            left += (cropBoxData.width - width) / 2;\n          }\n          break;\n        case ACTION_NORTH_EAST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_NORTH);\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n          } else {\n            check(ACTION_NORTH);\n            check(ACTION_EAST);\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_NORTH_WEST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_NORTH_WEST:\n          if (aspectRatio) {\n            if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_NORTH);\n            height -= range.y;\n            top += range.y;\n            width = height * aspectRatio;\n            left += cropBoxData.width - width;\n          } else {\n            check(ACTION_NORTH);\n            check(ACTION_WEST);\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y <= 0 && top <= minTop) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n            if (range.y <= 0) {\n              if (top > minTop) {\n                height -= range.y;\n                top += range.y;\n              }\n            } else {\n              height -= range.y;\n              top += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_SOUTH_EAST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_NORTH_EAST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_SOUTH_WEST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_SOUTH_WEST:\n          if (aspectRatio) {\n            if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_WEST);\n            width -= range.x;\n            left += range.x;\n            height = width / aspectRatio;\n          } else {\n            check(ACTION_SOUTH);\n            check(ACTION_WEST);\n            if (range.x <= 0) {\n              if (left > minLeft) {\n                width -= range.x;\n                left += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width -= range.x;\n              left += range.x;\n            }\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_EAST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = -height;\n            top -= height;\n          }\n          break;\n        case ACTION_SOUTH_EAST:\n          if (aspectRatio) {\n            if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n              renderable = false;\n              break;\n            }\n            check(ACTION_EAST);\n            width += range.x;\n            height = width / aspectRatio;\n          } else {\n            check(ACTION_SOUTH);\n            check(ACTION_EAST);\n            if (range.x >= 0) {\n              if (right < maxWidth) {\n                width += range.x;\n              } else if (range.y >= 0 && bottom >= maxHeight) {\n                renderable = false;\n              }\n            } else {\n              width += range.x;\n            }\n            if (range.y >= 0) {\n              if (bottom < maxHeight) {\n                height += range.y;\n              }\n            } else {\n              height += range.y;\n            }\n          }\n          if (width < 0 && height < 0) {\n            action = ACTION_NORTH_WEST;\n            height = -height;\n            width = -width;\n            top -= height;\n            left -= width;\n          } else if (width < 0) {\n            action = ACTION_SOUTH_WEST;\n            width = -width;\n            left -= width;\n          } else if (height < 0) {\n            action = ACTION_NORTH_EAST;\n            height = -height;\n            top -= height;\n          }\n          break;\n\n        // Move canvas\n        case ACTION_MOVE:\n          this.move(range.x, range.y);\n          renderable = false;\n          break;\n\n        // Zoom canvas\n        case ACTION_ZOOM:\n          this.zoom(getMaxZoomRatio(pointers), event);\n          renderable = false;\n          break;\n\n        // Create crop box\n        case ACTION_CROP:\n          if (!range.x || !range.y) {\n            renderable = false;\n            break;\n          }\n          offset = getOffset(this.cropper);\n          left = pointer.startX - offset.left;\n          top = pointer.startY - offset.top;\n          width = cropBoxData.minWidth;\n          height = cropBoxData.minHeight;\n          if (range.x > 0) {\n            action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n          } else if (range.x < 0) {\n            left -= width;\n            action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n          }\n          if (range.y < 0) {\n            top -= height;\n          }\n\n          // Show the crop box if is hidden\n          if (!this.cropped) {\n            removeClass(this.cropBox, CLASS_HIDDEN);\n            this.cropped = true;\n            if (this.limited) {\n              this.limitCropBox(true, true);\n            }\n          }\n          break;\n      }\n      if (renderable) {\n        cropBoxData.width = width;\n        cropBoxData.height = height;\n        cropBoxData.left = left;\n        cropBoxData.top = top;\n        this.action = action;\n        this.renderCropBox();\n      }\n\n      // Override\n      forEach(pointers, function (p) {\n        p.startX = p.endX;\n        p.startY = p.endY;\n      });\n    }\n  };\n\n  var methods = {\n    // Show the crop box manually\n    crop: function crop() {\n      if (this.ready && !this.cropped && !this.disabled) {\n        this.cropped = true;\n        this.limitCropBox(true, true);\n        if (this.options.modal) {\n          addClass(this.dragBox, CLASS_MODAL);\n        }\n        removeClass(this.cropBox, CLASS_HIDDEN);\n        this.setCropBoxData(this.initialCropBoxData);\n      }\n      return this;\n    },\n    // Reset the image and crop box to their initial states\n    reset: function reset() {\n      if (this.ready && !this.disabled) {\n        this.imageData = assign({}, this.initialImageData);\n        this.canvasData = assign({}, this.initialCanvasData);\n        this.cropBoxData = assign({}, this.initialCropBoxData);\n        this.renderCanvas();\n        if (this.cropped) {\n          this.renderCropBox();\n        }\n      }\n      return this;\n    },\n    // Clear the crop box\n    clear: function clear() {\n      if (this.cropped && !this.disabled) {\n        assign(this.cropBoxData, {\n          left: 0,\n          top: 0,\n          width: 0,\n          height: 0\n        });\n        this.cropped = false;\n        this.renderCropBox();\n        this.limitCanvas(true, true);\n\n        // Render canvas after crop box rendered\n        this.renderCanvas();\n        removeClass(this.dragBox, CLASS_MODAL);\n        addClass(this.cropBox, CLASS_HIDDEN);\n      }\n      return this;\n    },\n    /**\n     * Replace the image's src and rebuild the cropper\n     * @param {string} url - The new URL.\n     * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n     * @returns {Cropper} this\n     */\n    replace: function replace(url) {\n      var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      if (!this.disabled && url) {\n        if (this.isImg) {\n          this.element.src = url;\n        }\n        if (hasSameSize) {\n          this.url = url;\n          this.image.src = url;\n          if (this.ready) {\n            this.viewBoxImage.src = url;\n            forEach(this.previews, function (element) {\n              element.getElementsByTagName('img')[0].src = url;\n            });\n          }\n        } else {\n          if (this.isImg) {\n            this.replaced = true;\n          }\n          this.options.data = null;\n          this.uncreate();\n          this.load(url);\n        }\n      }\n      return this;\n    },\n    // Enable (unfreeze) the cropper\n    enable: function enable() {\n      if (this.ready && this.disabled) {\n        this.disabled = false;\n        removeClass(this.cropper, CLASS_DISABLED);\n      }\n      return this;\n    },\n    // Disable (freeze) the cropper\n    disable: function disable() {\n      if (this.ready && !this.disabled) {\n        this.disabled = true;\n        addClass(this.cropper, CLASS_DISABLED);\n      }\n      return this;\n    },\n    /**\n     * Destroy the cropper and remove the instance from the image\n     * @returns {Cropper} this\n     */\n    destroy: function destroy() {\n      var element = this.element;\n      if (!element[NAMESPACE]) {\n        return this;\n      }\n      element[NAMESPACE] = undefined;\n      if (this.isImg && this.replaced) {\n        element.src = this.originalUrl;\n      }\n      this.uncreate();\n      return this;\n    },\n    /**\n     * Move the canvas with relative offsets\n     * @param {number} offsetX - The relative offset distance on the x-axis.\n     * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n     * @returns {Cropper} this\n     */\n    move: function move(offsetX) {\n      var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n      var _this$canvasData = this.canvasData,\n        left = _this$canvasData.left,\n        top = _this$canvasData.top;\n      return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n    },\n    /**\n     * Move the canvas to an absolute point\n     * @param {number} x - The x-axis coordinate.\n     * @param {number} [y=x] - The y-axis coordinate.\n     * @returns {Cropper} this\n     */\n    moveTo: function moveTo(x) {\n      var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n      var canvasData = this.canvasData;\n      var changed = false;\n      x = Number(x);\n      y = Number(y);\n      if (this.ready && !this.disabled && this.options.movable) {\n        if (isNumber(x)) {\n          canvasData.left = x;\n          changed = true;\n        }\n        if (isNumber(y)) {\n          canvasData.top = y;\n          changed = true;\n        }\n        if (changed) {\n          this.renderCanvas(true);\n        }\n      }\n      return this;\n    },\n    /**\n     * Zoom the canvas with a relative ratio\n     * @param {number} ratio - The target ratio.\n     * @param {Event} _originalEvent - The original event if any.\n     * @returns {Cropper} this\n     */\n    zoom: function zoom(ratio, _originalEvent) {\n      var canvasData = this.canvasData;\n      ratio = Number(ratio);\n      if (ratio < 0) {\n        ratio = 1 / (1 - ratio);\n      } else {\n        ratio = 1 + ratio;\n      }\n      return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n    },\n    /**\n     * Zoom the canvas to an absolute ratio\n     * @param {number} ratio - The target ratio.\n     * @param {Object} pivot - The zoom pivot point coordinate.\n     * @param {Event} _originalEvent - The original event if any.\n     * @returns {Cropper} this\n     */\n    zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n      var options = this.options,\n        canvasData = this.canvasData;\n      var width = canvasData.width,\n        height = canvasData.height,\n        naturalWidth = canvasData.naturalWidth,\n        naturalHeight = canvasData.naturalHeight;\n      ratio = Number(ratio);\n      if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n        var newWidth = naturalWidth * ratio;\n        var newHeight = naturalHeight * ratio;\n        if (dispatchEvent(this.element, EVENT_ZOOM, {\n          ratio: ratio,\n          oldRatio: width / naturalWidth,\n          originalEvent: _originalEvent\n        }) === false) {\n          return this;\n        }\n        if (_originalEvent) {\n          var pointers = this.pointers;\n          var offset = getOffset(this.cropper);\n          var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n            pageX: _originalEvent.pageX,\n            pageY: _originalEvent.pageY\n          };\n\n          // Zoom from the triggering point of the event\n          canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n          canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n        } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n          canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n          canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n        } else {\n          // Zoom from the center of the canvas\n          canvasData.left -= (newWidth - width) / 2;\n          canvasData.top -= (newHeight - height) / 2;\n        }\n        canvasData.width = newWidth;\n        canvasData.height = newHeight;\n        this.renderCanvas(true);\n      }\n      return this;\n    },\n    /**\n     * Rotate the canvas with a relative degree\n     * @param {number} degree - The rotate degree.\n     * @returns {Cropper} this\n     */\n    rotate: function rotate(degree) {\n      return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n    },\n    /**\n     * Rotate the canvas to an absolute degree\n     * @param {number} degree - The rotate degree.\n     * @returns {Cropper} this\n     */\n    rotateTo: function rotateTo(degree) {\n      degree = Number(degree);\n      if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n        this.imageData.rotate = degree % 360;\n        this.renderCanvas(true, true);\n      }\n      return this;\n    },\n    /**\n     * Scale the image on the x-axis.\n     * @param {number} scaleX - The scale ratio on the x-axis.\n     * @returns {Cropper} this\n     */\n    scaleX: function scaleX(_scaleX) {\n      var scaleY = this.imageData.scaleY;\n      return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n    },\n    /**\n     * Scale the image on the y-axis.\n     * @param {number} scaleY - The scale ratio on the y-axis.\n     * @returns {Cropper} this\n     */\n    scaleY: function scaleY(_scaleY) {\n      var scaleX = this.imageData.scaleX;\n      return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n    },\n    /**\n     * Scale the image\n     * @param {number} scaleX - The scale ratio on the x-axis.\n     * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n     * @returns {Cropper} this\n     */\n    scale: function scale(scaleX) {\n      var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n      var imageData = this.imageData;\n      var transformed = false;\n      scaleX = Number(scaleX);\n      scaleY = Number(scaleY);\n      if (this.ready && !this.disabled && this.options.scalable) {\n        if (isNumber(scaleX)) {\n          imageData.scaleX = scaleX;\n          transformed = true;\n        }\n        if (isNumber(scaleY)) {\n          imageData.scaleY = scaleY;\n          transformed = true;\n        }\n        if (transformed) {\n          this.renderCanvas(true, true);\n        }\n      }\n      return this;\n    },\n    /**\n     * Get the cropped area position and size data (base on the original image)\n     * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n     * @returns {Object} The result cropped data.\n     */\n    getData: function getData() {\n      var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var options = this.options,\n        imageData = this.imageData,\n        canvasData = this.canvasData,\n        cropBoxData = this.cropBoxData;\n      var data;\n      if (this.ready && this.cropped) {\n        data = {\n          x: cropBoxData.left - canvasData.left,\n          y: cropBoxData.top - canvasData.top,\n          width: cropBoxData.width,\n          height: cropBoxData.height\n        };\n        var ratio = imageData.width / imageData.naturalWidth;\n        forEach(data, function (n, i) {\n          data[i] = n / ratio;\n        });\n        if (rounded) {\n          // In case rounding off leads to extra 1px in right or bottom border\n          // we should round the top-left corner and the dimension (#343).\n          var bottom = Math.round(data.y + data.height);\n          var right = Math.round(data.x + data.width);\n          data.x = Math.round(data.x);\n          data.y = Math.round(data.y);\n          data.width = right - data.x;\n          data.height = bottom - data.y;\n        }\n      } else {\n        data = {\n          x: 0,\n          y: 0,\n          width: 0,\n          height: 0\n        };\n      }\n      if (options.rotatable) {\n        data.rotate = imageData.rotate || 0;\n      }\n      if (options.scalable) {\n        data.scaleX = imageData.scaleX || 1;\n        data.scaleY = imageData.scaleY || 1;\n      }\n      return data;\n    },\n    /**\n     * Set the cropped area position and size with new data\n     * @param {Object} data - The new data.\n     * @returns {Cropper} this\n     */\n    setData: function setData(data) {\n      var options = this.options,\n        imageData = this.imageData,\n        canvasData = this.canvasData;\n      var cropBoxData = {};\n      if (this.ready && !this.disabled && isPlainObject(data)) {\n        var transformed = false;\n        if (options.rotatable) {\n          if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n            imageData.rotate = data.rotate;\n            transformed = true;\n          }\n        }\n        if (options.scalable) {\n          if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n            imageData.scaleX = data.scaleX;\n            transformed = true;\n          }\n          if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n            imageData.scaleY = data.scaleY;\n            transformed = true;\n          }\n        }\n        if (transformed) {\n          this.renderCanvas(true, true);\n        }\n        var ratio = imageData.width / imageData.naturalWidth;\n        if (isNumber(data.x)) {\n          cropBoxData.left = data.x * ratio + canvasData.left;\n        }\n        if (isNumber(data.y)) {\n          cropBoxData.top = data.y * ratio + canvasData.top;\n        }\n        if (isNumber(data.width)) {\n          cropBoxData.width = data.width * ratio;\n        }\n        if (isNumber(data.height)) {\n          cropBoxData.height = data.height * ratio;\n        }\n        this.setCropBoxData(cropBoxData);\n      }\n      return this;\n    },\n    /**\n     * Get the container size data.\n     * @returns {Object} The result container data.\n     */\n    getContainerData: function getContainerData() {\n      return this.ready ? assign({}, this.containerData) : {};\n    },\n    /**\n     * Get the image position and size data.\n     * @returns {Object} The result image data.\n     */\n    getImageData: function getImageData() {\n      return this.sized ? assign({}, this.imageData) : {};\n    },\n    /**\n     * Get the canvas position and size data.\n     * @returns {Object} The result canvas data.\n     */\n    getCanvasData: function getCanvasData() {\n      var canvasData = this.canvasData;\n      var data = {};\n      if (this.ready) {\n        forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n          data[n] = canvasData[n];\n        });\n      }\n      return data;\n    },\n    /**\n     * Set the canvas position and size with new data.\n     * @param {Object} data - The new canvas data.\n     * @returns {Cropper} this\n     */\n    setCanvasData: function setCanvasData(data) {\n      var canvasData = this.canvasData;\n      var aspectRatio = canvasData.aspectRatio;\n      if (this.ready && !this.disabled && isPlainObject(data)) {\n        if (isNumber(data.left)) {\n          canvasData.left = data.left;\n        }\n        if (isNumber(data.top)) {\n          canvasData.top = data.top;\n        }\n        if (isNumber(data.width)) {\n          canvasData.width = data.width;\n          canvasData.height = data.width / aspectRatio;\n        } else if (isNumber(data.height)) {\n          canvasData.height = data.height;\n          canvasData.width = data.height * aspectRatio;\n        }\n        this.renderCanvas(true);\n      }\n      return this;\n    },\n    /**\n     * Get the crop box position and size data.\n     * @returns {Object} The result crop box data.\n     */\n    getCropBoxData: function getCropBoxData() {\n      var cropBoxData = this.cropBoxData;\n      var data;\n      if (this.ready && this.cropped) {\n        data = {\n          left: cropBoxData.left,\n          top: cropBoxData.top,\n          width: cropBoxData.width,\n          height: cropBoxData.height\n        };\n      }\n      return data || {};\n    },\n    /**\n     * Set the crop box position and size with new data.\n     * @param {Object} data - The new crop box data.\n     * @returns {Cropper} this\n     */\n    setCropBoxData: function setCropBoxData(data) {\n      var cropBoxData = this.cropBoxData;\n      var aspectRatio = this.options.aspectRatio;\n      var widthChanged;\n      var heightChanged;\n      if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n        if (isNumber(data.left)) {\n          cropBoxData.left = data.left;\n        }\n        if (isNumber(data.top)) {\n          cropBoxData.top = data.top;\n        }\n        if (isNumber(data.width) && data.width !== cropBoxData.width) {\n          widthChanged = true;\n          cropBoxData.width = data.width;\n        }\n        if (isNumber(data.height) && data.height !== cropBoxData.height) {\n          heightChanged = true;\n          cropBoxData.height = data.height;\n        }\n        if (aspectRatio) {\n          if (widthChanged) {\n            cropBoxData.height = cropBoxData.width / aspectRatio;\n          } else if (heightChanged) {\n            cropBoxData.width = cropBoxData.height * aspectRatio;\n          }\n        }\n        this.renderCropBox();\n      }\n      return this;\n    },\n    /**\n     * Get a canvas drawn the cropped image.\n     * @param {Object} [options={}] - The config options.\n     * @returns {HTMLCanvasElement} - The result canvas.\n     */\n    getCroppedCanvas: function getCroppedCanvas() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (!this.ready || !window.HTMLCanvasElement) {\n        return null;\n      }\n      var canvasData = this.canvasData;\n      var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n      // Returns the source canvas if it is not cropped.\n      if (!this.cropped) {\n        return source;\n      }\n      var _this$getData = this.getData(options.rounded),\n        initialX = _this$getData.x,\n        initialY = _this$getData.y,\n        initialWidth = _this$getData.width,\n        initialHeight = _this$getData.height;\n      var ratio = source.width / Math.floor(canvasData.naturalWidth);\n      if (ratio !== 1) {\n        initialX *= ratio;\n        initialY *= ratio;\n        initialWidth *= ratio;\n        initialHeight *= ratio;\n      }\n      var aspectRatio = initialWidth / initialHeight;\n      var maxSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: options.maxWidth || Infinity,\n        height: options.maxHeight || Infinity\n      });\n      var minSizes = getAdjustedSizes({\n        aspectRatio: aspectRatio,\n        width: options.minWidth || 0,\n        height: options.minHeight || 0\n      }, 'cover');\n      var _getAdjustedSizes = getAdjustedSizes({\n          aspectRatio: aspectRatio,\n          width: options.width || (ratio !== 1 ? source.width : initialWidth),\n          height: options.height || (ratio !== 1 ? source.height : initialHeight)\n        }),\n        width = _getAdjustedSizes.width,\n        height = _getAdjustedSizes.height;\n      width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n      height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n      var canvas = document.createElement('canvas');\n      var context = canvas.getContext('2d');\n      canvas.width = normalizeDecimalNumber(width);\n      canvas.height = normalizeDecimalNumber(height);\n      context.fillStyle = options.fillColor || 'transparent';\n      context.fillRect(0, 0, width, height);\n      var _options$imageSmoothi = options.imageSmoothingEnabled,\n        imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n        imageSmoothingQuality = options.imageSmoothingQuality;\n      context.imageSmoothingEnabled = imageSmoothingEnabled;\n      if (imageSmoothingQuality) {\n        context.imageSmoothingQuality = imageSmoothingQuality;\n      }\n\n      // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n      var sourceWidth = source.width;\n      var sourceHeight = source.height;\n\n      // Source canvas parameters\n      var srcX = initialX;\n      var srcY = initialY;\n      var srcWidth;\n      var srcHeight;\n\n      // Destination canvas parameters\n      var dstX;\n      var dstY;\n      var dstWidth;\n      var dstHeight;\n      if (srcX <= -initialWidth || srcX > sourceWidth) {\n        srcX = 0;\n        srcWidth = 0;\n        dstX = 0;\n        dstWidth = 0;\n      } else if (srcX <= 0) {\n        dstX = -srcX;\n        srcX = 0;\n        srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n        dstWidth = srcWidth;\n      } else if (srcX <= sourceWidth) {\n        dstX = 0;\n        srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n        dstWidth = srcWidth;\n      }\n      if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n        srcY = 0;\n        srcHeight = 0;\n        dstY = 0;\n        dstHeight = 0;\n      } else if (srcY <= 0) {\n        dstY = -srcY;\n        srcY = 0;\n        srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n        dstHeight = srcHeight;\n      } else if (srcY <= sourceHeight) {\n        dstY = 0;\n        srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n        dstHeight = srcHeight;\n      }\n      var params = [srcX, srcY, srcWidth, srcHeight];\n\n      // Avoid \"IndexSizeError\"\n      if (dstWidth > 0 && dstHeight > 0) {\n        var scale = width / initialWidth;\n        params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n      }\n\n      // All the numerical parameters should be integer for `drawImage`\n      // https://github.com/fengyuanchen/cropper/issues/476\n      context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n        return Math.floor(normalizeDecimalNumber(param));\n      }))));\n      return canvas;\n    },\n    /**\n     * Change the aspect ratio of the crop box.\n     * @param {number} aspectRatio - The new aspect ratio.\n     * @returns {Cropper} this\n     */\n    setAspectRatio: function setAspectRatio(aspectRatio) {\n      var options = this.options;\n      if (!this.disabled && !isUndefined(aspectRatio)) {\n        // 0 -> NaN\n        options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n        if (this.ready) {\n          this.initCropBox();\n          if (this.cropped) {\n            this.renderCropBox();\n          }\n        }\n      }\n      return this;\n    },\n    /**\n     * Change the drag mode.\n     * @param {string} mode - The new drag mode.\n     * @returns {Cropper} this\n     */\n    setDragMode: function setDragMode(mode) {\n      var options = this.options,\n        dragBox = this.dragBox,\n        face = this.face;\n      if (this.ready && !this.disabled) {\n        var croppable = mode === DRAG_MODE_CROP;\n        var movable = options.movable && mode === DRAG_MODE_MOVE;\n        mode = croppable || movable ? mode : DRAG_MODE_NONE;\n        options.dragMode = mode;\n        setData(dragBox, DATA_ACTION, mode);\n        toggleClass(dragBox, CLASS_CROP, croppable);\n        toggleClass(dragBox, CLASS_MOVE, movable);\n        if (!options.cropBoxMovable) {\n          // Sync drag mode to crop box when it is not movable\n          setData(face, DATA_ACTION, mode);\n          toggleClass(face, CLASS_CROP, croppable);\n          toggleClass(face, CLASS_MOVE, movable);\n        }\n      }\n      return this;\n    }\n  };\n\n  var AnotherCropper = WINDOW.Cropper;\n  var Cropper = /*#__PURE__*/function () {\n    /**\n     * Create a new Cropper.\n     * @param {Element} element - The target element for cropping.\n     * @param {Object} [options={}] - The configuration options.\n     */\n    function Cropper(element) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      _classCallCheck(this, Cropper);\n      if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n        throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n      }\n      this.element = element;\n      this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n      this.cropped = false;\n      this.disabled = false;\n      this.pointers = {};\n      this.ready = false;\n      this.reloading = false;\n      this.replaced = false;\n      this.sized = false;\n      this.sizing = false;\n      this.init();\n    }\n    _createClass(Cropper, [{\n      key: \"init\",\n      value: function init() {\n        var element = this.element;\n        var tagName = element.tagName.toLowerCase();\n        var url;\n        if (element[NAMESPACE]) {\n          return;\n        }\n        element[NAMESPACE] = this;\n        if (tagName === 'img') {\n          this.isImg = true;\n\n          // e.g.: \"img/picture.jpg\"\n          url = element.getAttribute('src') || '';\n          this.originalUrl = url;\n\n          // Stop when it's a blank image\n          if (!url) {\n            return;\n          }\n\n          // e.g.: \"https://example.com/img/picture.jpg\"\n          url = element.src;\n        } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n          url = element.toDataURL();\n        }\n        this.load(url);\n      }\n    }, {\n      key: \"load\",\n      value: function load(url) {\n        var _this = this;\n        if (!url) {\n          return;\n        }\n        this.url = url;\n        this.imageData = {};\n        var element = this.element,\n          options = this.options;\n        if (!options.rotatable && !options.scalable) {\n          options.checkOrientation = false;\n        }\n\n        // Only IE10+ supports Typed Arrays\n        if (!options.checkOrientation || !window.ArrayBuffer) {\n          this.clone();\n          return;\n        }\n\n        // Detect the mime type of the image directly if it is a Data URL\n        if (REGEXP_DATA_URL.test(url)) {\n          // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n          if (REGEXP_DATA_URL_JPEG.test(url)) {\n            this.read(dataURLToArrayBuffer(url));\n          } else {\n            // Only a JPEG image may contains Exif Orientation information,\n            // the rest types of Data URLs are not necessary to check orientation at all.\n            this.clone();\n          }\n          return;\n        }\n\n        // 1. Detect the mime type of the image by a XMLHttpRequest.\n        // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n        var xhr = new XMLHttpRequest();\n        var clone = this.clone.bind(this);\n        this.reloading = true;\n        this.xhr = xhr;\n\n        // 1. Cross origin requests are only supported for protocol schemes:\n        // http, https, data, chrome, chrome-extension.\n        // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n        // in some browsers as IE11 and Safari.\n        xhr.onabort = clone;\n        xhr.onerror = clone;\n        xhr.ontimeout = clone;\n        xhr.onprogress = function () {\n          // Abort the request directly if it not a JPEG image for better performance\n          if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n            xhr.abort();\n          }\n        };\n        xhr.onload = function () {\n          _this.read(xhr.response);\n        };\n        xhr.onloadend = function () {\n          _this.reloading = false;\n          _this.xhr = null;\n        };\n\n        // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n        if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n          url = addTimestamp(url);\n        }\n\n        // The third parameter is required for avoiding side-effect (#682)\n        xhr.open('GET', url, true);\n        xhr.responseType = 'arraybuffer';\n        xhr.withCredentials = element.crossOrigin === 'use-credentials';\n        xhr.send();\n      }\n    }, {\n      key: \"read\",\n      value: function read(arrayBuffer) {\n        var options = this.options,\n          imageData = this.imageData;\n\n        // Reset the orientation value to its default value 1\n        // as some iOS browsers will render image with its orientation\n        var orientation = resetAndGetOrientation(arrayBuffer);\n        var rotate = 0;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (orientation > 1) {\n          // Generate a new URL which has the default orientation value\n          this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n          var _parseOrientation = parseOrientation(orientation);\n          rotate = _parseOrientation.rotate;\n          scaleX = _parseOrientation.scaleX;\n          scaleY = _parseOrientation.scaleY;\n        }\n        if (options.rotatable) {\n          imageData.rotate = rotate;\n        }\n        if (options.scalable) {\n          imageData.scaleX = scaleX;\n          imageData.scaleY = scaleY;\n        }\n        this.clone();\n      }\n    }, {\n      key: \"clone\",\n      value: function clone() {\n        var element = this.element,\n          url = this.url;\n        var crossOrigin = element.crossOrigin;\n        var crossOriginUrl = url;\n        if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n          if (!crossOrigin) {\n            crossOrigin = 'anonymous';\n          }\n\n          // Bust cache when there is not a \"crossOrigin\" property (#519)\n          crossOriginUrl = addTimestamp(url);\n        }\n        this.crossOrigin = crossOrigin;\n        this.crossOriginUrl = crossOriginUrl;\n        var image = document.createElement('img');\n        if (crossOrigin) {\n          image.crossOrigin = crossOrigin;\n        }\n        image.src = crossOriginUrl || url;\n        image.alt = element.alt || 'The image to crop';\n        this.image = image;\n        image.onload = this.start.bind(this);\n        image.onerror = this.stop.bind(this);\n        addClass(image, CLASS_HIDE);\n        element.parentNode.insertBefore(image, element.nextSibling);\n      }\n    }, {\n      key: \"start\",\n      value: function start() {\n        var _this2 = this;\n        var image = this.image;\n        image.onload = null;\n        image.onerror = null;\n        this.sizing = true;\n\n        // Match all browsers that use WebKit as the layout engine in iOS devices,\n        // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n        var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n        var done = function done(naturalWidth, naturalHeight) {\n          assign(_this2.imageData, {\n            naturalWidth: naturalWidth,\n            naturalHeight: naturalHeight,\n            aspectRatio: naturalWidth / naturalHeight\n          });\n          _this2.initialImageData = assign({}, _this2.imageData);\n          _this2.sizing = false;\n          _this2.sized = true;\n          _this2.build();\n        };\n\n        // Most modern browsers (excepts iOS WebKit)\n        if (image.naturalWidth && !isIOSWebKit) {\n          done(image.naturalWidth, image.naturalHeight);\n          return;\n        }\n        var sizingImage = document.createElement('img');\n        var body = document.body || document.documentElement;\n        this.sizingImage = sizingImage;\n        sizingImage.onload = function () {\n          done(sizingImage.width, sizingImage.height);\n          if (!isIOSWebKit) {\n            body.removeChild(sizingImage);\n          }\n        };\n        sizingImage.src = image.src;\n\n        // iOS WebKit will convert the image automatically\n        // with its orientation once append it into DOM (#279)\n        if (!isIOSWebKit) {\n          sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n          body.appendChild(sizingImage);\n        }\n      }\n    }, {\n      key: \"stop\",\n      value: function stop() {\n        var image = this.image;\n        image.onload = null;\n        image.onerror = null;\n        image.parentNode.removeChild(image);\n        this.image = null;\n      }\n    }, {\n      key: \"build\",\n      value: function build() {\n        if (!this.sized || this.ready) {\n          return;\n        }\n        var element = this.element,\n          options = this.options,\n          image = this.image;\n\n        // Create cropper elements\n        var container = element.parentNode;\n        var template = document.createElement('div');\n        template.innerHTML = TEMPLATE;\n        var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n        var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n        var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n        var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n        var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n        this.container = container;\n        this.cropper = cropper;\n        this.canvas = canvas;\n        this.dragBox = dragBox;\n        this.cropBox = cropBox;\n        this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n        this.face = face;\n        canvas.appendChild(image);\n\n        // Hide the original image\n        addClass(element, CLASS_HIDDEN);\n\n        // Inserts the cropper after to the current image\n        container.insertBefore(cropper, element.nextSibling);\n\n        // Show the hidden image\n        removeClass(image, CLASS_HIDE);\n        this.initPreview();\n        this.bind();\n        options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n        options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n        options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n        addClass(cropBox, CLASS_HIDDEN);\n        if (!options.guides) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n        }\n        if (!options.center) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n        }\n        if (options.background) {\n          addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n        }\n        if (!options.highlight) {\n          addClass(face, CLASS_INVISIBLE);\n        }\n        if (options.cropBoxMovable) {\n          addClass(face, CLASS_MOVE);\n          setData(face, DATA_ACTION, ACTION_ALL);\n        }\n        if (!options.cropBoxResizable) {\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n          addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n        }\n        this.render();\n        this.ready = true;\n        this.setDragMode(options.dragMode);\n        if (options.autoCrop) {\n          this.crop();\n        }\n        this.setData(options.data);\n        if (isFunction(options.ready)) {\n          addListener(element, EVENT_READY, options.ready, {\n            once: true\n          });\n        }\n        dispatchEvent(element, EVENT_READY);\n      }\n    }, {\n      key: \"unbuild\",\n      value: function unbuild() {\n        if (!this.ready) {\n          return;\n        }\n        this.ready = false;\n        this.unbind();\n        this.resetPreview();\n        var parentNode = this.cropper.parentNode;\n        if (parentNode) {\n          parentNode.removeChild(this.cropper);\n        }\n        removeClass(this.element, CLASS_HIDDEN);\n      }\n    }, {\n      key: \"uncreate\",\n      value: function uncreate() {\n        if (this.ready) {\n          this.unbuild();\n          this.ready = false;\n          this.cropped = false;\n        } else if (this.sizing) {\n          this.sizingImage.onload = null;\n          this.sizing = false;\n          this.sized = false;\n        } else if (this.reloading) {\n          this.xhr.onabort = null;\n          this.xhr.abort();\n        } else if (this.image) {\n          this.stop();\n        }\n      }\n\n      /**\n       * Get the no conflict cropper class.\n       * @returns {Cropper} The cropper class.\n       */\n    }], [{\n      key: \"noConflict\",\n      value: function noConflict() {\n        window.Cropper = AnotherCropper;\n        return Cropper;\n      }\n\n      /**\n       * Change the default options.\n       * @param {Object} options - The new default options.\n       */\n    }, {\n      key: \"setDefaults\",\n      value: function setDefaults(options) {\n        assign(DEFAULTS, isPlainObject(options) && options);\n      }\n    }]);\n    return Cropper;\n  }();\n  assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n  return Cropper;\n\n}));\n", "\"use strict\";\nexports.__esModule = true;\nvar version = \"1.5.2\";\nexports[\"default\"] = version;\n", "\"use strict\";\nexports.__esModule = true;\nexports.Node = exports.getPosition = exports.getPositionName = exports.Position = void 0;\nvar Position;\n(function (Position) {\n    Position[Position[\"Before\"] = 1] = \"Before\";\n    Position[Position[\"After\"] = 2] = \"After\";\n    Position[Position[\"Inside\"] = 3] = \"Inside\";\n    Position[Position[\"None\"] = 4] = \"None\";\n})(Position = exports.Position || (exports.Position = {}));\nvar positionNames = {\n    before: Position.Before,\n    after: Position.After,\n    inside: Position.Inside,\n    none: Position.None\n};\nexports.getPositionName = function (position) {\n    for (var name_1 in positionNames) {\n        if (Object.prototype.hasOwnProperty.call(positionNames, name_1)) {\n            if (positionNames[name_1] === position) {\n                return name_1;\n            }\n        }\n    }\n    return \"\";\n};\nexports.getPosition = function (name) {\n    return positionNames[name];\n};\nvar Node = /** @class */ (function () {\n    function Node(o, isRoot, nodeClass) {\n        if (o === void 0) { o = null; }\n        if (isRoot === void 0) { isRoot = false; }\n        if (nodeClass === void 0) { nodeClass = Node; }\n        this.name = \"\";\n        this.isEmptyFolder = false;\n        this.load_on_demand = false;\n        this.setData(o);\n        this.children = [];\n        this.parent = null;\n        if (isRoot) {\n            this.idMapping = {};\n            this.tree = this;\n            this.nodeClass = nodeClass;\n        }\n    }\n    /*\n    Set the data of this node.\n\n    setData(string): set the name of the node\n    setdata(object): set attributes of the node\n\n    Examples:\n        setdata('node1')\n\n        setData({ name: 'node1', id: 1});\n\n        setData({ name: 'node2', id: 2, color: 'green'});\n\n    * This is an internal function; it is not in the docs\n    * Does not remove existing node values\n    */\n    Node.prototype.setData = function (o) {\n        if (!o) {\n            return;\n        }\n        else if (typeof o === \"string\") {\n            this.name = o;\n        }\n        else if (typeof o === \"object\") {\n            for (var key in o) {\n                if (Object.prototype.hasOwnProperty.call(o, key)) {\n                    var value = o[key];\n                    if (key === \"label\" || key === \"name\") {\n                        // You can use the 'label' key instead of 'name'; this is a legacy feature\n                        if (typeof value === \"string\") {\n                            this.name = value;\n                        }\n                    }\n                    else if (key !== \"children\" && key !== \"parent\") {\n                        // You can't update the children or the parent using this function\n                        this[key] = value;\n                    }\n                }\n            }\n        }\n    };\n    /*\n    Create tree from data.\n\n    Structure of data is:\n    [\n        {\n            name: 'node1',\n            children: [\n                { name: 'child1' },\n                { name: 'child2' }\n            ]\n        },\n        {\n            name: 'node2'\n        }\n    ]\n    */\n    Node.prototype.loadFromData = function (data) {\n        this.removeChildren();\n        for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n            var o = data_1[_i];\n            var node = this.createNode(o);\n            this.addChild(node);\n            if (typeof o === \"object\" &&\n                o[\"children\"] &&\n                o[\"children\"] instanceof Array) {\n                if (o[\"children\"].length === 0) {\n                    node.isEmptyFolder = true;\n                }\n                else {\n                    node.loadFromData(o[\"children\"]);\n                }\n            }\n        }\n        return this;\n    };\n    /*\n    Add child.\n\n    tree.addChild(\n        new Node('child1')\n    );\n    */\n    Node.prototype.addChild = function (node) {\n        this.children.push(node);\n        node.setParent(this);\n    };\n    /*\n    Add child at position. Index starts at 0.\n\n    tree.addChildAtPosition(\n        new Node('abc'),\n        1\n    );\n    */\n    Node.prototype.addChildAtPosition = function (node, index) {\n        this.children.splice(index, 0, node);\n        node.setParent(this);\n    };\n    /*\n    Remove child. This also removes the children of the node.\n\n    tree.removeChild(tree.children[0]);\n    */\n    Node.prototype.removeChild = function (node) {\n        // remove children from the index\n        node.removeChildren();\n        this.doRemoveChild(node);\n    };\n    /*\n    Get child index.\n\n    var index = getChildIndex(node);\n    */\n    Node.prototype.getChildIndex = function (node) {\n        return this.children.indexOf(node);\n    };\n    /*\n    Does the tree have children?\n\n    if (tree.hasChildren()) {\n        //\n    }\n    */\n    Node.prototype.hasChildren = function () {\n        return this.children.length !== 0;\n    };\n    Node.prototype.isFolder = function () {\n        return this.hasChildren() || this.load_on_demand;\n    };\n    /*\n    Iterate over all the nodes in the tree.\n\n    Calls callback with (node, level).\n\n    The callback must return true to continue the iteration on current node.\n\n    tree.iterate(\n        function(node, level) {\n           console.log(node.name);\n\n           // stop iteration after level 2\n           return (level <= 2);\n        }\n    );\n\n    */\n    Node.prototype.iterate = function (callback) {\n        var _iterate = function (node, level) {\n            if (node.children) {\n                for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                    var child = _a[_i];\n                    var result = callback(child, level);\n                    if (result && child.hasChildren()) {\n                        _iterate(child, level + 1);\n                    }\n                }\n            }\n        };\n        _iterate(this, 0);\n    };\n    /*\n    Move node relative to another node.\n\n    Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n    // move node1 after node2\n    tree.moveNode(node1, node2, Position.AFTER);\n    */\n    Node.prototype.moveNode = function (movedNode, targetNode, position) {\n        if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n            // - Node is parent of target node\n            // - Or, parent is empty\n            return false;\n        }\n        else {\n            movedNode.parent.doRemoveChild(movedNode);\n            switch (position) {\n                case Position.After: {\n                    if (targetNode.parent) {\n                        targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1);\n                        return true;\n                    }\n                    return false;\n                }\n                case Position.Before: {\n                    if (targetNode.parent) {\n                        targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode));\n                        return true;\n                    }\n                    return false;\n                }\n                case Position.Inside: {\n                    // move inside as first child\n                    targetNode.addChildAtPosition(movedNode, 0);\n                    return true;\n                }\n                default:\n                    return false;\n            }\n        }\n    };\n    /*\n    Get the tree as data.\n    */\n    Node.prototype.getData = function (includeParent) {\n        if (includeParent === void 0) { includeParent = false; }\n        var getDataFromNodes = function (nodes) {\n            return nodes.map(function (node) {\n                var tmpNode = {};\n                for (var k in node) {\n                    if ([\n                        \"parent\",\n                        \"children\",\n                        \"element\",\n                        \"idMapping\",\n                        \"load_on_demand\",\n                        \"nodeClass\",\n                        \"tree\",\n                        \"isEmptyFolder\",\n                    ].indexOf(k) === -1 &&\n                        Object.prototype.hasOwnProperty.call(node, k)) {\n                        var v = node[k];\n                        tmpNode[k] = v;\n                    }\n                }\n                if (node.hasChildren()) {\n                    tmpNode[\"children\"] = getDataFromNodes(node.children);\n                }\n                return tmpNode;\n            });\n        };\n        if (includeParent) {\n            return getDataFromNodes([this]);\n        }\n        else {\n            return getDataFromNodes(this.children);\n        }\n    };\n    Node.prototype.getNodeByName = function (name) {\n        return this.getNodeByCallback(function (node) { return node.name === name; });\n    };\n    Node.prototype.getNodeByNameMustExist = function (name) {\n        var node = this.getNodeByCallback(function (n) { return n.name === name; });\n        if (!node) {\n            throw \"Node with name \" + name + \" not found\";\n        }\n        return node;\n    };\n    Node.prototype.getNodeByCallback = function (callback) {\n        var result = null;\n        this.iterate(function (node) {\n            if (result) {\n                return false;\n            }\n            else if (callback(node)) {\n                result = node;\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n        return result;\n    };\n    Node.prototype.addAfter = function (nodeInfo) {\n        if (!this.parent) {\n            return null;\n        }\n        else {\n            var node = this.createNode(nodeInfo);\n            var childIndex = this.parent.getChildIndex(this);\n            this.parent.addChildAtPosition(node, childIndex + 1);\n            if (typeof nodeInfo === \"object\" &&\n                nodeInfo[\"children\"] &&\n                nodeInfo[\"children\"] instanceof Array &&\n                nodeInfo[\"children\"].length) {\n                node.loadFromData(nodeInfo[\"children\"]);\n            }\n            return node;\n        }\n    };\n    Node.prototype.addBefore = function (nodeInfo) {\n        if (!this.parent) {\n            return null;\n        }\n        else {\n            var node = this.createNode(nodeInfo);\n            var childIndex = this.parent.getChildIndex(this);\n            this.parent.addChildAtPosition(node, childIndex);\n            if (typeof nodeInfo === \"object\" &&\n                nodeInfo[\"children\"] &&\n                nodeInfo[\"children\"] instanceof Array &&\n                nodeInfo[\"children\"].length) {\n                node.loadFromData(nodeInfo[\"children\"]);\n            }\n            return node;\n        }\n    };\n    Node.prototype.addParent = function (nodeInfo) {\n        if (!this.parent) {\n            return null;\n        }\n        else {\n            var newParent = this.createNode(nodeInfo);\n            if (this.tree) {\n                newParent.setParent(this.tree);\n            }\n            var originalParent = this.parent;\n            for (var _i = 0, _a = originalParent.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                newParent.addChild(child);\n            }\n            originalParent.children = [];\n            originalParent.addChild(newParent);\n            return newParent;\n        }\n    };\n    Node.prototype.remove = function () {\n        if (this.parent) {\n            this.parent.removeChild(this);\n            this.parent = null;\n        }\n    };\n    Node.prototype.append = function (nodeInfo) {\n        var node = this.createNode(nodeInfo);\n        this.addChild(node);\n        if (typeof nodeInfo === \"object\" &&\n            nodeInfo[\"children\"] &&\n            nodeInfo[\"children\"] instanceof Array &&\n            nodeInfo[\"children\"].length) {\n            node.loadFromData(nodeInfo[\"children\"]);\n        }\n        return node;\n    };\n    Node.prototype.prepend = function (nodeInfo) {\n        var node = this.createNode(nodeInfo);\n        this.addChildAtPosition(node, 0);\n        if (typeof nodeInfo === \"object\" &&\n            nodeInfo[\"children\"] &&\n            nodeInfo[\"children\"] instanceof Array &&\n            nodeInfo[\"children\"].length) {\n            node.loadFromData(nodeInfo[\"children\"]);\n        }\n        return node;\n    };\n    Node.prototype.isParentOf = function (node) {\n        var parent = node.parent;\n        while (parent) {\n            if (parent === this) {\n                return true;\n            }\n            parent = parent.parent;\n        }\n        return false;\n    };\n    Node.prototype.getLevel = function () {\n        var level = 0;\n        var node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n        while (node.parent) {\n            level += 1;\n            node = node.parent;\n        }\n        return level;\n    };\n    Node.prototype.getNodeById = function (nodeId) {\n        return this.idMapping[nodeId] || null;\n    };\n    Node.prototype.addNodeToIndex = function (node) {\n        if (node.id != null) {\n            this.idMapping[node.id] = node;\n        }\n    };\n    Node.prototype.removeNodeFromIndex = function (node) {\n        if (node.id != null) {\n            delete this.idMapping[node.id];\n        }\n    };\n    Node.prototype.removeChildren = function () {\n        var _this = this;\n        this.iterate(function (child) {\n            var _a;\n            (_a = _this.tree) === null || _a === void 0 ? void 0 : _a.removeNodeFromIndex(child);\n            return true;\n        });\n        this.children = [];\n    };\n    Node.prototype.getPreviousSibling = function () {\n        if (!this.parent) {\n            return null;\n        }\n        else {\n            var previousIndex = this.parent.getChildIndex(this) - 1;\n            if (previousIndex >= 0) {\n                return this.parent.children[previousIndex];\n            }\n            else {\n                return null;\n            }\n        }\n    };\n    Node.prototype.getNextSibling = function () {\n        if (!this.parent) {\n            return null;\n        }\n        else {\n            var nextIndex = this.parent.getChildIndex(this) + 1;\n            if (nextIndex < this.parent.children.length) {\n                return this.parent.children[nextIndex];\n            }\n            else {\n                return null;\n            }\n        }\n    };\n    Node.prototype.getNodesByProperty = function (key, value) {\n        return this.filter(function (node) { return node[key] === value; });\n    };\n    Node.prototype.filter = function (f) {\n        var result = [];\n        this.iterate(function (node) {\n            if (f(node)) {\n                result.push(node);\n            }\n            return true;\n        });\n        return result;\n    };\n    Node.prototype.getNextNode = function (includeChildren) {\n        if (includeChildren === void 0) { includeChildren = true; }\n        if (includeChildren && this.hasChildren() && this.is_open) {\n            // First child\n            return this.children[0];\n        }\n        else {\n            if (!this.parent) {\n                return null;\n            }\n            else {\n                var nextSibling = this.getNextSibling();\n                if (nextSibling) {\n                    // Next sibling\n                    return nextSibling;\n                }\n                else {\n                    // Next node of parent\n                    return this.parent.getNextNode(false);\n                }\n            }\n        }\n    };\n    Node.prototype.getPreviousNode = function () {\n        if (!this.parent) {\n            return null;\n        }\n        else {\n            var previousSibling = this.getPreviousSibling();\n            if (previousSibling) {\n                if (!previousSibling.hasChildren() ||\n                    !previousSibling.is_open) {\n                    // Previous sibling\n                    return previousSibling;\n                }\n                else {\n                    // Last child of previous sibling\n                    return previousSibling.getLastChild();\n                }\n            }\n            else {\n                return this.getParent();\n            }\n        }\n    };\n    Node.prototype.getParent = function () {\n        // Return parent except if it is the root node\n        if (!this.parent) {\n            return null;\n        }\n        else if (!this.parent.parent) {\n            // Root node -> null\n            return null;\n        }\n        else {\n            return this.parent;\n        }\n    };\n    Node.prototype.getLastChild = function () {\n        if (!this.hasChildren()) {\n            return null;\n        }\n        else {\n            var lastChild = this.children[this.children.length - 1];\n            if (!(lastChild.hasChildren() && lastChild.is_open)) {\n                return lastChild;\n            }\n            else {\n                return lastChild.getLastChild();\n            }\n        }\n    };\n    // Init Node from data without making it the root of the tree\n    Node.prototype.initFromData = function (data) {\n        var _this = this;\n        var addNode = function (nodeData) {\n            _this.setData(nodeData);\n            if (typeof nodeData === \"object\" &&\n                nodeData[\"children\"] &&\n                nodeData[\"children\"] instanceof Array &&\n                nodeData[\"children\"].length) {\n                addChildren(nodeData[\"children\"]);\n            }\n        };\n        var addChildren = function (childrenData) {\n            for (var _i = 0, childrenData_1 = childrenData; _i < childrenData_1.length; _i++) {\n                var child = childrenData_1[_i];\n                var node = _this.createNode();\n                node.initFromData(child);\n                _this.addChild(node);\n            }\n        };\n        addNode(data);\n    };\n    Node.prototype.setParent = function (parent) {\n        var _a;\n        this.parent = parent;\n        this.tree = parent.tree;\n        (_a = this.tree) === null || _a === void 0 ? void 0 : _a.addNodeToIndex(this);\n    };\n    Node.prototype.doRemoveChild = function (node) {\n        var _a;\n        this.children.splice(this.getChildIndex(node), 1);\n        (_a = this.tree) === null || _a === void 0 ? void 0 : _a.removeNodeFromIndex(node);\n    };\n    Node.prototype.getNodeClass = function () {\n        var _a;\n        return this.nodeClass || ((_a = this === null || this === void 0 ? void 0 : this.tree) === null || _a === void 0 ? void 0 : _a.nodeClass) || Node;\n    };\n    Node.prototype.createNode = function (nodeData) {\n        var nodeClass = this.getNodeClass();\n        return new nodeClass(nodeData);\n    };\n    return Node;\n}());\nexports.Node = Node;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.HitAreasGenerator = exports.DragAndDropHandler = void 0;\nvar jQueryProxy = require(\"jquery\");\nvar node_1 = require(\"./node\");\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\nvar jQuery = jQueryProxy[\"default\"] || jQueryProxy;\nvar DragAndDropHandler = /** @class */ (function () {\n    function DragAndDropHandler(treeWidget) {\n        this.treeWidget = treeWidget;\n        this.hoveredArea = null;\n        this.hitAreas = [];\n        this.isDragging = false;\n        this.currentItem = null;\n        this.positionInfo = null;\n    }\n    DragAndDropHandler.prototype.mouseCapture = function (positionInfo) {\n        var $element = jQuery(positionInfo.target);\n        if (!this.mustCaptureElement($element)) {\n            return null;\n        }\n        if (this.treeWidget.options.onIsMoveHandle &&\n            !this.treeWidget.options.onIsMoveHandle($element)) {\n            return null;\n        }\n        var nodeElement = this.treeWidget._getNodeElement($element);\n        if (nodeElement && this.treeWidget.options.onCanMove) {\n            if (!this.treeWidget.options.onCanMove(nodeElement.node)) {\n                nodeElement = null;\n            }\n        }\n        this.currentItem = nodeElement;\n        return this.currentItem != null;\n    };\n    DragAndDropHandler.prototype.mouseStart = function (positionInfo) {\n        var _a;\n        if (!this.currentItem ||\n            positionInfo.pageX === undefined ||\n            positionInfo.pageY === undefined) {\n            return false;\n        }\n        this.refresh();\n        var offset = jQuery(positionInfo.target).offset();\n        var left = offset ? offset.left : 0;\n        var top = offset ? offset.top : 0;\n        var node = this.currentItem.node;\n        this.dragElement = new DragElement(node.name, positionInfo.pageX - left, positionInfo.pageY - top, this.treeWidget.element, (_a = this.treeWidget.options.autoEscape) !== null && _a !== void 0 ? _a : true);\n        this.isDragging = true;\n        this.positionInfo = positionInfo;\n        this.currentItem.$element.addClass(\"jqtree-moving\");\n        return true;\n    };\n    DragAndDropHandler.prototype.mouseDrag = function (positionInfo) {\n        if (!this.currentItem ||\n            !this.dragElement ||\n            positionInfo.pageX === undefined ||\n            positionInfo.pageY === undefined) {\n            return false;\n        }\n        this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n        this.positionInfo = positionInfo;\n        var area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY);\n        if (area && this.canMoveToArea(area)) {\n            if (!area.node.isFolder()) {\n                this.stopOpenFolderTimer();\n            }\n            if (this.hoveredArea !== area) {\n                this.hoveredArea = area;\n                // If this is a closed folder, start timer to open it\n                if (this.mustOpenFolderTimer(area)) {\n                    this.startOpenFolderTimer(area.node);\n                }\n                else {\n                    this.stopOpenFolderTimer();\n                }\n                this.updateDropHint();\n            }\n        }\n        else {\n            this.removeDropHint();\n            this.stopOpenFolderTimer();\n            this.hoveredArea = area;\n        }\n        if (!area) {\n            if (this.treeWidget.options.onDragMove) {\n                this.treeWidget.options.onDragMove(this.currentItem.node, positionInfo.originalEvent);\n            }\n        }\n        return true;\n    };\n    DragAndDropHandler.prototype.mouseStop = function (positionInfo) {\n        this.moveItem(positionInfo);\n        this.clear();\n        this.removeHover();\n        this.removeDropHint();\n        this.removeHitAreas();\n        var currentItem = this.currentItem;\n        if (this.currentItem) {\n            this.currentItem.$element.removeClass(\"jqtree-moving\");\n            this.currentItem = null;\n        }\n        this.isDragging = false;\n        this.positionInfo = null;\n        if (!this.hoveredArea && currentItem) {\n            if (this.treeWidget.options.onDragStop) {\n                this.treeWidget.options.onDragStop(currentItem.node, positionInfo.originalEvent);\n            }\n        }\n        return false;\n    };\n    DragAndDropHandler.prototype.refresh = function () {\n        this.removeHitAreas();\n        if (this.currentItem) {\n            this.generateHitAreas();\n            this.currentItem = this.treeWidget._getNodeElementForNode(this.currentItem.node);\n            if (this.isDragging) {\n                this.currentItem.$element.addClass(\"jqtree-moving\");\n            }\n        }\n    };\n    DragAndDropHandler.prototype.generateHitAreas = function () {\n        if (!this.currentItem) {\n            this.hitAreas = [];\n        }\n        else {\n            var hitAreasGenerator = new HitAreasGenerator(this.treeWidget.tree, this.currentItem.node, this.getTreeDimensions().bottom);\n            this.hitAreas = hitAreasGenerator.generate();\n        }\n    };\n    DragAndDropHandler.prototype.mustCaptureElement = function ($element) {\n        return !$element.is(\"input,select,textarea\");\n    };\n    DragAndDropHandler.prototype.canMoveToArea = function (area) {\n        if (!this.treeWidget.options.onCanMoveTo) {\n            return true;\n        }\n        if (!this.currentItem) {\n            return false;\n        }\n        var positionName = node_1.getPositionName(area.position);\n        return this.treeWidget.options.onCanMoveTo(this.currentItem.node, area.node, positionName);\n    };\n    DragAndDropHandler.prototype.removeHitAreas = function () {\n        this.hitAreas = [];\n    };\n    DragAndDropHandler.prototype.clear = function () {\n        if (this.dragElement) {\n            this.dragElement.remove();\n            this.dragElement = null;\n        }\n    };\n    DragAndDropHandler.prototype.removeDropHint = function () {\n        if (this.previousGhost) {\n            this.previousGhost.remove();\n        }\n    };\n    DragAndDropHandler.prototype.removeHover = function () {\n        this.hoveredArea = null;\n    };\n    DragAndDropHandler.prototype.findHoveredArea = function (x, y) {\n        var dimensions = this.getTreeDimensions();\n        if (x < dimensions.left ||\n            y < dimensions.top ||\n            x > dimensions.right ||\n            y > dimensions.bottom) {\n            return null;\n        }\n        var low = 0;\n        var high = this.hitAreas.length;\n        while (low < high) {\n            var mid = (low + high) >> 1;\n            var area = this.hitAreas[mid];\n            if (y < area.top) {\n                high = mid;\n            }\n            else if (y > area.bottom) {\n                low = mid + 1;\n            }\n            else {\n                return area;\n            }\n        }\n        return null;\n    };\n    DragAndDropHandler.prototype.mustOpenFolderTimer = function (area) {\n        var node = area.node;\n        return (node.isFolder() &&\n            !node.is_open &&\n            area.position === node_1.Position.Inside);\n    };\n    DragAndDropHandler.prototype.updateDropHint = function () {\n        if (!this.hoveredArea) {\n            return;\n        }\n        // remove previous drop hint\n        this.removeDropHint();\n        // add new drop hint\n        var nodeElement = this.treeWidget._getNodeElementForNode(this.hoveredArea.node);\n        this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n    };\n    DragAndDropHandler.prototype.startOpenFolderTimer = function (folder) {\n        var _this = this;\n        var openFolder = function () {\n            _this.treeWidget._openNode(folder, _this.treeWidget.options.slide, function () {\n                _this.refresh();\n                _this.updateDropHint();\n            });\n        };\n        this.stopOpenFolderTimer();\n        this.openFolderTimer = window.setTimeout(openFolder, this.treeWidget.options.openFolderDelay);\n    };\n    DragAndDropHandler.prototype.stopOpenFolderTimer = function () {\n        if (this.openFolderTimer) {\n            clearTimeout(this.openFolderTimer);\n            this.openFolderTimer = null;\n        }\n    };\n    DragAndDropHandler.prototype.moveItem = function (positionInfo) {\n        var _this = this;\n        if (this.currentItem &&\n            this.hoveredArea &&\n            this.hoveredArea.position !== node_1.Position.None &&\n            this.canMoveToArea(this.hoveredArea)) {\n            var movedNode_1 = this.currentItem.node;\n            var targetNode_1 = this.hoveredArea.node;\n            var position_1 = this.hoveredArea.position;\n            var previousParent = movedNode_1.parent;\n            if (position_1 === node_1.Position.Inside) {\n                this.hoveredArea.node.is_open = true;\n            }\n            var doMove = function () {\n                _this.treeWidget.tree.moveNode(movedNode_1, targetNode_1, position_1);\n                _this.treeWidget.element.empty();\n                _this.treeWidget._refreshElements(null);\n            };\n            var event_1 = this.treeWidget._triggerEvent(\"tree.move\", {\n                move_info: {\n                    moved_node: movedNode_1,\n                    target_node: targetNode_1,\n                    position: node_1.getPositionName(position_1),\n                    previous_parent: previousParent,\n                    do_move: doMove,\n                    original_event: positionInfo.originalEvent\n                }\n            });\n            if (!event_1.isDefaultPrevented()) {\n                doMove();\n            }\n        }\n    };\n    DragAndDropHandler.prototype.getTreeDimensions = function () {\n        // Return the dimensions of the tree. Add a margin to the bottom to allow\n        // to drag-and-drop after the last element.\n        var offset = this.treeWidget.element.offset();\n        if (!offset) {\n            return { left: 0, top: 0, right: 0, bottom: 0 };\n        }\n        else {\n            var el = this.treeWidget.element;\n            var width = el.width() || 0;\n            var height = el.height() || 0;\n            var left = offset.left + this.treeWidget._getScrollLeft();\n            return {\n                left: left,\n                top: offset.top,\n                right: left + width,\n                bottom: offset.top + height + 16\n            };\n        }\n    };\n    return DragAndDropHandler;\n}());\nexports.DragAndDropHandler = DragAndDropHandler;\nvar VisibleNodeIterator = /** @class */ (function () {\n    function VisibleNodeIterator(tree) {\n        this.tree = tree;\n    }\n    VisibleNodeIterator.prototype.iterate = function () {\n        var _this = this;\n        var isFirstNode = true;\n        var _iterateNode = function (node, nextNode) {\n            var mustIterateInside = (node.is_open || !node.element) && node.hasChildren();\n            var $element = null;\n            if (node.element) {\n                $element = jQuery(node.element);\n                if (!$element.is(\":visible\")) {\n                    return;\n                }\n                if (isFirstNode) {\n                    _this.handleFirstNode(node);\n                    isFirstNode = false;\n                }\n                if (!node.hasChildren()) {\n                    _this.handleNode(node, nextNode, $element);\n                }\n                else if (node.is_open) {\n                    if (!_this.handleOpenFolder(node, $element)) {\n                        mustIterateInside = false;\n                    }\n                }\n                else {\n                    _this.handleClosedFolder(node, nextNode, $element);\n                }\n            }\n            if (mustIterateInside) {\n                var childrenLength_1 = node.children.length;\n                node.children.forEach(function (_, i) {\n                    if (i === childrenLength_1 - 1) {\n                        _iterateNode(node.children[i], null);\n                    }\n                    else {\n                        _iterateNode(node.children[i], node.children[i + 1]);\n                    }\n                });\n                if (node.is_open && $element) {\n                    _this.handleAfterOpenFolder(node, nextNode);\n                }\n            }\n        };\n        _iterateNode(this.tree, null);\n    };\n    return VisibleNodeIterator;\n}());\nvar HitAreasGenerator = /** @class */ (function (_super) {\n    __extends(HitAreasGenerator, _super);\n    function HitAreasGenerator(tree, currentNode, treeBottom) {\n        var _this = _super.call(this, tree) || this;\n        _this.currentNode = currentNode;\n        _this.treeBottom = treeBottom;\n        return _this;\n    }\n    HitAreasGenerator.prototype.generate = function () {\n        this.positions = [];\n        this.lastTop = 0;\n        this.iterate();\n        return this.generateHitAreas(this.positions);\n    };\n    HitAreasGenerator.prototype.generateHitAreas = function (positions) {\n        var previousTop = -1;\n        var group = [];\n        var hitAreas = [];\n        for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\n            var position = positions_1[_i];\n            if (position.top !== previousTop && group.length) {\n                if (group.length) {\n                    this.generateHitAreasForGroup(hitAreas, group, previousTop, position.top);\n                }\n                previousTop = position.top;\n                group = [];\n            }\n            group.push(position);\n        }\n        this.generateHitAreasForGroup(hitAreas, group, previousTop, this.treeBottom);\n        return hitAreas;\n    };\n    HitAreasGenerator.prototype.handleOpenFolder = function (node, $element) {\n        if (node === this.currentNode) {\n            // Cannot move inside current item\n            // Stop iterating\n            return false;\n        }\n        // Cannot move before current item\n        if (node.children[0] !== this.currentNode) {\n            this.addPosition(node, node_1.Position.Inside, this.getTop($element));\n        }\n        // Continue iterating\n        return true;\n    };\n    HitAreasGenerator.prototype.handleClosedFolder = function (node, nextNode, $element) {\n        var top = this.getTop($element);\n        if (node === this.currentNode) {\n            // Cannot move after current item\n            this.addPosition(node, node_1.Position.None, top);\n        }\n        else {\n            this.addPosition(node, node_1.Position.Inside, top);\n            // Cannot move before current item\n            if (nextNode !== this.currentNode) {\n                this.addPosition(node, node_1.Position.After, top);\n            }\n        }\n    };\n    HitAreasGenerator.prototype.handleFirstNode = function (node) {\n        if (node !== this.currentNode) {\n            this.addPosition(node, node_1.Position.Before, this.getTop(jQuery(node.element)));\n        }\n    };\n    HitAreasGenerator.prototype.handleAfterOpenFolder = function (node, nextNode) {\n        if (node === this.currentNode || nextNode === this.currentNode) {\n            // Cannot move before or after current item\n            this.addPosition(node, node_1.Position.None, this.lastTop);\n        }\n        else {\n            this.addPosition(node, node_1.Position.After, this.lastTop);\n        }\n    };\n    HitAreasGenerator.prototype.handleNode = function (node, nextNode, $element) {\n        var top = this.getTop($element);\n        if (node === this.currentNode) {\n            // Cannot move inside current item\n            this.addPosition(node, node_1.Position.None, top);\n        }\n        else {\n            this.addPosition(node, node_1.Position.Inside, top);\n        }\n        if (nextNode === this.currentNode || node === this.currentNode) {\n            // Cannot move before or after current item\n            this.addPosition(node, node_1.Position.None, top);\n        }\n        else {\n            this.addPosition(node, node_1.Position.After, top);\n        }\n    };\n    HitAreasGenerator.prototype.getTop = function ($element) {\n        var offset = $element.offset();\n        return offset ? offset.top : 0;\n    };\n    HitAreasGenerator.prototype.addPosition = function (node, position, top) {\n        var area = {\n            top: top,\n            bottom: 0,\n            node: node,\n            position: position\n        };\n        this.positions.push(area);\n        this.lastTop = top;\n    };\n    HitAreasGenerator.prototype.generateHitAreasForGroup = function (hitAreas, positionsInGroup, top, bottom) {\n        // limit positions in group\n        var positionCount = Math.min(positionsInGroup.length, 4);\n        var areaHeight = Math.round((bottom - top) / positionCount);\n        var areaTop = top;\n        var i = 0;\n        while (i < positionCount) {\n            var position = positionsInGroup[i];\n            hitAreas.push({\n                top: areaTop,\n                bottom: areaTop + areaHeight,\n                node: position.node,\n                position: position.position\n            });\n            areaTop += areaHeight;\n            i += 1;\n        }\n    };\n    return HitAreasGenerator;\n}(VisibleNodeIterator));\nexports.HitAreasGenerator = HitAreasGenerator;\nvar DragElement = /** @class */ (function () {\n    function DragElement(nodeName, offsetX, offsetY, $tree, autoEscape) {\n        this.offsetX = offsetX;\n        this.offsetY = offsetY;\n        this.$element = jQuery(\"<span>\").addClass(\"jqtree-title jqtree-dragging\");\n        if (autoEscape) {\n            this.$element.text(nodeName);\n        }\n        else {\n            this.$element.html(nodeName);\n        }\n        this.$element.css(\"position\", \"absolute\");\n        $tree.append(this.$element);\n    }\n    DragElement.prototype.move = function (pageX, pageY) {\n        this.$element.offset({\n            left: pageX - this.offsetX,\n            top: pageY - this.offsetY\n        });\n    };\n    DragElement.prototype.remove = function () {\n        this.$element.remove();\n    };\n    return DragElement;\n}());\n", "\"use strict\";\nexports.__esModule = true;\nexports.getBoolString = exports.isFunction = exports.isInt = void 0;\nexports.isInt = function (n) {\n    return typeof n === \"number\" && n % 1 === 0;\n};\nexports.isFunction = function (v) { return typeof v === \"function\"; };\nexports.getBoolString = function (value) {\n    return value ? \"true\" : \"false\";\n};\n", "\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar ElementsRenderer = /** @class */ (function () {\n    function ElementsRenderer(treeWidget) {\n        this.treeWidget = treeWidget;\n        this.openedIconElement = this.createButtonElement(treeWidget.options.openedIcon || \"+\");\n        this.closedIconElement = this.createButtonElement(treeWidget.options.closedIcon || \"-\");\n    }\n    ElementsRenderer.prototype.render = function (fromNode) {\n        if (fromNode && fromNode.parent) {\n            this.renderFromNode(fromNode);\n        }\n        else {\n            this.renderFromRoot();\n        }\n    };\n    ElementsRenderer.prototype.renderFromRoot = function () {\n        var $element = this.treeWidget.element;\n        $element.empty();\n        this.createDomElements($element[0], this.treeWidget.tree.children, true, 1);\n    };\n    ElementsRenderer.prototype.renderFromNode = function (node) {\n        // remember current li\n        var $previousLi = jQuery(node.element);\n        // create element\n        var li = this.createLi(node, node.getLevel());\n        this.attachNodeData(node, li);\n        // add element to dom\n        $previousLi.after(li);\n        // remove previous li\n        $previousLi.remove();\n        // create children\n        if (node.children) {\n            this.createDomElements(li, node.children, false, node.getLevel() + 1);\n        }\n    };\n    ElementsRenderer.prototype.createDomElements = function (element, children, isRootNode, level) {\n        var ul = this.createUl(isRootNode);\n        element.appendChild(ul);\n        for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n            var child = children_1[_i];\n            var li = this.createLi(child, level);\n            ul.appendChild(li);\n            this.attachNodeData(child, li);\n            if (child.hasChildren()) {\n                this.createDomElements(li, child.children, false, level + 1);\n            }\n        }\n    };\n    ElementsRenderer.prototype.attachNodeData = function (node, li) {\n        node.element = li;\n        jQuery(li).data(\"node\", node);\n    };\n    ElementsRenderer.prototype.createUl = function (isRootNode) {\n        var classString;\n        var role;\n        if (!isRootNode) {\n            classString = \"\";\n            role = \"group\";\n        }\n        else {\n            classString = \"jqtree-tree\";\n            role = \"tree\";\n            if (this.treeWidget.options.rtl) {\n                classString += \" jqtree-rtl\";\n            }\n        }\n        if (this.treeWidget.options.dragAndDrop) {\n            classString += \" jqtree-dnd\";\n        }\n        var ul = document.createElement(\"ul\");\n        ul.className = \"jqtree_common \" + classString;\n        ul.setAttribute(\"role\", role);\n        return ul;\n    };\n    ElementsRenderer.prototype.createLi = function (node, level) {\n        var isSelected = Boolean(this.treeWidget.selectNodeHandler.isNodeSelected(node));\n        var mustShowFolder = node.isFolder() ||\n            (node.isEmptyFolder && this.treeWidget.options.showEmptyFolder);\n        var li = mustShowFolder\n            ? this.createFolderLi(node, level, isSelected)\n            : this.createNodeLi(node, level, isSelected);\n        if (this.treeWidget.options.onCreateLi) {\n            this.treeWidget.options.onCreateLi(node, jQuery(li), isSelected);\n        }\n        return li;\n    };\n    ElementsRenderer.prototype.createFolderLi = function (node, level, isSelected) {\n        var buttonClasses = this.getButtonClasses(node);\n        var folderClasses = this.getFolderClasses(node, isSelected);\n        var iconElement = node.is_open\n            ? this.openedIconElement\n            : this.closedIconElement;\n        // li\n        var li = document.createElement(\"li\");\n        li.className = \"jqtree_common \" + folderClasses;\n        li.setAttribute(\"role\", \"presentation\");\n        // div\n        var div = document.createElement(\"div\");\n        div.className = \"jqtree-element jqtree_common\";\n        div.setAttribute(\"role\", \"presentation\");\n        li.appendChild(div);\n        // button link\n        var buttonLink = document.createElement(\"a\");\n        buttonLink.className = buttonClasses;\n        buttonLink.appendChild(iconElement.cloneNode(true));\n        buttonLink.setAttribute(\"role\", \"presentation\");\n        buttonLink.setAttribute(\"aria-hidden\", \"true\");\n        if (this.treeWidget.options.buttonLeft) {\n            div.appendChild(buttonLink);\n        }\n        // title span\n        div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, true));\n        if (!this.treeWidget.options.buttonLeft) {\n            div.appendChild(buttonLink);\n        }\n        return li;\n    };\n    ElementsRenderer.prototype.createNodeLi = function (node, level, isSelected) {\n        var liClasses = [\"jqtree_common\"];\n        if (isSelected) {\n            liClasses.push(\"jqtree-selected\");\n        }\n        var classString = liClasses.join(\" \");\n        // li\n        var li = document.createElement(\"li\");\n        li.className = classString;\n        li.setAttribute(\"role\", \"presentation\");\n        // div\n        var div = document.createElement(\"div\");\n        div.className = \"jqtree-element jqtree_common\";\n        div.setAttribute(\"role\", \"presentation\");\n        li.appendChild(div);\n        // title span\n        div.appendChild(this.createTitleSpan(node.name, level, isSelected, node.is_open, false));\n        return li;\n    };\n    ElementsRenderer.prototype.createTitleSpan = function (nodeName, level, isSelected, isOpen, isFolder) {\n        var titleSpan = document.createElement(\"span\");\n        var classes = \"jqtree-title jqtree_common\";\n        if (isFolder) {\n            classes += \" jqtree-title-folder\";\n        }\n        titleSpan.className = classes;\n        titleSpan.setAttribute(\"role\", \"treeitem\");\n        titleSpan.setAttribute(\"aria-level\", \"\" + level);\n        titleSpan.setAttribute(\"aria-selected\", util_1.getBoolString(isSelected));\n        titleSpan.setAttribute(\"aria-expanded\", util_1.getBoolString(isOpen));\n        if (isSelected) {\n            var tabIndex = this.treeWidget.options.tabIndex;\n            if (tabIndex !== undefined) {\n                titleSpan.setAttribute(\"tabindex\", \"\" + tabIndex);\n            }\n        }\n        if (this.treeWidget.options.autoEscape) {\n            titleSpan.textContent = nodeName;\n        }\n        else {\n            titleSpan.innerHTML = nodeName;\n        }\n        return titleSpan;\n    };\n    ElementsRenderer.prototype.getButtonClasses = function (node) {\n        var classes = [\"jqtree-toggler\", \"jqtree_common\"];\n        if (!node.is_open) {\n            classes.push(\"jqtree-closed\");\n        }\n        if (this.treeWidget.options.buttonLeft) {\n            classes.push(\"jqtree-toggler-left\");\n        }\n        else {\n            classes.push(\"jqtree-toggler-right\");\n        }\n        return classes.join(\" \");\n    };\n    ElementsRenderer.prototype.getFolderClasses = function (node, isSelected) {\n        var classes = [\"jqtree-folder\"];\n        if (!node.is_open) {\n            classes.push(\"jqtree-closed\");\n        }\n        if (isSelected) {\n            classes.push(\"jqtree-selected\");\n        }\n        if (node.is_loading) {\n            classes.push(\"jqtree-loading\");\n        }\n        return classes.join(\" \");\n    };\n    ElementsRenderer.prototype.createButtonElement = function (value) {\n        if (typeof value === \"string\") {\n            // convert value to html\n            var div = document.createElement(\"div\");\n            div.innerHTML = value;\n            return document.createTextNode(div.innerHTML);\n        }\n        else {\n            return jQuery(value)[0];\n        }\n    };\n    return ElementsRenderer;\n}());\nexports[\"default\"] = ElementsRenderer;\n", "\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nexports.__esModule = true;\nvar DataLoader = /** @class */ (function () {\n    function DataLoader(treeWidget) {\n        this.treeWidget = treeWidget;\n    }\n    DataLoader.prototype.loadFromUrl = function (urlInfo, parentNode, onFinished) {\n        var _this = this;\n        if (!urlInfo) {\n            return;\n        }\n        var $el = this.getDomElement(parentNode);\n        this.addLoadingClass($el);\n        this.notifyLoading(true, parentNode, $el);\n        var stopLoading = function () {\n            _this.removeLoadingClass($el);\n            _this.notifyLoading(false, parentNode, $el);\n        };\n        var handleSuccess = function (data) {\n            stopLoading();\n            _this.treeWidget.loadData(_this.parseData(data), parentNode);\n            if (onFinished && typeof onFinished === \"function\") {\n                onFinished();\n            }\n        };\n        var handleError = function (jqXHR) {\n            stopLoading();\n            if (_this.treeWidget.options.onLoadFailed) {\n                _this.treeWidget.options.onLoadFailed(jqXHR);\n            }\n        };\n        this.submitRequest(urlInfo, handleSuccess, handleError);\n    };\n    DataLoader.prototype.addLoadingClass = function ($el) {\n        if ($el) {\n            $el.addClass(\"jqtree-loading\");\n        }\n    };\n    DataLoader.prototype.removeLoadingClass = function ($el) {\n        if ($el) {\n            $el.removeClass(\"jqtree-loading\");\n        }\n    };\n    DataLoader.prototype.getDomElement = function (parentNode) {\n        if (parentNode) {\n            return jQuery(parentNode.element);\n        }\n        else {\n            return this.treeWidget.element;\n        }\n    };\n    DataLoader.prototype.notifyLoading = function (isLoading, node, $el) {\n        if (this.treeWidget.options.onLoading) {\n            this.treeWidget.options.onLoading(isLoading, node, $el);\n        }\n        this.treeWidget._triggerEvent(\"tree.loading_data\", {\n            isLoading: isLoading,\n            node: node,\n            $el: $el\n        });\n    };\n    DataLoader.prototype.submitRequest = function (urlInfoInput, handleSuccess, handleError) {\n        var _a;\n        var urlInfo = typeof urlInfoInput === \"string\"\n            ? { url: urlInfoInput }\n            : urlInfoInput;\n        var ajaxSettings = __assign({ method: \"GET\", cache: false, dataType: \"json\", success: handleSuccess, error: handleError }, urlInfo);\n        ajaxSettings.method = ((_a = ajaxSettings.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || \"GET\";\n        void jQuery.ajax(ajaxSettings);\n    };\n    DataLoader.prototype.parseData = function (data) {\n        var dataFilter = this.treeWidget.options.dataFilter;\n        var getParsedData = function () {\n            if (typeof data === \"string\") {\n                return JSON.parse(data);\n            }\n            else {\n                return data;\n            }\n        };\n        var parsedData = getParsedData();\n        if (dataFilter) {\n            return dataFilter(parsedData);\n        }\n        else {\n            return parsedData;\n        }\n    };\n    return DataLoader;\n}());\nexports[\"default\"] = DataLoader;\n", "\"use strict\";\nexports.__esModule = true;\nvar KeyHandler = /** @class */ (function () {\n    function KeyHandler(treeWidget) {\n        var _this = this;\n        this.handleKeyDown = function (e) {\n            if (!_this.canHandleKeyboard()) {\n                return true;\n            }\n            var selectedNode = _this.treeWidget.getSelectedNode();\n            if (!selectedNode) {\n                return true;\n            }\n            var key = e.which;\n            switch (key) {\n                case KeyHandler.DOWN:\n                    return _this.moveDown(selectedNode);\n                case KeyHandler.UP:\n                    return _this.moveUp(selectedNode);\n                case KeyHandler.RIGHT:\n                    return _this.moveRight(selectedNode);\n                case KeyHandler.LEFT:\n                    return _this.moveLeft(selectedNode);\n                default:\n                    return true;\n            }\n        };\n        this.treeWidget = treeWidget;\n        if (treeWidget.options.keyboardSupport) {\n            jQuery(document).on(\"keydown.jqtree\", this.handleKeyDown);\n        }\n    }\n    KeyHandler.prototype.deinit = function () {\n        jQuery(document).off(\"keydown.jqtree\");\n    };\n    KeyHandler.prototype.moveDown = function (selectedNode) {\n        return this.selectNode(selectedNode.getNextNode());\n    };\n    KeyHandler.prototype.moveUp = function (selectedNode) {\n        return this.selectNode(selectedNode.getPreviousNode());\n    };\n    KeyHandler.prototype.moveRight = function (selectedNode) {\n        if (!selectedNode.isFolder()) {\n            return true;\n        }\n        else {\n            // folder node\n            if (selectedNode.is_open) {\n                // Right moves to the first child of an open node\n                return this.selectNode(selectedNode.getNextNode());\n            }\n            else {\n                // Right expands a closed node\n                this.treeWidget.openNode(selectedNode);\n                return false;\n            }\n        }\n    };\n    KeyHandler.prototype.moveLeft = function (selectedNode) {\n        if (selectedNode.isFolder() && selectedNode.is_open) {\n            // Left on an open node closes the node\n            this.treeWidget.closeNode(selectedNode);\n            return false;\n        }\n        else {\n            // Left on a closed or end node moves focus to the node's parent\n            return this.selectNode(selectedNode.getParent());\n        }\n    };\n    KeyHandler.prototype.selectNode = function (node) {\n        if (!node) {\n            return true;\n        }\n        else {\n            this.treeWidget.selectNode(node);\n            if (!this.treeWidget.scrollHandler.isScrolledIntoView(jQuery(node.element).find(\".jqtree-element\"))) {\n                this.treeWidget.scrollToNode(node);\n            }\n            return false;\n        }\n    };\n    KeyHandler.prototype.canHandleKeyboard = function () {\n        return ((this.treeWidget.options.keyboardSupport || false) &&\n            this.treeWidget.selectNodeHandler.isFocusOnTree());\n    };\n    KeyHandler.LEFT = 37;\n    KeyHandler.UP = 38;\n    KeyHandler.RIGHT = 39;\n    KeyHandler.DOWN = 40;\n    return KeyHandler;\n}());\nexports[\"default\"] = KeyHandler;\n", "\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nexports.__esModule = true;\nvar register = function (widgetClass, widgetName) {\n    var getDataKey = function () { return \"simple_widget_\" + widgetName; };\n    var getWidgetData = function (el, dataKey) {\n        var widget = jQuery.data(el, dataKey);\n        if (widget && widget instanceof SimpleWidget) {\n            return widget;\n        }\n        else {\n            return null;\n        }\n    };\n    var createWidget = function ($el, options) {\n        var dataKey = getDataKey();\n        for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n            var el = _a[_i];\n            var existingWidget = getWidgetData(el, dataKey);\n            if (!existingWidget) {\n                var simpleWidgetClass = widgetClass;\n                var widget = new simpleWidgetClass(el, options);\n                if (!jQuery.data(el, dataKey)) {\n                    jQuery.data(el, dataKey, widget);\n                }\n                // Call init after setting data, so we can call methods\n                widget.init();\n            }\n        }\n        return $el;\n    };\n    var destroyWidget = function ($el) {\n        var dataKey = getDataKey();\n        for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n            var el = _a[_i];\n            var widget = getWidgetData(el, dataKey);\n            if (widget) {\n                widget.destroy();\n            }\n            jQuery.removeData(el, dataKey);\n        }\n    };\n    var callFunction = function ($el, functionName, args) {\n        var result = null;\n        for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {\n            var el = _a[_i];\n            var widget = jQuery.data(el, getDataKey());\n            if (widget && widget instanceof SimpleWidget) {\n                var simpleWidget = widget;\n                var widgetFunction = simpleWidget[functionName];\n                if (widgetFunction && typeof widgetFunction === \"function\") {\n                    result = widgetFunction.apply(widget, args);\n                }\n            }\n        }\n        return result;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    jQuery.fn[widgetName] = function (argument1) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        if (!argument1) {\n            return createWidget(this, null);\n        }\n        else if (typeof argument1 === \"object\") {\n            var options = argument1;\n            return createWidget(this, options);\n        }\n        else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n            var functionName = argument1;\n            if (functionName === \"destroy\") {\n                return destroyWidget(this);\n            }\n            else if (functionName === \"get_widget_class\") {\n                return widgetClass;\n            }\n            else {\n                return callFunction(this, functionName, args);\n            }\n        }\n    };\n};\nvar SimpleWidget = /** @class */ (function () {\n    function SimpleWidget(el, options) {\n        this.$el = jQuery(el);\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n        var defaults = this.constructor[\"defaults\"];\n        this.options = __assign(__assign({}, defaults), options);\n    }\n    SimpleWidget.register = function (widgetClass, widgetName) {\n        register(widgetClass, widgetName);\n    };\n    SimpleWidget.prototype.destroy = function () {\n        this.deinit();\n    };\n    SimpleWidget.prototype.init = function () {\n        //\n    };\n    SimpleWidget.prototype.deinit = function () {\n        //\n    };\n    SimpleWidget.defaults = {};\n    return SimpleWidget;\n}());\nexports[\"default\"] = SimpleWidget;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\n/*\nThis widget does the same a the mouse widget in jqueryui.\n*/\nvar simple_widget_1 = require(\"./simple.widget\");\nvar getPositionInfoFromMouseEvent = function (e) { return ({\n    pageX: e.pageX,\n    pageY: e.pageY,\n    target: e.target,\n    originalEvent: e\n}); };\nvar getPositionInfoFromTouch = function (touch, e) { return ({\n    pageX: touch.pageX,\n    pageY: touch.pageY,\n    target: touch.target,\n    originalEvent: e\n}); };\nvar MouseWidget = /** @class */ (function (_super) {\n    __extends(MouseWidget, _super);\n    function MouseWidget() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.mouseDown = function (e) {\n            // Left mouse button?\n            if (e.button !== 0) {\n                return;\n            }\n            var result = _this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n            if (result && e.cancelable) {\n                e.preventDefault();\n            }\n        };\n        _this.mouseMove = function (e) {\n            _this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n        };\n        _this.mouseUp = function (e) {\n            _this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n        };\n        _this.touchStart = function (e) {\n            if (!e) {\n                return;\n            }\n            if (e.touches.length > 1) {\n                return;\n            }\n            var touch = e.changedTouches[0];\n            _this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n        };\n        _this.touchMove = function (e) {\n            if (!e) {\n                return;\n            }\n            if (e.touches.length > 1) {\n                return;\n            }\n            var touch = e.changedTouches[0];\n            _this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n        };\n        _this.touchEnd = function (e) {\n            if (!e) {\n                return;\n            }\n            if (e.touches.length > 1) {\n                return;\n            }\n            var touch = e.changedTouches[0];\n            _this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n        };\n        return _this;\n    }\n    MouseWidget.prototype.setMouseDelay = function (mouseDelay) {\n        this.mouseDelay = mouseDelay;\n    };\n    MouseWidget.prototype.init = function () {\n        var element = this.$el.get(0);\n        element.addEventListener(\"mousedown\", this.mouseDown, {\n            passive: false\n        });\n        element.addEventListener(\"touchstart\", this.touchStart, {\n            passive: false\n        });\n        this.isMouseStarted = false;\n        this.mouseDelay = 0;\n        this.mouseDelayTimer = null;\n        this.isMouseDelayMet = false;\n        this.mouseDownInfo = null;\n    };\n    MouseWidget.prototype.deinit = function () {\n        var el = this.$el.get(0);\n        el.removeEventListener(\"mousedown\", this.mouseDown);\n        el.removeEventListener(\"touchstart\", this.touchStart);\n        document.removeEventListener(\"mousemove\", this.mouseMove);\n        document.removeEventListener(\"touchmove\", this.touchMove);\n        document.removeEventListener(\"mouseup\", this.mouseUp);\n        document.removeEventListener(\"touchend\", this.touchEnd);\n    };\n    MouseWidget.prototype.handleMouseDown = function (positionInfo) {\n        // We may have missed mouseup (out of window)\n        if (this.isMouseStarted) {\n            this.handleMouseUp(positionInfo);\n        }\n        this.mouseDownInfo = positionInfo;\n        if (!this.mouseCapture(positionInfo)) {\n            return false;\n        }\n        this.handleStartMouse();\n        return true;\n    };\n    MouseWidget.prototype.handleStartMouse = function () {\n        document.addEventListener(\"mousemove\", this.mouseMove, {\n            passive: false\n        });\n        document.addEventListener(\"touchmove\", this.touchMove, {\n            passive: false\n        });\n        document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n        document.addEventListener(\"touchend\", this.touchEnd, {\n            passive: false\n        });\n        if (this.mouseDelay) {\n            this.startMouseDelayTimer();\n        }\n    };\n    MouseWidget.prototype.startMouseDelayTimer = function () {\n        var _this = this;\n        if (this.mouseDelayTimer) {\n            clearTimeout(this.mouseDelayTimer);\n        }\n        this.mouseDelayTimer = window.setTimeout(function () {\n            _this.isMouseDelayMet = true;\n        }, this.mouseDelay);\n        this.isMouseDelayMet = false;\n    };\n    MouseWidget.prototype.handleMouseMove = function (e, positionInfo) {\n        if (this.isMouseStarted) {\n            this.mouseDrag(positionInfo);\n            if (e.cancelable) {\n                e.preventDefault();\n            }\n            return;\n        }\n        if (this.mouseDelay && !this.isMouseDelayMet) {\n            return;\n        }\n        if (this.mouseDownInfo) {\n            this.isMouseStarted = this.mouseStart(this.mouseDownInfo) !== false;\n        }\n        if (this.isMouseStarted) {\n            this.mouseDrag(positionInfo);\n            if (e.cancelable) {\n                e.preventDefault();\n            }\n        }\n        else {\n            this.handleMouseUp(positionInfo);\n        }\n    };\n    MouseWidget.prototype.handleMouseUp = function (positionInfo) {\n        document.removeEventListener(\"mousemove\", this.mouseMove);\n        document.removeEventListener(\"touchmove\", this.touchMove);\n        document.removeEventListener(\"mouseup\", this.mouseUp);\n        document.removeEventListener(\"touchend\", this.touchEnd);\n        if (this.isMouseStarted) {\n            this.isMouseStarted = false;\n            this.mouseStop(positionInfo);\n        }\n    };\n    return MouseWidget;\n}(simple_widget_1[\"default\"]));\nexports[\"default\"] = MouseWidget;\n", "\"use strict\";\nexports.__esModule = true;\nvar util_1 = require(\"./util\");\nvar SaveStateHandler = /** @class */ (function () {\n    function SaveStateHandler(treeWidget) {\n        this.treeWidget = treeWidget;\n    }\n    SaveStateHandler.prototype.saveState = function () {\n        var state = JSON.stringify(this.getState());\n        if (this.treeWidget.options.onSetStateFromStorage) {\n            this.treeWidget.options.onSetStateFromStorage(state);\n        }\n        else if (this.supportsLocalStorage()) {\n            localStorage.setItem(this.getKeyName(), state);\n        }\n    };\n    SaveStateHandler.prototype.getStateFromStorage = function () {\n        var jsonData = this.loadFromStorage();\n        if (jsonData) {\n            return this.parseState(jsonData);\n        }\n        else {\n            return null;\n        }\n    };\n    SaveStateHandler.prototype.getState = function () {\n        var _this = this;\n        var getOpenNodeIds = function () {\n            var openNodes = [];\n            _this.treeWidget.tree.iterate(function (node) {\n                if (node.is_open && node.id && node.hasChildren()) {\n                    openNodes.push(node.id);\n                }\n                return true;\n            });\n            return openNodes;\n        };\n        var getSelectedNodeIds = function () {\n            var selectedNodeIds = [];\n            _this.treeWidget.getSelectedNodes().forEach(function (node) {\n                if (node.id != null) {\n                    selectedNodeIds.push(node.id);\n                }\n            });\n            return selectedNodeIds;\n        };\n        return {\n            open_nodes: getOpenNodeIds(),\n            selected_node: getSelectedNodeIds()\n        };\n    };\n    /*\n    Set initial state\n    Don't handle nodes that are loaded on demand\n\n    result: must load on demand\n    */\n    SaveStateHandler.prototype.setInitialState = function (state) {\n        if (!state) {\n            return false;\n        }\n        else {\n            var mustLoadOnDemand = false;\n            if (state.open_nodes) {\n                mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n            }\n            if (state.selected_node) {\n                this.resetSelection();\n                this.selectInitialNodes(state.selected_node);\n            }\n            return mustLoadOnDemand;\n        }\n    };\n    SaveStateHandler.prototype.setInitialStateOnDemand = function (state, cbFinished) {\n        if (state) {\n            this.doSetInitialStateOnDemand(state.open_nodes, state.selected_node, cbFinished);\n        }\n        else {\n            cbFinished();\n        }\n    };\n    SaveStateHandler.prototype.getNodeIdToBeSelected = function () {\n        var state = this.getStateFromStorage();\n        if (state && state.selected_node) {\n            return state.selected_node[0];\n        }\n        else {\n            return null;\n        }\n    };\n    SaveStateHandler.prototype.parseState = function (jsonData) {\n        var state = JSON.parse(jsonData);\n        // Check if selected_node is an int (instead of an array)\n        if (state && state.selected_node && util_1.isInt(state.selected_node)) {\n            // Convert to array\n            state.selected_node = [state.selected_node];\n        }\n        return state;\n    };\n    SaveStateHandler.prototype.loadFromStorage = function () {\n        if (this.treeWidget.options.onGetStateFromStorage) {\n            return this.treeWidget.options.onGetStateFromStorage();\n        }\n        else if (this.supportsLocalStorage()) {\n            return localStorage.getItem(this.getKeyName());\n        }\n        else {\n            return null;\n        }\n    };\n    SaveStateHandler.prototype.openInitialNodes = function (nodeIds) {\n        var mustLoadOnDemand = false;\n        for (var _i = 0, nodeIds_1 = nodeIds; _i < nodeIds_1.length; _i++) {\n            var nodeDd = nodeIds_1[_i];\n            var node = this.treeWidget.getNodeById(nodeDd);\n            if (node) {\n                if (!node.load_on_demand) {\n                    node.is_open = true;\n                }\n                else {\n                    mustLoadOnDemand = true;\n                }\n            }\n        }\n        return mustLoadOnDemand;\n    };\n    SaveStateHandler.prototype.selectInitialNodes = function (nodeIds) {\n        var selectCount = 0;\n        for (var _i = 0, nodeIds_2 = nodeIds; _i < nodeIds_2.length; _i++) {\n            var nodeId = nodeIds_2[_i];\n            var node = this.treeWidget.getNodeById(nodeId);\n            if (node) {\n                selectCount += 1;\n                this.treeWidget.selectNodeHandler.addToSelection(node);\n            }\n        }\n        return selectCount !== 0;\n    };\n    SaveStateHandler.prototype.resetSelection = function () {\n        var selectNodeHandler = this.treeWidget.selectNodeHandler;\n        var selectedNodes = selectNodeHandler.getSelectedNodes();\n        selectedNodes.forEach(function (node) {\n            selectNodeHandler.removeFromSelection(node);\n        });\n    };\n    SaveStateHandler.prototype.doSetInitialStateOnDemand = function (nodeIdsParam, selectedNodes, cbFinished) {\n        var _this = this;\n        var loadingCount = 0;\n        var nodeIds = nodeIdsParam;\n        var openNodes = function () {\n            var newNodesIds = [];\n            for (var _i = 0, nodeIds_3 = nodeIds; _i < nodeIds_3.length; _i++) {\n                var nodeId = nodeIds_3[_i];\n                var node = _this.treeWidget.getNodeById(nodeId);\n                if (!node) {\n                    newNodesIds.push(nodeId);\n                }\n                else {\n                    if (!node.is_loading) {\n                        if (node.load_on_demand) {\n                            loadAndOpenNode(node);\n                        }\n                        else {\n                            _this.treeWidget._openNode(node, false, null);\n                        }\n                    }\n                }\n            }\n            nodeIds = newNodesIds;\n            if (_this.selectInitialNodes(selectedNodes)) {\n                _this.treeWidget._refreshElements(null);\n            }\n            if (loadingCount === 0) {\n                cbFinished();\n            }\n        };\n        var loadAndOpenNode = function (node) {\n            loadingCount += 1;\n            _this.treeWidget._openNode(node, false, function () {\n                loadingCount -= 1;\n                openNodes();\n            });\n        };\n        openNodes();\n    };\n    SaveStateHandler.prototype.getKeyName = function () {\n        if (typeof this.treeWidget.options.saveState === \"string\") {\n            return this.treeWidget.options.saveState;\n        }\n        else {\n            return \"tree\";\n        }\n    };\n    SaveStateHandler.prototype.supportsLocalStorage = function () {\n        var testSupport = function () {\n            // Is local storage supported?\n            if (localStorage == null) {\n                return false;\n            }\n            else {\n                // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n                try {\n                    var key = \"_storage_test\";\n                    sessionStorage.setItem(key, \"value\");\n                    sessionStorage.removeItem(key);\n                }\n                catch (error) {\n                    return false;\n                }\n                return true;\n            }\n        };\n        if (this._supportsLocalStorage == null) {\n            this._supportsLocalStorage = testSupport();\n        }\n        return this._supportsLocalStorage;\n    };\n    return SaveStateHandler;\n}());\nexports[\"default\"] = SaveStateHandler;\n", "\"use strict\";\nexports.__esModule = true;\nvar ScrollHandler = /** @class */ (function () {\n    function ScrollHandler(treeWidget) {\n        this.treeWidget = treeWidget;\n        this.previousTop = -1;\n        this.isInitialized = false;\n    }\n    ScrollHandler.prototype.checkScrolling = function () {\n        this.ensureInit();\n        this.checkVerticalScrolling();\n        this.checkHorizontalScrolling();\n    };\n    ScrollHandler.prototype.scrollToY = function (top) {\n        this.ensureInit();\n        if (this.$scrollParent) {\n            this.$scrollParent[0].scrollTop = top;\n        }\n        else {\n            var offset = this.treeWidget.$el.offset();\n            var treeTop = offset ? offset.top : 0;\n            jQuery(document).scrollTop(top + treeTop);\n        }\n    };\n    ScrollHandler.prototype.isScrolledIntoView = function ($element) {\n        this.ensureInit();\n        var elementBottom;\n        var viewBottom;\n        var elementTop;\n        var viewTop;\n        var elHeight = $element.height() || 0;\n        if (this.$scrollParent) {\n            viewTop = 0;\n            viewBottom = this.$scrollParent.height() || 0;\n            var offset = $element.offset();\n            var originalTop = offset ? offset.top : 0;\n            elementTop = originalTop - this.scrollParentTop;\n            elementBottom = elementTop + elHeight;\n        }\n        else {\n            viewTop = jQuery(window).scrollTop() || 0;\n            var windowHeight = jQuery(window).height() || 0;\n            viewBottom = viewTop + windowHeight;\n            var offset = $element.offset();\n            elementTop = offset ? offset.top : 0;\n            elementBottom = elementTop + elHeight;\n        }\n        return elementBottom <= viewBottom && elementTop >= viewTop;\n    };\n    ScrollHandler.prototype.getScrollLeft = function () {\n        if (!this.$scrollParent) {\n            return 0;\n        }\n        else {\n            return this.$scrollParent.scrollLeft() || 0;\n        }\n    };\n    ScrollHandler.prototype.initScrollParent = function () {\n        var _this = this;\n        var getParentWithOverflow = function () {\n            var cssAttributes = [\"overflow\", \"overflow-y\"];\n            var hasOverFlow = function ($el) {\n                for (var _i = 0, cssAttributes_1 = cssAttributes; _i < cssAttributes_1.length; _i++) {\n                    var attr = cssAttributes_1[_i];\n                    var overflowValue = $el.css(attr);\n                    if (overflowValue === \"auto\" ||\n                        overflowValue === \"scroll\") {\n                        return true;\n                    }\n                }\n                return false;\n            };\n            if (hasOverFlow(_this.treeWidget.$el)) {\n                return _this.treeWidget.$el;\n            }\n            for (var _i = 0, _a = _this.treeWidget.$el.parents().get(); _i < _a.length; _i++) {\n                var el = _a[_i];\n                var $el = jQuery(el);\n                if (hasOverFlow($el)) {\n                    return $el;\n                }\n            }\n            return null;\n        };\n        var setDocumentAsScrollParent = function () {\n            _this.scrollParentTop = 0;\n            _this.$scrollParent = null;\n        };\n        if (this.treeWidget.$el.css(\"position\") === \"fixed\") {\n            setDocumentAsScrollParent();\n        }\n        var $scrollParent = getParentWithOverflow();\n        if ($scrollParent &&\n            $scrollParent.length &&\n            $scrollParent[0].tagName !== \"HTML\") {\n            this.$scrollParent = $scrollParent;\n            var offset = this.$scrollParent.offset();\n            this.scrollParentTop = offset ? offset.top : 0;\n        }\n        else {\n            setDocumentAsScrollParent();\n        }\n        this.isInitialized = true;\n    };\n    ScrollHandler.prototype.ensureInit = function () {\n        if (!this.isInitialized) {\n            this.initScrollParent();\n        }\n    };\n    ScrollHandler.prototype.handleVerticalScrollingWithScrollParent = function (area) {\n        var scrollParent = this.$scrollParent && this.$scrollParent[0];\n        if (!scrollParent) {\n            return;\n        }\n        var distanceBottom = this.scrollParentTop + scrollParent.offsetHeight - area.bottom;\n        if (distanceBottom < 20) {\n            scrollParent.scrollTop += 20;\n            this.treeWidget.refreshHitAreas();\n            this.previousTop = -1;\n        }\n        else if (area.top - this.scrollParentTop < 20) {\n            scrollParent.scrollTop -= 20;\n            this.treeWidget.refreshHitAreas();\n            this.previousTop = -1;\n        }\n    };\n    ScrollHandler.prototype.handleVerticalScrollingWithDocument = function (area) {\n        var scrollTop = jQuery(document).scrollTop() || 0;\n        var distanceTop = area.top - scrollTop;\n        if (distanceTop < 20) {\n            jQuery(document).scrollTop(scrollTop - 20);\n        }\n        else {\n            var windowHeight = jQuery(window).height() || 0;\n            if (windowHeight - (area.bottom - scrollTop) < 20) {\n                jQuery(document).scrollTop(scrollTop + 20);\n            }\n        }\n    };\n    ScrollHandler.prototype.checkVerticalScrolling = function () {\n        var hoveredArea = this.treeWidget.dndHandler.hoveredArea;\n        if (hoveredArea && hoveredArea.top !== this.previousTop) {\n            this.previousTop = hoveredArea.top;\n            if (this.$scrollParent) {\n                this.handleVerticalScrollingWithScrollParent(hoveredArea);\n            }\n            else {\n                this.handleVerticalScrollingWithDocument(hoveredArea);\n            }\n        }\n    };\n    ScrollHandler.prototype.checkHorizontalScrolling = function () {\n        var positionInfo = this.treeWidget.dndHandler.positionInfo;\n        if (!positionInfo) {\n            return;\n        }\n        if (this.$scrollParent) {\n            this.handleHorizontalScrollingWithParent(positionInfo);\n        }\n        else {\n            this.handleHorizontalScrollingWithDocument(positionInfo);\n        }\n    };\n    ScrollHandler.prototype.handleHorizontalScrollingWithParent = function (positionInfo) {\n        if (positionInfo.pageX === undefined ||\n            positionInfo.pageY === undefined) {\n            return;\n        }\n        var $scrollParent = this.$scrollParent;\n        var scrollParentOffset = $scrollParent && $scrollParent.offset();\n        if (!($scrollParent && scrollParentOffset)) {\n            return;\n        }\n        var scrollParent = $scrollParent[0];\n        var canScrollRight = scrollParent.scrollLeft + scrollParent.clientWidth <\n            scrollParent.scrollWidth;\n        var canScrollLeft = scrollParent.scrollLeft > 0;\n        var rightEdge = scrollParentOffset.left + scrollParent.clientWidth;\n        var leftEdge = scrollParentOffset.left;\n        var isNearRightEdge = positionInfo.pageX > rightEdge - 20;\n        var isNearLeftEdge = positionInfo.pageX < leftEdge + 20;\n        if (isNearRightEdge && canScrollRight) {\n            scrollParent.scrollLeft = Math.min(scrollParent.scrollLeft + 20, scrollParent.scrollWidth);\n        }\n        else if (isNearLeftEdge && canScrollLeft) {\n            scrollParent.scrollLeft = Math.max(scrollParent.scrollLeft - 20, 0);\n        }\n    };\n    ScrollHandler.prototype.handleHorizontalScrollingWithDocument = function (positionInfo) {\n        if (positionInfo.pageX === undefined ||\n            positionInfo.pageY === undefined) {\n            return;\n        }\n        var $document = jQuery(document);\n        var scrollLeft = $document.scrollLeft() || 0;\n        var windowWidth = jQuery(window).width() || 0;\n        var canScrollLeft = scrollLeft > 0;\n        var isNearRightEdge = positionInfo.pageX > windowWidth - 20;\n        var isNearLeftEdge = positionInfo.pageX - scrollLeft < 20;\n        if (isNearRightEdge) {\n            $document.scrollLeft(scrollLeft + 20);\n        }\n        else if (isNearLeftEdge && canScrollLeft) {\n            $document.scrollLeft(Math.max(scrollLeft - 20, 0));\n        }\n    };\n    return ScrollHandler;\n}());\nexports[\"default\"] = ScrollHandler;\n", "\"use strict\";\nexports.__esModule = true;\nvar SelectNodeHandler = /** @class */ (function () {\n    function SelectNodeHandler(treeWidget) {\n        this.treeWidget = treeWidget;\n        this.clear();\n    }\n    SelectNodeHandler.prototype.getSelectedNode = function () {\n        var selectedNodes = this.getSelectedNodes();\n        if (selectedNodes.length) {\n            return selectedNodes[0];\n        }\n        else {\n            return false;\n        }\n    };\n    SelectNodeHandler.prototype.getSelectedNodes = function () {\n        if (this.selectedSingleNode) {\n            return [this.selectedSingleNode];\n        }\n        else {\n            var selectedNodes = [];\n            for (var id in this.selectedNodes) {\n                if (Object.prototype.hasOwnProperty.call(this.selectedNodes, id)) {\n                    var node = this.treeWidget.getNodeById(id);\n                    if (node) {\n                        selectedNodes.push(node);\n                    }\n                }\n            }\n            return selectedNodes;\n        }\n    };\n    SelectNodeHandler.prototype.getSelectedNodesUnder = function (parent) {\n        if (this.selectedSingleNode) {\n            if (parent.isParentOf(this.selectedSingleNode)) {\n                return [this.selectedSingleNode];\n            }\n            else {\n                return [];\n            }\n        }\n        else {\n            var selectedNodes = [];\n            for (var id in this.selectedNodes) {\n                if (Object.prototype.hasOwnProperty.call(this.selectedNodes, id)) {\n                    var node = this.treeWidget.getNodeById(id);\n                    if (node && parent.isParentOf(node)) {\n                        selectedNodes.push(node);\n                    }\n                }\n            }\n            return selectedNodes;\n        }\n    };\n    SelectNodeHandler.prototype.isNodeSelected = function (node) {\n        if (node.id != null) {\n            if (this.selectedNodes[node.id]) {\n                return true;\n            }\n            else {\n                return false;\n            }\n        }\n        else if (this.selectedSingleNode) {\n            return this.selectedSingleNode.element === node.element;\n        }\n        else {\n            return false;\n        }\n    };\n    SelectNodeHandler.prototype.clear = function () {\n        this.selectedNodes = {};\n        this.selectedSingleNode = null;\n    };\n    SelectNodeHandler.prototype.removeFromSelection = function (node, includeChildren) {\n        var _this = this;\n        if (includeChildren === void 0) { includeChildren = false; }\n        if (node.id == null) {\n            if (this.selectedSingleNode &&\n                node.element === this.selectedSingleNode.element) {\n                this.selectedSingleNode = null;\n            }\n        }\n        else {\n            delete this.selectedNodes[node.id];\n            if (includeChildren) {\n                node.iterate(function () {\n                    if (node.id != null) {\n                        delete _this.selectedNodes[node.id];\n                    }\n                    return true;\n                });\n            }\n        }\n    };\n    SelectNodeHandler.prototype.addToSelection = function (node) {\n        if (node.id != null) {\n            this.selectedNodes[node.id] = true;\n        }\n        else {\n            this.selectedSingleNode = node;\n        }\n    };\n    SelectNodeHandler.prototype.isFocusOnTree = function () {\n        var activeElement = document.activeElement;\n        return Boolean(activeElement &&\n            activeElement.tagName === \"SPAN\" &&\n            this.treeWidget._containsElement(activeElement));\n    };\n    return SelectNodeHandler;\n}());\nexports[\"default\"] = SelectNodeHandler;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nexports.__esModule = true;\nexports.BorderDropHint = exports.FolderElement = exports.NodeElement = void 0;\nvar node_1 = require(\"./node\");\nvar NodeElement = /** @class */ (function () {\n    function NodeElement(node, treeWidget) {\n        this.init(node, treeWidget);\n    }\n    NodeElement.prototype.init = function (node, treeWidget) {\n        this.node = node;\n        this.treeWidget = treeWidget;\n        if (!node.element) {\n            node.element = this.treeWidget.element.get(0);\n        }\n        this.$element = jQuery(node.element);\n    };\n    NodeElement.prototype.addDropHint = function (position) {\n        if (this.mustShowBorderDropHint(position)) {\n            return new BorderDropHint(this.$element, this.treeWidget._getScrollLeft());\n        }\n        else {\n            return new GhostDropHint(this.node, this.$element, position);\n        }\n    };\n    NodeElement.prototype.select = function (mustSetFocus) {\n        var _a;\n        var $li = this.getLi();\n        $li.addClass(\"jqtree-selected\");\n        $li.attr(\"aria-selected\", \"true\");\n        var $span = this.getSpan();\n        $span.attr(\"tabindex\", (_a = this.treeWidget.options.tabIndex) !== null && _a !== void 0 ? _a : null);\n        if (mustSetFocus) {\n            $span.trigger(\"focus\");\n        }\n    };\n    NodeElement.prototype.deselect = function () {\n        var $li = this.getLi();\n        $li.removeClass(\"jqtree-selected\");\n        $li.attr(\"aria-selected\", \"false\");\n        var $span = this.getSpan();\n        $span.removeAttr(\"tabindex\");\n        $span.blur();\n    };\n    NodeElement.prototype.getUl = function () {\n        return this.$element.children(\"ul:first\");\n    };\n    NodeElement.prototype.getSpan = function () {\n        return this.$element\n            .children(\".jqtree-element\")\n            .find(\"span.jqtree-title\");\n    };\n    NodeElement.prototype.getLi = function () {\n        return this.$element;\n    };\n    NodeElement.prototype.mustShowBorderDropHint = function (position) {\n        return position === node_1.Position.Inside;\n    };\n    return NodeElement;\n}());\nexports.NodeElement = NodeElement;\nvar FolderElement = /** @class */ (function (_super) {\n    __extends(FolderElement, _super);\n    function FolderElement() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    FolderElement.prototype.open = function (onFinished, slide, animationSpeed) {\n        var _this = this;\n        if (slide === void 0) { slide = true; }\n        if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n        if (this.node.is_open) {\n            return;\n        }\n        this.node.is_open = true;\n        var $button = this.getButton();\n        $button.removeClass(\"jqtree-closed\");\n        $button.html(\"\");\n        var buttonEl = $button.get(0);\n        if (buttonEl) {\n            var icon = this.treeWidget.renderer.openedIconElement.cloneNode(true);\n            buttonEl.appendChild(icon);\n        }\n        var doOpen = function () {\n            var $li = _this.getLi();\n            $li.removeClass(\"jqtree-closed\");\n            var $span = _this.getSpan();\n            $span.attr(\"aria-expanded\", \"true\");\n            if (onFinished) {\n                onFinished(_this.node);\n            }\n            _this.treeWidget._triggerEvent(\"tree.open\", {\n                node: _this.node\n            });\n        };\n        if (slide) {\n            this.getUl().slideDown(animationSpeed, doOpen);\n        }\n        else {\n            this.getUl().show();\n            doOpen();\n        }\n    };\n    FolderElement.prototype.close = function (slide, animationSpeed) {\n        var _this = this;\n        if (slide === void 0) { slide = true; }\n        if (animationSpeed === void 0) { animationSpeed = \"fast\"; }\n        if (!this.node.is_open) {\n            return;\n        }\n        this.node.is_open = false;\n        var $button = this.getButton();\n        $button.addClass(\"jqtree-closed\");\n        $button.html(\"\");\n        var buttonEl = $button.get(0);\n        if (buttonEl) {\n            var icon = this.treeWidget.renderer.closedIconElement.cloneNode(true);\n            buttonEl.appendChild(icon);\n        }\n        var doClose = function () {\n            var $li = _this.getLi();\n            $li.addClass(\"jqtree-closed\");\n            var $span = _this.getSpan();\n            $span.attr(\"aria-expanded\", \"false\");\n            _this.treeWidget._triggerEvent(\"tree.close\", {\n                node: _this.node\n            });\n        };\n        if (slide) {\n            this.getUl().slideUp(animationSpeed, doClose);\n        }\n        else {\n            this.getUl().hide();\n            doClose();\n        }\n    };\n    FolderElement.prototype.mustShowBorderDropHint = function (position) {\n        return !this.node.is_open && position === node_1.Position.Inside;\n    };\n    FolderElement.prototype.getButton = function () {\n        return this.$element\n            .children(\".jqtree-element\")\n            .find(\"a.jqtree-toggler\");\n    };\n    return FolderElement;\n}(NodeElement));\nexports.FolderElement = FolderElement;\nvar BorderDropHint = /** @class */ (function () {\n    function BorderDropHint($element, scrollLeft) {\n        var $div = $element.children(\".jqtree-element\");\n        var elWidth = $element.width() || 0;\n        var width = Math.max(elWidth + scrollLeft - 4, 0);\n        var elHeight = $div.outerHeight() || 0;\n        var height = Math.max(elHeight - 4, 0);\n        this.$hint = jQuery('<span class=\"jqtree-border\"></span>');\n        $div.append(this.$hint);\n        this.$hint.css({ width: width, height: height });\n    }\n    BorderDropHint.prototype.remove = function () {\n        this.$hint.remove();\n    };\n    return BorderDropHint;\n}());\nexports.BorderDropHint = BorderDropHint;\nvar GhostDropHint = /** @class */ (function () {\n    function GhostDropHint(node, $element, position) {\n        this.$element = $element;\n        this.node = node;\n        this.$ghost = jQuery(\"<li class=\\\"jqtree_common jqtree-ghost\\\"><span class=\\\"jqtree_common jqtree-circle\\\"></span>\\n            <span class=\\\"jqtree_common jqtree-line\\\"></span></li>\");\n        if (position === node_1.Position.After) {\n            this.moveAfter();\n        }\n        else if (position === node_1.Position.Before) {\n            this.moveBefore();\n        }\n        else if (position === node_1.Position.Inside) {\n            if (node.isFolder() && node.is_open) {\n                this.moveInsideOpenFolder();\n            }\n            else {\n                this.moveInside();\n            }\n        }\n    }\n    GhostDropHint.prototype.remove = function () {\n        this.$ghost.remove();\n    };\n    GhostDropHint.prototype.moveAfter = function () {\n        this.$element.after(this.$ghost);\n    };\n    GhostDropHint.prototype.moveBefore = function () {\n        this.$element.before(this.$ghost);\n    };\n    GhostDropHint.prototype.moveInsideOpenFolder = function () {\n        jQuery(this.node.children[0].element).before(this.$ghost);\n    };\n    GhostDropHint.prototype.moveInside = function () {\n        this.$element.after(this.$ghost);\n        this.$ghost.addClass(\"jqtree-inside\");\n    };\n    return GhostDropHint;\n}());\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nexports.__esModule = true;\nexports.JqTreeWidget = void 0;\nvar version_1 = require(\"./version\");\nvar jQueryProxy = require(\"jquery\");\nvar dragAndDropHandler_1 = require(\"./dragAndDropHandler\");\nvar elementsRenderer_1 = require(\"./elementsRenderer\");\nvar dataLoader_1 = require(\"./dataLoader\");\nvar keyHandler_1 = require(\"./keyHandler\");\nvar mouse_widget_1 = require(\"./mouse.widget\");\nvar saveStateHandler_1 = require(\"./saveStateHandler\");\nvar scrollHandler_1 = require(\"./scrollHandler\");\nvar selectNodeHandler_1 = require(\"./selectNodeHandler\");\nvar simple_widget_1 = require(\"./simple.widget\");\nvar node_1 = require(\"./node\");\nvar util_1 = require(\"./util\");\nvar nodeElement_1 = require(\"./nodeElement\");\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\nvar jQuery = jQueryProxy[\"default\"] || jQueryProxy;\nvar NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nvar PARAM_IS_EMPTY = \"Parameter is empty: \";\nvar JqTreeWidget = /** @class */ (function (_super) {\n    __extends(JqTreeWidget, _super);\n    function JqTreeWidget() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.handleClick = function (e) {\n            var clickTarget = _this.getClickTarget(e.target);\n            if (clickTarget) {\n                if (clickTarget.type === \"button\") {\n                    _this.toggle(clickTarget.node, _this.options.slide);\n                    e.preventDefault();\n                    e.stopPropagation();\n                }\n                else if (clickTarget.type === \"label\") {\n                    var node = clickTarget.node;\n                    var event_1 = _this._triggerEvent(\"tree.click\", {\n                        node: node,\n                        click_event: e\n                    });\n                    if (!event_1.isDefaultPrevented()) {\n                        _this.doSelectNode(node);\n                    }\n                }\n            }\n        };\n        _this.handleDblclick = function (e) {\n            var clickTarget = _this.getClickTarget(e.target);\n            if ((clickTarget === null || clickTarget === void 0 ? void 0 : clickTarget.type) === \"label\") {\n                _this._triggerEvent(\"tree.dblclick\", {\n                    node: clickTarget.node,\n                    click_event: e\n                });\n            }\n        };\n        _this.handleContextmenu = function (e) {\n            var $div = jQuery(e.target).closest(\"ul.jqtree-tree .jqtree-element\");\n            if ($div.length) {\n                var node = _this.getNode($div);\n                if (node) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    _this._triggerEvent(\"tree.contextmenu\", {\n                        node: node,\n                        click_event: e\n                    });\n                    return false;\n                }\n            }\n            return null;\n        };\n        return _this;\n    }\n    JqTreeWidget.prototype.toggle = function (node, slideParam) {\n        if (slideParam === void 0) { slideParam = null; }\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        var slide = slideParam !== null && slideParam !== void 0 ? slideParam : this.options.slide;\n        if (node.is_open) {\n            this.closeNode(node, slide);\n        }\n        else {\n            this.openNode(node, slide);\n        }\n        return this.element;\n    };\n    JqTreeWidget.prototype.getTree = function () {\n        return this.tree;\n    };\n    JqTreeWidget.prototype.selectNode = function (node, optionsParam) {\n        this.doSelectNode(node, optionsParam);\n        return this.element;\n    };\n    JqTreeWidget.prototype.getSelectedNode = function () {\n        return this.selectNodeHandler.getSelectedNode();\n    };\n    JqTreeWidget.prototype.toJson = function () {\n        return JSON.stringify(this.tree.getData());\n    };\n    JqTreeWidget.prototype.loadData = function (data, parentNode) {\n        this.doLoadData(data, parentNode);\n        return this.element;\n    };\n    /*\n    signatures:\n    - loadDataFromUrl(url, parent_node=null, on_finished=null)\n        loadDataFromUrl('/my_data');\n        loadDataFromUrl('/my_data', node1);\n        loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n        loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n    - loadDataFromUrl(parent_node=null, on_finished=null)\n        loadDataFromUrl();\n        loadDataFromUrl(node1);\n        loadDataFromUrl(null, function() { console.log('finished'); });\n        loadDataFromUrl(node1, function() { console.log('finished'); });\n    */\n    JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) {\n        if (typeof param1 === \"string\") {\n            // first parameter is url\n            this.doLoadDataFromUrl(param1, param2, param3 !== null && param3 !== void 0 ? param3 : null);\n        }\n        else {\n            // first parameter is not url\n            this.doLoadDataFromUrl(null, param1, param2);\n        }\n        return this.element;\n    };\n    JqTreeWidget.prototype.reload = function (onFinished) {\n        this.doLoadDataFromUrl(null, null, onFinished);\n        return this.element;\n    };\n    JqTreeWidget.prototype.getNodeById = function (nodeId) {\n        return this.tree.getNodeById(nodeId);\n    };\n    JqTreeWidget.prototype.getNodeByName = function (name) {\n        return this.tree.getNodeByName(name);\n    };\n    JqTreeWidget.prototype.getNodeByNameMustExist = function (name) {\n        return this.tree.getNodeByNameMustExist(name);\n    };\n    JqTreeWidget.prototype.getNodesByProperty = function (key, value) {\n        return this.tree.getNodesByProperty(key, value);\n    };\n    JqTreeWidget.prototype.getNodeByHtmlElement = function (element) {\n        return this.getNode(jQuery(element));\n    };\n    JqTreeWidget.prototype.getNodeByCallback = function (callback) {\n        return this.tree.getNodeByCallback(callback);\n    };\n    JqTreeWidget.prototype.openNode = function (node, param1, param2) {\n        var _this = this;\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        var parseParams = function () {\n            var _a;\n            var onFinished;\n            var slide;\n            if (util_1.isFunction(param1)) {\n                onFinished = param1;\n                slide = null;\n            }\n            else {\n                slide = param1;\n                onFinished = param2;\n            }\n            if (slide == null) {\n                slide = (_a = _this.options.slide) !== null && _a !== void 0 ? _a : false;\n            }\n            return [slide, onFinished];\n        };\n        var _a = parseParams(), slide = _a[0], onFinished = _a[1];\n        this._openNode(node, slide, onFinished);\n        return this.element;\n    };\n    JqTreeWidget.prototype.closeNode = function (node, slideParam) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        var slide = slideParam !== null && slideParam !== void 0 ? slideParam : this.options.slide;\n        if (node.isFolder() || node.isEmptyFolder) {\n            new nodeElement_1.FolderElement(node, this).close(slide, this.options.animationSpeed);\n            this.saveState();\n        }\n        return this.element;\n    };\n    JqTreeWidget.prototype.isDragging = function () {\n        return this.dndHandler.isDragging;\n    };\n    JqTreeWidget.prototype.refreshHitAreas = function () {\n        this.dndHandler.refresh();\n        return this.element;\n    };\n    JqTreeWidget.prototype.addNodeAfter = function (newNodeInfo, existingNode) {\n        var newNode = existingNode.addAfter(newNodeInfo);\n        if (newNode) {\n            this._refreshElements(existingNode.parent);\n        }\n        return newNode;\n    };\n    JqTreeWidget.prototype.addNodeBefore = function (newNodeInfo, existingNode) {\n        if (!existingNode) {\n            throw Error(PARAM_IS_EMPTY + \"existingNode\");\n        }\n        var newNode = existingNode.addBefore(newNodeInfo);\n        if (newNode) {\n            this._refreshElements(existingNode.parent);\n        }\n        return newNode;\n    };\n    JqTreeWidget.prototype.addParentNode = function (newNodeInfo, existingNode) {\n        if (!existingNode) {\n            throw Error(PARAM_IS_EMPTY + \"existingNode\");\n        }\n        var newNode = existingNode.addParent(newNodeInfo);\n        if (newNode) {\n            this._refreshElements(newNode.parent);\n        }\n        return newNode;\n    };\n    JqTreeWidget.prototype.removeNode = function (node) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        if (!node.parent) {\n            throw Error(\"Node has no parent\");\n        }\n        this.selectNodeHandler.removeFromSelection(node, true); // including children\n        var parent = node.parent;\n        node.remove();\n        this._refreshElements(parent);\n        return this.element;\n    };\n    JqTreeWidget.prototype.appendNode = function (newNodeInfo, parentNodeParam) {\n        var parentNode = parentNodeParam || this.tree;\n        var node = parentNode.append(newNodeInfo);\n        this._refreshElements(parentNode);\n        return node;\n    };\n    JqTreeWidget.prototype.prependNode = function (newNodeInfo, parentNodeParam) {\n        var parentNode = parentNodeParam !== null && parentNodeParam !== void 0 ? parentNodeParam : this.tree;\n        var node = parentNode.prepend(newNodeInfo);\n        this._refreshElements(parentNode);\n        return node;\n    };\n    JqTreeWidget.prototype.updateNode = function (node, data) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        var idIsChanged = typeof data === \"object\" && data.id && data.id !== node.id;\n        if (idIsChanged) {\n            this.tree.removeNodeFromIndex(node);\n        }\n        node.setData(data);\n        if (idIsChanged) {\n            this.tree.addNodeToIndex(node);\n        }\n        if (typeof data === \"object\" &&\n            data[\"children\"] &&\n            data[\"children\"] instanceof Array) {\n            node.removeChildren();\n            if (data.children.length) {\n                node.loadFromData(data.children);\n            }\n        }\n        var mustSetFocus = this.selectNodeHandler.isFocusOnTree();\n        var mustSelect = this.isSelectedNodeInSubtree(node);\n        this._refreshElements(node);\n        if (mustSelect) {\n            this.selectCurrentNode(mustSetFocus);\n        }\n        return this.element;\n    };\n    JqTreeWidget.prototype.isSelectedNodeInSubtree = function (subtree) {\n        var selectedNode = this.getSelectedNode();\n        if (!selectedNode) {\n            return false;\n        }\n        else {\n            return subtree === selectedNode || subtree.isParentOf(selectedNode);\n        }\n    };\n    JqTreeWidget.prototype.moveNode = function (node, targetNode, position) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        if (!targetNode) {\n            throw Error(PARAM_IS_EMPTY + \"targetNode\");\n        }\n        var positionIndex = node_1.getPosition(position);\n        if (positionIndex !== undefined) {\n            this.tree.moveNode(node, targetNode, positionIndex);\n            this._refreshElements(null);\n        }\n        return this.element;\n    };\n    JqTreeWidget.prototype.getStateFromStorage = function () {\n        return this.saveStateHandler.getStateFromStorage();\n    };\n    JqTreeWidget.prototype.addToSelection = function (node, mustSetFocus) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        this.selectNodeHandler.addToSelection(node);\n        this._getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus);\n        this.saveState();\n        return this.element;\n    };\n    JqTreeWidget.prototype.getSelectedNodes = function () {\n        return this.selectNodeHandler.getSelectedNodes();\n    };\n    JqTreeWidget.prototype.isNodeSelected = function (node) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        return this.selectNodeHandler.isNodeSelected(node);\n    };\n    JqTreeWidget.prototype.removeFromSelection = function (node) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        this.selectNodeHandler.removeFromSelection(node);\n        this._getNodeElementForNode(node).deselect();\n        this.saveState();\n        return this.element;\n    };\n    JqTreeWidget.prototype.scrollToNode = function (node) {\n        if (!node) {\n            throw Error(NODE_PARAM_IS_EMPTY);\n        }\n        var nodeOffset = jQuery(node.element).offset();\n        var nodeTop = nodeOffset ? nodeOffset.top : 0;\n        var treeOffset = this.$el.offset();\n        var treeTop = treeOffset ? treeOffset.top : 0;\n        var top = nodeTop - treeTop;\n        this.scrollHandler.scrollToY(top);\n        return this.element;\n    };\n    JqTreeWidget.prototype.getState = function () {\n        return this.saveStateHandler.getState();\n    };\n    JqTreeWidget.prototype.setState = function (state) {\n        this.saveStateHandler.setInitialState(state);\n        this._refreshElements(null);\n        return this.element;\n    };\n    JqTreeWidget.prototype.setOption = function (option, value) {\n        this.options[option] = value;\n        return this.element;\n    };\n    JqTreeWidget.prototype.moveDown = function () {\n        var selectedNode = this.getSelectedNode();\n        if (selectedNode) {\n            this.keyHandler.moveDown(selectedNode);\n        }\n        return this.element;\n    };\n    JqTreeWidget.prototype.moveUp = function () {\n        var selectedNode = this.getSelectedNode();\n        if (selectedNode) {\n            this.keyHandler.moveUp(selectedNode);\n        }\n        return this.element;\n    };\n    JqTreeWidget.prototype.getVersion = function () {\n        return version_1[\"default\"];\n    };\n    JqTreeWidget.prototype._triggerEvent = function (eventName, values) {\n        var event = jQuery.Event(eventName, values);\n        this.element.trigger(event);\n        return event;\n    };\n    JqTreeWidget.prototype._openNode = function (node, slide, onFinished) {\n        var _this = this;\n        if (slide === void 0) { slide = true; }\n        var doOpenNode = function (_node, _slide, _onFinished) {\n            var folderElement = new nodeElement_1.FolderElement(_node, _this);\n            folderElement.open(_onFinished, _slide, _this.options.animationSpeed);\n        };\n        if (node.isFolder() || node.isEmptyFolder) {\n            if (node.load_on_demand) {\n                this.loadFolderOnDemand(node, slide, onFinished);\n            }\n            else {\n                var parent_1 = node.parent;\n                while (parent_1) {\n                    // nb: do not open root element\n                    if (parent_1.parent) {\n                        doOpenNode(parent_1, false, null);\n                    }\n                    parent_1 = parent_1.parent;\n                }\n                doOpenNode(node, slide, onFinished);\n                this.saveState();\n            }\n        }\n    };\n    /*\n    Redraw the tree or part of the tree.\n     from_node: redraw this subtree\n    */\n    JqTreeWidget.prototype._refreshElements = function (fromNode) {\n        this.renderer.render(fromNode);\n        this._triggerEvent(\"tree.refresh\");\n    };\n    JqTreeWidget.prototype._getNodeElementForNode = function (node) {\n        if (node.isFolder()) {\n            return new nodeElement_1.FolderElement(node, this);\n        }\n        else {\n            return new nodeElement_1.NodeElement(node, this);\n        }\n    };\n    JqTreeWidget.prototype._getNodeElement = function ($element) {\n        var node = this.getNode($element);\n        if (node) {\n            return this._getNodeElementForNode(node);\n        }\n        else {\n            return null;\n        }\n    };\n    JqTreeWidget.prototype._containsElement = function (element) {\n        var node = this.getNode(jQuery(element));\n        return node != null && node.tree === this.tree;\n    };\n    JqTreeWidget.prototype._getScrollLeft = function () {\n        return this.scrollHandler.getScrollLeft();\n    };\n    JqTreeWidget.prototype.init = function () {\n        _super.prototype.init.call(this);\n        this.element = this.$el;\n        this.mouseDelay = 300;\n        this.isInitialized = false;\n        this.options.rtl = this.getRtlOption();\n        if (this.options.closedIcon == null) {\n            this.options.closedIcon = this.getDefaultClosedIcon();\n        }\n        this.renderer = new elementsRenderer_1[\"default\"](this);\n        this.dataLoader = new dataLoader_1[\"default\"](this);\n        this.saveStateHandler = new saveStateHandler_1[\"default\"](this);\n        this.selectNodeHandler = new selectNodeHandler_1[\"default\"](this);\n        this.dndHandler = new dragAndDropHandler_1.DragAndDropHandler(this);\n        this.scrollHandler = new scrollHandler_1[\"default\"](this);\n        this.keyHandler = new keyHandler_1[\"default\"](this);\n        this.initData();\n        this.element.on(\"click\", this.handleClick);\n        this.element.on(\"dblclick\", this.handleDblclick);\n        if (this.options.useContextMenu) {\n            this.element.on(\"contextmenu\", this.handleContextmenu);\n        }\n    };\n    JqTreeWidget.prototype.deinit = function () {\n        this.element.empty();\n        this.element.off();\n        this.keyHandler.deinit();\n        this.tree = new node_1.Node({}, true);\n        _super.prototype.deinit.call(this);\n    };\n    JqTreeWidget.prototype.mouseCapture = function (positionInfo) {\n        if (this.options.dragAndDrop) {\n            return this.dndHandler.mouseCapture(positionInfo);\n        }\n        else {\n            return false;\n        }\n    };\n    JqTreeWidget.prototype.mouseStart = function (positionInfo) {\n        if (this.options.dragAndDrop) {\n            return this.dndHandler.mouseStart(positionInfo);\n        }\n        else {\n            return false;\n        }\n    };\n    JqTreeWidget.prototype.mouseDrag = function (positionInfo) {\n        if (this.options.dragAndDrop) {\n            var result = this.dndHandler.mouseDrag(positionInfo);\n            this.scrollHandler.checkScrolling();\n            return result;\n        }\n        else {\n            return false;\n        }\n    };\n    JqTreeWidget.prototype.mouseStop = function (positionInfo) {\n        if (this.options.dragAndDrop) {\n            return this.dndHandler.mouseStop(positionInfo);\n        }\n        else {\n            return false;\n        }\n    };\n    JqTreeWidget.prototype.initData = function () {\n        if (this.options.data) {\n            this.doLoadData(this.options.data, null);\n        }\n        else {\n            var dataUrl = this.getDataUrlInfo(null);\n            if (dataUrl) {\n                this.doLoadDataFromUrl(null, null, null);\n            }\n            else {\n                this.doLoadData([], null);\n            }\n        }\n    };\n    JqTreeWidget.prototype.getDataUrlInfo = function (node) {\n        var _this = this;\n        var dataUrl = this.options.dataUrl || this.element.data(\"url\");\n        var getUrlFromString = function (url) {\n            var urlInfo = { url: url };\n            setUrlInfoData(urlInfo);\n            return urlInfo;\n        };\n        var setUrlInfoData = function (urlInfo) {\n            if (node === null || node === void 0 ? void 0 : node.id) {\n                // Load on demand of a subtree; add node parameter\n                var data = { node: node.id };\n                urlInfo[\"data\"] = data;\n            }\n            else {\n                // Add selected_node parameter\n                var selectedNodeId = _this.getNodeIdToBeSelected();\n                if (selectedNodeId) {\n                    var data = { selected_node: selectedNodeId };\n                    urlInfo[\"data\"] = data;\n                }\n            }\n        };\n        if (typeof dataUrl === \"function\") {\n            return dataUrl(node);\n        }\n        else if (typeof dataUrl === \"string\") {\n            return getUrlFromString(dataUrl);\n        }\n        else if (dataUrl && typeof dataUrl === \"object\") {\n            setUrlInfoData(dataUrl);\n            return dataUrl;\n        }\n        else {\n            return null;\n        }\n    };\n    JqTreeWidget.prototype.getNodeIdToBeSelected = function () {\n        if (this.options.saveState) {\n            return this.saveStateHandler.getNodeIdToBeSelected();\n        }\n        else {\n            return null;\n        }\n    };\n    JqTreeWidget.prototype.initTree = function (data) {\n        var _this = this;\n        var doInit = function () {\n            if (!_this.isInitialized) {\n                _this.isInitialized = true;\n                _this._triggerEvent(\"tree.init\");\n            }\n        };\n        if (!this.options.nodeClass) {\n            return;\n        }\n        this.tree = new this.options.nodeClass(null, true, this.options.nodeClass);\n        this.selectNodeHandler.clear();\n        this.tree.loadFromData(data);\n        var mustLoadOnDemand = this.setInitialState();\n        this._refreshElements(null);\n        if (!mustLoadOnDemand) {\n            doInit();\n        }\n        else {\n            // Load data on demand and then init the tree\n            this.setInitialStateOnDemand(doInit);\n        }\n    };\n    // Set initial state, either by restoring the state or auto-opening nodes\n    // result: must load nodes on demand?\n    JqTreeWidget.prototype.setInitialState = function () {\n        var _this = this;\n        var restoreState = function () {\n            // result: is state restored, must load on demand?\n            if (!_this.options.saveState) {\n                return [false, false];\n            }\n            else {\n                var state = _this.saveStateHandler.getStateFromStorage();\n                if (!state) {\n                    return [false, false];\n                }\n                else {\n                    var mustLoadOnDemand_1 = _this.saveStateHandler.setInitialState(state);\n                    // return true: the state is restored\n                    return [true, mustLoadOnDemand_1];\n                }\n            }\n        };\n        var autoOpenNodes = function () {\n            // result: must load on demand?\n            if (_this.options.autoOpen === false) {\n                return false;\n            }\n            var maxLevel = _this.getAutoOpenMaxLevel();\n            var mustLoadOnDemand = false;\n            _this.tree.iterate(function (node, level) {\n                if (node.load_on_demand) {\n                    mustLoadOnDemand = true;\n                    return false;\n                }\n                else if (!node.hasChildren()) {\n                    return false;\n                }\n                else {\n                    node.is_open = true;\n                    return level !== maxLevel;\n                }\n            });\n            return mustLoadOnDemand;\n        };\n        var _a = restoreState(), isRestored = _a[0], mustLoadOnDemand = _a[1]; // eslint-disable-line prefer-const\n        if (!isRestored) {\n            mustLoadOnDemand = autoOpenNodes();\n        }\n        return mustLoadOnDemand;\n    };\n    // Set the initial state for nodes that are loaded on demand\n    // Call cb_finished when done\n    JqTreeWidget.prototype.setInitialStateOnDemand = function (cbFinished) {\n        var _this = this;\n        var restoreState = function () {\n            if (!_this.options.saveState) {\n                return false;\n            }\n            else {\n                var state = _this.saveStateHandler.getStateFromStorage();\n                if (!state) {\n                    return false;\n                }\n                else {\n                    _this.saveStateHandler.setInitialStateOnDemand(state, cbFinished);\n                    return true;\n                }\n            }\n        };\n        var autoOpenNodes = function () {\n            var maxLevel = _this.getAutoOpenMaxLevel();\n            var loadingCount = 0;\n            var loadAndOpenNode = function (node) {\n                loadingCount += 1;\n                _this._openNode(node, false, function () {\n                    loadingCount -= 1;\n                    openNodes();\n                });\n            };\n            var openNodes = function () {\n                _this.tree.iterate(function (node, level) {\n                    if (node.load_on_demand) {\n                        if (!node.is_loading) {\n                            loadAndOpenNode(node);\n                        }\n                        return false;\n                    }\n                    else {\n                        _this._openNode(node, false, null);\n                        return level !== maxLevel;\n                    }\n                });\n                if (loadingCount === 0) {\n                    cbFinished();\n                }\n            };\n            openNodes();\n        };\n        if (!restoreState()) {\n            autoOpenNodes();\n        }\n    };\n    JqTreeWidget.prototype.getAutoOpenMaxLevel = function () {\n        if (this.options.autoOpen === true) {\n            return -1;\n        }\n        else if (typeof this.options.autoOpen === \"number\") {\n            return this.options.autoOpen;\n        }\n        else if (typeof this.options.autoOpen === \"string\") {\n            return parseInt(this.options.autoOpen, 10);\n        }\n        else {\n            return 0;\n        }\n    };\n    JqTreeWidget.prototype.getClickTarget = function (element) {\n        var $target = jQuery(element);\n        var $button = $target.closest(\".jqtree-toggler\");\n        if ($button.length) {\n            var node = this.getNode($button);\n            if (node) {\n                return {\n                    type: \"button\",\n                    node: node\n                };\n            }\n        }\n        else {\n            var $el = $target.closest(\".jqtree-element\");\n            if ($el.length) {\n                var node = this.getNode($el);\n                if (node) {\n                    return {\n                        type: \"label\",\n                        node: node\n                    };\n                }\n            }\n        }\n        return null;\n    };\n    JqTreeWidget.prototype.getNode = function ($element) {\n        var $li = $element.closest(\"li.jqtree_common\");\n        if ($li.length === 0) {\n            return null;\n        }\n        else {\n            return $li.data(\"node\");\n        }\n    };\n    JqTreeWidget.prototype.saveState = function () {\n        if (this.options.saveState) {\n            this.saveStateHandler.saveState();\n        }\n    };\n    JqTreeWidget.prototype.selectCurrentNode = function (mustSetFocus) {\n        var node = this.getSelectedNode();\n        if (node) {\n            var nodeElement = this._getNodeElementForNode(node);\n            if (nodeElement) {\n                nodeElement.select(mustSetFocus);\n            }\n        }\n    };\n    JqTreeWidget.prototype.deselectCurrentNode = function () {\n        var node = this.getSelectedNode();\n        if (node) {\n            this.removeFromSelection(node);\n        }\n    };\n    JqTreeWidget.prototype.getDefaultClosedIcon = function () {\n        if (this.options.rtl) {\n            // triangle to the left\n            return \"&#x25c0;\";\n        }\n        else {\n            // triangle to the right\n            return \"&#x25ba;\";\n        }\n    };\n    JqTreeWidget.prototype.getRtlOption = function () {\n        if (this.options.rtl != null) {\n            return this.options.rtl;\n        }\n        else {\n            var dataRtl = this.element.data(\"rtl\");\n            if (dataRtl !== null &&\n                dataRtl !== false &&\n                dataRtl !== undefined) {\n                return true;\n            }\n            else {\n                return false;\n            }\n        }\n    };\n    JqTreeWidget.prototype.doSelectNode = function (node, optionsParam) {\n        var _this = this;\n        var saveState = function () {\n            if (_this.options.saveState) {\n                _this.saveStateHandler.saveState();\n            }\n        };\n        if (!node) {\n            // Called with empty node -> deselect current node\n            this.deselectCurrentNode();\n            saveState();\n            return;\n        }\n        var defaultOptions = { mustSetFocus: true, mustToggle: true };\n        var selectOptions = __assign(__assign({}, defaultOptions), (optionsParam || {}));\n        var canSelect = function () {\n            if (_this.options.onCanSelectNode) {\n                return (_this.options.selectable === true &&\n                    _this.options.onCanSelectNode(node));\n            }\n            else {\n                return _this.options.selectable === true;\n            }\n        };\n        var openParents = function () {\n            var parent = node.parent;\n            if (parent && parent.parent && !parent.is_open) {\n                _this.openNode(parent, false);\n            }\n        };\n        if (!canSelect()) {\n            return;\n        }\n        if (this.selectNodeHandler.isNodeSelected(node)) {\n            if (selectOptions.mustToggle) {\n                this.deselectCurrentNode();\n                this._triggerEvent(\"tree.select\", {\n                    node: null,\n                    previous_node: node\n                });\n            }\n        }\n        else {\n            var deselectedNode = this.getSelectedNode() || null;\n            this.deselectCurrentNode();\n            this.addToSelection(node, selectOptions.mustSetFocus);\n            this._triggerEvent(\"tree.select\", {\n                node: node,\n                deselected_node: deselectedNode\n            });\n            openParents();\n        }\n        saveState();\n    };\n    JqTreeWidget.prototype.doLoadData = function (data, parentNode) {\n        if (!data) {\n            return;\n        }\n        else {\n            this._triggerEvent(\"tree.load_data\", { tree_data: data });\n            if (parentNode) {\n                this.deselectNodes(parentNode);\n                this.loadSubtree(data, parentNode);\n            }\n            else {\n                this.initTree(data);\n            }\n            if (this.isDragging()) {\n                this.dndHandler.refresh();\n            }\n        }\n    };\n    JqTreeWidget.prototype.deselectNodes = function (parentNode) {\n        var selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n        for (var _i = 0, selectedNodesUnderParent_1 = selectedNodesUnderParent; _i < selectedNodesUnderParent_1.length; _i++) {\n            var n = selectedNodesUnderParent_1[_i];\n            this.selectNodeHandler.removeFromSelection(n);\n        }\n    };\n    JqTreeWidget.prototype.loadSubtree = function (data, parentNode) {\n        parentNode.loadFromData(data);\n        parentNode.load_on_demand = false;\n        parentNode.is_loading = false;\n        this._refreshElements(parentNode);\n    };\n    JqTreeWidget.prototype.doLoadDataFromUrl = function (urlInfoParam, parentNode, onFinished) {\n        var urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode);\n        this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n    };\n    JqTreeWidget.prototype.loadFolderOnDemand = function (node, slide, onFinished) {\n        var _this = this;\n        if (slide === void 0) { slide = true; }\n        node.is_loading = true;\n        this.doLoadDataFromUrl(null, node, function () {\n            _this._openNode(node, slide, onFinished);\n        });\n    };\n    JqTreeWidget.defaults = {\n        animationSpeed: \"fast\",\n        autoOpen: false,\n        saveState: false,\n        dragAndDrop: false,\n        selectable: true,\n        useContextMenu: true,\n        onCanSelectNode: undefined,\n        onSetStateFromStorage: undefined,\n        onGetStateFromStorage: undefined,\n        onCreateLi: undefined,\n        onIsMoveHandle: undefined,\n        // Can this node be moved?\n        onCanMove: undefined,\n        // Can this node be moved to this position? function(moved_node, target_node, position)\n        onCanMoveTo: undefined,\n        onLoadFailed: undefined,\n        autoEscape: true,\n        dataUrl: undefined,\n        // The symbol to use for a closed node - \u25BA BLACK RIGHT-POINTING POINTER\n        // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n        closedIcon: undefined,\n        // The symbol to use for an open node - \u25BC BLACK DOWN-POINTING TRIANGLE\n        // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n        openedIcon: \"&#x25bc;\",\n        slide: true,\n        nodeClass: node_1.Node,\n        dataFilter: undefined,\n        keyboardSupport: true,\n        openFolderDelay: 500,\n        rtl: undefined,\n        onDragMove: undefined,\n        onDragStop: undefined,\n        buttonLeft: true,\n        onLoading: undefined,\n        showEmptyFolder: false,\n        tabIndex: 0\n    };\n    return JqTreeWidget;\n}(mouse_widget_1[\"default\"]));\nexports.JqTreeWidget = JqTreeWidget;\nsimple_widget_1[\"default\"].register(JqTreeWidget, \"tree\");\n", "//\n// jQuery MiniColors: A tiny color picker built on jQuery\n//\n// Developed by Cory LaViska for A Beautiful Site, LLC\n//\n// Licensed under the MIT license: http://opensource.org/licenses/MIT\n//\n(function (factory) {\n  if(typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if(typeof exports === 'object') {\n    // Node/CommonJS\n    module.exports = factory(require('jquery'));\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n}(function ($) {\n  'use strict';\n\n  // Defaults\n  $.minicolors = {\n    defaults: {\n      animationSpeed: 50,\n      animationEasing: 'swing',\n      change: null,\n      changeDelay: 0,\n      control: 'hue',\n      defaultValue: '',\n      format: 'hex',\n      hide: null,\n      hideSpeed: 100,\n      inline: false,\n      keywords: '',\n      letterCase: 'lowercase',\n      opacity: false,\n      position: 'bottom',\n      show: null,\n      showSpeed: 100,\n      theme: 'default',\n      swatches: []\n    }\n  };\n\n  // Public methods\n  $.extend($.fn, {\n    minicolors: function(method, data) {\n\n      switch(method) {\n        // Destroy the control\n        case 'destroy':\n          $(this).each(function() {\n            destroy($(this));\n          });\n          return $(this);\n\n        // Hide the color picker\n        case 'hide':\n          hide();\n          return $(this);\n\n        // Get/set opacity\n        case 'opacity':\n          // Getter\n          if(data === undefined) {\n            // Getter\n            return $(this).attr('data-opacity');\n          } else {\n            // Setter\n            $(this).each(function() {\n              updateFromInput($(this).attr('data-opacity', data));\n            });\n          }\n          return $(this);\n\n        // Get an RGB(A) object based on the current color/opacity\n        case 'rgbObject':\n          return rgbObject($(this), method === 'rgbaObject');\n\n        // Get an RGB(A) string based on the current color/opacity\n        case 'rgbString':\n        case 'rgbaString':\n          return rgbString($(this), method === 'rgbaString');\n\n        // Get/set settings on the fly\n        case 'settings':\n          if(data === undefined) {\n            return $(this).data('minicolors-settings');\n          } else {\n            // Setter\n            $(this).each(function() {\n              var settings = $(this).data('minicolors-settings') || {};\n              destroy($(this));\n              $(this).minicolors($.extend(true, settings, data));\n            });\n          }\n          return $(this);\n\n        // Show the color picker\n        case 'show':\n          show($(this).eq(0));\n          return $(this);\n\n        // Get/set the hex color value\n        case 'value':\n          if(data === undefined) {\n            // Getter\n            return $(this).val();\n          } else {\n            // Setter\n            $(this).each(function() {\n              if(typeof(data) === 'object' && data !== null) {\n                if(data.opacity !== undefined) {\n                  $(this).attr('data-opacity', keepWithin(data.opacity, 0, 1));\n                }\n                if(data.color) {\n                  $(this).val(data.color);\n                }\n              } else {\n                $(this).val(data);\n              }\n              updateFromInput($(this));\n            });\n          }\n          return $(this);\n\n        // Initializes the control\n        default:\n          if(method !== 'create') data = method;\n          $(this).each(function() {\n            init($(this), data);\n          });\n          return $(this);\n\n      }\n\n    }\n  });\n\n  // Initialize input elements\n  function init(input, settings) {\n    var minicolors = $('<div class=\"minicolors\" />');\n    var defaults = $.minicolors.defaults;\n    var name;\n    var size;\n    var swatches;\n    var swatch;\n    var swatchString;\n    var panel;\n    var i;\n\n    // Do nothing if already initialized\n    if(input.data('minicolors-initialized')) return;\n\n    // Handle settings\n    settings = $.extend(true, {}, defaults, settings);\n\n    // The wrapper\n    minicolors\n      .addClass('minicolors-theme-' + settings.theme)\n      .toggleClass('minicolors-with-opacity', settings.opacity);\n\n    // Custom positioning\n    if(settings.position !== undefined) {\n      $.each(settings.position.split(' '), function() {\n        minicolors.addClass('minicolors-position-' + this);\n      });\n    }\n\n    // Input size\n    if(settings.format === 'rgb') {\n      size = settings.opacity ? '25' : '20';\n    } else {\n      size = settings.keywords ? '11' : '7';\n    }\n\n    // The input\n    input\n      .addClass('minicolors-input')\n      .data('minicolors-initialized', false)\n      .data('minicolors-settings', settings)\n      .prop('size', size)\n      .wrap(minicolors)\n      .after(\n        '<div class=\"minicolors-panel minicolors-slider-' + settings.control + '\">' +\n                '<div class=\"minicolors-slider minicolors-sprite\">' +\n                  '<div class=\"minicolors-picker\"></div>' +\n                '</div>' +\n                '<div class=\"minicolors-opacity-slider minicolors-sprite\">' +\n                  '<div class=\"minicolors-picker\"></div>' +\n                '</div>' +\n                '<div class=\"minicolors-grid minicolors-sprite\">' +\n                  '<div class=\"minicolors-grid-inner\"></div>' +\n                  '<div class=\"minicolors-picker\"><div></div></div>' +\n                '</div>' +\n              '</div>'\n      );\n\n    // The swatch\n    if(!settings.inline) {\n      input.after('<span class=\"minicolors-swatch minicolors-sprite minicolors-input-swatch\"><span class=\"minicolors-swatch-color\"></span></span>');\n      input.next('.minicolors-input-swatch').on('click', function(event) {\n        event.preventDefault();\n        input.trigger('focus');\n      });\n    }\n\n    // Prevent text selection in IE\n    panel = input.parent().find('.minicolors-panel');\n    panel.on('selectstart', function() { return false; }).end();\n\n    // Swatches\n    if(settings.swatches && settings.swatches.length !== 0) {\n      panel.addClass('minicolors-with-swatches');\n      swatches = $('<ul class=\"minicolors-swatches\"></ul>')\n        .appendTo(panel);\n      for(i = 0; i < settings.swatches.length; ++i) {\n        // allow for custom objects as swatches\n        if($.type(settings.swatches[i]) === 'object') {\n          name = settings.swatches[i].name;\n          swatch = settings.swatches[i].color;\n        } else {\n          name = '';\n          swatch = settings.swatches[i];\n        }\n        swatchString = swatch;\n        swatch = isRgb(swatch) ? parseRgb(swatch, true) : hex2rgb(parseHex(swatch, true));\n        $('<li class=\"minicolors-swatch minicolors-sprite\"><span class=\"minicolors-swatch-color\" title=\"' + name + '\"></span></li>')\n          .appendTo(swatches)\n          .data('swatch-color', swatchString)\n          .find('.minicolors-swatch-color')\n          .css({\n            backgroundColor: rgb2hex(swatch),\n            opacity: String(swatch.a)\n          });\n        settings.swatches[i] = swatch;\n      }\n    }\n\n    // Inline controls\n    if(settings.inline) input.parent().addClass('minicolors-inline');\n\n    updateFromInput(input, false);\n\n    input.data('minicolors-initialized', true);\n  }\n\n  // Returns the input back to its original state\n  function destroy(input) {\n    var minicolors = input.parent();\n\n    // Revert the input element\n    input\n      .removeData('minicolors-initialized')\n      .removeData('minicolors-settings')\n      .removeProp('size')\n      .removeClass('minicolors-input');\n\n    // Remove the wrap and destroy whatever remains\n    minicolors.before(input).remove();\n  }\n\n  // Shows the specified dropdown panel\n  function show(input) {\n    var minicolors = input.parent();\n    var panel = minicolors.find('.minicolors-panel');\n    var settings = input.data('minicolors-settings');\n\n    // Do nothing if uninitialized, disabled, inline, or already open\n    if(\n      !input.data('minicolors-initialized') ||\n      input.prop('disabled') ||\n      minicolors.hasClass('minicolors-inline') ||\n      minicolors.hasClass('minicolors-focus')\n    ) return;\n\n    hide();\n\n    minicolors.addClass('minicolors-focus');\n    if (panel.animate) {\n      panel\n        .stop(true, true)\n        .fadeIn(settings.showSpeed, function () {\n          if (settings.show) settings.show.call(input.get(0));\n        });\n    } else {\n      panel.show();\n      if (settings.show) settings.show.call(input.get(0));\n    }\n  }\n\n  // Hides all dropdown panels\n  function hide() {\n    $('.minicolors-focus').each(function() {\n      var minicolors = $(this);\n      var input = minicolors.find('.minicolors-input');\n      var panel = minicolors.find('.minicolors-panel');\n      var settings = input.data('minicolors-settings');\n\n      if (panel.animate) {\n        panel.fadeOut(settings.hideSpeed, function () {\n          if (settings.hide) settings.hide.call(input.get(0));\n          minicolors.removeClass('minicolors-focus');\n        });\n      } else {\n        panel.hide();\n        if (settings.hide) settings.hide.call(input.get(0));\n        minicolors.removeClass('minicolors-focus');\n      }\n    });\n  }\n\n  // Moves the selected picker\n  function move(target, event, animate) {\n    var input = target.parents('.minicolors').find('.minicolors-input');\n    var settings = input.data('minicolors-settings');\n    var picker = target.find('[class$=-picker]');\n    var offsetX = target.offset().left;\n    var offsetY = target.offset().top;\n    var x = Math.round(event.pageX - offsetX);\n    var y = Math.round(event.pageY - offsetY);\n    var duration = animate ? settings.animationSpeed : 0;\n    var wx, wy, r, phi, styles;\n\n    // Touch support\n    if(event.originalEvent.changedTouches) {\n      x = event.originalEvent.changedTouches[0].pageX - offsetX;\n      y = event.originalEvent.changedTouches[0].pageY - offsetY;\n    }\n\n    // Constrain picker to its container\n    if(x < 0) x = 0;\n    if(y < 0) y = 0;\n    if(x > target.width()) x = target.width();\n    if(y > target.height()) y = target.height();\n\n    // Constrain color wheel values to the wheel\n    if(target.parent().is('.minicolors-slider-wheel') && picker.parent().is('.minicolors-grid')) {\n      wx = 75 - x;\n      wy = 75 - y;\n      r = Math.sqrt(wx * wx + wy * wy);\n      phi = Math.atan2(wy, wx);\n      if(phi < 0) phi += Math.PI * 2;\n      if(r > 75) {\n        r = 75;\n        x = 75 - (75 * Math.cos(phi));\n        y = 75 - (75 * Math.sin(phi));\n      }\n      x = Math.round(x);\n      y = Math.round(y);\n    }\n\n    // Move the picker\n    styles = {\n      top: y + 'px'\n    };\n    if(target.is('.minicolors-grid')) {\n      styles.left = x + 'px';\n    }\n    if (picker.animate) {\n      picker\n        .stop(true)\n        .animate(styles, duration, settings.animationEasing, function() {\n          updateFromControl(input, target);\n        });\n    } else {\n      picker\n        .css(styles);\n      updateFromControl(input, target);\n    }\n  }\n\n  // Sets the input based on the color picker values\n  function updateFromControl(input, target) {\n\n    function getCoords(picker, container) {\n      var left, top;\n      if(!picker.length || !container) return null;\n      left = picker.offset().left;\n      top = picker.offset().top;\n\n      return {\n        x: left - container.offset().left + (picker.outerWidth() / 2),\n        y: top - container.offset().top + (picker.outerHeight() / 2)\n      };\n    }\n\n    var hue, saturation, brightness, x, y, r, phi;\n    var hex = input.val();\n    var opacity = input.attr('data-opacity');\n\n    // Helpful references\n    var minicolors = input.parent();\n    var settings = input.data('minicolors-settings');\n    var swatch = minicolors.find('.minicolors-input-swatch');\n\n    // Panel objects\n    var grid = minicolors.find('.minicolors-grid');\n    var slider = minicolors.find('.minicolors-slider');\n    var opacitySlider = minicolors.find('.minicolors-opacity-slider');\n\n    // Picker objects\n    var gridPicker = grid.find('[class$=-picker]');\n    var sliderPicker = slider.find('[class$=-picker]');\n    var opacityPicker = opacitySlider.find('[class$=-picker]');\n\n    // Picker positions\n    var gridPos = getCoords(gridPicker, grid);\n    var sliderPos = getCoords(sliderPicker, slider);\n    var opacityPos = getCoords(opacityPicker, opacitySlider);\n\n    // Handle colors\n    if(target.is('.minicolors-grid, .minicolors-slider, .minicolors-opacity-slider')) {\n\n      // Determine HSB values\n      switch(settings.control) {\n        case 'wheel':\n          // Calculate hue, saturation, and brightness\n          x = (grid.width() / 2) - gridPos.x;\n          y = (grid.height() / 2) - gridPos.y;\n          r = Math.sqrt(x * x + y * y);\n          phi = Math.atan2(y, x);\n          if(phi < 0) phi += Math.PI * 2;\n          if(r > 75) {\n            r = 75;\n            gridPos.x = 69 - (75 * Math.cos(phi));\n            gridPos.y = 69 - (75 * Math.sin(phi));\n          }\n          saturation = keepWithin(r / 0.75, 0, 100);\n          hue = keepWithin(phi * 180 / Math.PI, 0, 360);\n          brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100);\n          hex = hsb2hex({\n            h: hue,\n            s: saturation,\n            b: brightness\n          });\n\n          // Update UI\n          slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 }));\n          break;\n\n        case 'saturation':\n          // Calculate hue, saturation, and brightness\n          hue = keepWithin(parseInt(gridPos.x * (360 / grid.width()), 10), 0, 360);\n          saturation = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100);\n          brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100);\n          hex = hsb2hex({\n            h: hue,\n            s: saturation,\n            b: brightness\n          });\n\n          // Update UI\n          slider.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: brightness }));\n          minicolors.find('.minicolors-grid-inner').css('opacity', saturation / 100);\n          break;\n\n        case 'brightness':\n          // Calculate hue, saturation, and brightness\n          hue = keepWithin(parseInt(gridPos.x * (360 / grid.width()), 10), 0, 360);\n          saturation = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100);\n          brightness = keepWithin(100 - Math.floor(sliderPos.y * (100 / slider.height())), 0, 100);\n          hex = hsb2hex({\n            h: hue,\n            s: saturation,\n            b: brightness\n          });\n\n          // Update UI\n          slider.css('backgroundColor', hsb2hex({ h: hue, s: saturation, b: 100 }));\n          minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (brightness / 100));\n          break;\n\n        default:\n          // Calculate hue, saturation, and brightness\n          hue = keepWithin(360 - parseInt(sliderPos.y * (360 / slider.height()), 10), 0, 360);\n          saturation = keepWithin(Math.floor(gridPos.x * (100 / grid.width())), 0, 100);\n          brightness = keepWithin(100 - Math.floor(gridPos.y * (100 / grid.height())), 0, 100);\n          hex = hsb2hex({\n            h: hue,\n            s: saturation,\n            b: brightness\n          });\n\n          // Update UI\n          grid.css('backgroundColor', hsb2hex({ h: hue, s: 100, b: 100 }));\n          break;\n      }\n\n      // Handle opacity\n      if(settings.opacity) {\n        opacity = parseFloat(1 - (opacityPos.y / opacitySlider.height())).toFixed(2);\n      } else {\n        opacity = 1;\n      }\n\n      updateInput(input, hex, opacity);\n    }\n    else {\n      // Set swatch color\n      swatch.find('span').css({\n        backgroundColor: hex,\n        opacity: String(opacity)\n      });\n\n      // Handle change event\n      doChange(input, hex, opacity);\n    }\n  }\n\n  // Sets the value of the input and does the appropriate conversions\n  // to respect settings, also updates the swatch\n  function updateInput(input, value, opacity) {\n    var rgb;\n\n    // Helpful references\n    var minicolors = input.parent();\n    var settings = input.data('minicolors-settings');\n    var swatch = minicolors.find('.minicolors-input-swatch');\n\n    if(settings.opacity) input.attr('data-opacity', opacity);\n\n    // Set color string\n    if(settings.format === 'rgb') {\n      // Returns RGB(A) string\n\n      // Checks for input format and does the conversion\n      if(isRgb(value)) {\n        rgb = parseRgb(value, true);\n      }\n      else {\n        rgb = hex2rgb(parseHex(value, true));\n      }\n\n      opacity = input.attr('data-opacity') === '' ? 1 : keepWithin(parseFloat(input.attr('data-opacity')).toFixed(2), 0, 1);\n      if(isNaN(opacity) || !settings.opacity) opacity = 1;\n\n      if(input.minicolors('rgbObject').a <= 1 && rgb && settings.opacity) {\n        // Set RGBA string if alpha\n        value = 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(opacity) + ')';\n      } else {\n        // Set RGB string (alpha = 1)\n        value = 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')';\n      }\n    } else {\n      // Returns hex color\n\n      // Checks for input format and does the conversion\n      if(isRgb(value)) {\n        value = rgbString2hex(value);\n      }\n\n      value = convertCase(value, settings.letterCase);\n    }\n\n    // Update value from picker\n    input.val(value);\n\n    // Set swatch color\n    swatch.find('span').css({\n      backgroundColor: value,\n      opacity: String(opacity)\n    });\n\n    // Handle change event\n    doChange(input, value, opacity);\n  }\n\n  // Sets the color picker values from the input\n  function updateFromInput(input, preserveInputValue) {\n    var hex, hsb, opacity, keywords, alpha, value, x, y, r, phi;\n\n    // Helpful references\n    var minicolors = input.parent();\n    var settings = input.data('minicolors-settings');\n    var swatch = minicolors.find('.minicolors-input-swatch');\n\n    // Panel objects\n    var grid = minicolors.find('.minicolors-grid');\n    var slider = minicolors.find('.minicolors-slider');\n    var opacitySlider = minicolors.find('.minicolors-opacity-slider');\n\n    // Picker objects\n    var gridPicker = grid.find('[class$=-picker]');\n    var sliderPicker = slider.find('[class$=-picker]');\n    var opacityPicker = opacitySlider.find('[class$=-picker]');\n\n    // Determine hex/HSB values\n    if(isRgb(input.val())) {\n      // If input value is a rgb(a) string, convert it to hex color and update opacity\n      hex = rgbString2hex(input.val());\n      alpha = keepWithin(parseFloat(getAlpha(input.val())).toFixed(2), 0, 1);\n      if(alpha) {\n        input.attr('data-opacity', alpha);\n      }\n    } else {\n      hex = convertCase(parseHex(input.val(), true), settings.letterCase);\n    }\n\n    if(!hex){\n      hex = convertCase(parseInput(settings.defaultValue, true), settings.letterCase);\n    }\n    hsb = hex2hsb(hex);\n\n    // Get array of lowercase keywords\n    keywords = !settings.keywords ? [] : $.map(settings.keywords.split(','), function(a) {\n      return $.trim(a.toLowerCase());\n    });\n\n    // Set color string\n    if(input.val() !== '' && $.inArray(input.val().toLowerCase(), keywords) > -1) {\n      value = convertCase(input.val());\n    } else {\n      value = isRgb(input.val()) ? parseRgb(input.val()) : hex;\n    }\n\n    // Update input value\n    if(!preserveInputValue) input.val(value);\n\n    // Determine opacity value\n    if(settings.opacity) {\n      // Get from data-opacity attribute and keep within 0-1 range\n      opacity = input.attr('data-opacity') === '' ? 1 : keepWithin(parseFloat(input.attr('data-opacity')).toFixed(2), 0, 1);\n      if(isNaN(opacity)) opacity = 1;\n      input.attr('data-opacity', opacity);\n      swatch.find('span').css('opacity', String(opacity));\n\n      // Set opacity picker position\n      y = keepWithin(opacitySlider.height() - (opacitySlider.height() * opacity), 0, opacitySlider.height());\n      opacityPicker.css('top', y + 'px');\n    }\n\n    // Set opacity to zero if input value is transparent\n    if(input.val().toLowerCase() === 'transparent') {\n      swatch.find('span').css('opacity', String(0));\n    }\n\n    // Update swatch\n    swatch.find('span').css('backgroundColor', hex);\n\n    // Determine picker locations\n    switch(settings.control) {\n      case 'wheel':\n        // Set grid position\n        r = keepWithin(Math.ceil(hsb.s * 0.75), 0, grid.height() / 2);\n        phi = hsb.h * Math.PI / 180;\n        x = keepWithin(75 - Math.cos(phi) * r, 0, grid.width());\n        y = keepWithin(75 - Math.sin(phi) * r, 0, grid.height());\n        gridPicker.css({\n          top: y + 'px',\n          left: x + 'px'\n        });\n\n        // Set slider position\n        y = 150 - (hsb.b / (100 / grid.height()));\n        if(hex === '') y = 0;\n        sliderPicker.css('top', y + 'px');\n        \n        // Update panel color\n        slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 }));\n        break;\n\n      case 'saturation':\n        // Set grid position\n        x = keepWithin((5 * hsb.h) / 12, 0, 150);\n        y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height());\n        gridPicker.css({\n          top: y + 'px',\n          left: x + 'px'\n        });\n\n        // Set slider position\n        y = keepWithin(slider.height() - (hsb.s * (slider.height() / 100)), 0, slider.height());\n        sliderPicker.css('top', y + 'px');\n\n        // Update UI\n        slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: hsb.b }));\n        minicolors.find('.minicolors-grid-inner').css('opacity', hsb.s / 100);\n        break;\n\n      case 'brightness':\n        // Set grid position\n        x = keepWithin((5 * hsb.h) / 12, 0, 150);\n        y = keepWithin(grid.height() - Math.ceil(hsb.s / (100 / grid.height())), 0, grid.height());\n        gridPicker.css({\n          top: y + 'px',\n          left: x + 'px'\n        });\n\n        // Set slider position\n        y = keepWithin(slider.height() - (hsb.b * (slider.height() / 100)), 0, slider.height());\n        sliderPicker.css('top', y + 'px');\n\n        // Update UI\n        slider.css('backgroundColor', hsb2hex({ h: hsb.h, s: hsb.s, b: 100 }));\n        minicolors.find('.minicolors-grid-inner').css('opacity', 1 - (hsb.b / 100));\n        break;\n\n      default:\n        // Set grid position\n        x = keepWithin(Math.ceil(hsb.s / (100 / grid.width())), 0, grid.width());\n        y = keepWithin(grid.height() - Math.ceil(hsb.b / (100 / grid.height())), 0, grid.height());\n        gridPicker.css({\n          top: y + 'px',\n          left: x + 'px'\n        });\n\n        // Set slider position\n        y = keepWithin(slider.height() - (hsb.h / (360 / slider.height())), 0, slider.height());\n        sliderPicker.css('top', y + 'px');\n\n        // Update panel color\n        grid.css('backgroundColor', hsb2hex({ h: hsb.h, s: 100, b: 100 }));\n        break;\n    }\n\n    // Fire change event, but only if minicolors is fully initialized\n    if(input.data('minicolors-initialized')) {\n      doChange(input, value, opacity);\n    }\n  }\n\n  // Runs the change and changeDelay callbacks\n  function doChange(input, value, opacity) {\n    var settings = input.data('minicolors-settings');\n    var lastChange = input.data('minicolors-lastChange');\n    var obj, sel, i;\n\n    // Only run if it actually changed\n    if(!lastChange || lastChange.value !== value || lastChange.opacity !== opacity) {\n\n      // Remember last-changed value\n      input.data('minicolors-lastChange', {\n        value: value,\n        opacity: opacity\n      });\n\n      // Check and select applicable swatch\n      if(settings.swatches && settings.swatches.length !== 0) {\n        if(!isRgb(value)) {\n          obj = hex2rgb(value);\n        }\n        else {\n          obj = parseRgb(value, true);\n        }\n        sel = -1;\n        for(i = 0; i < settings.swatches.length; ++i) {\n          if(obj.r === settings.swatches[i].r && obj.g === settings.swatches[i].g && obj.b === settings.swatches[i].b && obj.a === settings.swatches[i].a) {\n            sel = i;\n            break;\n          }\n        }\n\n        input.parent().find('.minicolors-swatches .minicolors-swatch').removeClass('selected');\n        if(sel !== -1) {\n          input.parent().find('.minicolors-swatches .minicolors-swatch').eq(i).addClass('selected');\n        }\n      }\n\n      // Fire change event\n      if(settings.change) {\n        if(settings.changeDelay) {\n          // Call after a delay\n          clearTimeout(input.data('minicolors-changeTimeout'));\n          input.data('minicolors-changeTimeout', setTimeout(function() {\n            settings.change.call(input.get(0), value, opacity);\n          }, settings.changeDelay));\n        } else {\n          // Call immediately\n          settings.change.call(input.get(0), value, opacity);\n        }\n      }\n      input.trigger('change').trigger('input');\n    }\n  }\n\n  // Generates an RGB(A) object based on the input's value\n  function rgbObject(input) {\n    var rgb,\n      opacity = $(input).attr('data-opacity');\n    if( isRgb($(input).val()) ) {\n      rgb = parseRgb($(input).val(), true);\n    } else {\n      var hex = parseHex($(input).val(), true);\n      rgb = hex2rgb(hex);\n    }\n    if( !rgb ) return null;\n    if( opacity !== undefined ) $.extend(rgb, { a: parseFloat(opacity) });\n    return rgb;\n  }\n\n  // Generates an RGB(A) string based on the input's value\n  function rgbString(input, alpha) {\n    var rgb,\n      opacity = $(input).attr('data-opacity');\n    if( isRgb($(input).val()) ) {\n      rgb = parseRgb($(input).val(), true);\n    } else {\n      var hex = parseHex($(input).val(), true);\n      rgb = hex2rgb(hex);\n    }\n    if( !rgb ) return null;\n    if( opacity === undefined ) opacity = 1;\n    if( alpha ) {\n      return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(opacity) + ')';\n    } else {\n      return 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')';\n    }\n  }\n\n  // Converts to the letter case specified in settings\n  function convertCase(string, letterCase) {\n    return letterCase === 'uppercase' ? string.toUpperCase() : string.toLowerCase();\n  }\n\n  // Parses a string and returns a valid hex string when possible\n  function parseHex(string, expand) {\n    string = string.replace(/^#/g, '');\n    if(!string.match(/^[A-F0-9]{3,6}/ig)) return '';\n    if(string.length !== 3 && string.length !== 6) return '';\n    if(string.length === 3 && expand) {\n      string = string[0] + string[0] + string[1] + string[1] + string[2] + string[2];\n    }\n    return '#' + string;\n  }\n\n  // Parses a string and returns a valid RGB(A) string when possible\n  function parseRgb(string, obj) {\n    var values = string.replace(/[^\\d,.]/g, '');\n    var rgba = values.split(',');\n\n    rgba[0] = keepWithin(parseInt(rgba[0], 10), 0, 255);\n    rgba[1] = keepWithin(parseInt(rgba[1], 10), 0, 255);\n    rgba[2] = keepWithin(parseInt(rgba[2], 10), 0, 255);\n    if(rgba[3] !== undefined) {\n      rgba[3] = keepWithin(parseFloat(rgba[3], 10), 0, 1);\n    }\n\n    // Return RGBA object\n    if( obj ) {\n      if (rgba[3] !== undefined) {\n        return {\n          r: rgba[0],\n          g: rgba[1],\n          b: rgba[2],\n          a: rgba[3]\n        };\n      } else {\n        return {\n          r: rgba[0],\n          g: rgba[1],\n          b: rgba[2]\n        };\n      }\n    }\n\n    // Return RGBA string\n    if(typeof(rgba[3]) !== 'undefined' && rgba[3] <= 1) {\n      return 'rgba(' + rgba[0] + ', ' + rgba[1] + ', ' + rgba[2] + ', ' + rgba[3] + ')';\n    } else {\n      return 'rgb(' + rgba[0] + ', ' + rgba[1] + ', ' + rgba[2] + ')';\n    }\n\n  }\n\n  // Parses a string and returns a valid color string when possible\n  function parseInput(string, expand) {\n    if(isRgb(string)) {\n      // Returns a valid rgb(a) string\n      return parseRgb(string);\n    } else {\n      return parseHex(string, expand);\n    }\n  }\n\n  // Keeps value within min and max\n  function keepWithin(value, min, max) {\n    if(value < min) value = min;\n    if(value > max) value = max;\n    return value;\n  }\n\n  // Checks if a string is a valid RGB(A) string\n  function isRgb(string) {\n    var rgb = string.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n    return (rgb && rgb.length === 4) ? true : false;\n  }\n\n  // Function to get alpha from a RGB(A) string\n  function getAlpha(rgba) {\n    rgba = rgba.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+(\\.\\d{1,2})?|\\.\\d{1,2})[\\s+]?/i);\n    return (rgba && rgba.length === 6) ? rgba[4] : '1';\n  }\n\n  // Converts an HSB object to an RGB object\n  function hsb2rgb(hsb) {\n    var rgb = {};\n    var h = Math.round(hsb.h);\n    var s = Math.round(hsb.s * 255 / 100);\n    var v = Math.round(hsb.b * 255 / 100);\n    if(s === 0) {\n      rgb.r = rgb.g = rgb.b = v;\n    } else {\n      var t1 = v;\n      var t2 = (255 - s) * v / 255;\n      var t3 = (t1 - t2) * (h % 60) / 60;\n      if(h === 360) h = 0;\n      if(h < 60) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3; }\n      else if(h < 120) {rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3; }\n      else if(h < 180) {rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3; }\n      else if(h < 240) {rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3; }\n      else if(h < 300) {rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3; }\n      else if(h < 360) {rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3; }\n      else { rgb.r = 0; rgb.g = 0; rgb.b = 0; }\n    }\n    return {\n      r: Math.round(rgb.r),\n      g: Math.round(rgb.g),\n      b: Math.round(rgb.b)\n    };\n  }\n\n  // Converts an RGB string to a hex string\n  function rgbString2hex(rgb){\n    rgb = rgb.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n    return (rgb && rgb.length === 4) ? '#' +\n      ('0' + parseInt(rgb[1],10).toString(16)).slice(-2) +\n      ('0' + parseInt(rgb[2],10).toString(16)).slice(-2) +\n      ('0' + parseInt(rgb[3],10).toString(16)).slice(-2) : '';\n  }\n\n  // Converts an RGB object to a hex string\n  function rgb2hex(rgb) {\n    var hex = [\n      rgb.r.toString(16),\n      rgb.g.toString(16),\n      rgb.b.toString(16)\n    ];\n    $.each(hex, function(nr, val) {\n      if(val.length === 1) hex[nr] = '0' + val;\n    });\n    return '#' + hex.join('');\n  }\n\n  // Converts an HSB object to a hex string\n  function hsb2hex(hsb) {\n    return rgb2hex(hsb2rgb(hsb));\n  }\n\n  // Converts a hex string to an HSB object\n  function hex2hsb(hex) {\n    var hsb = rgb2hsb(hex2rgb(hex));\n    if(hsb.s === 0) hsb.h = 360;\n    return hsb;\n  }\n\n  // Converts an RGB object to an HSB object\n  function rgb2hsb(rgb) {\n    var hsb = { h: 0, s: 0, b: 0 };\n    var min = Math.min(rgb.r, rgb.g, rgb.b);\n    var max = Math.max(rgb.r, rgb.g, rgb.b);\n    var delta = max - min;\n    hsb.b = max;\n    hsb.s = max !== 0 ? 255 * delta / max : 0;\n    if(hsb.s !== 0) {\n      if(rgb.r === max) {\n        hsb.h = (rgb.g - rgb.b) / delta;\n      } else if(rgb.g === max) {\n        hsb.h = 2 + (rgb.b - rgb.r) / delta;\n      } else {\n        hsb.h = 4 + (rgb.r - rgb.g) / delta;\n      }\n    } else {\n      hsb.h = -1;\n    }\n    hsb.h *= 60;\n    if(hsb.h < 0) {\n      hsb.h += 360;\n    }\n    hsb.s *= 100/255;\n    hsb.b *= 100/255;\n    return hsb;\n  }\n\n  // Converts a hex string to an RGB object\n  function hex2rgb(hex) {\n    hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);\n    return {\n      r: hex >> 16,\n      g: (hex & 0x00FF00) >> 8,\n      b: (hex & 0x0000FF)\n    };\n  }\n\n  // Handle events\n  $([document])\n    // Hide on clicks outside of the control\n    .on('mousedown.minicolors touchstart.minicolors', function(event) {\n      if(!$(event.target).parents().add(event.target).hasClass('minicolors')) {\n        hide();\n      }\n    })\n    // Start moving\n    .on('mousedown.minicolors touchstart.minicolors', '.minicolors-grid, .minicolors-slider, .minicolors-opacity-slider', function(event) {\n      var target = $(this);\n      event.preventDefault();\n      $(event.delegateTarget).data('minicolors-target', target);\n      move(target, event, true);\n    })\n    // Move pickers\n    .on('mousemove.minicolors touchmove.minicolors', function(event) {\n      var target = $(event.delegateTarget).data('minicolors-target');\n      if(target) move(target, event);\n    })\n    // Stop moving\n    .on('mouseup.minicolors touchend.minicolors', function() {\n      $(this).removeData('minicolors-target');\n    })\n    // Selected a swatch\n    .on('click.minicolors', '.minicolors-swatches li', function(event) {\n      event.preventDefault();\n      var target = $(this), input = target.parents('.minicolors').find('.minicolors-input'), color = target.data('swatch-color');\n      updateInput(input, color, getAlpha(color));\n      updateFromInput(input);\n    })\n    // Show panel when swatch is clicked\n    .on('mousedown.minicolors touchstart.minicolors', '.minicolors-input-swatch', function(event) {\n      var input = $(this).parent().find('.minicolors-input');\n      event.preventDefault();\n      show(input);\n    })\n    // Show on focus\n    .on('focus.minicolors', '.minicolors-input', function() {\n      var input = $(this);\n      if(!input.data('minicolors-initialized')) return;\n      show(input);\n    })\n    // Update value on blur\n    .on('blur.minicolors', '.minicolors-input', function() {\n      var input = $(this);\n      var settings = input.data('minicolors-settings');\n      var keywords;\n      var hex;\n      var rgba;\n      var swatchOpacity;\n      var value;\n\n      if(!input.data('minicolors-initialized')) return;\n\n      // Get array of lowercase keywords\n      keywords = !settings.keywords ? [] : $.map(settings.keywords.split(','), function(a) {\n        return $.trim(a.toLowerCase());\n      });\n\n      // Set color string\n      if(input.val() !== '' && $.inArray(input.val().toLowerCase(), keywords) > -1) {\n        value = input.val();\n      } else {\n        // Get RGBA values for easy conversion\n        if(isRgb(input.val())) {\n          rgba = parseRgb(input.val(), true);\n        } else {\n          hex = parseHex(input.val(), true);\n          rgba = hex ? hex2rgb(hex) : null;\n        }\n\n        // Convert to format\n        if(rgba === null) {\n          value = settings.defaultValue;\n        } else if(settings.format === 'rgb') {\n          value = settings.opacity ?\n            parseRgb('rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + input.attr('data-opacity') + ')') :\n            parseRgb('rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')');\n        } else {\n          value = rgb2hex(rgba);\n        }\n      }\n\n      // Update swatch opacity\n      swatchOpacity = settings.opacity ? input.attr('data-opacity') : 1;\n      if(value.toLowerCase() === 'transparent') swatchOpacity = 0;\n      input\n        .closest('.minicolors')\n        .find('.minicolors-input-swatch > span')\n        .css('opacity', String(swatchOpacity));\n\n      // Set input value\n      input.val(value);\n\n      // Is it blank?\n      if(input.val() === '') input.val(parseInput(settings.defaultValue, true));\n\n      // Adjust case\n      input.val(convertCase(input.val(), settings.letterCase));\n\n    })\n    // Handle keypresses\n    .on('keydown.minicolors', '.minicolors-input', function(event) {\n      var input = $(this);\n      if(!input.data('minicolors-initialized')) return;\n      switch(event.which) {\n        case 9: // tab\n          hide();\n          break;\n        case 13: // enter\n        case 27: // esc\n          hide();\n          input.blur();\n          break;\n      }\n    })\n    // Update on keyup\n    .on('keyup.minicolors', '.minicolors-input', function() {\n      var input = $(this);\n      if(!input.data('minicolors-initialized')) return;\n      updateFromInput(input, true);\n    })\n    // Update on paste\n    .on('paste.minicolors', '.minicolors-input', function() {\n      var input = $(this);\n      if(!input.data('minicolors-initialized')) return;\n      setTimeout(function() {\n        updateFromInput(input, true);\n      }, 1);\n    });\n}));\n", " \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n", "'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n", "var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n", "'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? at(S, index).length : 1);\n};\n", "'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\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.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n", "// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n", "// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridLayout.vue?vue&type=style&index=0&lang=css&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"c1ec597e\", content, true, {\"sourceMap\":false,\"shadowMode\":false});", "var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n", "var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n", "/**\n * Resize detection strategy that injects objects to elements in order to detect resize events.\n * Heavily inspired by: http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/\n */\n\n\"use strict\";\n\nvar browserDetector = require(\"../browser-detector\");\n\nmodule.exports = function(options) {\n    options             = options || {};\n    var reporter        = options.reporter;\n    var batchProcessor  = options.batchProcessor;\n    var getState        = options.stateHandler.getState;\n\n    if(!reporter) {\n        throw new Error(\"Missing required dependency: reporter.\");\n    }\n\n    /**\n     * Adds a resize event listener to the element.\n     * @public\n     * @param {element} element The element that should have the listener added.\n     * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n     */\n    function addListener(element, listener) {\n        function listenerProxy() {\n            listener(element);\n        }\n\n        if(browserDetector.isIE(8)) {\n            //IE 8 does not support object, but supports the resize event directly on elements.\n            getState(element).object = {\n                proxy: listenerProxy\n            };\n            element.attachEvent(\"onresize\", listenerProxy);\n        } else {\n            var object = getObject(element);\n\n            if(!object) {\n                throw new Error(\"Element is not detectable by this strategy.\");\n            }\n\n            object.contentDocument.defaultView.addEventListener(\"resize\", listenerProxy);\n        }\n    }\n\n    function buildCssTextString(rules) {\n        var seperator = options.important ? \" !important; \" : \"; \";\n\n        return (rules.join(seperator) + seperator).trim();\n    }\n\n    /**\n     * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n     * @private\n     * @param {object} options Optional options object.\n     * @param {element} element The element to make detectable\n     * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n     */\n    function makeDetectable(options, element, callback) {\n        if (!callback) {\n            callback = element;\n            element = options;\n            options = null;\n        }\n\n        options = options || {};\n        var debug = options.debug;\n\n        function injectObject(element, callback) {\n            var OBJECT_STYLE = buildCssTextString([\"display: block\", \"position: absolute\", \"top: 0\", \"left: 0\", \"width: 100%\", \"height: 100%\", \"border: none\", \"padding: 0\", \"margin: 0\", \"opacity: 0\", \"z-index: -1000\", \"pointer-events: none\"]);\n\n            //The target element needs to be positioned (everything except static) so the absolute positioned object will be positioned relative to the target element.\n\n            // Position altering may be performed directly or on object load, depending on if style resolution is possible directly or not.\n            var positionCheckPerformed = false;\n\n            // The element may not yet be attached to the DOM, and therefore the style object may be empty in some browsers.\n            // Since the style object is a reference, it will be updated as soon as the element is attached to the DOM.\n            var style = window.getComputedStyle(element);\n            var width = element.offsetWidth;\n            var height = element.offsetHeight;\n\n            getState(element).startSize = {\n                width: width,\n                height: height\n            };\n\n            function mutateDom() {\n                function alterPositionStyles() {\n                    if(style.position === \"static\") {\n                        element.style.setProperty(\"position\", \"relative\", options.important ? \"important\" : \"\");\n\n                        var removeRelativeStyles = function(reporter, element, style, property) {\n                            function getNumericalValue(value) {\n                                return value.replace(/[^-\\d\\.]/g, \"\");\n                            }\n\n                            var value = style[property];\n\n                            if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n                                reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n                                element.style.setProperty(property, \"0\", options.important ? \"important\" : \"\");\n                            }\n                        };\n\n                        //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n                        //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n                        removeRelativeStyles(reporter, element, style, \"top\");\n                        removeRelativeStyles(reporter, element, style, \"right\");\n                        removeRelativeStyles(reporter, element, style, \"bottom\");\n                        removeRelativeStyles(reporter, element, style, \"left\");\n                    }\n                }\n\n                function onObjectLoad() {\n                    // The object has been loaded, which means that the element now is guaranteed to be attached to the DOM.\n                    if (!positionCheckPerformed) {\n                        alterPositionStyles();\n                    }\n\n                    /*jshint validthis: true */\n\n                    function getDocument(element, callback) {\n                        //Opera 12 seem to call the object.onload before the actual document has been created.\n                        //So if it is not present, poll it with an timeout until it is present.\n                        //TODO: Could maybe be handled better with object.onreadystatechange or similar.\n                        if(!element.contentDocument) {\n                            var state = getState(element);\n                            if (state.checkForObjectDocumentTimeoutId) {\n                                window.clearTimeout(state.checkForObjectDocumentTimeoutId);\n                            }\n                            state.checkForObjectDocumentTimeoutId = setTimeout(function checkForObjectDocument() {\n                                state.checkForObjectDocumentTimeoutId = 0;\n                                getDocument(element, callback);\n                            }, 100);\n\n                            return;\n                        }\n\n                        callback(element.contentDocument);\n                    }\n\n                    //Mutating the object element here seems to fire another load event.\n                    //Mutating the inner document of the object element is fine though.\n                    var objectElement = this;\n\n                    //Create the style element to be added to the object.\n                    getDocument(objectElement, function onObjectDocumentReady(objectDocument) {\n                        //Notify that the element is ready to be listened to.\n                        callback(element);\n                    });\n                }\n\n                // The element may be detached from the DOM, and some browsers does not support style resolving of detached elements.\n                // The alterPositionStyles needs to be delayed until we know the element has been attached to the DOM (which we are sure of when the onObjectLoad has been fired), if style resolution is not possible.\n                if (style.position !== \"\") {\n                    alterPositionStyles(style);\n                    positionCheckPerformed = true;\n                }\n\n                //Add an object element as a child to the target element that will be listened to for resize events.\n                var object = document.createElement(\"object\");\n                object.style.cssText = OBJECT_STYLE;\n                object.tabIndex = -1;\n                object.type = \"text/html\";\n                object.setAttribute(\"aria-hidden\", \"true\");\n                object.onload = onObjectLoad;\n\n                //Safari: This must occur before adding the object to the DOM.\n                //IE: Does not like that this happens before, even if it is also added after.\n                if(!browserDetector.isIE()) {\n                    object.data = \"about:blank\";\n                }\n\n                if (!getState(element)) {\n                    // The element has been uninstalled before the actual loading happened.\n                    return;\n                }\n\n                element.appendChild(object);\n                getState(element).object = object;\n\n                //IE: This must occur after adding the object to the DOM.\n                if(browserDetector.isIE()) {\n                    object.data = \"about:blank\";\n                }\n            }\n\n            if(batchProcessor) {\n                batchProcessor.add(mutateDom);\n            } else {\n                mutateDom();\n            }\n        }\n\n        if(browserDetector.isIE(8)) {\n            //IE 8 does not support objects properly. Luckily they do support the resize event.\n            //So do not inject the object and notify that the element is already ready to be listened to.\n            //The event handler for the resize event is attached in the utils.addListener instead.\n            callback(element);\n        } else {\n            injectObject(element, callback);\n        }\n    }\n\n    /**\n     * Returns the child object of the target element.\n     * @private\n     * @param {element} element The target element.\n     * @returns The object element of the target.\n     */\n    function getObject(element) {\n        return getState(element).object;\n    }\n\n    function uninstall(element) {\n        if (!getState(element)) {\n            return;\n        }\n\n        var object = getObject(element);\n\n        if (!object) {\n            return;\n        }\n\n        if (browserDetector.isIE(8)) {\n            element.detachEvent(\"onresize\", object.proxy);\n        } else {\n            element.removeChild(object);\n        }\n\n        if (getState(element).checkForObjectDocumentTimeoutId) {\n            window.clearTimeout(getState(element).checkForObjectDocumentTimeoutId);\n        }\n\n        delete getState(element).object;\n    }\n\n    return {\n        makeDetectable: makeDetectable,\n        addListener: addListener,\n        uninstall: uninstall\n    };\n};\n", "\"use strict\";\n\nvar detector = module.exports = {};\n\ndetector.isIE = function(version) {\n    function isAnyIeVersion() {\n        var agent = navigator.userAgent.toLowerCase();\n        return agent.indexOf(\"msie\") !== -1 || agent.indexOf(\"trident\") !== -1 || agent.indexOf(\" edge/\") !== -1;\n    }\n\n    if(!isAnyIeVersion()) {\n        return false;\n    }\n\n    if(!version) {\n        return true;\n    }\n\n    //Shamelessly stolen from https://gist.github.com/padolsey/527683\n    var ieVersion = (function(){\n        var undef,\n            v = 3,\n            div = document.createElement(\"div\"),\n            all = div.getElementsByTagName(\"i\");\n\n        do {\n            div.innerHTML = \"<!--[if gt IE \" + (++v) + \"]><i></i><![endif]-->\";\n        }\n        while (all[0]);\n\n        return v > 4 ? v : undef;\n    }());\n\n    return version === ieVersion;\n};\n\ndetector.isLegacyOpera = function() {\n    return !!window.opera;\n};\n", "let currentDir: \"ltr\" | \"rtl\" | \"auto\"  = \"auto\";\r\n// let currentDir = \"auto\";\r\n\r\nfunction hasDocument(){\r\n    return (typeof document !== \"undefined\");\r\n}\r\n\r\nfunction hasWindow(){\r\n    return (typeof window !== \"undefined\");\r\n}\r\n\r\nexport function getDocumentDir(){\r\n    if(!hasDocument()){\r\n        return currentDir;\r\n    }\r\n    const direction = (typeof document.dir !== \"undefined\") ?\r\n        document.dir :\r\n        document.getElementsByTagName(\"html\")[0].getAttribute(\"dir\");\r\n    return direction;\r\n}\r\n\r\nexport function setDocumentDir(dir: \"ltr\" | \"rtl\" | \"auto\"){\r\n// export function setDocumentDir(dir){\r\n    if(!hasDocument){\r\n        currentDir = dir;\r\n        return;\r\n    }\r\n\r\n    const html = document.getElementsByTagName(\"html\")[0];\r\n    html.setAttribute(\"dir\", dir);\r\n}\r\n\r\nexport function addWindowEventListener(event:string, callback: () => mixed){\r\n    if(!hasWindow){\r\n\r\n        callback();\r\n        return;\r\n    }\r\n    window.addEventListener(event, callback);\r\n}\r\n\r\nexport function removeWindowEventListener(event:string, callback: () => mixed){\r\n    if(!hasWindow){\r\n        return;\r\n    }\r\n    window.removeEventListener(event, callback);\r\n}\r\n\r\n\r\n\r\n", "'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n  // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\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\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(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    re.exec = function () { execCalled = true; return null; };\n    if (KEY === 'split') {\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    }\n    re[SYMBOL]('');\n    return !execCalled;\n  }) : undefined;\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var fns = exec(\n      defined,\n      SYMBOL,\n      ''[KEY],\n      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n        if (regexp.exec === regexpExec) {\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: nativeRegExpMethod.call(regexp, str, arg2) };\n          }\n          return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n        }\n        return { done: false };\n      }\n    );\n    var strfn = fns[0];\n    var rxfn = fns[1];\n\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n", "var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n", "/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n", "// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(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 (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n", "exports.f = Object.getOwnPropertySymbols;\n", "/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () {\n        injectStyles.call(\n          this,\n          (options.functional ? this.parent : this).$root.$options.shadowRoot\n        )\n      }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functional component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n", "var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n", "// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n", "import GridItem from './GridItem.vue';\r\nimport GridLayout from './GridLayout.vue';\r\n// import ResponsiveGridLayout from './ResponsiveGridLayout.vue';\r\n\r\nconst VueGridLayout = {\r\n    // ResponsiveGridLayout,\r\n    GridLayout,\r\n    GridItem\r\n}\r\n\r\nexport function install(Vue) {\r\n    if (install.installed) return;\r\n    install.installed = true;\r\n    Object.keys(VueGridLayout).forEach(name => {\r\n        Vue.component(name, VueGridLayout[name]);\r\n    });\r\n}\r\n\r\nconst plugin = {\r\n    install,\r\n};\r\n\r\nlet GlobalVue = null;\r\nif (typeof window !== 'undefined') {\r\n    GlobalVue = window.Vue;\r\n} else if (typeof global !== 'undefined') {\r\n    GlobalVue = global.Vue;\r\n}\r\nif (GlobalVue) {\r\n    GlobalVue.use(plugin);\r\n}\r\n\r\nexport default VueGridLayout;\r\nexport { GridLayout, GridItem };\r\n", "var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n", "\"use strict\";\n\nmodule.exports = function() {\n    var idCount = 1;\n\n    /**\n     * Generates a new unique id in the context.\n     * @public\n     * @returns {number} A unique id in the context.\n     */\n    function generate() {\n        return idCount++;\n    }\n\n    return {\n        generate: generate\n    };\n};\n", "module.exports = false;\n", "var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n", "'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call\n    arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n  });\n};\n", "var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n", "var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"item\",staticClass:\"vue-grid-layout\",style:(_vm.mergedStyle)},[_vm._t(\"default\"),_c('grid-item',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isDragging),expression:\"isDragging\"}],staticClass:\"vue-grid-placeholder\",attrs:{\"x\":_vm.placeholder.x,\"y\":_vm.placeholder.y,\"w\":_vm.placeholder.w,\"h\":_vm.placeholder.h,\"i\":_vm.placeholder.i}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }", "<template>\r\n    <div ref=\"item\" class=\"vue-grid-layout\" :style=\"mergedStyle\">\r\n        <slot></slot>\r\n        <grid-item class=\"vue-grid-placeholder\"\r\n                   v-show=\"isDragging\"\r\n                   :x=\"placeholder.x\"\r\n                   :y=\"placeholder.y\"\r\n                   :w=\"placeholder.w\"\r\n                   :h=\"placeholder.h\"\r\n                   :i=\"placeholder.i\"></grid-item>\r\n    </div>\r\n</template>\r\n<style>\r\n    .vue-grid-layout {\r\n        position: relative;\r\n        transition: height 200ms ease;\r\n    }\r\n</style>\r\n<script>\r\n    import Vue from 'vue';\r\n    const elementResizeDetectorMaker = require(\"element-resize-detector\");\r\n\r\n    import {bottom, compact, getLayoutItem, moveElement, validateLayout, cloneLayout, getAllCollisions} from '@/helpers/utils';\r\n    import {getBreakpointFromWidth, getColsFromBreakpoint, findOrGenerateResponsiveLayout} from \"@/helpers/responsiveUtils\";\r\n    //var eventBus = require('./eventBus');\r\n\r\n    import GridItem from './GridItem.vue'\r\n    import {addWindowEventListener, removeWindowEventListener} from \"@/helpers/DOM\";\r\n\r\n    export default {\r\n        name: \"GridLayout\",\r\n        provide() {\r\n            return {\r\n                eventBus: null,\r\n                layout: this\r\n            }\r\n        },\r\n        components: {\r\n            GridItem,\r\n        },\r\n        props: {\r\n            // If true, the container height swells and contracts to fit contents\r\n            autoSize: {\r\n                type: Boolean,\r\n                default: true\r\n            },\r\n            colNum: {\r\n                type: Number,\r\n                default: 12\r\n            },\r\n            rowHeight: {\r\n                type: Number,\r\n                default: 150\r\n            },\r\n            maxRows: {\r\n                type: Number,\r\n                default: Infinity\r\n            },\r\n            margin: {\r\n                type: Array,\r\n                default: function () {\r\n                    return [10, 10];\r\n                }\r\n            },\r\n            isDraggable: {\r\n                type: Boolean,\r\n                default: true\r\n            },\r\n            isResizable: {\r\n                type: Boolean,\r\n                default: true\r\n            },\r\n            isMirrored: {\r\n                type: Boolean,\r\n                default: false\r\n            },\r\n            isBounded: {\r\n                type: Boolean,\r\n                default: false\r\n            },\r\n            useCssTransforms: {\r\n                type: Boolean,\r\n                default: true\r\n            },\r\n            verticalCompact: {\r\n                type: Boolean,\r\n                default: true\r\n            },\r\n            restoreOnDrag: {\r\n                type: Boolean,\r\n                default: false\r\n            },\r\n            layout: {\r\n                type: Array,\r\n                required: true,\r\n            },\r\n            responsive: {\r\n                type: Boolean,\r\n                default: false\r\n            },\r\n            responsiveLayouts: {\r\n                type: Object,\r\n                default: function() {\r\n                    return {};\r\n                }\r\n            },\r\n            transformScale: {\r\n                type: Number,\r\n                default: 1\r\n            },\r\n            breakpoints:{\r\n                type: Object,\r\n                default: function(){return{ lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0 }}\r\n            },\r\n            cols:{\r\n                type: Object,\r\n                default: function(){return{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }},\r\n            },\r\n            preventCollision: {\r\n                type: Boolean,\r\n                default: false\r\n            },\r\n            useStyleCursor: {\r\n                type: Boolean,\r\n                default: true\r\n            }\r\n        },\r\n        data: function () {\r\n            return {\r\n                width: null,\r\n                mergedStyle: {},\r\n                lastLayoutLength: 0,\r\n                isDragging: false,\r\n                placeholder: {\r\n                    x: 0,\r\n                    y: 0,\r\n                    w: 0,\r\n                    h: 0,\r\n                    i: -1\r\n                },\r\n                layouts: {}, // array to store all layouts from different breakpoints\r\n                lastBreakpoint: null, // store last active breakpoint\r\n                originalLayout: null, // store original Layout\r\n            };\r\n        },\r\n        created () {\r\n            const self = this;\r\n\r\n            // Accessible refernces of functions for removing in beforeDestroy\r\n            self.resizeEventHandler = function(eventType, i, x, y, h, w) {\r\n                self.resizeEvent(eventType, i, x, y, h, w);\r\n            };\r\n\r\n            self.dragEventHandler = function(eventType, i, x, y, h, w) {\r\n                self.dragEvent(eventType, i, x, y, h, w);\r\n            };\r\n\r\n            self._provided.eventBus = new Vue();\r\n            self.eventBus = self._provided.eventBus;\r\n            self.eventBus.$on('resizeEvent', self.resizeEventHandler);\r\n            self.eventBus.$on('dragEvent', self.dragEventHandler);\r\n            self.$emit('layout-created', self.layout);\r\n        },\r\n        beforeDestroy: function(){\r\n            //Remove listeners\r\n            this.eventBus.$off('resizeEvent', this.resizeEventHandler);\r\n            this.eventBus.$off('dragEvent', this.dragEventHandler);\r\n\t\t\tthis.eventBus.$destroy();\r\n            removeWindowEventListener(\"resize\", this.onWindowResize);\r\n            if (this.erd) {\r\n                this.erd.uninstall(this.$refs.item);\r\n            }\r\n        },\r\n        beforeMount: function() {\r\n            this.$emit('layout-before-mount', this.layout);\r\n        },\r\n        mounted: function() {\r\n            this.$emit('layout-mounted', this.layout);\r\n            this.$nextTick(function () {\r\n                validateLayout(this.layout);\r\n\r\n                this.originalLayout = this.layout;\r\n                const self = this;\r\n                this.$nextTick(function() {\r\n                    self.initResponsiveFeatures();\r\n\r\n                    self.onWindowResize();\r\n\r\n\r\n                    //self.width = self.$el.offsetWidth;\r\n                    addWindowEventListener('resize', self.onWindowResize);\r\n\r\n                    compact(self.layout, self.verticalCompact);\r\n\r\n                    self.$emit('layout-updated',self.layout)\r\n\r\n                    self.updateHeight();\r\n                    self.$nextTick(function () {\r\n                        this.erd = elementResizeDetectorMaker({\r\n                            strategy: \"scroll\", //<- For ultra performance.\r\n                            // See https://github.com/wnr/element-resize-detector/issues/110 about callOnAdd.\r\n                            callOnAdd: false,\r\n                        });\r\n                        this.erd.listenTo(self.$refs.item, function () {\r\n                            self.onWindowResize();\r\n                        });\r\n                    });\r\n                });\r\n            });\r\n        },\r\n        watch: {\r\n            width: function (newval, oldval) {\r\n                const self = this;\r\n                this.$nextTick(function () {\r\n                    //this.$broadcast(\"updateWidth\", this.width);\r\n                    this.eventBus.$emit(\"updateWidth\", this.width);\r\n                    if (oldval === null) {\r\n                        /*\r\n                            If oldval == null is when the width has never been\r\n                            set before. That only occurs when mouting is\r\n                            finished, and onWindowResize has been called and\r\n                            this.width has been changed the first time after it\r\n                            got set to null in the constructor. It is now time\r\n                            to issue layout-ready events as the GridItems have\r\n                            their sizes configured properly.\r\n\r\n                            The reason for emitting the layout-ready events on\r\n                            the next tick is to allow for the newly-emitted\r\n                            updateWidth event (above) to have reached the\r\n                            children GridItem-s and had their effect, so we're\r\n                            sure that they have the final size before we emit\r\n                            layout-ready (for this GridLayout) and\r\n                            item-layout-ready (for the GridItem-s).\r\n\r\n                            This way any client event handlers can reliably\r\n                            invistigate stable sizes of GridItem-s.\r\n                        */\r\n                        this.$nextTick(() => {\r\n                            this.$emit('layout-ready', self.layout);\r\n                        });\r\n                    }\r\n                    this.updateHeight();\r\n                });\r\n            },\r\n            layout: function () {\r\n                this.layoutUpdate();\r\n            },\r\n            colNum: function (val) {\r\n                this.eventBus.$emit(\"setColNum\", val);\r\n            },\r\n            rowHeight: function() {\r\n                this.eventBus.$emit(\"setRowHeight\", this.rowHeight);\r\n            },\r\n            isDraggable: function() {\r\n                this.eventBus.$emit(\"setDraggable\", this.isDraggable);\r\n            },\r\n            isResizable: function() {\r\n                this.eventBus.$emit(\"setResizable\", this.isResizable);\r\n            },\r\n            isBounded: function() {\r\n                this.eventBus.$emit(\"setBounded\", this.isBounded);\r\n            },\r\n            transformScale: function() {\r\n                this.eventBus.$emit(\"setTransformScale\", this.transformScale);\r\n            },\r\n            responsive() {\r\n                if (!this.responsive) {\r\n                    this.$emit('update:layout', this.originalLayout);\r\n                    this.eventBus.$emit(\"setColNum\", this.colNum);\r\n                }\r\n                this.onWindowResize();\r\n            },\r\n            maxRows: function() {\r\n                this.eventBus.$emit(\"setMaxRows\", this.maxRows);\r\n            },\r\n            margin() {\r\n                this.updateHeight();\r\n            }\r\n        },\r\n        methods: {\r\n            layoutUpdate() {\r\n                if (this.layout !== undefined && this.originalLayout !== null) {\r\n                    if (this.layout.length !== this.originalLayout.length) {\r\n                        // console.log(\"### LAYOUT UPDATE!\", this.layout.length, this.originalLayout.length);\r\n\r\n                        let diff = this.findDifference(this.layout, this.originalLayout);\r\n                        if (diff.length > 0){\r\n                            // console.log(diff);\r\n                            if (this.layout.length > this.originalLayout.length) {\r\n                                this.originalLayout = this.originalLayout.concat(diff);\r\n                            } else {\r\n                                this.originalLayout = this.originalLayout.filter(obj => {\r\n                                    return !diff.some(obj2 => {\r\n                                        return obj.i === obj2.i;\r\n                                    });\r\n                                });\r\n                            }\r\n                        }\r\n\r\n                        this.lastLayoutLength = this.layout.length;\r\n                        this.initResponsiveFeatures();\r\n                    }\r\n\r\n                    compact(this.layout, this.verticalCompact);\r\n                    this.eventBus.$emit(\"updateWidth\", this.width);\r\n                    this.updateHeight();\r\n\r\n                    this.$emit('layout-updated',this.layout)\r\n                }\r\n            },\r\n            updateHeight: function () {\r\n                this.mergedStyle = {\r\n                    height: this.containerHeight()\r\n                };\r\n            },\r\n            onWindowResize: function () {\r\n                if (this.$refs !== null && this.$refs.item !== null && this.$refs.item !== undefined) {\r\n                    this.width = this.$refs.item.offsetWidth;\r\n                }\r\n                this.eventBus.$emit(\"resizeEvent\");\r\n            },\r\n            containerHeight: function () {\r\n                if (!this.autoSize) return;\r\n                // console.log(\"bottom: \" + bottom(this.layout))\r\n                // console.log(\"rowHeight + margins: \" + (this.rowHeight + this.margin[1]) + this.margin[1])\r\n                const containerHeight =  bottom(this.layout) * (this.rowHeight + this.margin[1]) + this.margin[1] + 'px';\r\n                return containerHeight;\r\n            },\r\n            dragEvent: function (eventName, id, x, y, h, w) {\r\n                //console.log(eventName + \" id=\" + id + \", x=\" + x + \", y=\" + y);\r\n                let l = getLayoutItem(this.layout, id);\r\n                //GetLayoutItem sometimes returns null object\r\n                if (l === undefined || l === null){\r\n                    l = {x:0, y:0}\r\n                }\r\n\r\n                if (eventName === \"dragstart\" && !this.verticalCompact) {\r\n                    this.positionsBeforeDrag = this.layout.reduce((result, {i, x, y}) => ({\r\n                        ...result,\r\n                        [i]: {x, y}\r\n                    }), {});\r\n                }\r\n\r\n                if (eventName === \"dragmove\" || eventName === \"dragstart\") {\r\n                    this.placeholder.i = id;\r\n                    this.placeholder.x = l.x;\r\n                    this.placeholder.y = l.y;\r\n                    this.placeholder.w = w;\r\n                    this.placeholder.h = h;\r\n                    this.$nextTick(function() {\r\n                        this.isDragging = true;\r\n                    });\r\n                    //this.$broadcast(\"updateWidth\", this.width);\r\n                    this.eventBus.$emit(\"updateWidth\", this.width);\r\n                } else {\r\n                    this.$nextTick(function() {\r\n                        this.isDragging = false;\r\n                    });\r\n                }\r\n\r\n                // Move the element to the dragged location.\r\n                this.layout = moveElement(this.layout, l, x, y, true, this.preventCollision);\r\n\r\n                if (this.restoreOnDrag) {\r\n                    // Do not compact items more than in layout before drag\r\n                    // Set moved item as static to avoid to compact it\r\n                    l.static = true;\r\n                    compact(this.layout, this.verticalCompact, this.positionsBeforeDrag);\r\n                    l.static = false;\r\n                } else {\r\n                    compact(this.layout, this.verticalCompact);\r\n                }\r\n\r\n                // needed because vue can't detect changes on array element properties\r\n                this.eventBus.$emit(\"compact\");\r\n                this.updateHeight();\r\n                if (eventName === 'dragend') {\r\n                    delete this.positionsBeforeDrag;\r\n                    this.$emit('layout-updated', this.layout);\r\n                }\r\n            },\r\n            resizeEvent: function (eventName, id, x, y, h, w) {\r\n                let l = getLayoutItem(this.layout, id);\r\n                //GetLayoutItem sometimes return null object\r\n                if (l === undefined || l === null){\r\n                    l = {h:0, w:0}\r\n                }\r\n\r\n                let hasCollisions;\r\n                if (this.preventCollision) {\r\n                    const collisions = getAllCollisions(this.layout, { ...l, w, h }).filter(\r\n                        layoutItem => layoutItem.i !== l.i\r\n                    );\r\n                    hasCollisions = collisions.length > 0;\r\n\r\n                    // If we're colliding, we need adjust the placeholder.\r\n                    if (hasCollisions) {\r\n                        // adjust w && h to maximum allowed space\r\n                        let leastX = Infinity,\r\n                        leastY = Infinity;\r\n                        collisions.forEach(layoutItem => {\r\n                        if (layoutItem.x > l.x) leastX = Math.min(leastX, layoutItem.x);\r\n                        if (layoutItem.y > l.y) leastY = Math.min(leastY, layoutItem.y);\r\n                        });\r\n\r\n                        if (Number.isFinite(leastX)) l.w = leastX - l.x;\r\n                        if (Number.isFinite(leastY)) l.h = leastY - l.y;\r\n                    }\r\n                }\r\n\r\n                if (!hasCollisions) {\r\n                    // Set new width and height.\r\n                    l.w = w;\r\n                    l.h = h;\r\n                }\r\n\r\n                if (eventName === \"resizestart\" || eventName === \"resizemove\") {\r\n                    this.placeholder.i = id;\r\n                    this.placeholder.x = x;\r\n                    this.placeholder.y = y;\r\n                    this.placeholder.w = l.w;\r\n                    this.placeholder.h = l.h;\r\n                    this.$nextTick(function() {\r\n                        this.isDragging = true;\r\n                    });\r\n                    //this.$broadcast(\"updateWidth\", this.width);\r\n                    this.eventBus.$emit(\"updateWidth\", this.width);\r\n\r\n                } else {\r\n                    this.$nextTick(function() {\r\n                        this.isDragging = false;\r\n                    });\r\n                }\r\n\r\n                if (this.responsive) this.responsiveGridLayout();\r\n\r\n                compact(this.layout, this.verticalCompact);\r\n                this.eventBus.$emit(\"compact\");\r\n                this.updateHeight();\r\n\r\n                if (eventName === 'resizeend') this.$emit('layout-updated', this.layout);\r\n            },\r\n\r\n            // finds or generates new layouts for set breakpoints\r\n            responsiveGridLayout(){\r\n                let newBreakpoint = getBreakpointFromWidth(this.breakpoints, this.width);\r\n                let newCols = getColsFromBreakpoint(newBreakpoint, this.cols);\r\n\r\n                // save actual layout in layouts\r\n                if(this.lastBreakpoint != null && !this.layouts[this.lastBreakpoint])\r\n                    this.layouts[this.lastBreakpoint] = cloneLayout(this.layout);\r\n\r\n                // Find or generate a new layout.\r\n                let layout = findOrGenerateResponsiveLayout(\r\n                    this.originalLayout,\r\n                    this.layouts,\r\n                    this.breakpoints,\r\n                    newBreakpoint,\r\n                    this.lastBreakpoint,\r\n                    newCols,\r\n                    this.verticalCompact\r\n                );\r\n\r\n                // Store the new layout.\r\n                this.layouts[newBreakpoint] = layout;\r\n\r\n                if (this.lastBreakpoint !== newBreakpoint) {\r\n                    this.$emit('breakpoint-changed', newBreakpoint, layout);\r\n                }\r\n\r\n                // new prop sync\r\n                this.$emit('update:layout', layout);\r\n\r\n                this.lastBreakpoint = newBreakpoint;\r\n                this.eventBus.$emit(\"setColNum\", getColsFromBreakpoint(newBreakpoint, this.cols));\r\n            },\r\n\r\n            // clear all responsive layouts\r\n            initResponsiveFeatures(){\r\n                // clear layouts\r\n                this.layouts = Object.assign({}, this.responsiveLayouts);\r\n            },\r\n\r\n            // find difference in layouts\r\n            findDifference(layout, originalLayout){\r\n\r\n                //Find values that are in result1 but not in result2\r\n                let uniqueResultOne = layout.filter(function(obj) {\r\n                    return !originalLayout.some(function(obj2) {\r\n                        return obj.i === obj2.i;\r\n                    });\r\n                });\r\n\r\n                //Find values that are in result2 but not in result1\r\n                let uniqueResultTwo = originalLayout.filter(function(obj) {\r\n                    return !layout.some(function(obj2) {\r\n                        return obj.i === obj2.i;\r\n                    });\r\n                });\r\n\r\n                //Combine the two arrays of unique entries#\r\n                return uniqueResultOne.concat(uniqueResultTwo);\r\n            }\r\n        },\r\n    }\r\n</script>\r\n", "import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridLayout.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridLayout.vue?vue&type=script&lang=js&\"", "import { render, staticRenderFns } from \"./GridLayout.vue?vue&type=template&id=361da5e4&\"\nimport script from \"./GridLayout.vue?vue&type=script&lang=js&\"\nexport * from \"./GridLayout.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GridLayout.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports", "// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n", "'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n", "// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n", "// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\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", "'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = defined(this);\n      var fn = regexp == undefined ? undefined : regexp[MATCH];\n      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n    function (regexp) {\n      var res = maybeCallNative($match, regexp, this);\n      if (res.done) return res.value;\n      var rx = anObject(regexp);\n      var S = String(this);\n      if (!rx.global) return regExpExec(rx, S);\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 = String(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", "/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n", "/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nexport default function addStylesClient (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n", "\"use strict\";\n\nmodule.exports = function(idHandler) {\n    var eventListeners = {};\n\n    /**\n     * Gets all listeners for the given element.\n     * @public\n     * @param {element} element The element to get all listeners for.\n     * @returns All listeners for the given element.\n     */\n    function getListeners(element) {\n        var id = idHandler.get(element);\n\n        if (id === undefined) {\n            return [];\n        }\n\n        return eventListeners[id] || [];\n    }\n\n    /**\n     * Stores the given listener for the given element. Will not actually add the listener to the element.\n     * @public\n     * @param {element} element The element that should have the listener added.\n     * @param {function} listener The callback that the element has added.\n     */\n    function addListener(element, listener) {\n        var id = idHandler.get(element);\n\n        if(!eventListeners[id]) {\n            eventListeners[id] = [];\n        }\n\n        eventListeners[id].push(listener);\n    }\n\n    function removeListener(element, listener) {\n        var listeners = getListeners(element);\n        for (var i = 0, len = listeners.length; i < len; ++i) {\n            if (listeners[i] === listener) {\n              listeners.splice(i, 1);\n              break;\n            }\n        }\n    }\n\n    function removeAllListeners(element) {\n      var listeners = getListeners(element);\n      if (!listeners) { return; }\n      listeners.length = 0;\n    }\n\n    return {\n        get: getListeners,\n        add: addListener,\n        removeListener: removeListener,\n        removeAllListeners: removeAllListeners\n    };\n};\n", "// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n", "\"use strict\";\n\nmodule.exports = function(options) {\n    var idGenerator     = options.idGenerator;\n    var getState        = options.stateHandler.getState;\n\n    /**\n     * Gets the resize detector id of the element.\n     * @public\n     * @param {element} element The target element to get the id of.\n     * @returns {string|number|null} The id of the element. Null if it has no id.\n     */\n    function getId(element) {\n        var state = getState(element);\n\n        if (state && state.id !== undefined) {\n            return state.id;\n        }\n\n        return null;\n    }\n\n    /**\n     * Sets the resize detector id of the element. Requires the element to have a resize detector state initialized.\n     * @public\n     * @param {element} element The target element to set the id of.\n     * @returns {string|number|null} The id of the element.\n     */\n    function setId(element) {\n        var state = getState(element);\n\n        if (!state) {\n            throw new Error(\"setId required the element to have a resize detection state.\");\n        }\n\n        var id = idGenerator.generate();\n\n        state.id = id;\n\n        return id;\n    }\n\n    return {\n        get: getId,\n        set: setId\n    };\n};\n", "\"use strict\";\n\nvar utils = module.exports = {};\n\nutils.getOption = getOption;\n\nfunction getOption(options, name, defaultValue) {\n    var value = options[name];\n\n    if((value === undefined || value === null) && defaultValue !== undefined) {\n        return defaultValue;\n    }\n\n    return value;\n}\n", "'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/,\n      re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\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;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n    match = nativeExec.call(re, str);\n\n    if (UPDATES_LAST_INDEX_WRONG && match) {\n      re[LAST_INDEX] = 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      // eslint-disable-next-line no-loop-func\n      nativeReplace.call(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    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n", "exports.f = {}.propertyIsEnumerable;\n", "var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n", "'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n  // IE8-\n  test.sort(undefined);\n}) || !fails(function () {\n  // V8 bug\n  test.sort(null);\n  // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n  // 22.1.3.25 Array.prototype.sort(comparefn)\n  sort: function sort(comparefn) {\n    return comparefn === undefined\n      ? $sort.call(toObject(this))\n      : $sort.call(toObject(this), aFunction(comparefn));\n  }\n});\n", "\"use strict\";\n\nmodule.exports = function(options) {\n    var getState = options.stateHandler.getState;\n\n    /**\n     * Tells if the element has been made detectable and ready to be listened for resize events.\n     * @public\n     * @param {element} The element to check.\n     * @returns {boolean} True or false depending on if the element is detectable or not.\n     */\n    function isDetectable(element) {\n        var state = getState(element);\n        return state && !!state.isDetectable;\n    }\n\n    /**\n     * Marks the element that it has been made detectable and ready to be listened for resize events.\n     * @public\n     * @param {element} The element to mark.\n     */\n    function markAsDetectable(element) {\n        getState(element).isDetectable = true;\n    }\n\n    /**\n     * Tells if the element is busy or not.\n     * @public\n     * @param {element} The element to check.\n     * @returns {boolean} True or false depending on if the element is busy or not.\n     */\n    function isBusy(element) {\n        return !!getState(element).busy;\n    }\n\n    /**\n     * Marks the object is busy and should not be made detectable.\n     * @public\n     * @param {element} element The element to mark.\n     * @param {boolean} busy If the element is busy or not.\n     */\n    function markBusy(element, busy) {\n        getState(element).busy = !!busy;\n    }\n\n    return {\n        isDetectable: isDetectable,\n        markAsDetectable: markAsDetectable,\n        isBusy: isBusy,\n        markBusy: markBusy\n    };\n};\n", "var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n", "var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n", "export * from \"-!../../node_modules/vue-style-loader/index.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridItem.vue?vue&type=style&index=0&lang=css&\"", "// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n", "'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw new TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n  if (classof(R) !== 'RegExp') {\n    throw new TypeError('RegExp#exec called on incompatible receiver');\n  }\n  return builtinExec.call(R, S);\n};\n", "var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n", "// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n", "// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n", "var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n", "// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n", "// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridItem.vue?vue&type=style&index=0&lang=css&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"3cbd0c21\", content, true, {\"sourceMap\":false,\"shadowMode\":false});", "'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : $assign;\n", "// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n", "var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n", "module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n", "var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n", "var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n", "var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n", "module.exports = {};\n", "var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* 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", "// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n", "module.exports = require(\"vue\");", "// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIObject(object);\n    var getDesc = gOPD.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var i = 0;\n    var key, desc;\n    while (keys.length > i) {\n      desc = getDesc(O, key = keys[i++]);\n      if (desc !== undefined) createProperty(result, key, desc);\n    }\n    return result;\n  }\n});\n", "// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n", "// @flow\r\n\r\nimport {cloneLayout, compact, correctBounds} from './utils';\r\n\r\nimport type {Layout} from './utils';\r\nexport type ResponsiveLayout = {lg?: Layout, md?: Layout, sm?: Layout, xs?: Layout, xxs?: Layout};\r\ntype Breakpoint = string;\r\ntype Breakpoints = {lg?: number, md?: number, sm?: number, xs?: number, xxs?: number};\r\n\r\n/**\r\n * Given a width, find the highest breakpoint that matches is valid for it (width > breakpoint).\r\n *\r\n * @param  {Object} breakpoints Breakpoints object (e.g. {lg: 1200, md: 960, ...})\r\n * @param  {Number} width Screen width.\r\n * @return {String}       Highest breakpoint that is less than width.\r\n */\r\nexport function getBreakpointFromWidth(breakpoints: Breakpoints, width: number): Breakpoint {\r\n  const sorted = sortBreakpoints(breakpoints);\r\n  let matching = sorted[0];\r\n  for (let i = 1, len = sorted.length; i < len; i++) {\r\n    const breakpointName = sorted[i];\r\n    if (width > breakpoints[breakpointName]) matching = breakpointName;\r\n  }\r\n  return matching;\r\n}\r\n\r\n\r\n/**\r\n * Given a breakpoint, get the # of cols set for it.\r\n * @param  {String} breakpoint Breakpoint name.\r\n * @param  {Object} cols       Map of breakpoints to cols.\r\n * @return {Number}            Number of cols.\r\n */\r\nexport function getColsFromBreakpoint(breakpoint: Breakpoint, cols: Breakpoints): number {\r\n  if (!cols[breakpoint]) {\r\n    throw new Error(\"ResponsiveGridLayout: `cols` entry for breakpoint \" + breakpoint + \" is missing!\");\r\n  }\r\n  return cols[breakpoint];\r\n}\r\n\r\n/**\r\n * Given existing layouts and a new breakpoint, find or generate a new layout.\r\n *\r\n * This finds the layout above the new one and generates from it, if it exists.\r\n *\r\n * @param  {Array} orgLayout     Original layout.\r\n * @param  {Object} layouts     Existing layouts.\r\n * @param  {Array} breakpoints All breakpoints.\r\n * @param  {String} breakpoint New breakpoint.\r\n * @param  {String} breakpoint Last breakpoint (for fallback).\r\n * @param  {Number} cols       Column count at new breakpoint.\r\n * @param  {Boolean} verticalCompact Whether or not to compact the layout\r\n *   vertically.\r\n * @return {Array}             New layout.\r\n */\r\nexport function findOrGenerateResponsiveLayout(orgLayout: Layout, layouts: ResponsiveLayout, breakpoints: Breakpoints,\r\n                                               breakpoint: Breakpoint, lastBreakpoint: Breakpoint,\r\n                                               cols: number, verticalCompact: boolean): Layout {\r\n  // If it already exists, just return it.\r\n  if (layouts[breakpoint]) return cloneLayout(layouts[breakpoint]);\r\n  // Find or generate the next layout\r\n  let layout = orgLayout;\r\n\r\n  const breakpointsSorted = sortBreakpoints(breakpoints);\r\n  const breakpointsAbove = breakpointsSorted.slice(breakpointsSorted.indexOf(breakpoint));\r\n  for (let i = 0, len = breakpointsAbove.length; i < len; i++) {\r\n    const b = breakpointsAbove[i];\r\n    if (layouts[b]) {\r\n      layout = layouts[b];\r\n      break;\r\n    }\r\n  }\r\n  layout = cloneLayout(layout || []); // clone layout so we don't modify existing items\r\n  return compact(correctBounds(layout, {cols: cols}), verticalCompact);\r\n}\r\n\r\nexport function generateResponsiveLayout(layout: Layout, breakpoints: Breakpoints,\r\n                                               breakpoint: Breakpoint, lastBreakpoint: Breakpoint,\r\n                                               cols: number, verticalCompact: boolean): Layout {\r\n  // If it already exists, just return it.\r\n  /*if (layouts[breakpoint]) return cloneLayout(layouts[breakpoint]);\r\n  // Find or generate the next layout\r\n  let layout = layouts[lastBreakpoint];*/\r\n    /*const breakpointsSorted = sortBreakpoints(breakpoints);\r\n  const breakpointsAbove = breakpointsSorted.slice(breakpointsSorted.indexOf(breakpoint));\r\n  for (let i = 0, len = breakpointsAbove.length; i < len; i++) {\r\n    const b = breakpointsAbove[i];\r\n    if (layouts[b]) {\r\n      layout = layouts[b];\r\n      break;\r\n    }\r\n  }*/\r\n  layout = cloneLayout(layout || []); // clone layout so we don't modify existing items\r\n  return compact(correctBounds(layout, {cols: cols}), verticalCompact);\r\n}\r\n\r\n/**\r\n * Given breakpoints, return an array of breakpoints sorted by width. This is usually\r\n * e.g. ['xxs', 'xs', 'sm', ...]\r\n *\r\n * @param  {Object} breakpoints Key/value pair of breakpoint names to widths.\r\n * @return {Array}              Sorted breakpoints.\r\n */\r\nexport function sortBreakpoints(breakpoints: Breakpoints): Array<Breakpoint> {\r\n  const keys: Array<string> = Object.keys(breakpoints);\r\n  return keys.sort(function(a, b) {\r\n    return breakpoints[a] - breakpoints[b];\r\n  });\r\n}\r\n", "// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = gOPN.f(anObject(it));\n  var getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n", "// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n", "// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n", "exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".vue-grid-item{-webkit-transition:all .2s ease;transition:all .2s ease;-webkit-transition-property:left,top,right;transition-property:left,top,right}.vue-grid-item.no-touch{-ms-touch-action:none;touch-action:none}.vue-grid-item.cssTransforms{-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;left:0;right:auto}.vue-grid-item.cssTransforms.render-rtl{left:auto;right:0}.vue-grid-item.resizing{opacity:.6;z-index:3}.vue-grid-item.vue-draggable-dragging{-webkit-transition:none;transition:none;z-index:3}.vue-grid-item.vue-grid-placeholder{background:red;opacity:.2;-webkit-transition-duration:.1s;transition-duration:.1s;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.vue-grid-item>.vue-resizable-handle{position:absolute;width:20px;height:20px;bottom:0;right:0;background:url(\\\"data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjYiIGhlaWdodD0iNiI+PHBhdGggZD0iTTYgNkgwVjQuMmg0LjJWMEg2djZ6IiBvcGFjaXR5PSIuMzAyIi8+PC9zdmc+\\\");background-position:100% 100%;padding:0 3px 3px 0;background-repeat:no-repeat;background-origin:content-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:se-resize}.vue-grid-item>.vue-rtl-resizable-handle{bottom:0;left:0;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTS0xLTFoMTJ2MTJILTF6Ii8+PGc+PHBhdGggc3Ryb2tlLWxpbmVjYXA9InVuZGVmaW5lZCIgc3Ryb2tlLWxpbmVqb2luPSJ1bmRlZmluZWQiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGQ9Ik0xNDQuODIxLTM4LjM5M2wtMjAuMzU3LTMxLjc4NSIvPjxwYXRoIHN0cm9rZT0iIzY2NiIgc3Ryb2tlLWxpbmVjYXA9InVuZGVmaW5lZCIgc3Ryb2tlLWxpbmVqb2luPSJ1bmRlZmluZWQiIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0ibm9uZSIgZD0iTS45NDctLjAxOHY5LjEyNU0tLjY1NiA5aDEwLjczIi8+PC9nPjwvc3ZnPg==);background-position:0 100%;padding-left:3px;background-repeat:no-repeat;background-origin:content-box;cursor:sw-resize;right:auto}.vue-grid-item.disable-userselect{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}\", \"\"]);\n\n// exports\n", "// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n", "// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n", "// @flow\r\nexport type LayoutItemRequired = {w: number, h: number, x: number, y: number, i: string};\r\nexport type LayoutItem = LayoutItemRequired &\r\n                         {minW?: number, minH?: number, maxW?: number, maxH?: number,\r\n                          moved?: boolean, static?: boolean,\r\n                          isDraggable?: ?boolean, isResizable?: ?boolean};\r\nexport type Layout = Array<LayoutItem>;\r\n// export type Position = {left: number, top: number, width: number, height: number};\r\n/*\r\nexport type DragCallbackData = {\r\n  node: HTMLElement,\r\n  x: number, y: number,\r\n  deltaX: number, deltaY: number,\r\n  lastX: number, lastY: number\r\n};\r\n*/\r\n// export type DragEvent = {e: Event} & DragCallbackData;\r\nexport type Size = {width: number, height: number};\r\n// export type ResizeEvent = {e: Event, node: HTMLElement, size: Size};\r\n\r\n// const isProduction = process.env.NODE_ENV === 'production';\r\n/**\r\n * Return the bottom coordinate of the layout.\r\n *\r\n * @param  {Array} layout Layout array.\r\n * @return {Number}       Bottom coordinate.\r\n */\r\nexport function bottom(layout: Layout): number {\r\n  let max = 0, bottomY;\r\n  for (let i = 0, len = layout.length; i < len; i++) {\r\n    bottomY = layout[i]. y + layout[i].h;\r\n    if (bottomY > max) max = bottomY;\r\n  }\r\n  return max;\r\n}\r\n\r\nexport function cloneLayout(layout: Layout): Layout {\r\n  const newLayout = Array(layout.length);\r\n  for (let i = 0, len = layout.length; i < len; i++) {\r\n    newLayout[i] = cloneLayoutItem(layout[i]);\r\n  }\r\n  return newLayout;\r\n}\r\n\r\n// Fast path to cloning, since this is monomorphic\r\nexport function cloneLayoutItem(layoutItem: LayoutItem): LayoutItem {\r\n  /*return {\r\n    w: layoutItem.w, h: layoutItem.h, x: layoutItem.x, y: layoutItem.y, i: layoutItem.i,\r\n    minW: layoutItem.minW, maxW: layoutItem.maxW, minH: layoutItem.minH, maxH: layoutItem.maxH,\r\n    moved: Boolean(layoutItem.moved), static: Boolean(layoutItem.static),\r\n    // These can be null\r\n    isDraggable: layoutItem.isDraggable, isResizable: layoutItem.isResizable\r\n  };*/\r\n    return JSON.parse(JSON.stringify(layoutItem));\r\n}\r\n\r\n/**\r\n * Given two layoutitems, check if they collide.\r\n *\r\n * @return {Boolean}   True if colliding.\r\n */\r\nexport function collides(l1: LayoutItem, l2: LayoutItem): boolean {\r\n  if (l1 === l2) return false; // same element\r\n  if (l1.x + l1.w <= l2.x) return false; // l1 is left of l2\r\n  if (l1.x >= l2.x + l2.w) return false; // l1 is right of l2\r\n  if (l1.y + l1.h <= l2.y) return false; // l1 is above l2\r\n  if (l1.y >= l2.y + l2.h) return false; // l1 is below l2\r\n  return true; // boxes overlap\r\n}\r\n\r\n/**\r\n * Given a layout, compact it. This involves going down each y coordinate and removing gaps\r\n * between items.\r\n *\r\n * @param  {Array} layout Layout.\r\n * @param  {Boolean} verticalCompact Whether or not to compact the layout\r\n *   vertically.\r\n * @param {Object} minPositions\r\n * @return {Array}       Compacted Layout.\r\n */\r\nexport function compact(layout: Layout, verticalCompact: Boolean, minPositions): Layout {\r\n    // Statics go in the compareWith array right away so items flow around them.\r\n  const compareWith = getStatics(layout);\r\n  // We go through the items by row and column.\r\n  const sorted = sortLayoutItemsByRowCol(layout);\r\n  // Holding for new items.\r\n  const out = Array(layout.length);\r\n\r\n  for (let i = 0, len = sorted.length; i < len; i++) {\r\n    let l = sorted[i];\r\n\r\n    // Don't move static elements\r\n    if (!l.static) {\r\n      l = compactItem(compareWith, l, verticalCompact, minPositions);\r\n\r\n      // Add to comparison array. We only collide with items before this one.\r\n      // Statics are already in this array.\r\n      compareWith.push(l);\r\n    }\r\n\r\n    // Add to output array to make sure they still come out in the right order.\r\n    out[layout.indexOf(l)] = l;\r\n\r\n    // Clear moved flag, if it exists.\r\n    l.moved = false;\r\n  }\r\n\r\n  return out;\r\n}\r\n\r\n/**\r\n * Compact an item in the layout.\r\n */\r\nexport function compactItem(compareWith: Layout, l: LayoutItem, verticalCompact: boolean, minPositions): LayoutItem {\r\n  if (verticalCompact) {\r\n    // Move the element up as far as it can go without colliding.\r\n    while (l.y > 0 && !getFirstCollision(compareWith, l)) {\r\n      l.y--;\r\n    }\r\n  } else if (minPositions) {\r\n    const minY = minPositions[l.i].y;\r\n    while (l.y > minY && !getFirstCollision(compareWith, l)) {\r\n      l.y--;\r\n    }\r\n  }\r\n\r\n  // Move it down, and keep moving it down if it's colliding.\r\n  let collides;\r\n  while((collides = getFirstCollision(compareWith, l))) {\r\n    l.y = collides.y + collides.h;\r\n  }\r\n  return l;\r\n}\r\n\r\n/**\r\n * Given a layout, make sure all elements fit within its bounds.\r\n *\r\n * @param  {Array} layout Layout array.\r\n * @param  {Number} bounds Number of columns.\r\n */\r\nexport function correctBounds(layout: Layout, bounds: {cols: number}): Layout {\r\n  const collidesWith = getStatics(layout);\r\n  for (let i = 0, len = layout.length; i < len; i++) {\r\n    const l = layout[i];\r\n    // Overflows right\r\n    if (l.x + l.w > bounds.cols) l.x = bounds.cols - l.w;\r\n    // Overflows left\r\n    if (l.x < 0) {\r\n      l.x = 0;\r\n      l.w = bounds.cols;\r\n    }\r\n    if (!l.static) collidesWith.push(l);\r\n    else {\r\n      // If this is static and collides with other statics, we must move it down.\r\n      // We have to do something nicer than just letting them overlap.\r\n      while(getFirstCollision(collidesWith, l)) {\r\n        l.y++;\r\n      }\r\n    }\r\n  }\r\n  return layout;\r\n}\r\n\r\n/**\r\n * Get a layout item by ID. Used so we can override later on if necessary.\r\n *\r\n * @param  {Array}  layout Layout array.\r\n * @param  {String} id     ID\r\n * @return {LayoutItem}    Item at ID.\r\n */\r\nexport function getLayoutItem(layout: Layout, id: string): ?LayoutItem {\r\n  for (let i = 0, len = layout.length; i < len; i++) {\r\n    if (layout[i].i === id) return layout[i];\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the first item this layout collides with.\r\n * It doesn't appear to matter which order we approach this from, although\r\n * perhaps that is the wrong thing to do.\r\n *\r\n * @param  {Object} layoutItem Layout item.\r\n * @return {Object|undefined}  A colliding layout item, or undefined.\r\n */\r\nexport function getFirstCollision(layout: Layout, layoutItem: LayoutItem): ?LayoutItem {\r\n  for (let i = 0, len = layout.length; i < len; i++) {\r\n    if (collides(layout[i], layoutItem)) return layout[i];\r\n  }\r\n}\r\n\r\nexport function getAllCollisions(layout: Layout, layoutItem: LayoutItem): Array<LayoutItem> {\r\n  return layout.filter((l) => collides(l, layoutItem));\r\n}\r\n\r\n/**\r\n * Get all static elements.\r\n * @param  {Array} layout Array of layout objects.\r\n * @return {Array}        Array of static layout items..\r\n */\r\nexport function getStatics(layout: Layout): Array<LayoutItem> {\r\n    //return [];\r\n    return layout.filter((l) => l.static);\r\n}\r\n\r\n/**\r\n * Move an element. Responsible for doing cascading movements of other elements.\r\n *\r\n * @param  {Array}      layout Full layout to modify.\r\n * @param  {LayoutItem} l      element to move.\r\n * @param  {Number}     [x]    X position in grid units.\r\n * @param  {Number}     [y]    Y position in grid units.\r\n * @param  {Boolean}    [isUserAction] If true, designates that the item we're moving is\r\n *                                     being dragged/resized by th euser.\r\n */\r\nexport function moveElement(layout: Layout, l: LayoutItem, x: Number, y: Number, isUserAction: Boolean, preventCollision: Boolean): Layout {\r\n  if (l.static) return layout;\r\n\r\n  // Short-circuit if nothing to do.\r\n  //if (l.y === y && l.x === x) return layout;\r\n\r\n  const oldX = l.x;\r\n  const oldY = l.y;\r\n\r\n  const movingUp = y && l.y > y;\r\n  // This is quite a bit faster than extending the object\r\n  if (typeof x === 'number') l.x = x;\r\n  if (typeof y === 'number') l.y = y;\r\n  l.moved = true;\r\n\r\n  // If this collides with anything, move it.\r\n  // When doing this comparison, we have to sort the items we compare with\r\n  // to ensure, in the case of multiple collisions, that we're getting the\r\n  // nearest collision.\r\n  let sorted = sortLayoutItemsByRowCol(layout);\r\n  if (movingUp) sorted = sorted.reverse();\r\n  const collisions = getAllCollisions(sorted, l);\r\n\r\n  if (preventCollision && collisions.length) {\r\n    l.x = oldX;\r\n    l.y = oldY;\r\n    l.moved = false;\r\n    return layout;\r\n  }\r\n\r\n  // Move each item that collides away from this element.\r\n  for (let i = 0, len = collisions.length; i < len; i++) {\r\n    const collision = collisions[i];\r\n    // console.log('resolving collision between', l.i, 'at', l.y, 'and', collision.i, 'at', collision.y);\r\n\r\n    // Short circuit so we can't infinite loop\r\n    if (collision.moved) continue;\r\n\r\n    // This makes it feel a bit more precise by waiting to swap for just a bit when moving up.\r\n    if (l.y > collision.y && l.y - collision.y > collision.h / 4) continue;\r\n\r\n    // Don't move static items - we have to move *this* element away\r\n    if (collision.static) {\r\n      layout = moveElementAwayFromCollision(layout, collision, l, isUserAction);\r\n    } else {\r\n      layout = moveElementAwayFromCollision(layout, l, collision, isUserAction);\r\n    }\r\n  }\r\n\r\n  return layout;\r\n}\r\n\r\n/**\r\n * This is where the magic needs to happen - given a collision, move an element away from the collision.\r\n * We attempt to move it up if there's room, otherwise it goes below.\r\n *\r\n * @param  {Array} layout            Full layout to modify.\r\n * @param  {LayoutItem} collidesWith Layout item we're colliding with.\r\n * @param  {LayoutItem} itemToMove   Layout item we're moving.\r\n * @param  {Boolean} [isUserAction]  If true, designates that the item we're moving is being dragged/resized\r\n *                                   by the user.\r\n */\r\nexport function moveElementAwayFromCollision(layout: Layout, collidesWith: LayoutItem,\r\n                                             itemToMove: LayoutItem, isUserAction: ?boolean): Layout {\r\n\r\n  const preventCollision = false // we're already colliding\r\n  // If there is enough space above the collision to put this element, move it there.\r\n  // We only do this on the main collision as this can get funky in cascades and cause\r\n  // unwanted swapping behavior.\r\n  if (isUserAction) {\r\n    // Make a mock item so we don't modify the item here, only modify in moveElement.\r\n    const fakeItem: LayoutItem = {\r\n      x: itemToMove.x,\r\n      y: itemToMove.y,\r\n      w: itemToMove.w,\r\n      h: itemToMove.h,\r\n      i: '-1'\r\n    };\r\n    fakeItem.y = Math.max(collidesWith.y - itemToMove.h, 0);\r\n    if (!getFirstCollision(layout, fakeItem)) {\r\n      return moveElement(layout, itemToMove, undefined, fakeItem.y, preventCollision);\r\n    }\r\n  }\r\n\r\n  // Previously this was optimized to move below the collision directly, but this can cause problems\r\n  // with cascading moves, as an item may actually leapflog a collision and cause a reversal in order.\r\n  return moveElement(layout, itemToMove, undefined, itemToMove.y + 1, preventCollision);\r\n}\r\n\r\n/**\r\n * Helper to convert a number to a percentage string.\r\n *\r\n * @param  {Number} num Any number\r\n * @return {String}     That number as a percentage.\r\n */\r\nexport function perc(num: number): string {\r\n  return num * 100 + '%';\r\n}\r\n\r\nexport function setTransform(top, left, width, height): Object {\r\n  // Replace unitless items with px\r\n  const translate = \"translate3d(\" + left + \"px,\" + top + \"px, 0)\";\r\n  return {\r\n    transform: translate,\r\n    WebkitTransform: translate,\r\n    MozTransform: translate,\r\n    msTransform: translate,\r\n    OTransform: translate,\r\n    width: width + \"px\",\r\n    height: height + \"px\",\r\n    position: 'absolute'\r\n  };\r\n}\r\n/**\r\n * Just like the setTransform method, but instead it will return a negative value of right.\r\n *\r\n * @param top\r\n * @param right\r\n * @param width\r\n * @param height\r\n * @returns {{transform: string, WebkitTransform: string, MozTransform: string, msTransform: string, OTransform: string, width: string, height: string, position: string}}\r\n */\r\nexport function setTransformRtl(top, right, width, height): Object {\r\n    // Replace unitless items with px\r\n    const translate = \"translate3d(\" + right * -1 + \"px,\" + top + \"px, 0)\";\r\n    return {\r\n        transform: translate,\r\n        WebkitTransform: translate,\r\n        MozTransform: translate,\r\n        msTransform: translate,\r\n        OTransform: translate,\r\n        width: width + \"px\",\r\n        height: height + \"px\",\r\n        position: 'absolute'\r\n    };\r\n}\r\n\r\nexport function setTopLeft(top, left, width, height): Object {\r\n    return {\r\n        top: top + \"px\",\r\n        left: left + \"px\",\r\n        width: width + \"px\",\r\n        height: height + \"px\",\r\n        position: 'absolute'\r\n    };\r\n}\r\n/**\r\n * Just like the setTopLeft method, but instead, it will return a right property instead of left.\r\n *\r\n * @param top\r\n * @param right\r\n * @param width\r\n * @param height\r\n * @returns {{top: string, right: string, width: string, height: string, position: string}}\r\n */\r\nexport function setTopRight(top, right, width, height): Object {\r\n    return {\r\n        top: top + \"px\",\r\n        right: right+ \"px\",\r\n        width: width + \"px\",\r\n        height: height + \"px\",\r\n        position: 'absolute'\r\n    };\r\n}\r\n\r\n\r\n/**\r\n * Get layout items sorted from top left to right and down.\r\n *\r\n * @return {Array} Array of layout objects.\r\n * @return {Array}        Layout, sorted static items first.\r\n */\r\nexport function sortLayoutItemsByRowCol(layout: Layout): Layout {\r\n  return [].concat(layout).sort(function(a, b) {\r\n    if (a.y === b.y && a.x === b.x) {\r\n      return 0;\r\n    }\r\n\r\n    if (a.y > b.y || (a.y === b.y && a.x > b.x)) {\r\n      return 1;\r\n    }\r\n\r\n    return -1;\r\n  });\r\n}\r\n\r\n/**\r\n * Generate a layout using the initialLayout and children as a template.\r\n * Missing entries will be added, extraneous ones will be truncated.\r\n *\r\n * @param  {Array}  initialLayout Layout passed in through props.\r\n * @param  {String} breakpoint    Current responsive breakpoint.\r\n * @param  {Boolean} verticalCompact Whether or not to compact the layout vertically.\r\n * @return {Array}                Working layout.\r\n */\r\n/*\r\nexport function synchronizeLayoutWithChildren(initialLayout: Layout, children: Array<React.Element>|React.Element,\r\n                                              cols: number, verticalCompact: boolean): Layout {\r\n  // ensure 'children' is always an array\r\n  if (!Array.isArray(children)) {\r\n    children = [children];\r\n  }\r\n  initialLayout = initialLayout || [];\r\n\r\n  // Generate one layout item per child.\r\n  let layout: Layout = [];\r\n  for (let i = 0, len = children.length; i < len; i++) {\r\n    let newItem;\r\n    const child = children[i];\r\n\r\n    // Don't overwrite if it already exists.\r\n    const exists = getLayoutItem(initialLayout, child.key || \"1\" /!* FIXME satisfies Flow *!/);\r\n    if (exists) {\r\n      newItem = exists;\r\n    } else {\r\n      const g = child.props._grid;\r\n\r\n      // Hey, this item has a _grid property, use it.\r\n      if (g) {\r\n        if (!isProduction) {\r\n          validateLayout([g], 'ReactGridLayout.children');\r\n        }\r\n        // Validated; add it to the layout. Bottom 'y' possible is the bottom of the layout.\r\n        // This allows you to do nice stuff like specify {y: Infinity}\r\n        if (verticalCompact) {\r\n          newItem = cloneLayoutItem({...g, y: Math.min(bottom(layout), g.y), i: child.key});\r\n        } else {\r\n          newItem = cloneLayoutItem({...g, y: g.y, i: child.key});\r\n        }\r\n      }\r\n      // Nothing provided: ensure this is added to the bottom\r\n      else {\r\n        newItem = cloneLayoutItem({w: 1, h: 1, x: 0, y: bottom(layout), i: child.key || \"1\"});\r\n      }\r\n    }\r\n    layout[i] = newItem;\r\n  }\r\n\r\n  // Correct the layout.\r\n  layout = correctBounds(layout, {cols: cols});\r\n  layout = compact(layout, verticalCompact);\r\n\r\n  return layout;\r\n}\r\n*/\r\n\r\n/**\r\n * Validate a layout. Throws errors.\r\n *\r\n * @param  {Array}  layout        Array of layout items.\r\n * @param  {String} [contextName] Context name for errors.\r\n * @throw  {Error}                Validation error.\r\n */\r\nexport function validateLayout(layout: Layout, contextName: string): void {\r\n  contextName = contextName || \"Layout\";\r\n  const subProps = ['x', 'y', 'w', 'h'];\r\n  let keyArr = [];\r\n  if (!Array.isArray(layout)) throw new Error(contextName + \" must be an array!\");\r\n  for (let i = 0, len = layout.length; i < len; i++) {\r\n    const item = layout[i];\r\n    for (let j = 0; j < subProps.length; j++) {\r\n      if (typeof item[subProps[j]] !== 'number') {\r\n        throw new Error('VueGridLayout: ' + contextName + '[' + i + '].' + subProps[j] + ' must be a number!');\r\n      }\r\n    }\r\n\r\n    if (item.i === undefined || item.i === null) {\r\n      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].i cannot be null!');\r\n    }\r\n\r\n    if (typeof item.i !== 'number' && typeof item.i !== 'string') {\r\n      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].i must be a string or number!');\r\n    }\r\n\r\n    if (keyArr.indexOf(item.i) >= 0) {\r\n      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].i must be unique!');\r\n    }\r\n    keyArr.push(item.i);\r\n\r\n    if (item.static !== undefined && typeof item.static !== 'boolean') {\r\n      throw new Error('VueGridLayout: ' + contextName + '[' + i + '].static must be a boolean!');\r\n    }\r\n  }\r\n}\r\n\r\n// Flow can't really figure this out, so we just use Object\r\nexport function autoBindHandlers(el: Object, fns: Array<string>): void {\r\n  fns.forEach((key) => el[key] = el[key].bind(el));\r\n}\r\n\r\n\r\n\r\n/**\r\n * Convert a JS object to CSS string. Similar to React's output of CSS.\r\n * @param obj\r\n * @returns {string}\r\n */\r\nexport function createMarkup(obj) {\r\n    var keys = Object.keys(obj);\r\n    if (!keys.length) return '';\r\n    var i, len = keys.length;\r\n    var result = '';\r\n\r\n    for (i = 0; i < len; i++) {\r\n        var key = keys[i];\r\n        var val = obj[key];\r\n        result += hyphenate(key) + ':' + addPx(key, val) + ';';\r\n    }\r\n\r\n    return result;\r\n}\r\n\r\n\r\n/* The following list is defined in React's core */\r\nexport var IS_UNITLESS = {\r\n    animationIterationCount: true,\r\n    boxFlex: true,\r\n    boxFlexGroup: true,\r\n    boxOrdinalGroup: true,\r\n    columnCount: true,\r\n    flex: true,\r\n    flexGrow: true,\r\n    flexPositive: true,\r\n    flexShrink: true,\r\n    flexNegative: true,\r\n    flexOrder: true,\r\n    gridRow: true,\r\n    gridColumn: true,\r\n    fontWeight: true,\r\n    lineClamp: true,\r\n    lineHeight: true,\r\n    opacity: true,\r\n    order: true,\r\n    orphans: true,\r\n    tabSize: true,\r\n    widows: true,\r\n    zIndex: true,\r\n    zoom: true,\r\n\r\n    // SVG-related properties\r\n    fillOpacity: true,\r\n    stopOpacity: true,\r\n    strokeDashoffset: true,\r\n    strokeOpacity: true,\r\n    strokeWidth: true\r\n};\r\n\r\n\r\n/**\r\n * Will add px to the end of style values which are Numbers.\r\n * @param name\r\n * @param value\r\n * @returns {*}\r\n */\r\nexport function addPx(name, value) {\r\n    if(typeof value === 'number' && !IS_UNITLESS[ name ]) {\r\n        return value + 'px';\r\n    } else {\r\n        return value;\r\n    }\r\n}\r\n\r\n\r\n/**\r\n * Hyphenate a camelCase string.\r\n *\r\n * @param {String} str\r\n * @return {String}\r\n */\r\n\r\nexport var hyphenateRE = /([a-z\\d])([A-Z])/g;\r\n\r\nexport function hyphenate(str) {\r\n    return str.replace(hyphenateRE, '$1-$2').toLowerCase();\r\n}\r\n\r\n\r\nexport function findItemInArray(array, property, value) {\r\n    for (var i=0; i < array.length; i++)\r\n        if (array[i][property] == value)\r\n            return true;\r\n\r\n    return false;\r\n}\r\n\r\nexport function findAndRemove(array, property, value) {\r\n    array.forEach(function (result, index) {\r\n        if (result[property] === value) {\r\n            //Remove from array\r\n            array.splice(index, 1);\r\n        }\r\n    });\r\n}\r\n", "'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = defined(this);\n      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return fn !== undefined\n        ? fn.call(searchValue, O, replaceValue)\n        : $replace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      var res = maybeCallNative($replace, regexp, this, replaceValue);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\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        results.push(result);\n        if (!global) break;\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n        var matched = String(result[0]);\n        var position = max(min(toInteger(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++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n\n    // https://tc39.github.io/ecma262/#sec-getsubstitution\n  function getSubstitution(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.call(replacement, symbols, function (match, ch) {\n      var capture;\n      switch (ch.charAt(0)) {\n        case '$': return '$';\n        case '&': return matched;\n        case '`': return str.slice(0, position);\n        case \"'\": return str.slice(tailPos);\n        case '<':\n          capture = namedCaptures[ch.slice(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 ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n            return match;\n          }\n          capture = captures[n - 1];\n      }\n      return capture === undefined ? '' : capture;\n    });\n  }\n});\n", "var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n  var exp = {};\n  var FORCE = fails(function () {\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if (ALIAS) exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n  string = String(defined(string));\n  if (TYPE & 1) string = string.replace(ltrim, '');\n  if (TYPE & 2) string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;\n", "\"use strict\";\n\n/* global console: false */\n\n/**\n * Reporter that handles the reporting of logs, warnings and errors.\n * @public\n * @param {boolean} quiet Tells if the reporter should be quiet or not.\n */\nmodule.exports = function(quiet) {\n    function noop() {\n        //Does nothing.\n    }\n\n    var reporter = {\n        log: noop,\n        warn: noop,\n        error: noop\n    };\n\n    if(!quiet && window.console) {\n        var attachFunction = function(reporter, name) {\n            //The proxy is needed to be able to call the method with the console context,\n            //since we cannot use bind.\n            reporter[name] = function reporterProxy() {\n                var f = console[name];\n                if (f.apply) { //IE9 does not support console.log.apply :)\n                    f.apply(console, arguments);\n                } else {\n                    for (var i = 0; i < arguments.length; i++) {\n                        f(arguments[i]);\n                    }\n                }\n            };\n        };\n\n        attachFunction(reporter, \"log\");\n        attachFunction(reporter, \"warn\");\n        attachFunction(reporter, \"error\");\n    }\n\n    return reporter;\n};", "var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n", "exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".vue-grid-layout{position:relative;-webkit-transition:height .2s ease;transition:height .2s ease}\", \"\"]);\n\n// exports\n", "export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}", "'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n  target: 'RegExp',\n  proto: true,\n  forced: regexpExec !== /./.exec\n}, {\n  exec: regexpExec\n});\n", "\"use strict\";\n\nvar utils = module.exports = {};\n\n/**\n * Loops through the collection and calls the callback for each element. if the callback returns truthy, the loop is broken and returns the same value.\n * @public\n * @param {*} collection The collection to loop through. Needs to have a length property set and have indices set from 0 to length - 1.\n * @param {function} callback The callback to be called for each element. The element will be given as a parameter to the callback. If this callback returns truthy, the loop is broken and the same value is returned.\n * @returns {*} The value that a callback has returned (if truthy). Otherwise nothing.\n */\nutils.forEach = function(collection, callback) {\n    for(var i = 0; i < collection.length; i++) {\n        var result = callback(collection[i]);\n        if(result) {\n            return result;\n        }\n    }\n};\n", "var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"item\",staticClass:\"vue-grid-item\",class:_vm.classObj,style:(_vm.style)},[_vm._t(\"default\"),(_vm.resizableAndNotStatic)?_c('span',{ref:\"handle\",class:_vm.resizableHandleClass}):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }", "// Get {x, y} positions from event.\r\nexport function getControlPosition(e) {\r\n    return offsetXYFromParentOf(e);\r\n}\r\n\r\n\r\n// Get from offsetParent\r\nexport function offsetXYFromParentOf(evt) {\r\n    const offsetParent = evt.target.offsetParent || document.body;\r\n    const offsetParentRect = evt.offsetParent === document.body ? {left: 0, top: 0} : offsetParent.getBoundingClientRect();\r\n\r\n    const x = evt.clientX + offsetParent.scrollLeft - offsetParentRect.left;\r\n    const y = evt.clientY + offsetParent.scrollTop - offsetParentRect.top;\r\n\r\n    /*const x = Math.round(evt.clientX + offsetParent.scrollLeft - offsetParentRect.left);\r\n    const y = Math.round(evt.clientY + offsetParent.scrollTop - offsetParentRect.top);*/\r\n\r\n\r\n    return {x, y};\r\n}\r\n\r\n\r\n// Create an data object exposed by <DraggableCore>'s events\r\nexport function createCoreData(lastX, lastY, x, y) {\r\n    // State changes are often (but not always!) async. We want the latest value.\r\n    const isStart = !isNum(lastX);\r\n\r\n    if (isStart) {\r\n        // If this is our first move, use the x and y as last coords.\r\n        return {\r\n            deltaX: 0, deltaY: 0,\r\n            lastX: x, lastY: y,\r\n            x: x, y: y\r\n        };\r\n    } else {\r\n        // Otherwise calculate proper values.\r\n        return {\r\n            deltaX: x - lastX, deltaY: y - lastY,\r\n            lastX: lastX, lastY: lastY,\r\n            x: x, y: y\r\n        };\r\n    }\r\n}\r\n\r\n\r\nfunction isNum(num)  {\r\n    return typeof num === 'number' && !isNaN(num);\r\n}\r\n\r\n", "const domObjects = {\n  init,\n  document: null,\n  DocumentFragment: null,\n  SVGElement: null,\n  SVGSVGElement: null,\n  SVGElementInstance: null,\n  Element: null,\n  HTMLElement: null,\n  Event: null,\n  Touch: null,\n  PointerEvent: null\n};\n\nfunction blank() {}\n\nexport default domObjects;\n\nfunction init(window) {\n  const win = window;\n  domObjects.document = win.document;\n  domObjects.DocumentFragment = win.DocumentFragment || blank;\n  domObjects.SVGElement = win.SVGElement || blank;\n  domObjects.SVGSVGElement = win.SVGSVGElement || blank;\n  domObjects.SVGElementInstance = win.SVGElementInstance || blank;\n  domObjects.Element = win.Element || blank;\n  domObjects.HTMLElement = win.HTMLElement || domObjects.Element;\n  domObjects.Event = win.Event;\n  domObjects.Touch = win.Touch || blank;\n  domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent;\n}\n//# sourceMappingURL=domObjects.js.map", "export default (thing => !!(thing && thing.Window) && thing instanceof thing.Window);\n//# sourceMappingURL=isWindow.js.map", "import isWindow from \"./isWindow.js\";\nexport let realWindow = undefined;\nlet win = undefined;\nexport { win as window };\nexport function init(window) {\n  // get wrapped window if using Shadow DOM polyfill\n  realWindow = window; // create a TextNode\n\n  const el = window.document.createTextNode(''); // check if it's wrapped by a polyfill\n\n  if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n    // use wrapped window\n    window = window.wrap(window);\n  }\n\n  win = window;\n}\n\nif (typeof window !== 'undefined' && !!window) {\n  init(window);\n}\n\nexport function getWindow(node) {\n  if (isWindow(node)) {\n    return node;\n  }\n\n  const rootNode = node.ownerDocument || node;\n  return rootNode.defaultView || win.window;\n}\n//# sourceMappingURL=window.js.map", "import isWindow from \"./isWindow.js\";\nimport * as win from \"./window.js\";\n\nconst window = thing => thing === win.window || isWindow(thing);\n\nconst docFrag = thing => object(thing) && thing.nodeType === 11;\n\nconst object = thing => !!thing && typeof thing === 'object';\n\nconst func = thing => typeof thing === 'function';\n\nconst number = thing => typeof thing === 'number';\n\nconst bool = thing => typeof thing === 'boolean';\n\nconst string = thing => typeof thing === 'string';\n\nconst element = thing => {\n  if (!thing || typeof thing !== 'object') {\n    return false;\n  } // eslint-disable-next-line import/no-named-as-default-member\n\n\n  const _window = win.getWindow(thing) || win.window;\n\n  return /object|function/.test(typeof _window.Element) ? thing instanceof _window.Element // DOM2\n  : thing.nodeType === 1 && typeof thing.nodeName === 'string';\n};\n\nconst plainObject = thing => object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString());\n\nconst array = thing => object(thing) && typeof thing.length !== 'undefined' && func(thing.splice);\n\nexport default {\n  window,\n  docFrag,\n  object,\n  func,\n  number,\n  bool,\n  string,\n  element,\n  plainObject,\n  array\n};\n//# sourceMappingURL=is.js.map", "import domObjects from \"./domObjects.js\";\nimport is from \"./is.js\";\nimport * as win from \"./window.js\";\nconst browser = {\n  init,\n  supportsTouch: null,\n  supportsPointerEvent: null,\n  isIOS7: null,\n  isIOS: null,\n  isIe9: null,\n  isOperaMobile: null,\n  prefixedMatchesSelector: null,\n  pEventTypes: null,\n  wheelEvent: null\n};\n\nfunction init(window) {\n  const Element = domObjects.Element;\n  const navigator = win.window.navigator; // Does the browser support touch input?\n\n  browser.supportsTouch = 'ontouchstart' in window || is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch; // Does the browser support PointerEvents\n\n  browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects.PointerEvent;\n  browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform); // scrolling doesn't change the result of getClientRects on iOS 7\n\n  browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion);\n  browser.isIe9 = /MSIE 9/.test(navigator.userAgent); // Opera Mobile must be handled differently\n\n  browser.isOperaMobile = navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent); // prefix matchesSelector\n\n  browser.prefixedMatchesSelector = 'matches' in Element.prototype ? 'matches' : 'webkitMatchesSelector' in Element.prototype ? 'webkitMatchesSelector' : 'mozMatchesSelector' in Element.prototype ? 'mozMatchesSelector' : 'oMatchesSelector' in Element.prototype ? 'oMatchesSelector' : 'msMatchesSelector';\n  browser.pEventTypes = browser.supportsPointerEvent ? domObjects.PointerEvent === window.MSPointerEvent ? {\n    up: 'MSPointerUp',\n    down: 'MSPointerDown',\n    over: 'mouseover',\n    out: 'mouseout',\n    move: 'MSPointerMove',\n    cancel: 'MSPointerCancel'\n  } : {\n    up: 'pointerup',\n    down: 'pointerdown',\n    over: 'pointerover',\n    out: 'pointerout',\n    move: 'pointermove',\n    cancel: 'pointercancel'\n  } : null; // because Webkit and Opera still use 'mousewheel' event type\n\n  browser.wheelEvent = 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel';\n}\n\nexport default browser;\n//# sourceMappingURL=browser.js.map", "export const contains = (array, target) => array.indexOf(target) !== -1;\nexport const remove = (array, target) => array.splice(array.indexOf(target), 1);\nexport const merge = (target, source) => {\n  for (const item of source) {\n    target.push(item);\n  }\n\n  return target;\n};\nexport const from = source => merge([], source);\nexport const findIndex = (array, func) => {\n  for (let i = 0; i < array.length; i++) {\n    if (func(array[i], i, array)) {\n      return i;\n    }\n  }\n\n  return -1;\n};\nexport const find = (array, func) => array[findIndex(array, func)];\n//# sourceMappingURL=arr.js.map", "import * as arr from \"./arr.js\";\nimport is from \"./is.js\"; // tslint:disable-next-line ban-types\n\nexport default function clone(source) {\n  const dest = {};\n\n  for (const prop in source) {\n    const value = source[prop];\n\n    if (is.plainObject(value)) {\n      dest[prop] = clone(value);\n    } else if (is.array(value)) {\n      dest[prop] = arr.from(value);\n    } else {\n      dest[prop] = value;\n    }\n  }\n\n  return dest;\n}\n//# sourceMappingURL=clone.js.map", "export default function extend(dest, source) {\n  for (const prop in source) {\n    dest[prop] = source[prop];\n  }\n\n  const ret = dest;\n  return ret;\n}\n//# sourceMappingURL=extend.js.map", "let lastTime = 0;\nlet request;\nlet cancel;\n\nfunction init(window) {\n  request = window.requestAnimationFrame;\n  cancel = window.cancelAnimationFrame;\n\n  if (!request) {\n    const vendors = ['ms', 'moz', 'webkit', 'o'];\n\n    for (const vendor of vendors) {\n      request = window[`${vendor}RequestAnimationFrame`];\n      cancel = window[`${vendor}CancelAnimationFrame`] || window[`${vendor}CancelRequestAnimationFrame`];\n    }\n  }\n\n  request = request && request.bind(window);\n  cancel = cancel && cancel.bind(window);\n\n  if (!request) {\n    request = callback => {\n      const currTime = Date.now();\n      const timeToCall = Math.max(0, 16 - (currTime - lastTime)); // eslint-disable-next-line node/no-callback-literal\n\n      const token = window.setTimeout(() => {\n        callback(currTime + timeToCall);\n      }, timeToCall);\n      lastTime = currTime + timeToCall;\n      return token;\n    };\n\n    cancel = token => clearTimeout(token);\n  }\n}\n\nexport default {\n  request: callback => request(callback),\n  cancel: token => cancel(token),\n  init\n};\n//# sourceMappingURL=raf.js.map", "import extend from \"./extend.js\";\nimport is from \"./is.js\";\nexport default function normalize(type, listeners, result) {\n  result = result || {};\n\n  if (is.string(type) && type.search(' ') !== -1) {\n    type = split(type);\n  }\n\n  if (is.array(type)) {\n    return type.reduce((acc, t) => extend(acc, normalize(t, listeners, result)), result);\n  } // ({ type: fn }) -> ('', { type: fn })\n\n\n  if (is.object(type)) {\n    listeners = type;\n    type = '';\n  }\n\n  if (is.func(listeners)) {\n    result[type] = result[type] || [];\n    result[type].push(listeners);\n  } else if (is.array(listeners)) {\n    for (const l of listeners) {\n      normalize(type, l, result);\n    }\n  } else if (is.object(listeners)) {\n    for (const prefix in listeners) {\n      const combinedTypes = split(prefix).map(p => `${type}${p}`);\n      normalize(combinedTypes, listeners[prefix], result);\n    }\n  }\n\n  return result;\n}\n\nfunction split(type) {\n  return type.trim().split(/ +/);\n}\n//# sourceMappingURL=normalizeListeners.js.map", "import * as arr from \"../utils/arr.js\";\nimport extend from \"../utils/extend.js\";\nimport normalize from \"../utils/normalizeListeners.js\";\n\nfunction fireUntilImmediateStopped(event, listeners) {\n  for (const listener of listeners) {\n    if (event.immediatePropagationStopped) {\n      break;\n    }\n\n    listener(event);\n  }\n}\n\nexport class Eventable {\n  constructor(options) {\n    this.options = void 0;\n    this.types = {};\n    this.propagationStopped = false;\n    this.immediatePropagationStopped = false;\n    this.global = void 0;\n    this.options = extend({}, options || {});\n  }\n\n  fire(event) {\n    let listeners;\n    const global = this.global; // Interactable#on() listeners\n    // tslint:disable no-conditional-assignment\n\n    if (listeners = this.types[event.type]) {\n      fireUntilImmediateStopped(event, listeners);\n    } // interact.on() listeners\n\n\n    if (!event.propagationStopped && global && (listeners = global[event.type])) {\n      fireUntilImmediateStopped(event, listeners);\n    }\n  }\n\n  on(type, listener) {\n    const listeners = normalize(type, listener);\n\n    for (type in listeners) {\n      this.types[type] = arr.merge(this.types[type] || [], listeners[type]);\n    }\n  }\n\n  off(type, listener) {\n    const listeners = normalize(type, listener);\n\n    for (type in listeners) {\n      const eventList = this.types[type];\n\n      if (!eventList || !eventList.length) {\n        continue;\n      }\n\n      for (const subListener of listeners[type]) {\n        const index = eventList.indexOf(subListener);\n\n        if (index !== -1) {\n          eventList.splice(index, 1);\n        }\n      }\n    }\n  }\n\n  getRect(_element) {\n    return null;\n  }\n\n}\n//# sourceMappingURL=Eventable.js.map", "import browser from \"./browser.js\";\nimport domObjects from \"./domObjects.js\";\nimport is from \"./is.js\";\nimport * as win from \"./window.js\";\nexport function nodeContains(parent, child) {\n  if (parent.contains) {\n    return parent.contains(child);\n  }\n\n  while (child) {\n    if (child === parent) {\n      return true;\n    }\n\n    child = child.parentNode;\n  }\n\n  return false;\n}\nexport function closest(element, selector) {\n  while (is.element(element)) {\n    if (matchesSelector(element, selector)) {\n      return element;\n    }\n\n    element = parentNode(element);\n  }\n\n  return null;\n}\nexport function parentNode(node) {\n  let parent = node.parentNode;\n\n  if (is.docFrag(parent)) {\n    // skip past #shado-root fragments\n    // tslint:disable-next-line\n    while ((parent = parent.host) && is.docFrag(parent)) {\n      continue;\n    }\n\n    return parent;\n  }\n\n  return parent;\n}\nexport function matchesSelector(element, selector) {\n  // remove /deep/ from selectors if shadowDOM polyfill is used\n  if (win.window !== win.realWindow) {\n    selector = selector.replace(/\\/deep\\//g, ' ');\n  }\n\n  return element[browser.prefixedMatchesSelector](selector);\n}\n\nconst getParent = el => el.parentNode || el.host; // Test for the element that's \"above\" all other qualifiers\n\n\nexport function indexOfDeepestElement(elements) {\n  let deepestNodeParents = [];\n  let deepestNodeIndex;\n\n  for (let i = 0; i < elements.length; i++) {\n    const currentNode = elements[i];\n    const deepestNode = elements[deepestNodeIndex]; // node may appear in elements array multiple times\n\n    if (!currentNode || i === deepestNodeIndex) {\n      continue;\n    }\n\n    if (!deepestNode) {\n      deepestNodeIndex = i;\n      continue;\n    }\n\n    const currentNodeParent = getParent(currentNode);\n    const deepestNodeParent = getParent(deepestNode); // check if the deepest or current are document.documentElement/rootElement\n    // - if the current node is, do nothing and continue\n\n    if (currentNodeParent === currentNode.ownerDocument) {\n      continue;\n    } // - if deepest is, update with the current node and continue to next\n    else if (deepestNodeParent === currentNode.ownerDocument) {\n        deepestNodeIndex = i;\n        continue;\n      } // compare zIndex of siblings\n\n\n    if (currentNodeParent === deepestNodeParent) {\n      if (zIndexIsHigherThan(currentNode, deepestNode)) {\n        deepestNodeIndex = i;\n      }\n\n      continue;\n    } // populate the ancestry array for the latest deepest node\n\n\n    deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode);\n    let ancestryStart; // if the deepest node is an HTMLElement and the current node is a non root svg element\n\n    if (deepestNode instanceof domObjects.HTMLElement && currentNode instanceof domObjects.SVGElement && !(currentNode instanceof domObjects.SVGSVGElement)) {\n      // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n      if (currentNode === deepestNodeParent) {\n        continue;\n      }\n\n      ancestryStart = currentNode.ownerSVGElement;\n    } else {\n      ancestryStart = currentNode;\n    }\n\n    const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument);\n    let commonIndex = 0; // get (position of closest common ancestor) + 1\n\n    while (currentNodeParents[commonIndex] && currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]) {\n      commonIndex++;\n    }\n\n    const parents = [currentNodeParents[commonIndex - 1], currentNodeParents[commonIndex], deepestNodeParents[commonIndex]];\n    let child = parents[0].lastChild;\n\n    while (child) {\n      if (child === parents[1]) {\n        deepestNodeIndex = i;\n        deepestNodeParents = currentNodeParents;\n        break;\n      } else if (child === parents[2]) {\n        break;\n      }\n\n      child = child.previousSibling;\n    }\n  }\n\n  return deepestNodeIndex;\n}\n\nfunction getNodeParents(node, limit) {\n  const parents = [];\n  let parent = node;\n  let parentParent;\n\n  while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n    parents.unshift(parent);\n    parent = parentParent;\n  }\n\n  return parents;\n}\n\nfunction zIndexIsHigherThan(higherNode, lowerNode) {\n  const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0;\n  const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0;\n  return higherIndex >= lowerIndex;\n}\n\nexport function matchesUpTo(element, selector, limit) {\n  while (is.element(element)) {\n    if (matchesSelector(element, selector)) {\n      return true;\n    }\n\n    element = parentNode(element);\n\n    if (element === limit) {\n      return matchesSelector(element, selector);\n    }\n  }\n\n  return false;\n}\nexport function getActualElement(element) {\n  return element.correspondingUseElement || element;\n}\nexport function getScrollXY(relevantWindow) {\n  relevantWindow = relevantWindow || win.window;\n  return {\n    x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n    y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop\n  };\n}\nexport function getElementClientRect(element) {\n  const clientRect = element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0];\n  return clientRect && {\n    left: clientRect.left,\n    right: clientRect.right,\n    top: clientRect.top,\n    bottom: clientRect.bottom,\n    width: clientRect.width || clientRect.right - clientRect.left,\n    height: clientRect.height || clientRect.bottom - clientRect.top\n  };\n}\nexport function getElementRect(element) {\n  const clientRect = getElementClientRect(element);\n\n  if (!browser.isIOS7 && clientRect) {\n    const scroll = getScrollXY(win.getWindow(element));\n    clientRect.left += scroll.x;\n    clientRect.right += scroll.x;\n    clientRect.top += scroll.y;\n    clientRect.bottom += scroll.y;\n  }\n\n  return clientRect;\n}\nexport function getPath(node) {\n  const path = [];\n\n  while (node) {\n    path.push(node);\n    node = parentNode(node);\n  }\n\n  return path;\n}\nexport function trySelector(value) {\n  if (!is.string(value)) {\n    return false;\n  } // an exception will be raised if it is invalid\n\n\n  domObjects.document.querySelector(value);\n  return true;\n}\n//# sourceMappingURL=domUtils.js.map", "import { closest, getElementRect, parentNode } from \"./domUtils.js\";\nimport extend from \"./extend.js\";\nimport is from \"./is.js\";\nexport function getStringOptionResult(value, target, element) {\n  if (value === 'parent') {\n    return parentNode(element);\n  }\n\n  if (value === 'self') {\n    return target.getRect(element);\n  }\n\n  return closest(element, value);\n}\nexport function resolveRectLike(value, target, element, functionArgs) {\n  let returnValue = value;\n\n  if (is.string(returnValue)) {\n    returnValue = getStringOptionResult(returnValue, target, element);\n  } else if (is.func(returnValue)) {\n    returnValue = returnValue(...functionArgs);\n  }\n\n  if (is.element(returnValue)) {\n    returnValue = getElementRect(returnValue);\n  }\n\n  return returnValue;\n}\nexport function rectToXY(rect) {\n  return rect && {\n    x: 'x' in rect ? rect.x : rect.left,\n    y: 'y' in rect ? rect.y : rect.top\n  };\n}\nexport function xywhToTlbr(rect) {\n  if (rect && !('left' in rect && 'top' in rect)) {\n    rect = extend({}, rect);\n    rect.left = rect.x || 0;\n    rect.top = rect.y || 0;\n    rect.right = rect.right || rect.left + rect.width;\n    rect.bottom = rect.bottom || rect.top + rect.height;\n  }\n\n  return rect;\n}\nexport function tlbrToXywh(rect) {\n  if (rect && !('x' in rect && 'y' in rect)) {\n    rect = extend({}, rect);\n    rect.x = rect.left || 0;\n    rect.y = rect.top || 0;\n    rect.width = rect.width || (rect.right || 0) - rect.x;\n    rect.height = rect.height || (rect.bottom || 0) - rect.y;\n  }\n\n  return rect;\n}\nexport function addEdges(edges, rect, delta) {\n  if (edges.left) {\n    rect.left += delta.x;\n  }\n\n  if (edges.right) {\n    rect.right += delta.x;\n  }\n\n  if (edges.top) {\n    rect.top += delta.y;\n  }\n\n  if (edges.bottom) {\n    rect.bottom += delta.y;\n  }\n\n  rect.width = rect.right - rect.left;\n  rect.height = rect.bottom - rect.top;\n}\n//# sourceMappingURL=rect.js.map", "import { rectToXY, resolveRectLike } from \"./rect.js\";\nexport default function (target, element, actionName) {\n  const actionOptions = target.options[actionName];\n  const actionOrigin = actionOptions && actionOptions.origin;\n  const origin = actionOrigin || target.options.origin;\n  const originRect = resolveRectLike(origin, target, element, [target && element]);\n  return rectToXY(originRect) || {\n    x: 0,\n    y: 0\n  };\n}\n//# sourceMappingURL=getOriginXY.js.map", "export default ((x, y) => Math.sqrt(x * x + y * y));\n//# sourceMappingURL=hypot.js.map", "export class BaseEvent {\n  constructor(interaction) {\n    this.type = void 0;\n    this.target = void 0;\n    this.currentTarget = void 0;\n    this.interactable = void 0;\n    this._interaction = void 0;\n    this.timeStamp = void 0;\n    this.immediatePropagationStopped = false;\n    this.propagationStopped = false;\n    this._interaction = interaction;\n  }\n\n  preventDefault() {}\n  /**\n   * Don't call any other listeners (even on the current target)\n   */\n\n\n  stopPropagation() {\n    this.propagationStopped = true;\n  }\n  /**\n   * Don't call listeners on the remaining targets\n   */\n\n\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true;\n  }\n\n} // defined outside of class definition to avoid assignment of undefined during\n// construction\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n  get() {\n    return this._interaction._proxy;\n  },\n\n  set() {}\n\n});\n//# sourceMappingURL=BaseEvent.js.map", "// eslint-disable-next-line @typescript-eslint/no-empty-interface\n// export interface Options extends BaseDefaults, PerActionDefaults {}\nexport const defaults = {\n  base: {\n    preventDefault: 'auto',\n    deltaSource: 'page'\n  },\n  perAction: {\n    enabled: false,\n    origin: {\n      x: 0,\n      y: 0\n    }\n  },\n  actions: {}\n};\n//# sourceMappingURL=defaultOptions.js.map", "import extend from \"../utils/extend.js\";\nimport getOriginXY from \"../utils/getOriginXY.js\";\nimport hypot from \"../utils/hypot.js\";\nimport { BaseEvent } from \"./BaseEvent.js\";\nimport { defaults } from \"./defaultOptions.js\";\nexport class InteractEvent extends BaseEvent {\n  // resize\n\n  /** */\n  constructor(interaction, event, actionName, phase, element, preEnd, type) {\n    super(interaction);\n    this.target = void 0;\n    this.currentTarget = void 0;\n    this.relatedTarget = null;\n    this.screenX = void 0;\n    this.screenY = void 0;\n    this.button = void 0;\n    this.buttons = void 0;\n    this.ctrlKey = void 0;\n    this.shiftKey = void 0;\n    this.altKey = void 0;\n    this.metaKey = void 0;\n    this.page = void 0;\n    this.client = void 0;\n    this.delta = void 0;\n    this.rect = void 0;\n    this.x0 = void 0;\n    this.y0 = void 0;\n    this.t0 = void 0;\n    this.dt = void 0;\n    this.duration = void 0;\n    this.clientX0 = void 0;\n    this.clientY0 = void 0;\n    this.velocity = void 0;\n    this.speed = void 0;\n    this.swipe = void 0;\n    this.timeStamp = void 0;\n    this.axes = void 0;\n    this.preEnd = void 0;\n    element = element || interaction.element;\n    const target = interaction.interactable;\n    const deltaSource = (target && target.options || defaults).deltaSource;\n    const origin = getOriginXY(target, element, actionName);\n    const starting = phase === 'start';\n    const ending = phase === 'end';\n    const prevEvent = starting ? this : interaction.prevEvent;\n    const coords = starting ? interaction.coords.start : ending ? {\n      page: prevEvent.page,\n      client: prevEvent.client,\n      timeStamp: interaction.coords.cur.timeStamp\n    } : interaction.coords.cur;\n    this.page = extend({}, coords.page);\n    this.client = extend({}, coords.client);\n    this.rect = extend({}, interaction.rect);\n    this.timeStamp = coords.timeStamp;\n\n    if (!ending) {\n      this.page.x -= origin.x;\n      this.page.y -= origin.y;\n      this.client.x -= origin.x;\n      this.client.y -= origin.y;\n    }\n\n    this.ctrlKey = event.ctrlKey;\n    this.altKey = event.altKey;\n    this.shiftKey = event.shiftKey;\n    this.metaKey = event.metaKey;\n    this.button = event.button;\n    this.buttons = event.buttons;\n    this.target = element;\n    this.currentTarget = element;\n    this.preEnd = preEnd;\n    this.type = type || actionName + (phase || '');\n    this.interactable = target;\n    this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0;\n    this.x0 = interaction.coords.start.page.x - origin.x;\n    this.y0 = interaction.coords.start.page.y - origin.y;\n    this.clientX0 = interaction.coords.start.client.x - origin.x;\n    this.clientY0 = interaction.coords.start.client.y - origin.y;\n\n    if (starting || ending) {\n      this.delta = {\n        x: 0,\n        y: 0\n      };\n    } else {\n      this.delta = {\n        x: this[deltaSource].x - prevEvent[deltaSource].x,\n        y: this[deltaSource].y - prevEvent[deltaSource].y\n      };\n    }\n\n    this.dt = interaction.coords.delta.timeStamp;\n    this.duration = this.timeStamp - this.t0; // velocity and speed in pixels per second\n\n    this.velocity = extend({}, interaction.coords.velocity[deltaSource]);\n    this.speed = hypot(this.velocity.x, this.velocity.y);\n    this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null;\n  }\n\n  getSwipe() {\n    const interaction = this._interaction;\n\n    if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n      return null;\n    }\n\n    let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI;\n    const overlap = 22.5;\n\n    if (angle < 0) {\n      angle += 360;\n    }\n\n    const left = 135 - overlap <= angle && angle < 225 + overlap;\n    const up = 225 - overlap <= angle && angle < 315 + overlap;\n    const right = !left && (315 - overlap <= angle || angle < 45 + overlap);\n    const down = !up && 45 - overlap <= angle && angle < 135 + overlap;\n    return {\n      up,\n      down,\n      left,\n      right,\n      angle,\n      speed: interaction.prevEvent.speed,\n      velocity: {\n        x: interaction.prevEvent.velocityX,\n        y: interaction.prevEvent.velocityY\n      }\n    };\n  }\n\n  preventDefault() {}\n  /**\n   * Don't call listeners on the remaining targets\n   */\n\n\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true;\n  }\n  /**\n   * Don't call any other listeners (even on the current target)\n   */\n\n\n  stopPropagation() {\n    this.propagationStopped = true;\n  }\n\n} // getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\n\nObject.defineProperties(InteractEvent.prototype, {\n  pageX: {\n    get() {\n      return this.page.x;\n    },\n\n    set(value) {\n      this.page.x = value;\n    }\n\n  },\n  pageY: {\n    get() {\n      return this.page.y;\n    },\n\n    set(value) {\n      this.page.y = value;\n    }\n\n  },\n  clientX: {\n    get() {\n      return this.client.x;\n    },\n\n    set(value) {\n      this.client.x = value;\n    }\n\n  },\n  clientY: {\n    get() {\n      return this.client.y;\n    },\n\n    set(value) {\n      this.client.y = value;\n    }\n\n  },\n  dx: {\n    get() {\n      return this.delta.x;\n    },\n\n    set(value) {\n      this.delta.x = value;\n    }\n\n  },\n  dy: {\n    get() {\n      return this.delta.y;\n    },\n\n    set(value) {\n      this.delta.y = value;\n    }\n\n  },\n  velocityX: {\n    get() {\n      return this.velocity.x;\n    },\n\n    set(value) {\n      this.velocity.x = value;\n    }\n\n  },\n  velocityY: {\n    get() {\n      return this.velocity.y;\n    },\n\n    set(value) {\n      this.velocity.y = value;\n    }\n\n  }\n});\n//# sourceMappingURL=InteractEvent.js.map", "export default function isNonNativeEvent(type, actions) {\n  if (actions.phaselessTypes[type]) {\n    return true;\n  }\n\n  for (const name in actions.map) {\n    if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n      return true;\n    }\n  }\n\n  return false;\n}\n//# sourceMappingURL=isNonNativeEvent.js.map", "/* eslint-disable no-dupe-class-members */\nimport * as arr from \"../utils/arr.js\";\nimport browser from \"../utils/browser.js\";\nimport clone from \"../utils/clone.js\";\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from \"../utils/domUtils.js\";\nimport extend from \"../utils/extend.js\";\nimport is from \"../utils/is.js\";\nimport normalizeListeners from \"../utils/normalizeListeners.js\";\nimport { getWindow } from \"../utils/window.js\";\nimport { Eventable } from \"./Eventable.js\";\nimport isNonNativeEvent from \"./isNonNativeEvent.js\";\n\n/** */\nexport class Interactable {\n  /** @internal */\n  get _defaults() {\n    return {\n      base: {},\n      perAction: {},\n      actions: {}\n    };\n  }\n\n  /** */\n  constructor(target, options, defaultContext, scopeEvents) {\n    this.options = void 0;\n    this._actions = void 0;\n    this.target = void 0;\n    this.events = new Eventable();\n    this._context = void 0;\n    this._win = void 0;\n    this._doc = void 0;\n    this._scopeEvents = void 0;\n    this._rectChecker = void 0;\n    this._actions = options.actions;\n    this.target = target;\n    this._context = options.context || defaultContext;\n    this._win = getWindow(trySelector(target) ? this._context : target);\n    this._doc = this._win.document;\n    this._scopeEvents = scopeEvents;\n    this.set(options);\n  }\n\n  setOnEvents(actionName, phases) {\n    if (is.func(phases.onstart)) {\n      this.on(`${actionName}start`, phases.onstart);\n    }\n\n    if (is.func(phases.onmove)) {\n      this.on(`${actionName}move`, phases.onmove);\n    }\n\n    if (is.func(phases.onend)) {\n      this.on(`${actionName}end`, phases.onend);\n    }\n\n    if (is.func(phases.oninertiastart)) {\n      this.on(`${actionName}inertiastart`, phases.oninertiastart);\n    }\n\n    return this;\n  }\n\n  updatePerActionListeners(actionName, prev, cur) {\n    if (is.array(prev) || is.object(prev)) {\n      this.off(actionName, prev);\n    }\n\n    if (is.array(cur) || is.object(cur)) {\n      this.on(actionName, cur);\n    }\n  }\n\n  setPerAction(actionName, options) {\n    const defaults = this._defaults; // for all the default per-action options\n\n    for (const optionName_ in options) {\n      const optionName = optionName_;\n      const actionOptions = this.options[actionName];\n      const optionValue = options[optionName]; // remove old event listeners and add new ones\n\n      if (optionName === 'listeners') {\n        this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue);\n      } // if the option value is an array\n\n\n      if (is.array(optionValue)) {\n        actionOptions[optionName] = arr.from(optionValue);\n      } // if the option value is an object\n      else if (is.plainObject(optionValue)) {\n          // copy the object\n          actionOptions[optionName] = extend(actionOptions[optionName] || {}, clone(optionValue)); // set anabled field to true if it exists in the defaults\n\n          if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) {\n            actionOptions[optionName].enabled = optionValue.enabled !== false;\n          }\n        } // if the option value is a boolean and the default is an object\n        else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n            actionOptions[optionName].enabled = optionValue;\n          } // if it's anything else, do a plain assignment\n          else {\n              actionOptions[optionName] = optionValue;\n            }\n    }\n  }\n  /**\n   * The default function to get an Interactables bounding rect. Can be\n   * overridden using {@link Interactable.rectChecker}.\n   *\n   * @param {Element} [element] The element to measure.\n   * @return {Rect} The object's bounding rectangle.\n   */\n\n\n  getRect(element) {\n    element = element || (is.element(this.target) ? this.target : null);\n\n    if (is.string(this.target)) {\n      element = element || this._context.querySelector(this.target);\n    }\n\n    return getElementRect(element);\n  }\n  /**\n   * Returns or sets the function used to calculate the interactable's\n   * element's rectangle\n   *\n   * @param {function} [checker] A function which returns this Interactable's\n   * bounding rectangle. See {@link Interactable.getRect}\n   * @return {function | object} The checker function or this Interactable\n   */\n\n\n  rectChecker(checker) {\n    if (is.func(checker)) {\n      this._rectChecker = checker;\n\n      this.getRect = element => {\n        const rect = extend({}, this._rectChecker(element));\n\n        if (!('width' in rect)) {\n          rect.width = rect.right - rect.left;\n          rect.height = rect.bottom - rect.top;\n        }\n\n        return rect;\n      };\n\n      return this;\n    }\n\n    if (checker === null) {\n      delete this.getRect;\n      delete this._rectChecker;\n      return this;\n    }\n\n    return this.getRect;\n  }\n\n  _backCompatOption(optionName, newValue) {\n    if (trySelector(newValue) || is.object(newValue)) {\n      this.options[optionName] = newValue;\n\n      for (const action in this._actions.map) {\n        this.options[action][optionName] = newValue;\n      }\n\n      return this;\n    }\n\n    return this.options[optionName];\n  }\n  /**\n   * Gets or sets the origin of the Interactable's element.  The x and y\n   * of the origin will be subtracted from action event coordinates.\n   *\n   * @param {Element | object | string} [origin] An HTML or SVG Element whose\n   * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n   * or any CSS selector\n   *\n   * @return {object} The current origin or this Interactable\n   */\n\n\n  origin(newValue) {\n    return this._backCompatOption('origin', newValue);\n  }\n  /**\n   * Returns or sets the mouse coordinate types used to calculate the\n   * movement of the pointer.\n   *\n   * @param {string} [newValue] Use 'client' if you will be scrolling while\n   * interacting; Use 'page' if you want autoScroll to work\n   * @return {string | object} The current deltaSource or this Interactable\n   */\n\n\n  deltaSource(newValue) {\n    if (newValue === 'page' || newValue === 'client') {\n      this.options.deltaSource = newValue;\n      return this;\n    }\n\n    return this.options.deltaSource;\n  }\n  /**\n   * Gets the selector context Node of the Interactable. The default is\n   * `window.document`.\n   *\n   * @return {Node} The context Node of this Interactable\n   */\n\n\n  context() {\n    return this._context;\n  }\n\n  inContext(element) {\n    return this._context === element.ownerDocument || nodeContains(this._context, element);\n  }\n\n  testIgnoreAllow(options, targetNode, eventTarget) {\n    return !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) && this.testAllow(options.allowFrom, targetNode, eventTarget);\n  }\n\n  testAllow(allowFrom, targetNode, element) {\n    if (!allowFrom) {\n      return true;\n    }\n\n    if (!is.element(element)) {\n      return false;\n    }\n\n    if (is.string(allowFrom)) {\n      return matchesUpTo(element, allowFrom, targetNode);\n    } else if (is.element(allowFrom)) {\n      return nodeContains(allowFrom, element);\n    }\n\n    return false;\n  }\n\n  testIgnore(ignoreFrom, targetNode, element) {\n    if (!ignoreFrom || !is.element(element)) {\n      return false;\n    }\n\n    if (is.string(ignoreFrom)) {\n      return matchesUpTo(element, ignoreFrom, targetNode);\n    } else if (is.element(ignoreFrom)) {\n      return nodeContains(ignoreFrom, element);\n    }\n\n    return false;\n  }\n  /**\n   * Calls listeners for the given InteractEvent type bound globally\n   * and directly to this Interactable\n   *\n   * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n   * Interactable\n   * @return {Interactable} this Interactable\n   */\n\n\n  fire(iEvent) {\n    this.events.fire(iEvent);\n    return this;\n  }\n\n  _onOff(method, typeArg, listenerArg, options) {\n    if (is.object(typeArg) && !is.array(typeArg)) {\n      options = listenerArg;\n      listenerArg = null;\n    }\n\n    const addRemove = method === 'on' ? 'add' : 'remove';\n    const listeners = normalizeListeners(typeArg, listenerArg);\n\n    for (let type in listeners) {\n      if (type === 'wheel') {\n        type = browser.wheelEvent;\n      }\n\n      for (const listener of listeners[type]) {\n        // if it is an action event type\n        if (isNonNativeEvent(type, this._actions)) {\n          this.events[method](type, listener);\n        } // delegated event\n        else if (is.string(this.target)) {\n            this._scopeEvents[`${addRemove}Delegate`](this.target, this._context, type, listener, options);\n          } // remove listener from this Interactable's element\n          else {\n              this._scopeEvents[addRemove](this.target, type, listener, options);\n            }\n      }\n    }\n\n    return this;\n  }\n  /**\n   * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n   *\n   * @param {string | array | object} types The types of events to listen\n   * for\n   * @param {function | array | object} [listener] The event listener function(s)\n   * @param {object | boolean} [options] options object or useCapture flag for\n   * addEventListener\n   * @return {Interactable} This Interactable\n   */\n\n\n  on(types, listener, options) {\n    return this._onOff('on', types, listener, options);\n  }\n  /**\n   * Removes an InteractEvent, pointerEvent or DOM event listener.\n   *\n   * @param {string | array | object} types The types of events that were\n   * listened for\n   * @param {function | array | object} [listener] The event listener function(s)\n   * @param {object | boolean} [options] options object or useCapture flag for\n   * removeEventListener\n   * @return {Interactable} This Interactable\n   */\n\n\n  off(types, listener, options) {\n    return this._onOff('off', types, listener, options);\n  }\n  /**\n   * Reset the options of this Interactable\n   *\n   * @param {object} options The new settings to apply\n   * @return {object} This Interactable\n   */\n\n\n  set(options) {\n    const defaults = this._defaults;\n\n    if (!is.object(options)) {\n      options = {};\n    }\n\n    this.options = clone(defaults.base);\n\n    for (const actionName_ in this._actions.methodDict) {\n      const actionName = actionName_;\n      const methodName = this._actions.methodDict[actionName];\n      this.options[actionName] = {};\n      this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]));\n      this[methodName](options[actionName]);\n    }\n\n    for (const setting in options) {\n      if (is.func(this[setting])) {\n        this[setting](options[setting]);\n      }\n    }\n\n    return this;\n  }\n  /**\n   * Remove this interactable from the list of interactables and remove it's\n   * action capabilities and event listeners\n   */\n\n\n  unset() {\n    if (is.string(this.target)) {\n      // remove delegated events\n      for (const type in this._scopeEvents.delegatedEvents) {\n        const delegated = this._scopeEvents.delegatedEvents[type];\n\n        for (let i = delegated.length - 1; i >= 0; i--) {\n          const {\n            selector,\n            context,\n            listeners\n          } = delegated[i];\n\n          if (selector === this.target && context === this._context) {\n            delegated.splice(i, 1);\n          }\n\n          for (let l = listeners.length - 1; l >= 0; l--) {\n            this._scopeEvents.removeDelegate(this.target, this._context, type, listeners[l][0], listeners[l][1]);\n          }\n        }\n      }\n    } else {\n      this._scopeEvents.remove(this.target, 'all');\n    }\n  }\n\n}\n//# sourceMappingURL=Interactable.js.map", "import * as arr from \"../utils/arr.js\";\nimport * as domUtils from \"../utils/domUtils.js\";\nimport extend from \"../utils/extend.js\";\nimport is from \"../utils/is.js\";\nexport class InteractableSet {\n  // all set interactables\n  constructor(scope) {\n    this.list = [];\n    this.selectorMap = {};\n    this.scope = void 0;\n    this.scope = scope;\n    scope.addListeners({\n      'interactable:unset': ({\n        interactable\n      }) => {\n        const {\n          target,\n          _context: context\n        } = interactable;\n        const targetMappings = is.string(target) ? this.selectorMap[target] : target[this.scope.id];\n        const targetIndex = arr.findIndex(targetMappings, m => m.context === context);\n\n        if (targetMappings[targetIndex]) {\n          // Destroying mappingInfo's context and interactable\n          targetMappings[targetIndex].context = null;\n          targetMappings[targetIndex].interactable = null;\n        }\n\n        targetMappings.splice(targetIndex, 1);\n      }\n    });\n  }\n\n  new(target, options) {\n    options = extend(options || {}, {\n      actions: this.scope.actions\n    });\n    const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events);\n    const mappingInfo = {\n      context: interactable._context,\n      interactable\n    };\n    this.scope.addDocument(interactable._doc);\n    this.list.push(interactable);\n\n    if (is.string(target)) {\n      if (!this.selectorMap[target]) {\n        this.selectorMap[target] = [];\n      }\n\n      this.selectorMap[target].push(mappingInfo);\n    } else {\n      if (!interactable.target[this.scope.id]) {\n        Object.defineProperty(target, this.scope.id, {\n          value: [],\n          configurable: true\n        });\n      }\n\n      target[this.scope.id].push(mappingInfo);\n    }\n\n    this.scope.fire('interactable:new', {\n      target,\n      options,\n      interactable,\n      win: this.scope._win\n    });\n    return interactable;\n  }\n\n  get(target, options) {\n    const context = options && options.context || this.scope.document;\n    const isSelector = is.string(target);\n    const targetMappings = isSelector ? this.selectorMap[target] : target[this.scope.id];\n\n    if (!targetMappings) {\n      return null;\n    }\n\n    const found = arr.find(targetMappings, m => m.context === context && (isSelector || m.interactable.inContext(target)));\n    return found && found.interactable;\n  }\n\n  forEachMatch(node, callback) {\n    for (const interactable of this.list) {\n      let ret;\n\n      if ((is.string(interactable.target) // target is a selector and the element matches\n      ? is.element(node) && domUtils.matchesSelector(node, interactable.target) : // target is the element\n      node === interactable.target) && // the element is in context\n      interactable.inContext(node)) {\n        ret = callback(interactable);\n      }\n\n      if (ret !== undefined) {\n        return ret;\n      }\n    }\n  }\n\n}\n//# sourceMappingURL=InteractableSet.js.map", "function pointerExtend(dest, source) {\n  for (const prop in source) {\n    const prefixedPropREs = pointerExtend.prefixedPropREs;\n    let deprecated = false; // skip deprecated prefixed properties\n\n    for (const vendor in prefixedPropREs) {\n      if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {\n        deprecated = true;\n        break;\n      }\n    }\n\n    if (!deprecated && typeof source[prop] !== 'function') {\n      dest[prop] = source[prop];\n    }\n  }\n\n  return dest;\n}\n\npointerExtend.prefixedPropREs = {\n  webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/,\n  moz: /(Pressure)$/\n};\nexport default pointerExtend;\n//# sourceMappingURL=pointerExtend.js.map", "import browser from \"./browser.js\";\nimport dom from \"./domObjects.js\";\nimport * as domUtils from \"./domUtils.js\";\nimport hypot from \"./hypot.js\";\nimport is from \"./is.js\";\nimport pointerExtend from \"./pointerExtend.js\";\nexport function copyCoords(dest, src) {\n  dest.page = dest.page || {};\n  dest.page.x = src.page.x;\n  dest.page.y = src.page.y;\n  dest.client = dest.client || {};\n  dest.client.x = src.client.x;\n  dest.client.y = src.client.y;\n  dest.timeStamp = src.timeStamp;\n}\nexport function setCoordDeltas(targetObj, prev, cur) {\n  targetObj.page.x = cur.page.x - prev.page.x;\n  targetObj.page.y = cur.page.y - prev.page.y;\n  targetObj.client.x = cur.client.x - prev.client.x;\n  targetObj.client.y = cur.client.y - prev.client.y;\n  targetObj.timeStamp = cur.timeStamp - prev.timeStamp;\n}\nexport function setCoordVelocity(targetObj, delta) {\n  const dt = Math.max(delta.timeStamp / 1000, 0.001);\n  targetObj.page.x = delta.page.x / dt;\n  targetObj.page.y = delta.page.y / dt;\n  targetObj.client.x = delta.client.x / dt;\n  targetObj.client.y = delta.client.y / dt;\n  targetObj.timeStamp = dt;\n}\nexport function setZeroCoords(targetObj) {\n  targetObj.page.x = 0;\n  targetObj.page.y = 0;\n  targetObj.client.x = 0;\n  targetObj.client.y = 0;\n}\nexport function isNativePointer(pointer) {\n  return pointer instanceof dom.Event || pointer instanceof dom.Touch;\n} // Get specified X/Y coords for mouse or event.touches[0]\n\nexport function getXY(type, pointer, xy) {\n  xy = xy || {};\n  type = type || 'page';\n  xy.x = pointer[type + 'X'];\n  xy.y = pointer[type + 'Y'];\n  return xy;\n}\nexport function getPageXY(pointer, page) {\n  page = page || {\n    x: 0,\n    y: 0\n  }; // Opera Mobile handles the viewport and scrolling oddly\n\n  if (browser.isOperaMobile && isNativePointer(pointer)) {\n    getXY('screen', pointer, page);\n    page.x += window.scrollX;\n    page.y += window.scrollY;\n  } else {\n    getXY('page', pointer, page);\n  }\n\n  return page;\n}\nexport function getClientXY(pointer, client) {\n  client = client || {};\n\n  if (browser.isOperaMobile && isNativePointer(pointer)) {\n    // Opera Mobile handles the viewport and scrolling oddly\n    getXY('screen', pointer, client);\n  } else {\n    getXY('client', pointer, client);\n  }\n\n  return client;\n}\nexport function getPointerId(pointer) {\n  return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier;\n}\nexport function setCoords(dest, pointers, timeStamp) {\n  const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0];\n  getPageXY(pointer, dest.page);\n  getClientXY(pointer, dest.client);\n  dest.timeStamp = timeStamp;\n}\nexport function getTouchPair(event) {\n  const touches = []; // array of touches is supplied\n\n  if (is.array(event)) {\n    touches[0] = event[0];\n    touches[1] = event[1];\n  } // an event\n  else {\n      if (event.type === 'touchend') {\n        if (event.touches.length === 1) {\n          touches[0] = event.touches[0];\n          touches[1] = event.changedTouches[0];\n        } else if (event.touches.length === 0) {\n          touches[0] = event.changedTouches[0];\n          touches[1] = event.changedTouches[1];\n        }\n      } else {\n        touches[0] = event.touches[0];\n        touches[1] = event.touches[1];\n      }\n    }\n\n  return touches;\n}\nexport function pointerAverage(pointers) {\n  const average = {\n    pageX: 0,\n    pageY: 0,\n    clientX: 0,\n    clientY: 0,\n    screenX: 0,\n    screenY: 0\n  };\n\n  for (const pointer of pointers) {\n    for (const prop in average) {\n      average[prop] += pointer[prop];\n    }\n  }\n\n  for (const prop in average) {\n    average[prop] /= pointers.length;\n  }\n\n  return average;\n}\nexport function touchBBox(event) {\n  if (!event.length) {\n    return null;\n  }\n\n  const touches = getTouchPair(event);\n  const minX = Math.min(touches[0].pageX, touches[1].pageX);\n  const minY = Math.min(touches[0].pageY, touches[1].pageY);\n  const maxX = Math.max(touches[0].pageX, touches[1].pageX);\n  const maxY = Math.max(touches[0].pageY, touches[1].pageY);\n  return {\n    x: minX,\n    y: minY,\n    left: minX,\n    top: minY,\n    right: maxX,\n    bottom: maxY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nexport function touchDistance(event, deltaSource) {\n  const sourceX = deltaSource + 'X';\n  const sourceY = deltaSource + 'Y';\n  const touches = getTouchPair(event);\n  const dx = touches[0][sourceX] - touches[1][sourceX];\n  const dy = touches[0][sourceY] - touches[1][sourceY];\n  return hypot(dx, dy);\n}\nexport function touchAngle(event, deltaSource) {\n  const sourceX = deltaSource + 'X';\n  const sourceY = deltaSource + 'Y';\n  const touches = getTouchPair(event);\n  const dx = touches[1][sourceX] - touches[0][sourceX];\n  const dy = touches[1][sourceY] - touches[0][sourceY];\n  const angle = 180 * Math.atan2(dy, dx) / Math.PI;\n  return angle;\n}\nexport function getPointerType(pointer) {\n  return is.string(pointer.pointerType) ? pointer.pointerType : is.number(pointer.pointerType) ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType] // if the PointerEvent API isn't available, then the \"pointer\" must\n  // be either a MouseEvent, TouchEvent, or Touch object\n  : /touch/.test(pointer.type) || pointer instanceof dom.Touch ? 'touch' : 'mouse';\n} // [ event.target, event.currentTarget ]\n\nexport function getEventTargets(event) {\n  const path = is.func(event.composedPath) ? event.composedPath() : event.path;\n  return [domUtils.getActualElement(path ? path[0] : event.target), domUtils.getActualElement(event.currentTarget)];\n}\nexport function newCoords() {\n  return {\n    page: {\n      x: 0,\n      y: 0\n    },\n    client: {\n      x: 0,\n      y: 0\n    },\n    timeStamp: 0\n  };\n}\nexport function coordsToEvent(coords) {\n  const event = {\n    coords,\n\n    get page() {\n      return this.coords.page;\n    },\n\n    get client() {\n      return this.coords.client;\n    },\n\n    get timeStamp() {\n      return this.coords.timeStamp;\n    },\n\n    get pageX() {\n      return this.coords.page.x;\n    },\n\n    get pageY() {\n      return this.coords.page.y;\n    },\n\n    get clientX() {\n      return this.coords.client.x;\n    },\n\n    get clientY() {\n      return this.coords.client.y;\n    },\n\n    get pointerId() {\n      return this.coords.pointerId;\n    },\n\n    get target() {\n      return this.coords.target;\n    },\n\n    get type() {\n      return this.coords.type;\n    },\n\n    get pointerType() {\n      return this.coords.pointerType;\n    },\n\n    get buttons() {\n      return this.coords.buttons;\n    },\n\n    preventDefault() {}\n\n  };\n  return event;\n}\nexport { pointerExtend };\n//# sourceMappingURL=pointerUtils.js.map", "import { Scope } from \"./scope.js\";\nimport * as arr from \"../utils/arr.js\";\nimport * as domUtils from \"../utils/domUtils.js\";\nimport extend from \"../utils/extend.js\";\nimport is from \"../utils/is.js\";\nimport pExtend from \"../utils/pointerExtend.js\";\nimport * as pointerUtils from \"../utils/pointerUtils.js\";\n\nfunction install(scope) {\n  const targets = [];\n  const delegatedEvents = {};\n  const documents = [];\n  const eventsMethods = {\n    add,\n    remove,\n    addDelegate,\n    removeDelegate,\n    delegateListener,\n    delegateUseCapture,\n    delegatedEvents,\n    documents,\n    targets,\n    supportsOptions: false,\n    supportsPassive: false\n  }; // check if browser supports passive events and options arg\n\n  scope.document.createElement('div').addEventListener('test', null, {\n    get capture() {\n      return eventsMethods.supportsOptions = true;\n    },\n\n    get passive() {\n      return eventsMethods.supportsPassive = true;\n    }\n\n  });\n  scope.events = eventsMethods;\n\n  function add(eventTarget, type, listener, optionalArg) {\n    const options = getOptions(optionalArg);\n    let target = arr.find(targets, t => t.eventTarget === eventTarget);\n\n    if (!target) {\n      target = {\n        eventTarget,\n        events: {}\n      };\n      targets.push(target);\n    }\n\n    if (!target.events[type]) {\n      target.events[type] = [];\n    }\n\n    if (eventTarget.addEventListener && !arr.contains(target.events[type], listener)) {\n      eventTarget.addEventListener(type, listener, eventsMethods.supportsOptions ? options : options.capture);\n      target.events[type].push(listener);\n    }\n  }\n\n  function remove(eventTarget, type, listener, optionalArg) {\n    const options = getOptions(optionalArg);\n    const targetIndex = arr.findIndex(targets, t => t.eventTarget === eventTarget);\n    const target = targets[targetIndex];\n\n    if (!target || !target.events) {\n      return;\n    }\n\n    if (type === 'all') {\n      for (type in target.events) {\n        if (target.events.hasOwnProperty(type)) {\n          remove(eventTarget, type, 'all');\n        }\n      }\n\n      return;\n    }\n\n    let typeIsEmpty = false;\n    const typeListeners = target.events[type];\n\n    if (typeListeners) {\n      if (listener === 'all') {\n        for (let i = typeListeners.length - 1; i >= 0; i--) {\n          remove(eventTarget, type, typeListeners[i], options);\n        }\n\n        return;\n      } else {\n        for (let i = 0; i < typeListeners.length; i++) {\n          if (typeListeners[i] === listener) {\n            eventTarget.removeEventListener(type, listener, eventsMethods.supportsOptions ? options : options.capture);\n            typeListeners.splice(i, 1);\n\n            if (typeListeners.length === 0) {\n              delete target.events[type];\n              typeIsEmpty = true;\n            }\n\n            break;\n          }\n        }\n      }\n    }\n\n    if (typeIsEmpty && !Object.keys(target.events).length) {\n      targets.splice(targetIndex, 1);\n    }\n  }\n\n  function addDelegate(selector, context, type, listener, optionalArg) {\n    const options = getOptions(optionalArg);\n\n    if (!delegatedEvents[type]) {\n      delegatedEvents[type] = []; // add delegate listener functions\n\n      for (const doc of documents) {\n        add(doc, type, delegateListener);\n        add(doc, type, delegateUseCapture, true);\n      }\n    }\n\n    const delegates = delegatedEvents[type];\n    let delegate = arr.find(delegates, d => d.selector === selector && d.context === context);\n\n    if (!delegate) {\n      delegate = {\n        selector,\n        context,\n        listeners: []\n      };\n      delegates.push(delegate);\n    }\n\n    delegate.listeners.push([listener, options]);\n  }\n\n  function removeDelegate(selector, context, type, listener, optionalArg) {\n    const options = getOptions(optionalArg);\n    const delegates = delegatedEvents[type];\n    let matchFound = false;\n    let index;\n\n    if (!delegates) {\n      return;\n    } // count from last index of delegated to 0\n\n\n    for (index = delegates.length - 1; index >= 0; index--) {\n      const cur = delegates[index]; // look for matching selector and context Node\n\n      if (cur.selector === selector && cur.context === context) {\n        const {\n          listeners\n        } = cur; // each item of the listeners array is an array: [function, capture, passive]\n\n        for (let i = listeners.length - 1; i >= 0; i--) {\n          const [fn, {\n            capture,\n            passive\n          }] = listeners[i]; // check if the listener functions and capture and passive flags match\n\n          if (fn === listener && capture === options.capture && passive === options.passive) {\n            // remove the listener from the array of listeners\n            listeners.splice(i, 1); // if all listeners for this target have been removed\n            // remove the target from the delegates array\n\n            if (!listeners.length) {\n              delegates.splice(index, 1); // remove delegate function from context\n\n              remove(context, type, delegateListener);\n              remove(context, type, delegateUseCapture, true);\n            } // only remove one listener\n\n\n            matchFound = true;\n            break;\n          }\n        }\n\n        if (matchFound) {\n          break;\n        }\n      }\n    }\n  } // bound to the interactable context when a DOM event\n  // listener is added to a selector interactable\n\n\n  function delegateListener(event, optionalArg) {\n    const options = getOptions(optionalArg);\n    const fakeEvent = new FakeEvent(event);\n    const delegates = delegatedEvents[event.type];\n    const [eventTarget] = pointerUtils.getEventTargets(event);\n    let element = eventTarget; // climb up document tree looking for selector matches\n\n    while (is.element(element)) {\n      for (let i = 0; i < delegates.length; i++) {\n        const cur = delegates[i];\n        const {\n          selector,\n          context\n        } = cur;\n\n        if (domUtils.matchesSelector(element, selector) && domUtils.nodeContains(context, eventTarget) && domUtils.nodeContains(context, element)) {\n          const {\n            listeners\n          } = cur;\n          fakeEvent.currentTarget = element;\n\n          for (const [fn, {\n            capture,\n            passive\n          }] of listeners) {\n            if (capture === options.capture && passive === options.passive) {\n              fn(fakeEvent);\n            }\n          }\n        }\n      }\n\n      element = domUtils.parentNode(element);\n    }\n  }\n\n  function delegateUseCapture(event) {\n    return delegateListener.call(this, event, true);\n  } // for type inferrence\n\n\n  return eventsMethods;\n}\n\nclass FakeEvent {\n  constructor(originalEvent) {\n    this.currentTarget = void 0;\n    this.originalEvent = void 0;\n    this.type = void 0;\n    this.originalEvent = originalEvent; // duplicate the event so that currentTarget can be changed\n\n    pExtend(this, originalEvent);\n  }\n\n  preventOriginalDefault() {\n    this.originalEvent.preventDefault();\n  }\n\n  stopPropagation() {\n    this.originalEvent.stopPropagation();\n  }\n\n  stopImmediatePropagation() {\n    this.originalEvent.stopImmediatePropagation();\n  }\n\n}\n\nfunction getOptions(param) {\n  if (!is.object(param)) {\n    return {\n      capture: !!param,\n      passive: false\n    };\n  }\n\n  const options = extend({}, param);\n  options.capture = !!param.capture;\n  options.passive = !!param.passive;\n  return options;\n}\n\nexport default {\n  id: 'events',\n  install\n};\n//# sourceMappingURL=events.js.map", "import { window } from \"./window.js\";\nexport function warnOnce(method, message) {\n  let warned = false;\n  return function () {\n    if (!warned) {\n      window.console.warn(message);\n      warned = true;\n    }\n\n    return method.apply(this, arguments);\n  };\n}\nexport function copyAction(dest, src) {\n  dest.name = src.name;\n  dest.axis = src.axis;\n  dest.edges = src.edges;\n  return dest;\n}\n//# sourceMappingURL=misc.js.map", "/** @module interact */\nimport browser from \"../utils/browser.js\";\nimport * as domUtils from \"../utils/domUtils.js\";\nimport is from \"../utils/is.js\";\nimport * as pointerUtils from \"../utils/pointerUtils.js\";\nimport { warnOnce } from \"../utils/misc.js\";\nimport isNonNativeEvent from \"./isNonNativeEvent.js\";\nexport function createInteractStatic(scope) {\n  /**\n   * ```js\n   * interact('#draggable').draggable(true)\n   *\n   * var rectables = interact('rect')\n   * rectables\n   *   .gesturable(true)\n   *   .on('gesturemove', function (event) {\n   *       // ...\n   *   })\n   * ```\n   *\n   * The methods of this variable can be used to set elements as interactables\n   * and also to change various default settings.\n   *\n   * Calling it as a function and passing an element or a valid CSS selector\n   * string returns an Interactable object which has various methods to configure\n   * it.\n   *\n   * @global\n   *\n   * @param {Element | string} target The HTML or SVG Element to interact with\n   * or CSS selector\n   * @return {Interactable}\n   */\n  const interact = (target, options) => {\n    let interactable = scope.interactables.get(target, options);\n\n    if (!interactable) {\n      interactable = scope.interactables.new(target, options);\n      interactable.events.global = interact.globalEvents;\n    }\n\n    return interactable;\n  }; // expose the functions used to calculate multi-touch properties\n\n\n  interact.getPointerAverage = pointerUtils.pointerAverage;\n  interact.getTouchBBox = pointerUtils.touchBBox;\n  interact.getTouchDistance = pointerUtils.touchDistance;\n  interact.getTouchAngle = pointerUtils.touchAngle;\n  interact.getElementRect = domUtils.getElementRect;\n  interact.getElementClientRect = domUtils.getElementClientRect;\n  interact.matchesSelector = domUtils.matchesSelector;\n  interact.closest = domUtils.closest;\n  interact.globalEvents = {}; // eslint-disable-next-line no-undef\n\n  interact.version = \"1.10.2\";\n  interact.scope = scope;\n  /**\n  * Use a plugin\n  *\n  * @alias module:interact.use\n  *\n   */\n\n  interact.use = function (plugin, options) {\n    this.scope.usePlugin(plugin, options);\n    return this;\n  };\n  /**\n   * Check if an element or selector has been set with the {@link interact}\n   * function\n   *\n   * @alias module:interact.isSet\n   *\n   * @param {Target} target The Element or string being searched for\n   * @param {object} options\n   * @return {boolean} Indicates if the element or CSS selector was previously\n   * passed to interact\n   */\n\n\n  interact.isSet = function (target, options) {\n    return !!this.scope.interactables.get(target, options && options.context);\n  };\n  /**\n   * @deprecated\n   * Add a global listener for an InteractEvent or adds a DOM event to `document`\n   *\n   * @alias module:interact.on\n   *\n   * @param {string | array | object} type The types of events to listen for\n   * @param {function} listener The function event (s)\n   * @param {object | boolean} [options] object or useCapture flag for\n   * addEventListener\n   * @return {object} interact\n   */\n\n\n  interact.on = warnOnce(function on(type, listener, options) {\n    if (is.string(type) && type.search(' ') !== -1) {\n      type = type.trim().split(/ +/);\n    }\n\n    if (is.array(type)) {\n      for (const eventType of type) {\n        this.on(eventType, listener, options);\n      }\n\n      return this;\n    }\n\n    if (is.object(type)) {\n      for (const prop in type) {\n        this.on(prop, type[prop], listener);\n      }\n\n      return this;\n    } // if it is an InteractEvent type, add listener to globalEvents\n\n\n    if (isNonNativeEvent(type, this.scope.actions)) {\n      // if this type of event was never bound\n      if (!this.globalEvents[type]) {\n        this.globalEvents[type] = [listener];\n      } else {\n        this.globalEvents[type].push(listener);\n      }\n    } // If non InteractEvent type, addEventListener to document\n    else {\n        this.scope.events.add(this.scope.document, type, listener, {\n          options\n        });\n      }\n\n    return this;\n  }, 'The interact.on() method is being deprecated');\n  /**\n   * @deprecated\n   * Removes a global InteractEvent listener or DOM event from `document`\n   *\n   * @alias module:interact.off\n   *\n   * @param {string | array | object} type The types of events that were listened\n   * for\n   * @param {function} listener The listener function to be removed\n   * @param {object | boolean} options [options] object or useCapture flag for\n   * removeEventListener\n   * @return {object} interact\n   */\n\n  interact.off = warnOnce(function off(type, listener, options) {\n    if (is.string(type) && type.search(' ') !== -1) {\n      type = type.trim().split(/ +/);\n    }\n\n    if (is.array(type)) {\n      for (const eventType of type) {\n        this.off(eventType, listener, options);\n      }\n\n      return this;\n    }\n\n    if (is.object(type)) {\n      for (const prop in type) {\n        this.off(prop, type[prop], listener);\n      }\n\n      return this;\n    }\n\n    if (isNonNativeEvent(type, this.scope.actions)) {\n      let index;\n\n      if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n        this.globalEvents[type].splice(index, 1);\n      }\n    } else {\n      this.scope.events.remove(this.scope.document, type, listener, options);\n    }\n\n    return this;\n  }, 'The interact.off() method is being deprecated');\n\n  interact.debug = function () {\n    return this.scope;\n  };\n  /**\n   * @alias module:interact.supportsTouch\n   *\n   * @return {boolean} Whether or not the browser supports touch input\n   */\n\n\n  interact.supportsTouch = function () {\n    return browser.supportsTouch;\n  };\n  /**\n   * @alias module:interact.supportsPointerEvent\n   *\n   * @return {boolean} Whether or not the browser supports PointerEvents\n   */\n\n\n  interact.supportsPointerEvent = function () {\n    return browser.supportsPointerEvent;\n  };\n  /**\n   * Cancels all interactions (end events are not fired)\n   *\n   * @alias module:interact.stop\n   *\n   * @return {object} interact\n   */\n\n\n  interact.stop = function () {\n    for (const interaction of this.scope.interactions.list) {\n      interaction.stop();\n    }\n\n    return this;\n  };\n  /**\n   * Returns or sets the distance the pointer must be moved before an action\n   * sequence occurs. This also affects tolerance for tap events.\n   *\n   * @alias module:interact.pointerMoveTolerance\n   *\n   * @param {number} [newValue] The movement from the start position must be greater than this value\n   * @return {interact | number}\n   */\n\n\n  interact.pointerMoveTolerance = function (newValue) {\n    if (is.number(newValue)) {\n      this.scope.interactions.pointerMoveTolerance = newValue;\n      return this;\n    }\n\n    return this.scope.interactions.pointerMoveTolerance;\n  };\n\n  interact.addDocument = function (doc, options) {\n    this.scope.addDocument(doc, options);\n  };\n\n  interact.removeDocument = function (doc) {\n    this.scope.removeDocument(doc);\n  };\n\n  return interact;\n}\n//# sourceMappingURL=interactStatic.js.map", "export class PointerInfo {\n  constructor(id, pointer, event, downTime, downTarget) {\n    this.id = void 0;\n    this.pointer = void 0;\n    this.event = void 0;\n    this.downTime = void 0;\n    this.downTarget = void 0;\n    this.id = id;\n    this.pointer = pointer;\n    this.event = event;\n    this.downTime = downTime;\n    this.downTarget = downTarget;\n  }\n\n}\n//# sourceMappingURL=PointerInfo.js.map", "import * as arr from \"../utils/arr.js\";\nimport extend from \"../utils/extend.js\";\nimport hypot from \"../utils/hypot.js\";\nimport { warnOnce, copyAction } from \"../utils/misc.js\";\nimport * as pointerUtils from \"../utils/pointerUtils.js\";\nimport * as rectUtils from \"../utils/rect.js\";\nimport { InteractEvent } from \"./InteractEvent.js\";\nimport { PointerInfo } from \"./PointerInfo.js\";\nexport let _ProxyValues;\n\n(function (_ProxyValues) {\n  _ProxyValues[\"interactable\"] = \"\";\n  _ProxyValues[\"element\"] = \"\";\n  _ProxyValues[\"prepared\"] = \"\";\n  _ProxyValues[\"pointerIsDown\"] = \"\";\n  _ProxyValues[\"pointerWasMoved\"] = \"\";\n  _ProxyValues[\"_proxy\"] = \"\";\n})(_ProxyValues || (_ProxyValues = {}));\n\nexport let _ProxyMethods;\n\n(function (_ProxyMethods) {\n  _ProxyMethods[\"start\"] = \"\";\n  _ProxyMethods[\"move\"] = \"\";\n  _ProxyMethods[\"end\"] = \"\";\n  _ProxyMethods[\"stop\"] = \"\";\n  _ProxyMethods[\"interacting\"] = \"\";\n})(_ProxyMethods || (_ProxyMethods = {}));\n\nlet idCounter = 0;\nexport class Interaction {\n  // current interactable being interacted with\n  // the target element of the interactable\n  // action that's ready to be fired on next move event\n  // keep track of added pointers\n  // pointerdown/mousedown/touchstart event\n  // previous action event\n\n  /** @internal */\n  get pointerMoveTolerance() {\n    return 1;\n  }\n  /**\n   * @alias Interaction.prototype.move\n   */\n\n\n  /** */\n  constructor({\n    pointerType,\n    scopeFire\n  }) {\n    this.interactable = null;\n    this.element = null;\n    this.rect = void 0;\n    this._rects = void 0;\n    this.edges = void 0;\n    this._scopeFire = void 0;\n    this.prepared = {\n      name: null,\n      axis: null,\n      edges: null\n    };\n    this.pointerType = void 0;\n    this.pointers = [];\n    this.downEvent = null;\n    this.downPointer = {};\n    this._latestPointer = {\n      pointer: null,\n      event: null,\n      eventTarget: null\n    };\n    this.prevEvent = null;\n    this.pointerIsDown = false;\n    this.pointerWasMoved = false;\n    this._interacting = false;\n    this._ending = false;\n    this._stopped = true;\n    this._proxy = null;\n    this.simulation = null;\n    this.doMove = warnOnce(function (signalArg) {\n      this.move(signalArg);\n    }, 'The interaction.doMove() method has been renamed to interaction.move()');\n    this.coords = {\n      // Starting InteractEvent pointer coordinates\n      start: pointerUtils.newCoords(),\n      // Previous native pointer move event coordinates\n      prev: pointerUtils.newCoords(),\n      // current native pointer move event coordinates\n      cur: pointerUtils.newCoords(),\n      // Change in coordinates and time of the pointer\n      delta: pointerUtils.newCoords(),\n      // pointer velocity\n      velocity: pointerUtils.newCoords()\n    };\n    this._id = idCounter++;\n    this._scopeFire = scopeFire;\n    this.pointerType = pointerType;\n    const that = this;\n    this._proxy = {};\n\n    for (const key in _ProxyValues) {\n      Object.defineProperty(this._proxy, key, {\n        get() {\n          return that[key];\n        }\n\n      });\n    }\n\n    for (const key in _ProxyMethods) {\n      Object.defineProperty(this._proxy, key, {\n        value: (...args) => that[key](...args)\n      });\n    }\n\n    this._scopeFire('interactions:new', {\n      interaction: this\n    });\n  }\n\n  pointerDown(pointer, event, eventTarget) {\n    const pointerIndex = this.updatePointer(pointer, event, eventTarget, true);\n    const pointerInfo = this.pointers[pointerIndex];\n\n    this._scopeFire('interactions:down', {\n      pointer,\n      event,\n      eventTarget,\n      pointerIndex,\n      pointerInfo,\n      type: 'down',\n      interaction: this\n    });\n  }\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable({\n   *     // disable the default drag start by down->move\n   *     manualStart: true\n   *   })\n   *   // start dragging after the user holds the pointer down\n   *   .on('hold', function (event) {\n   *     var interaction = event.interaction\n   *\n   *     if (!interaction.interacting()) {\n   *       interaction.start({ name: 'drag' },\n   *                         event.interactable,\n   *                         event.currentTarget)\n   *     }\n   * })\n   * ```\n   *\n   * Start an action with the given Interactable and Element as tartgets. The\n   * action must be enabled for the target Interactable and an appropriate\n   * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n   *\n   * Use it with `interactable.<action>able({ manualStart: false })` to always\n   * [start actions manually](https://github.com/taye/interact.js/issues/114)\n   *\n   * @param {object} action   The action to be performed - drag, resize, etc.\n   * @param {Interactable} target  The Interactable to target\n   * @param {Element} element The DOM Element to target\n   * @return {Boolean} Whether the interaction was successfully started\n   */\n\n\n  start(action, interactable, element) {\n    if (this.interacting() || !this.pointerIsDown || this.pointers.length < (action.name === 'gesture' ? 2 : 1) || !interactable.options[action.name].enabled) {\n      return false;\n    }\n\n    copyAction(this.prepared, action);\n    this.interactable = interactable;\n    this.element = element;\n    this.rect = interactable.getRect(element);\n    this.edges = this.prepared.edges ? extend({}, this.prepared.edges) : {\n      left: true,\n      right: true,\n      top: true,\n      bottom: true\n    };\n    this._stopped = false;\n    this._interacting = this._doPhase({\n      interaction: this,\n      event: this.downEvent,\n      phase: 'start'\n    }) && !this._stopped;\n    return this._interacting;\n  }\n\n  pointerMove(pointer, event, eventTarget) {\n    if (!this.simulation && !(this.modification && this.modification.endResult)) {\n      this.updatePointer(pointer, event, eventTarget, false);\n    }\n\n    const duplicateMove = this.coords.cur.page.x === this.coords.prev.page.x && this.coords.cur.page.y === this.coords.prev.page.y && this.coords.cur.client.x === this.coords.prev.client.x && this.coords.cur.client.y === this.coords.prev.client.y;\n    let dx;\n    let dy; // register movement greater than pointerMoveTolerance\n\n    if (this.pointerIsDown && !this.pointerWasMoved) {\n      dx = this.coords.cur.client.x - this.coords.start.client.x;\n      dy = this.coords.cur.client.y - this.coords.start.client.y;\n      this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance;\n    }\n\n    const pointerIndex = this.getPointerIndex(pointer);\n    const signalArg = {\n      pointer,\n      pointerIndex,\n      pointerInfo: this.pointers[pointerIndex],\n      event,\n      type: 'move',\n      eventTarget,\n      dx,\n      dy,\n      duplicate: duplicateMove,\n      interaction: this\n    };\n\n    if (!duplicateMove) {\n      // set pointer coordinate, time changes and velocity\n      pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta);\n    }\n\n    this._scopeFire('interactions:move', signalArg);\n\n    if (!duplicateMove && !this.simulation) {\n      // if interacting, fire an 'action-move' signal etc\n      if (this.interacting()) {\n        signalArg.type = null;\n        this.move(signalArg);\n      }\n\n      if (this.pointerWasMoved) {\n        pointerUtils.copyCoords(this.coords.prev, this.coords.cur);\n      }\n    }\n  }\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable(true)\n   *   .on('dragmove', function (event) {\n   *     if (someCondition) {\n   *       // change the snap settings\n   *       event.interactable.draggable({ snap: { targets: [] }})\n   *       // fire another move event with re-calculated snap\n   *       event.interaction.move()\n   *     }\n   *   })\n   * ```\n   *\n   * Force a move of the current action at the same coordinates. Useful if\n   * snap/restrict has been changed and you want a movement with the new\n   * settings.\n   */\n\n\n  move(signalArg) {\n    if (!signalArg || !signalArg.event) {\n      pointerUtils.setZeroCoords(this.coords.delta);\n    }\n\n    signalArg = extend({\n      pointer: this._latestPointer.pointer,\n      event: this._latestPointer.event,\n      eventTarget: this._latestPointer.eventTarget,\n      interaction: this\n    }, signalArg || {});\n    signalArg.phase = 'move';\n\n    this._doPhase(signalArg);\n  } // End interact move events and stop auto-scroll unless simulation is running\n\n\n  pointerUp(pointer, event, eventTarget, curEventTarget) {\n    let pointerIndex = this.getPointerIndex(pointer);\n\n    if (pointerIndex === -1) {\n      pointerIndex = this.updatePointer(pointer, event, eventTarget, false);\n    }\n\n    const type = /cancel$/i.test(event.type) ? 'cancel' : 'up';\n\n    this._scopeFire(`interactions:${type}`, {\n      pointer,\n      pointerIndex,\n      pointerInfo: this.pointers[pointerIndex],\n      event,\n      eventTarget,\n      type: type,\n      curEventTarget,\n      interaction: this\n    });\n\n    if (!this.simulation) {\n      this.end(event);\n    }\n\n    this.removePointer(pointer, event);\n  }\n\n  documentBlur(event) {\n    this.end(event);\n\n    this._scopeFire('interactions:blur', {\n      event,\n      type: 'blur',\n      interaction: this\n    });\n  }\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable(true)\n   *   .on('move', function (event) {\n   *     if (event.pageX > 1000) {\n   *       // end the current action\n   *       event.interaction.end()\n   *       // stop all further listeners from being called\n   *       event.stopImmediatePropagation()\n   *     }\n   *   })\n   * ```\n   *\n   * @param {PointerEvent} [event]\n   */\n\n\n  end(event) {\n    this._ending = true;\n    event = event || this._latestPointer.event;\n    let endPhaseResult;\n\n    if (this.interacting()) {\n      endPhaseResult = this._doPhase({\n        event,\n        interaction: this,\n        phase: 'end'\n      });\n    }\n\n    this._ending = false;\n\n    if (endPhaseResult === true) {\n      this.stop();\n    }\n  }\n\n  currentAction() {\n    return this._interacting ? this.prepared.name : null;\n  }\n\n  interacting() {\n    return this._interacting;\n  }\n  /** */\n\n\n  stop() {\n    this._scopeFire('interactions:stop', {\n      interaction: this\n    });\n\n    this.interactable = this.element = null;\n    this._interacting = false;\n    this._stopped = true;\n    this.prepared.name = this.prevEvent = null;\n  }\n\n  getPointerIndex(pointer) {\n    const pointerId = pointerUtils.getPointerId(pointer); // mouse and pen interactions may have only one pointer\n\n    return this.pointerType === 'mouse' || this.pointerType === 'pen' ? this.pointers.length - 1 : arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId);\n  }\n\n  getPointerInfo(pointer) {\n    return this.pointers[this.getPointerIndex(pointer)];\n  }\n\n  updatePointer(pointer, event, eventTarget, down) {\n    const id = pointerUtils.getPointerId(pointer);\n    let pointerIndex = this.getPointerIndex(pointer);\n    let pointerInfo = this.pointers[pointerIndex];\n    down = down === false ? false : down || /(down|start)$/i.test(event.type);\n\n    if (!pointerInfo) {\n      pointerInfo = new PointerInfo(id, pointer, event, null, null);\n      pointerIndex = this.pointers.length;\n      this.pointers.push(pointerInfo);\n    } else {\n      pointerInfo.pointer = pointer;\n    }\n\n    pointerUtils.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now());\n    pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur);\n\n    if (down) {\n      this.pointerIsDown = true;\n      pointerInfo.downTime = this.coords.cur.timeStamp;\n      pointerInfo.downTarget = eventTarget;\n      pointerUtils.pointerExtend(this.downPointer, pointer);\n\n      if (!this.interacting()) {\n        pointerUtils.copyCoords(this.coords.start, this.coords.cur);\n        pointerUtils.copyCoords(this.coords.prev, this.coords.cur);\n        this.downEvent = event;\n        this.pointerWasMoved = false;\n      }\n    }\n\n    this._updateLatestPointer(pointer, event, eventTarget);\n\n    this._scopeFire('interactions:update-pointer', {\n      pointer,\n      event,\n      eventTarget,\n      down,\n      pointerInfo,\n      pointerIndex,\n      interaction: this\n    });\n\n    return pointerIndex;\n  }\n\n  removePointer(pointer, event) {\n    const pointerIndex = this.getPointerIndex(pointer);\n\n    if (pointerIndex === -1) {\n      return;\n    }\n\n    const pointerInfo = this.pointers[pointerIndex];\n\n    this._scopeFire('interactions:remove-pointer', {\n      pointer,\n      event,\n      eventTarget: null,\n      pointerIndex,\n      pointerInfo,\n      interaction: this\n    });\n\n    this.pointers.splice(pointerIndex, 1);\n    this.pointerIsDown = false;\n  }\n\n  _updateLatestPointer(pointer, event, eventTarget) {\n    this._latestPointer.pointer = pointer;\n    this._latestPointer.event = event;\n    this._latestPointer.eventTarget = eventTarget;\n  }\n\n  destroy() {\n    this._latestPointer.pointer = null;\n    this._latestPointer.event = null;\n    this._latestPointer.eventTarget = null;\n  }\n\n  _createPreparedEvent(event, phase, preEnd, type) {\n    return new InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type);\n  }\n\n  _fireEvent(iEvent) {\n    this.interactable.fire(iEvent);\n\n    if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n      this.prevEvent = iEvent;\n    }\n  }\n\n  _doPhase(signalArg) {\n    const {\n      event,\n      phase,\n      preEnd,\n      type\n    } = signalArg;\n    const {\n      rect\n    } = this;\n\n    if (rect && phase === 'move') {\n      // update the rect changes due to pointer move\n      rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource]);\n      rect.width = rect.right - rect.left;\n      rect.height = rect.bottom - rect.top;\n    }\n\n    const beforeResult = this._scopeFire(`interactions:before-action-${phase}`, signalArg);\n\n    if (beforeResult === false) {\n      return false;\n    }\n\n    const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type);\n\n    this._scopeFire(`interactions:action-${phase}`, signalArg);\n\n    if (phase === 'start') {\n      this.prevEvent = iEvent;\n    }\n\n    this._fireEvent(iEvent);\n\n    this._scopeFire(`interactions:after-action-${phase}`, signalArg);\n\n    return true;\n  }\n\n  _now() {\n    return Date.now();\n  }\n\n}\nexport default Interaction;\nexport { PointerInfo };\n//# sourceMappingURL=Interaction.js.map", "import { Interactable } from \"./Interactable.js\";\nimport { matchesSelector, nodeContains } from \"../utils/domUtils.js\";\nimport is from \"../utils/is.js\";\nimport { getWindow } from \"../utils/window.js\";\n\nfunction preventDefault(newValue) {\n  if (/^(always|never|auto)$/.test(newValue)) {\n    this.options.preventDefault = newValue;\n    return this;\n  }\n\n  if (is.bool(newValue)) {\n    this.options.preventDefault = newValue ? 'always' : 'never';\n    return this;\n  }\n\n  return this.options.preventDefault;\n}\n\nfunction checkAndPreventDefault(interactable, scope, event) {\n  const setting = interactable.options.preventDefault;\n\n  if (setting === 'never') {\n    return;\n  }\n\n  if (setting === 'always') {\n    event.preventDefault();\n    return;\n  } // setting === 'auto'\n  // if the browser supports passive event listeners and isn't running on iOS,\n  // don't preventDefault of touch{start,move} events. CSS touch-action and\n  // user-select should be used instead of calling event.preventDefault().\n\n\n  if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n    const doc = getWindow(event.target).document;\n    const docOptions = scope.getDocOptions(doc);\n\n    if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n      return;\n    }\n  } // don't preventDefault of pointerdown events\n\n\n  if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n    return;\n  } // don't preventDefault on editable elements\n\n\n  if (is.element(event.target) && matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) {\n    return;\n  }\n\n  event.preventDefault();\n}\n\nfunction onInteractionEvent({\n  interaction,\n  event\n}) {\n  if (interaction.interactable) {\n    interaction.interactable.checkAndPreventDefault(event);\n  }\n}\n\nexport function install(scope) {\n  /** @lends Interactable */\n  const {\n    Interactable\n  } = scope;\n  /**\n   * Returns or sets whether to prevent the browser's default behaviour in\n   * response to pointer events. Can be set to:\n   *  - `'always'` to always prevent\n   *  - `'never'` to never prevent\n   *  - `'auto'` to let interact.js try to determine what would be best\n   *\n   * @param {string} [newValue] `'always'`, `'never'` or `'auto'`\n   * @return {string | Interactable} The current setting or this Interactable\n   */\n\n  Interactable.prototype.preventDefault = preventDefault;\n\n  Interactable.prototype.checkAndPreventDefault = function (event) {\n    return checkAndPreventDefault(this, scope, event);\n  }; // prevent native HTML5 drag on interact.js target elements\n\n\n  scope.interactions.docEvents.push({\n    type: 'dragstart',\n\n    listener(event) {\n      for (const interaction of scope.interactions.list) {\n        if (interaction.element && (interaction.element === event.target || nodeContains(interaction.element, event.target))) {\n          interaction.interactable.checkAndPreventDefault(event);\n          return;\n        }\n      }\n    }\n\n  });\n}\nexport default {\n  id: 'core/interactablePreventDefault',\n  install,\n  listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n    acc[`interactions:${eventType}`] = onInteractionEvent;\n    return acc;\n  }, {})\n};\n//# sourceMappingURL=interactablePreventDefault.js.map", "import * as dom from \"../utils/domUtils.js\";\nconst finder = {\n  methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'],\n\n  search(details) {\n    for (const method of finder.methodOrder) {\n      const interaction = finder[method](details);\n\n      if (interaction) {\n        return interaction;\n      }\n    }\n\n    return null;\n  },\n\n  // try to resume simulation with a new pointer\n  simulationResume({\n    pointerType,\n    eventType,\n    eventTarget,\n    scope\n  }) {\n    if (!/down|start/i.test(eventType)) {\n      return null;\n    }\n\n    for (const interaction of scope.interactions.list) {\n      let element = eventTarget;\n\n      if (interaction.simulation && interaction.simulation.allowResume && interaction.pointerType === pointerType) {\n        while (element) {\n          // if the element is the interaction element\n          if (element === interaction.element) {\n            return interaction;\n          }\n\n          element = dom.parentNode(element);\n        }\n      }\n    }\n\n    return null;\n  },\n\n  // if it's a mouse or pen interaction\n  mouseOrPen({\n    pointerId,\n    pointerType,\n    eventType,\n    scope\n  }) {\n    if (pointerType !== 'mouse' && pointerType !== 'pen') {\n      return null;\n    }\n\n    let firstNonActive;\n\n    for (const interaction of scope.interactions.list) {\n      if (interaction.pointerType === pointerType) {\n        // if it's a down event, skip interactions with running simulations\n        if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n          continue;\n        } // if the interaction is active, return it immediately\n\n\n        if (interaction.interacting()) {\n          return interaction;\n        } // otherwise save it and look for another active interaction\n        else if (!firstNonActive) {\n            firstNonActive = interaction;\n          }\n      }\n    } // if no active mouse interaction was found use the first inactive mouse\n    // interaction\n\n\n    if (firstNonActive) {\n      return firstNonActive;\n    } // find any mouse or pen interaction.\n    // ignore the interaction if the eventType is a *down, and a simulation\n    // is active\n\n\n    for (const interaction of scope.interactions.list) {\n      if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n        return interaction;\n      }\n    }\n\n    return null;\n  },\n\n  // get interaction that has this pointer\n  hasPointer({\n    pointerId,\n    scope\n  }) {\n    for (const interaction of scope.interactions.list) {\n      if (hasPointerId(interaction, pointerId)) {\n        return interaction;\n      }\n    }\n\n    return null;\n  },\n\n  // get first idle interaction with a matching pointerType\n  idle({\n    pointerType,\n    scope\n  }) {\n    for (const interaction of scope.interactions.list) {\n      // if there's already a pointer held down\n      if (interaction.pointers.length === 1) {\n        const target = interaction.interactable; // don't add this pointer if there is a target interactable and it\n        // isn't gesturable\n\n        if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n          continue;\n        }\n      } // maximum of 2 pointers per interaction\n      else if (interaction.pointers.length >= 2) {\n          continue;\n        }\n\n      if (!interaction.interacting() && pointerType === interaction.pointerType) {\n        return interaction;\n      }\n    }\n\n    return null;\n  }\n\n};\n\nfunction hasPointerId(interaction, pointerId) {\n  return interaction.pointers.some(({\n    id\n  }) => id === pointerId);\n}\n\nexport default finder;\n//# sourceMappingURL=interactionFinder.js.map", "import { Scope, SignalArgs } from \"./scope.js\";\nimport browser from \"../utils/browser.js\";\nimport domObjects from \"../utils/domObjects.js\";\nimport { nodeContains } from \"../utils/domUtils.js\";\nimport * as pointerUtils from \"../utils/pointerUtils.js\";\nimport InteractionBase from \"./Interaction.js\";\nimport interactablePreventDefault from \"./interactablePreventDefault.js\";\nimport finder from \"./interactionFinder.js\";\nconst methodNames = ['pointerDown', 'pointerMove', 'pointerUp', 'updatePointer', 'removePointer', 'windowBlur'];\n\nfunction install(scope) {\n  const listeners = {};\n\n  for (const method of methodNames) {\n    listeners[method] = doOnInteractions(method, scope);\n  }\n\n  const pEventTypes = browser.pEventTypes;\n  let docEvents;\n\n  if (domObjects.PointerEvent) {\n    docEvents = [{\n      type: pEventTypes.down,\n      listener: releasePointersOnRemovedEls\n    }, {\n      type: pEventTypes.down,\n      listener: listeners.pointerDown\n    }, {\n      type: pEventTypes.move,\n      listener: listeners.pointerMove\n    }, {\n      type: pEventTypes.up,\n      listener: listeners.pointerUp\n    }, {\n      type: pEventTypes.cancel,\n      listener: listeners.pointerUp\n    }];\n  } else {\n    docEvents = [{\n      type: 'mousedown',\n      listener: listeners.pointerDown\n    }, {\n      type: 'mousemove',\n      listener: listeners.pointerMove\n    }, {\n      type: 'mouseup',\n      listener: listeners.pointerUp\n    }, {\n      type: 'touchstart',\n      listener: releasePointersOnRemovedEls\n    }, {\n      type: 'touchstart',\n      listener: listeners.pointerDown\n    }, {\n      type: 'touchmove',\n      listener: listeners.pointerMove\n    }, {\n      type: 'touchend',\n      listener: listeners.pointerUp\n    }, {\n      type: 'touchcancel',\n      listener: listeners.pointerUp\n    }];\n  }\n\n  docEvents.push({\n    type: 'blur',\n\n    listener(event) {\n      for (const interaction of scope.interactions.list) {\n        interaction.documentBlur(event);\n      }\n    }\n\n  }); // for ignoring browser's simulated mouse events\n\n  scope.prevTouchTime = 0;\n  scope.Interaction = class extends InteractionBase {\n    get pointerMoveTolerance() {\n      return scope.interactions.pointerMoveTolerance;\n    }\n\n    set pointerMoveTolerance(value) {\n      scope.interactions.pointerMoveTolerance = value;\n    }\n\n    _now() {\n      return scope.now();\n    }\n\n  };\n  scope.interactions = {\n    // all active and idle interactions\n    list: [],\n\n    new(options) {\n      options.scopeFire = (name, arg) => scope.fire(name, arg);\n\n      const interaction = new scope.Interaction(options);\n      scope.interactions.list.push(interaction);\n      return interaction;\n    },\n\n    listeners,\n    docEvents,\n    pointerMoveTolerance: 1\n  };\n\n  function releasePointersOnRemovedEls() {\n    // for all inactive touch interactions with pointers down\n    for (const interaction of scope.interactions.list) {\n      if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n        continue;\n      } // if a pointer is down on an element that is no longer in the DOM tree\n\n\n      for (const pointer of interaction.pointers) {\n        if (!scope.documents.some(({\n          doc\n        }) => nodeContains(doc, pointer.downTarget))) {\n          // remove the pointer from the interaction\n          interaction.removePointer(pointer.pointer, pointer.event);\n        }\n      }\n    }\n  }\n\n  scope.usePlugin(interactablePreventDefault);\n}\n\nfunction doOnInteractions(method, scope) {\n  return function (event) {\n    const interactions = scope.interactions.list;\n    const pointerType = pointerUtils.getPointerType(event);\n    const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event);\n    const matches = []; // [ [pointer, interaction], ...]\n\n    if (/^touch/.test(event.type)) {\n      scope.prevTouchTime = scope.now(); // @ts-expect-error\n\n      for (const changedTouch of event.changedTouches) {\n        const pointer = changedTouch;\n        const pointerId = pointerUtils.getPointerId(pointer);\n        const searchDetails = {\n          pointer,\n          pointerId,\n          pointerType,\n          eventType: event.type,\n          eventTarget,\n          curEventTarget,\n          scope\n        };\n        const interaction = getInteraction(searchDetails);\n        matches.push([searchDetails.pointer, searchDetails.eventTarget, searchDetails.curEventTarget, interaction]);\n      }\n    } else {\n      let invalidPointer = false;\n\n      if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n        // ignore mouse events while touch interactions are active\n        for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n          invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown;\n        } // try to ignore mouse events that are simulated by the browser\n        // after a touch event\n\n\n        invalidPointer = invalidPointer || scope.now() - scope.prevTouchTime < 500 || // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n        event.timeStamp === 0;\n      }\n\n      if (!invalidPointer) {\n        const searchDetails = {\n          pointer: event,\n          pointerId: pointerUtils.getPointerId(event),\n          pointerType,\n          eventType: event.type,\n          curEventTarget,\n          eventTarget,\n          scope\n        };\n        const interaction = getInteraction(searchDetails);\n        matches.push([searchDetails.pointer, searchDetails.eventTarget, searchDetails.curEventTarget, interaction]);\n      }\n    } // eslint-disable-next-line no-shadow\n\n\n    for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n      interaction[method](pointer, event, eventTarget, curEventTarget);\n    }\n  };\n}\n\nfunction getInteraction(searchDetails) {\n  const {\n    pointerType,\n    scope\n  } = searchDetails;\n  const foundInteraction = finder.search(searchDetails);\n  const signalArg = {\n    interaction: foundInteraction,\n    searchDetails\n  };\n  scope.fire('interactions:find', signalArg);\n  return signalArg.interaction || scope.interactions.new({\n    pointerType\n  });\n}\n\nfunction onDocSignal({\n  doc,\n  scope,\n  options\n}, eventMethodName) {\n  const {\n    interactions: {\n      docEvents\n    },\n    events\n  } = scope;\n  const eventMethod = events[eventMethodName];\n\n  if (scope.browser.isIOS && !options.events) {\n    options.events = {\n      passive: false\n    };\n  } // delegate event listener\n\n\n  for (const eventType in events.delegatedEvents) {\n    eventMethod(doc, eventType, events.delegateListener);\n    eventMethod(doc, eventType, events.delegateUseCapture, true);\n  }\n\n  const eventOptions = options && options.events;\n\n  for (const {\n    type,\n    listener\n  } of docEvents) {\n    eventMethod(doc, type, listener, eventOptions);\n  }\n}\n\nconst interactions = {\n  id: 'core/interactions',\n  install,\n  listeners: {\n    'scope:add-document': arg => onDocSignal(arg, 'add'),\n    'scope:remove-document': arg => onDocSignal(arg, 'remove'),\n    'interactable:unset': ({\n      interactable\n    }, scope) => {\n      // Stop and destroy related interactions when an Interactable is unset\n      for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n        const interaction = scope.interactions.list[i];\n\n        if (interaction.interactable !== interactable) {\n          continue;\n        }\n\n        interaction.stop();\n        scope.fire('interactions:destroy', {\n          interaction\n        });\n        interaction.destroy();\n\n        if (scope.interactions.list.length > 2) {\n          scope.interactions.list.splice(i, 1);\n        }\n      }\n    }\n  },\n  onDocSignal,\n  doOnInteractions,\n  methodNames\n};\nexport default interactions;\n//# sourceMappingURL=interactions.js.map", "import browser from \"../utils/browser.js\";\nimport clone from \"../utils/clone.js\";\nimport domObjects from \"../utils/domObjects.js\";\nimport extend from \"../utils/extend.js\";\nimport raf from \"../utils/raf.js\";\nimport * as win from \"../utils/window.js\";\nimport { Eventable } from \"./Eventable.js\";\nimport { InteractEvent } from \"./InteractEvent.js\";\nimport { Interactable as InteractableBase } from \"./Interactable.js\";\nimport { InteractableSet } from \"./InteractableSet.js\";\nimport { defaults } from \"./defaultOptions.js\";\nimport events from \"./events.js\";\nimport { createInteractStatic } from \"./interactStatic.js\";\nimport interactions from \"./interactions.js\";\nexport class Scope {\n  // main window\n  // main document\n  // main window\n  // all documents being listened to\n  constructor() {\n    this.id = `__interact_scope_${Math.floor(Math.random() * 100)}`;\n    this.isInitialized = false;\n    this.listenerMaps = [];\n    this.browser = browser;\n    this.defaults = clone(defaults);\n    this.Eventable = Eventable;\n    this.actions = {\n      map: {},\n      phases: {\n        start: true,\n        move: true,\n        end: true\n      },\n      methodDict: {},\n      phaselessTypes: {}\n    };\n    this.interactStatic = createInteractStatic(this);\n    this.InteractEvent = InteractEvent;\n    this.Interactable = void 0;\n    this.interactables = new InteractableSet(this);\n    this._win = void 0;\n    this.document = void 0;\n    this.window = void 0;\n    this.documents = [];\n    this._plugins = {\n      list: [],\n      map: {}\n    };\n\n    this.onWindowUnload = event => this.removeDocument(event.target);\n\n    const scope = this;\n    this.Interactable = class extends InteractableBase {\n      get _defaults() {\n        return scope.defaults;\n      }\n\n      set(options) {\n        super.set(options);\n        scope.fire('interactable:set', {\n          options,\n          interactable: this\n        });\n        return this;\n      }\n\n      unset() {\n        super.unset();\n        scope.interactables.list.splice(scope.interactables.list.indexOf(this), 1);\n        scope.fire('interactable:unset', {\n          interactable: this\n        });\n      }\n\n    };\n  }\n\n  addListeners(map, id) {\n    this.listenerMaps.push({\n      id,\n      map\n    });\n  }\n\n  fire(name, arg) {\n    for (const {\n      map: {\n        [name]: listener\n      }\n    } of this.listenerMaps) {\n      if (!!listener && listener(arg, this, name) === false) {\n        return false;\n      }\n    }\n  }\n\n  init(window) {\n    return this.isInitialized ? this : initScope(this, window);\n  }\n\n  pluginIsInstalled(plugin) {\n    return this._plugins.map[plugin.id] || this._plugins.list.indexOf(plugin) !== -1;\n  }\n\n  usePlugin(plugin, options) {\n    if (!this.isInitialized) {\n      return this;\n    }\n\n    if (this.pluginIsInstalled(plugin)) {\n      return this;\n    }\n\n    if (plugin.id) {\n      this._plugins.map[plugin.id] = plugin;\n    }\n\n    this._plugins.list.push(plugin);\n\n    if (plugin.install) {\n      plugin.install(this, options);\n    }\n\n    if (plugin.listeners && plugin.before) {\n      let index = 0;\n      const len = this.listenerMaps.length;\n      const before = plugin.before.reduce((acc, id) => {\n        acc[id] = true;\n        acc[pluginIdRoot(id)] = true;\n        return acc;\n      }, {});\n\n      for (; index < len; index++) {\n        const otherId = this.listenerMaps[index].id;\n\n        if (before[otherId] || before[pluginIdRoot(otherId)]) {\n          break;\n        }\n      }\n\n      this.listenerMaps.splice(index, 0, {\n        id: plugin.id,\n        map: plugin.listeners\n      });\n    } else if (plugin.listeners) {\n      this.listenerMaps.push({\n        id: plugin.id,\n        map: plugin.listeners\n      });\n    }\n\n    return this;\n  }\n\n  addDocument(doc, options) {\n    // do nothing if document is already known\n    if (this.getDocIndex(doc) !== -1) {\n      return false;\n    }\n\n    const window = win.getWindow(doc);\n    options = options ? extend({}, options) : {};\n    this.documents.push({\n      doc,\n      options\n    });\n    this.events.documents.push(doc); // don't add an unload event for the main document\n    // so that the page may be cached in browser history\n\n    if (doc !== this.document) {\n      this.events.add(window, 'unload', this.onWindowUnload);\n    }\n\n    this.fire('scope:add-document', {\n      doc,\n      window,\n      scope: this,\n      options\n    });\n  }\n\n  removeDocument(doc) {\n    const index = this.getDocIndex(doc);\n    const window = win.getWindow(doc);\n    const options = this.documents[index].options;\n    this.events.remove(window, 'unload', this.onWindowUnload);\n    this.documents.splice(index, 1);\n    this.events.documents.splice(index, 1);\n    this.fire('scope:remove-document', {\n      doc,\n      window,\n      scope: this,\n      options\n    });\n  }\n\n  getDocIndex(doc) {\n    for (let i = 0; i < this.documents.length; i++) {\n      if (this.documents[i].doc === doc) {\n        return i;\n      }\n    }\n\n    return -1;\n  }\n\n  getDocOptions(doc) {\n    const docIndex = this.getDocIndex(doc);\n    return docIndex === -1 ? null : this.documents[docIndex].options;\n  }\n\n  now() {\n    return (this.window.Date || Date).now();\n  }\n\n}\nexport function initScope(scope, window) {\n  scope.isInitialized = true;\n  win.init(window);\n  domObjects.init(window);\n  browser.init(window);\n  raf.init(window);\n  scope.window = window;\n  scope.document = window.document;\n  scope.usePlugin(interactions);\n  scope.usePlugin(events);\n  return scope;\n}\n\nfunction pluginIdRoot(id) {\n  return id && id.replace(/\\/.*$/, '');\n}\n//# sourceMappingURL=scope.js.map", "import { Scope } from \"../core/scope.js\";\nconst scope = new Scope();\nconst interact = scope.interactStatic;\nexport default interact;\nexport const init = win => scope.init(win);\n\nif (typeof window === 'object' && !!window) {\n  init(window);\n}\n//# sourceMappingURL=index.js.map", "import { Interactable } from \"../core/Interactable.js\";\nimport is from \"../utils/is.js\";\nimport { warnOnce } from \"../utils/misc.js\";\n\nfunction install(scope) {\n  const {\n    /** @lends Interactable */\n    Interactable // tslint:disable-line no-shadowed-variable\n\n  } = scope;\n\n  Interactable.prototype.getAction = function getAction(pointer, event, interaction, element) {\n    const action = defaultActionChecker(this, event, interaction, element, scope);\n\n    if (this.options.actionChecker) {\n      return this.options.actionChecker(pointer, event, action, this, element, interaction);\n    }\n\n    return action;\n  };\n  /**\n   * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n   * of it's parents match the given CSS selector or Element, no\n   * drag/resize/gesture is started.\n   *\n   * @deprecated\n   * Don't use this method. Instead set the `ignoreFrom` option for each action\n   * or for `pointerEvents`\n   *\n   * ```js\n   * interact(targett)\n   *   .draggable({\n   *     ignoreFrom: 'input, textarea, a[href]'',\n   *   })\n   *   .pointerEvents({\n   *     ignoreFrom: '[no-pointer]',\n   *   })\n   * ```\n   *\n   * @param {string | Element | null} [newValue] a CSS selector string, an\n   * Element or `null` to not ignore any elements\n   * @return {string | Element | object} The current ignoreFrom value or this\n   * Interactable\n   */\n\n\n  Interactable.prototype.ignoreFrom = warnOnce(function (newValue) {\n    return this._backCompatOption('ignoreFrom', newValue);\n  }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).');\n  /**\n   *\n   * A drag/resize/gesture is started only If the target of the `mousedown`,\n   * `pointerdown` or `touchstart` event or any of it's parents match the given\n   * CSS selector or Element.\n   *\n   * @deprecated\n   * Don't use this method. Instead set the `allowFrom` option for each action\n   * or for `pointerEvents`\n   *\n   * ```js\n   * interact(targett)\n   *   .resizable({\n   *     allowFrom: '.resize-handle',\n   *   .pointerEvents({\n   *     allowFrom: '.handle',,\n   *   })\n   * ```\n   *\n   * @param {string | Element | null} [newValue] a CSS selector string, an\n   * Element or `null` to allow from any element\n   * @return {string | Element | object} The current allowFrom value or this\n   * Interactable\n   */\n\n  Interactable.prototype.allowFrom = warnOnce(function (newValue) {\n    return this._backCompatOption('allowFrom', newValue);\n  }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).');\n  /**\n   * ```js\n   * interact('.resize-drag')\n   *   .resizable(true)\n   *   .draggable(true)\n   *   .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n   *\n   *     if (interact.matchesSelector(event.target, '.drag-handle')) {\n   *       // force drag with handle target\n   *       action.name = drag\n   *     }\n   *     else {\n   *       // resize from the top and right edges\n   *       action.name  = 'resize'\n   *       action.edges = { top: true, right: true }\n   *     }\n   *\n   *     return action\n   * })\n   * ```\n   *\n   * Returns or sets the function used to check action to be performed on\n   * pointerDown\n   *\n   * @param {function | null} [checker] A function which takes a pointer event,\n   * defaultAction string, interactable, element and interaction as parameters\n   * and returns an object with name property 'drag' 'resize' or 'gesture' and\n   * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n   * props.\n   * @return {Function | Interactable} The checker function or this Interactable\n   */\n\n  Interactable.prototype.actionChecker = actionChecker;\n  /**\n   * Returns or sets whether the the cursor should be changed depending on the\n   * action that would be performed if the mouse were pressed and dragged.\n   *\n   * @param {boolean} [newValue]\n   * @return {boolean | Interactable} The current setting or this Interactable\n   */\n\n  Interactable.prototype.styleCursor = styleCursor;\n}\n\nfunction defaultActionChecker(interactable, event, interaction, element, scope) {\n  const rect = interactable.getRect(element);\n  const buttons = event.buttons || {\n    0: 1,\n    1: 4,\n    3: 8,\n    4: 16\n  }[event.button];\n  const arg = {\n    action: null,\n    interactable,\n    interaction,\n    element,\n    rect,\n    buttons\n  };\n  scope.fire('auto-start:check', arg);\n  return arg.action;\n}\n\nfunction styleCursor(newValue) {\n  if (is.bool(newValue)) {\n    this.options.styleCursor = newValue;\n    return this;\n  }\n\n  if (newValue === null) {\n    delete this.options.styleCursor;\n    return this;\n  }\n\n  return this.options.styleCursor;\n}\n\nfunction actionChecker(checker) {\n  if (is.func(checker)) {\n    this.options.actionChecker = checker;\n    return this;\n  }\n\n  if (checker === null) {\n    delete this.options.actionChecker;\n    return this;\n  }\n\n  return this.options.actionChecker;\n}\n\nexport default {\n  id: 'auto-start/interactableMethods',\n  install\n};\n//# sourceMappingURL=InteractableMethods.js.map", "import { Scope, SignalArgs } from \"../core/scope.js\";\nimport * as domUtils from \"../utils/domUtils.js\";\nimport extend from \"../utils/extend.js\";\nimport is from \"../utils/is.js\";\nimport { copyAction } from \"../utils/misc.js\";\nimport InteractableMethods from \"./InteractableMethods.js\";\n\nfunction install(scope) {\n  const {\n    interactStatic: interact,\n    defaults\n  } = scope;\n  scope.usePlugin(InteractableMethods);\n  defaults.base.actionChecker = null;\n  defaults.base.styleCursor = true;\n  extend(defaults.perAction, {\n    manualStart: false,\n    max: Infinity,\n    maxPerElement: 1,\n    allowFrom: null,\n    ignoreFrom: null,\n    // only allow left button by default\n    // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n    mouseButtons: 1\n  });\n  /**\n   * Returns or sets the maximum number of concurrent interactions allowed.  By\n   * default only 1 interaction is allowed at a time (for backwards\n   * compatibility). To allow multiple interactions on the same Interactables and\n   * elements, you need to enable it in the draggable, resizable and gesturable\n   * `'max'` and `'maxPerElement'` options.\n   *\n   * @alias module:interact.maxInteractions\n   *\n   * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n   */\n\n  interact.maxInteractions = newValue => maxInteractions(newValue, scope);\n\n  scope.autoStart = {\n    // Allow this many interactions to happen simultaneously\n    maxInteractions: Infinity,\n    withinInteractionLimit,\n    cursorElement: null\n  };\n}\n\nfunction prepareOnDown({\n  interaction,\n  pointer,\n  event,\n  eventTarget\n}, scope) {\n  if (interaction.interacting()) {\n    return;\n  }\n\n  const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n  prepare(interaction, actionInfo, scope);\n}\n\nfunction prepareOnMove({\n  interaction,\n  pointer,\n  event,\n  eventTarget\n}, scope) {\n  if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) {\n    return;\n  }\n\n  const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope);\n  prepare(interaction, actionInfo, scope);\n}\n\nfunction startOnMove(arg, scope) {\n  const {\n    interaction\n  } = arg;\n\n  if (!interaction.pointerIsDown || interaction.interacting() || !interaction.pointerWasMoved || !interaction.prepared.name) {\n    return;\n  }\n\n  scope.fire('autoStart:before-start', arg);\n  const {\n    interactable\n  } = interaction;\n  const actionName = interaction.prepared.name;\n\n  if (actionName && interactable) {\n    // check manualStart and interaction limit\n    if (interactable.options[actionName].manualStart || !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n      interaction.stop();\n    } else {\n      interaction.start(interaction.prepared, interactable, interaction.element);\n      setInteractionCursor(interaction, scope);\n    }\n  }\n}\n\nfunction clearCursorOnStop({\n  interaction\n}, scope) {\n  const {\n    interactable\n  } = interaction;\n\n  if (interactable && interactable.options.styleCursor) {\n    setCursor(interaction.element, '', scope);\n  }\n} // Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\n\n\nfunction validateAction(action, interactable, element, eventTarget, scope) {\n  if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) && interactable.options[action.name].enabled && withinInteractionLimit(interactable, element, action, scope)) {\n    return action;\n  }\n\n  return null;\n}\n\nfunction validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope) {\n  for (let i = 0, len = matches.length; i < len; i++) {\n    const match = matches[i];\n    const matchElement = matchElements[i];\n    const matchAction = match.getAction(pointer, event, interaction, matchElement);\n\n    if (!matchAction) {\n      continue;\n    }\n\n    const action = validateAction(matchAction, match, matchElement, eventTarget, scope);\n\n    if (action) {\n      return {\n        action,\n        interactable: match,\n        element: matchElement\n      };\n    }\n  }\n\n  return {\n    action: null,\n    interactable: null,\n    element: null\n  };\n}\n\nfunction getActionInfo(interaction, pointer, event, eventTarget, scope) {\n  let matches = [];\n  let matchElements = [];\n  let element = eventTarget;\n\n  function pushMatches(interactable) {\n    matches.push(interactable);\n    matchElements.push(element);\n  }\n\n  while (is.element(element)) {\n    matches = [];\n    matchElements = [];\n    scope.interactables.forEachMatch(element, pushMatches);\n    const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope);\n\n    if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n      return actionInfo;\n    }\n\n    element = domUtils.parentNode(element);\n  }\n\n  return {\n    action: null,\n    interactable: null,\n    element: null\n  };\n}\n\nfunction prepare(interaction, {\n  action,\n  interactable,\n  element\n}, scope) {\n  action = action || {\n    name: null\n  };\n  interaction.interactable = interactable;\n  interaction.element = element;\n  copyAction(interaction.prepared, action);\n  interaction.rect = interactable && action.name ? interactable.getRect(element) : null;\n  setInteractionCursor(interaction, scope);\n  scope.fire('autoStart:prepared', {\n    interaction\n  });\n}\n\nfunction withinInteractionLimit(interactable, element, action, scope) {\n  const options = interactable.options;\n  const maxActions = options[action.name].max;\n  const maxPerElement = options[action.name].maxPerElement;\n  const autoStartMax = scope.autoStart.maxInteractions;\n  let activeInteractions = 0;\n  let interactableCount = 0;\n  let elementCount = 0; // no actions if any of these values == 0\n\n  if (!(maxActions && maxPerElement && autoStartMax)) {\n    return false;\n  }\n\n  for (const interaction of scope.interactions.list) {\n    const otherAction = interaction.prepared.name;\n\n    if (!interaction.interacting()) {\n      continue;\n    }\n\n    activeInteractions++;\n\n    if (activeInteractions >= autoStartMax) {\n      return false;\n    }\n\n    if (interaction.interactable !== interactable) {\n      continue;\n    }\n\n    interactableCount += otherAction === action.name ? 1 : 0;\n\n    if (interactableCount >= maxActions) {\n      return false;\n    }\n\n    if (interaction.element === element) {\n      elementCount++;\n\n      if (otherAction === action.name && elementCount >= maxPerElement) {\n        return false;\n      }\n    }\n  }\n\n  return autoStartMax > 0;\n}\n\nfunction maxInteractions(newValue, scope) {\n  if (is.number(newValue)) {\n    scope.autoStart.maxInteractions = newValue;\n    return this;\n  }\n\n  return scope.autoStart.maxInteractions;\n}\n\nfunction setCursor(element, cursor, scope) {\n  const {\n    cursorElement: prevCursorElement\n  } = scope.autoStart;\n\n  if (prevCursorElement && prevCursorElement !== element) {\n    prevCursorElement.style.cursor = '';\n  }\n\n  element.ownerDocument.documentElement.style.cursor = cursor;\n  element.style.cursor = cursor;\n  scope.autoStart.cursorElement = cursor ? element : null;\n}\n\nfunction setInteractionCursor(interaction, scope) {\n  const {\n    interactable,\n    element,\n    prepared\n  } = interaction;\n\n  if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n    // clear previous target element cursor\n    if (scope.autoStart.cursorElement) {\n      setCursor(scope.autoStart.cursorElement, '', scope);\n    }\n\n    return;\n  }\n\n  let cursor = '';\n\n  if (prepared.name) {\n    const cursorChecker = interactable.options[prepared.name].cursorChecker;\n\n    if (is.func(cursorChecker)) {\n      cursor = cursorChecker(prepared, interactable, element, interaction._interacting);\n    } else {\n      cursor = scope.actions.map[prepared.name].getCursor(prepared);\n    }\n  }\n\n  setCursor(interaction.element, cursor || '', scope);\n}\n\nconst autoStart = {\n  id: 'auto-start/base',\n  before: ['actions'],\n  install,\n  listeners: {\n    'interactions:down': prepareOnDown,\n    'interactions:move': (arg, scope) => {\n      prepareOnMove(arg, scope);\n      startOnMove(arg, scope);\n    },\n    'interactions:stop': clearCursorOnStop\n  },\n  maxInteractions,\n  withinInteractionLimit,\n  validateAction\n};\nexport default autoStart;\n//# sourceMappingURL=base.js.map", "import { parentNode } from \"../utils/domUtils.js\";\nimport is from \"../utils/is.js\";\nimport autoStart from \"./base.js\";\n\nfunction beforeStart({\n  interaction,\n  eventTarget,\n  dx,\n  dy\n}, scope) {\n  if (interaction.prepared.name !== 'drag') {\n    return;\n  } // check if a drag is in the correct axis\n\n\n  const absX = Math.abs(dx);\n  const absY = Math.abs(dy);\n  const targetOptions = interaction.interactable.options.drag;\n  const startAxis = targetOptions.startAxis;\n  const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy';\n  interaction.prepared.axis = targetOptions.lockAxis === 'start' ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy'\n  : targetOptions.lockAxis; // if the movement isn't in the startAxis of the interactable\n\n  if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n    // cancel the prepared action\n    interaction.prepared.name = null; // then try to get a drag from another ineractable\n\n    let element = eventTarget;\n\n    const getDraggable = function (interactable) {\n      if (interactable === interaction.interactable) {\n        return;\n      }\n\n      const options = interaction.interactable.options.drag;\n\n      if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n        const action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element);\n\n        if (action && action.name === 'drag' && checkStartAxis(currentAxis, interactable) && autoStart.validateAction(action, interactable, element, eventTarget, scope)) {\n          return interactable;\n        }\n      }\n    }; // check all interactables\n\n\n    while (is.element(element)) {\n      const interactable = scope.interactables.forEachMatch(element, getDraggable);\n\n      if (interactable) {\n        interaction.prepared.name = 'drag';\n        interaction.interactable = interactable;\n        interaction.element = element;\n        break;\n      }\n\n      element = parentNode(element);\n    }\n  }\n}\n\nfunction checkStartAxis(startAxis, interactable) {\n  if (!interactable) {\n    return false;\n  }\n\n  const thisAxis = interactable.options.drag.startAxis;\n  return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis;\n}\n\nexport default {\n  id: 'auto-start/dragAxis',\n  listeners: {\n    'autoStart:before-start': beforeStart\n  }\n};\n//# sourceMappingURL=dragAxis.js.map", "import Interaction from \"../core/Interaction.js\";\nimport basePlugin from \"./base.js\";\n\nfunction install(scope) {\n  const {\n    defaults\n  } = scope;\n  scope.usePlugin(basePlugin);\n  defaults.perAction.hold = 0;\n  defaults.perAction.delay = 0;\n}\n\nfunction getHoldDuration(interaction) {\n  const actionName = interaction.prepared && interaction.prepared.name;\n\n  if (!actionName) {\n    return null;\n  }\n\n  const options = interaction.interactable.options;\n  return options[actionName].hold || options[actionName].delay;\n}\n\nconst hold = {\n  id: 'auto-start/hold',\n  install,\n  listeners: {\n    'interactions:new': ({\n      interaction\n    }) => {\n      interaction.autoStartHoldTimer = null;\n    },\n    'autoStart:prepared': ({\n      interaction\n    }) => {\n      const hold = getHoldDuration(interaction);\n\n      if (hold > 0) {\n        interaction.autoStartHoldTimer = setTimeout(() => {\n          interaction.start(interaction.prepared, interaction.interactable, interaction.element);\n        }, hold);\n      }\n    },\n    'interactions:move': ({\n      interaction,\n      duplicate\n    }) => {\n      if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n        clearTimeout(interaction.autoStartHoldTimer);\n        interaction.autoStartHoldTimer = null;\n      }\n    },\n    // prevent regular down->move autoStart\n    'autoStart:before-start': ({\n      interaction\n    }) => {\n      const holdDuration = getHoldDuration(interaction);\n\n      if (holdDuration > 0) {\n        interaction.prepared.name = null;\n      }\n    }\n  },\n  getHoldDuration\n};\nexport default hold;\n//# sourceMappingURL=hold.js.map", "import autoStart from \"./base.js\";\nimport dragAxis from \"./dragAxis.js\";\nimport hold from \"./hold.js\";\nexport default {\n  id: 'auto-start',\n\n  install(scope) {\n    scope.usePlugin(autoStart);\n    scope.usePlugin(hold);\n    scope.usePlugin(dragAxis);\n  }\n\n};\n//# sourceMappingURL=plugin.js.map", "/* eslint-disable import/order, no-console, eol-last */\nimport interact, { init } from \"../interact/index.js\";\nimport plugin from \"./plugin.js\";\n\nif (typeof window === 'object' && !!window) {\n  init(window);\n}\n\ninteract.use(plugin);\n//# sourceMappingURL=index.js.map", "import Interaction from \"../core/Interaction.js\";\nimport * as domUtils from \"../utils/domUtils.js\";\nimport is from \"../utils/is.js\";\nimport raf from \"../utils/raf.js\";\nimport { getStringOptionResult } from \"../utils/rect.js\";\nimport { getWindow } from \"../utils/window.js\";\n\nfunction install(scope) {\n  const {\n    defaults,\n    actions\n  } = scope;\n  scope.autoScroll = autoScroll;\n\n  autoScroll.now = () => scope.now();\n\n  actions.phaselessTypes.autoscroll = true;\n  defaults.perAction.autoScroll = autoScroll.defaults;\n}\n\nconst autoScroll = {\n  defaults: {\n    enabled: false,\n    margin: 60,\n    // the item that is scrolled (Window or HTMLElement)\n    container: null,\n    // the scroll speed in pixels per second\n    speed: 300\n  },\n  now: Date.now,\n  interaction: null,\n  i: 0,\n  // the handle returned by window.setInterval\n  // Direction each pulse is to scroll in\n  x: 0,\n  y: 0,\n  isScrolling: false,\n  prevTime: 0,\n  margin: 0,\n  speed: 0,\n\n  start(interaction) {\n    autoScroll.isScrolling = true;\n    raf.cancel(autoScroll.i);\n    interaction.autoScroll = autoScroll;\n    autoScroll.interaction = interaction;\n    autoScroll.prevTime = autoScroll.now();\n    autoScroll.i = raf.request(autoScroll.scroll);\n  },\n\n  stop() {\n    autoScroll.isScrolling = false;\n\n    if (autoScroll.interaction) {\n      autoScroll.interaction.autoScroll = null;\n    }\n\n    raf.cancel(autoScroll.i);\n  },\n\n  // scroll the window by the values in scroll.x/y\n  scroll() {\n    const {\n      interaction\n    } = autoScroll;\n    const {\n      interactable,\n      element\n    } = interaction;\n    const actionName = interaction.prepared.name;\n    const options = interactable.options[actionName].autoScroll;\n    const container = getContainer(options.container, interactable, element);\n    const now = autoScroll.now(); // change in time in seconds\n\n    const dt = (now - autoScroll.prevTime) / 1000; // displacement\n\n    const s = options.speed * dt;\n\n    if (s >= 1) {\n      const scrollBy = {\n        x: autoScroll.x * s,\n        y: autoScroll.y * s\n      };\n\n      if (scrollBy.x || scrollBy.y) {\n        const prevScroll = getScroll(container);\n\n        if (is.window(container)) {\n          container.scrollBy(scrollBy.x, scrollBy.y);\n        } else if (container) {\n          container.scrollLeft += scrollBy.x;\n          container.scrollTop += scrollBy.y;\n        }\n\n        const curScroll = getScroll(container);\n        const delta = {\n          x: curScroll.x - prevScroll.x,\n          y: curScroll.y - prevScroll.y\n        };\n\n        if (delta.x || delta.y) {\n          interactable.fire({\n            type: 'autoscroll',\n            target: element,\n            interactable,\n            delta,\n            interaction,\n            container\n          });\n        }\n      }\n\n      autoScroll.prevTime = now;\n    }\n\n    if (autoScroll.isScrolling) {\n      raf.cancel(autoScroll.i);\n      autoScroll.i = raf.request(autoScroll.scroll);\n    }\n  },\n\n  check(interactable, actionName) {\n    var _options$actionName$a;\n\n    const options = interactable.options;\n    return (_options$actionName$a = options[actionName].autoScroll) == null ? void 0 : _options$actionName$a.enabled;\n  },\n\n  onInteractionMove({\n    interaction,\n    pointer\n  }) {\n    if (!(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))) {\n      return;\n    }\n\n    if (interaction.simulation) {\n      autoScroll.x = autoScroll.y = 0;\n      return;\n    }\n\n    let top;\n    let right;\n    let bottom;\n    let left;\n    const {\n      interactable,\n      element\n    } = interaction;\n    const actionName = interaction.prepared.name;\n    const options = interactable.options[actionName].autoScroll;\n    const container = getContainer(options.container, interactable, element);\n\n    if (is.window(container)) {\n      left = pointer.clientX < autoScroll.margin;\n      top = pointer.clientY < autoScroll.margin;\n      right = pointer.clientX > container.innerWidth - autoScroll.margin;\n      bottom = pointer.clientY > container.innerHeight - autoScroll.margin;\n    } else {\n      const rect = domUtils.getElementClientRect(container);\n      left = pointer.clientX < rect.left + autoScroll.margin;\n      top = pointer.clientY < rect.top + autoScroll.margin;\n      right = pointer.clientX > rect.right - autoScroll.margin;\n      bottom = pointer.clientY > rect.bottom - autoScroll.margin;\n    }\n\n    autoScroll.x = right ? 1 : left ? -1 : 0;\n    autoScroll.y = bottom ? 1 : top ? -1 : 0;\n\n    if (!autoScroll.isScrolling) {\n      // set the autoScroll properties to those of the target\n      autoScroll.margin = options.margin;\n      autoScroll.speed = options.speed;\n      autoScroll.start(interaction);\n    }\n  }\n\n};\nexport function getContainer(value, interactable, element) {\n  return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element);\n}\nexport function getScroll(container) {\n  if (is.window(container)) {\n    container = window.document.body;\n  }\n\n  return {\n    x: container.scrollLeft,\n    y: container.scrollTop\n  };\n}\nexport function getScrollSize(container) {\n  if (is.window(container)) {\n    container = window.document.body;\n  }\n\n  return {\n    x: container.scrollWidth,\n    y: container.scrollHeight\n  };\n}\nexport function getScrollSizeDelta({\n  interaction,\n  element\n}, func) {\n  const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll;\n\n  if (!scrollOptions || !scrollOptions.enabled) {\n    func();\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element);\n  const prevSize = getScroll(scrollContainer);\n  func();\n  const curSize = getScroll(scrollContainer);\n  return {\n    x: curSize.x - prevSize.x,\n    y: curSize.y - prevSize.y\n  };\n}\nconst autoScrollPlugin = {\n  id: 'auto-scroll',\n  install,\n  listeners: {\n    'interactions:new': ({\n      interaction\n    }) => {\n      interaction.autoScroll = null;\n    },\n    'interactions:destroy': ({\n      interaction\n    }) => {\n      interaction.autoScroll = null;\n      autoScroll.stop();\n\n      if (autoScroll.interaction) {\n        autoScroll.interaction = null;\n      }\n    },\n    'interactions:stop': autoScroll.stop,\n    'interactions:action-move': arg => autoScroll.onInteractionMove(arg)\n  }\n};\nexport default autoScrollPlugin;\n//# sourceMappingURL=plugin.js.map", "/* eslint-disable import/order, no-console, eol-last */\nimport interact, { init } from \"../interact/index.js\";\nimport plugin from \"./plugin.js\";\n\nif (typeof window === 'object' && !!window) {\n  init(window);\n}\n\ninteract.use(plugin);\n//# sourceMappingURL=index.js.map", "import { Interactable } from \"../../core/Interactable.js\";\nimport is from \"../../utils/is.js\";\n\nfunction install(scope) {\n  const {\n    actions,\n    Interactable,\n    defaults\n  } = scope;\n  Interactable.prototype.draggable = drag.draggable;\n  actions.map.drag = drag;\n  actions.methodDict.drag = 'draggable';\n  defaults.actions.drag = drag.defaults;\n}\n\nfunction beforeMove({\n  interaction\n}) {\n  if (interaction.prepared.name !== 'drag') {\n    return;\n  }\n\n  const axis = interaction.prepared.axis;\n\n  if (axis === 'x') {\n    interaction.coords.cur.page.y = interaction.coords.start.page.y;\n    interaction.coords.cur.client.y = interaction.coords.start.client.y;\n    interaction.coords.velocity.client.y = 0;\n    interaction.coords.velocity.page.y = 0;\n  } else if (axis === 'y') {\n    interaction.coords.cur.page.x = interaction.coords.start.page.x;\n    interaction.coords.cur.client.x = interaction.coords.start.client.x;\n    interaction.coords.velocity.client.x = 0;\n    interaction.coords.velocity.page.x = 0;\n  }\n}\n\nfunction move({\n  iEvent,\n  interaction\n}) {\n  if (interaction.prepared.name !== 'drag') {\n    return;\n  }\n\n  const axis = interaction.prepared.axis;\n\n  if (axis === 'x' || axis === 'y') {\n    const opposite = axis === 'x' ? 'y' : 'x';\n    iEvent.page[opposite] = interaction.coords.start.page[opposite];\n    iEvent.client[opposite] = interaction.coords.start.client[opposite];\n    iEvent.delta[opposite] = 0;\n  }\n}\n/**\n * ```js\n * interact(element).draggable({\n *     onstart: function (event) {},\n *     onmove : function (event) {},\n *     onend  : function (event) {},\n *\n *     // the axis in which the first movement must be\n *     // for the drag sequence to start\n *     // 'xy' by default - any direction\n *     startAxis: 'x' || 'y' || 'xy',\n *\n *     // 'xy' by default - don't restrict to one axis (move in any direction)\n *     // 'x' or 'y' to restrict movement to either axis\n *     // 'start' to restrict movement to the axis the drag started in\n *     lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n *     // max number of drags that can happen concurrently\n *     // with elements of this Interactable. Infinity by default\n *     max: Infinity,\n *\n *     // max number of drags that can target the same element+Interactable\n *     // 1 by default\n *     maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @alias Interactable.prototype.draggable\n *\n * @param {boolean | object} [options] true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n * @return {boolean | Interactable} boolean indicating if this can be the\n * target of drag events, or this Interctable\n */\n\n\nconst draggable = function draggable(options) {\n  if (is.object(options)) {\n    this.options.drag.enabled = options.enabled !== false;\n    this.setPerAction('drag', options);\n    this.setOnEvents('drag', options);\n\n    if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n      this.options.drag.lockAxis = options.lockAxis;\n    }\n\n    if (/^(xy|x|y)$/.test(options.startAxis)) {\n      this.options.drag.startAxis = options.startAxis;\n    }\n\n    return this;\n  }\n\n  if (is.bool(options)) {\n    this.options.drag.enabled = options;\n    return this;\n  }\n\n  return this.options.drag;\n};\n\nconst drag = {\n  id: 'actions/drag',\n  install,\n  listeners: {\n    'interactions:before-action-move': beforeMove,\n    'interactions:action-resume': beforeMove,\n    // dragmove\n    'interactions:action-move': move,\n    'auto-start:check': arg => {\n      const {\n        interaction,\n        interactable,\n        buttons\n      } = arg;\n      const dragOptions = interactable.options.drag;\n\n      if (!(dragOptions && dragOptions.enabled) || // check mouseButton setting if the pointer is down\n      interaction.pointerIsDown && /mouse|pointer/.test(interaction.pointerType) && (buttons & interactable.options.drag.mouseButtons) === 0) {\n        return undefined;\n      }\n\n      arg.action = {\n        name: 'drag',\n        axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis\n      };\n      return false;\n    }\n  },\n  draggable,\n  beforeMove,\n  move,\n  defaults: {\n    startAxis: 'xy',\n    lockAxis: 'xy'\n  },\n\n  getCursor() {\n    return 'move';\n  }\n\n};\nexport default drag;\n//# sourceMappingURL=plugin.js.map", "/* eslint-disable import/order, no-console, eol-last */\nimport interact, { init } from \"../../interact/index.js\";\nimport plugin from \"./plugin.js\";\n\nif (typeof window === 'object' && !!window) {\n  init(window);\n}\n\ninteract.use(plugin);\n//# sourceMappingURL=index.js.map", "import { Interactable } from \"../../core/Interactable.js\";\nimport { Interaction } from \"../../core/Interaction.js\";\nimport * as dom from \"../../utils/domUtils.js\";\nimport extend from \"../../utils/extend.js\";\nimport is from \"../../utils/is.js\";\n\nfunction install(scope) {\n  const {\n    actions,\n    browser,\n\n    /** @lends Interactable */\n    Interactable,\n    // tslint:disable-line no-shadowed-variable\n    defaults\n  } = scope; // Less Precision with touch input\n\n  resize.cursors = initCursors(browser);\n  resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10;\n  /**\n   * ```js\n   * interact(element).resizable({\n   *   onstart: function (event) {},\n   *   onmove : function (event) {},\n   *   onend  : function (event) {},\n   *\n   *   edges: {\n   *     top   : true,       // Use pointer coords to check for resize.\n   *     left  : false,      // Disable resizing from left edge.\n   *     bottom: '.resize-s',// Resize if pointer target matches selector\n   *     right : handleEl    // Resize if pointer target is the given Element\n   *   },\n   *\n   *     // Width and height can be adjusted independently. When `true`, width and\n   *     // height are adjusted at a 1:1 ratio.\n   *     square: false,\n   *\n   *     // Width and height can be adjusted independently. When `true`, width and\n   *     // height maintain the aspect ratio they had when resizing started.\n   *     preserveAspectRatio: false,\n   *\n   *   // a value of 'none' will limit the resize rect to a minimum of 0x0\n   *   // 'negate' will allow the rect to have negative width/height\n   *   // 'reposition' will keep the width/height positive by swapping\n   *   // the top and bottom edges and/or swapping the left and right edges\n   *   invert: 'none' || 'negate' || 'reposition'\n   *\n   *   // limit multiple resizes.\n   *   // See the explanation in the {@link Interactable.draggable} example\n   *   max: Infinity,\n   *   maxPerElement: 1,\n   * })\n   *\n   * var isResizeable = interact(element).resizable()\n   * ```\n   *\n   * Gets or sets whether resize actions can be performed on the target\n   *\n   * @param {boolean | object} [options] true/false or An object with event\n   * listeners to be fired on resize events (object makes the Interactable\n   * resizable)\n   * @return {boolean | Interactable} A boolean indicating if this can be the\n   * target of resize elements, or this Interactable\n   */\n\n  Interactable.prototype.resizable = function (options) {\n    return resizable(this, options, scope);\n  };\n\n  actions.map.resize = resize;\n  actions.methodDict.resize = 'resizable';\n  defaults.actions.resize = resize.defaults;\n}\n\nfunction resizeChecker(arg) {\n  const {\n    interaction,\n    interactable,\n    element,\n    rect,\n    buttons\n  } = arg;\n\n  if (!rect) {\n    return undefined;\n  }\n\n  const page = extend({}, interaction.coords.cur.page);\n  const resizeOptions = interactable.options.resize;\n\n  if (!(resizeOptions && resizeOptions.enabled) || // check mouseButton setting if the pointer is down\n  interaction.pointerIsDown && /mouse|pointer/.test(interaction.pointerType) && (buttons & resizeOptions.mouseButtons) === 0) {\n    return undefined;\n  } // if using resize.edges\n\n\n  if (is.object(resizeOptions.edges)) {\n    const resizeEdges = {\n      left: false,\n      right: false,\n      top: false,\n      bottom: false\n    };\n\n    for (const edge in resizeEdges) {\n      resizeEdges[edge] = checkResizeEdge(edge, resizeOptions.edges[edge], page, interaction._latestPointer.eventTarget, element, rect, resizeOptions.margin || resize.defaultMargin);\n    }\n\n    resizeEdges.left = resizeEdges.left && !resizeEdges.right;\n    resizeEdges.top = resizeEdges.top && !resizeEdges.bottom;\n\n    if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n      arg.action = {\n        name: 'resize',\n        edges: resizeEdges\n      };\n    }\n  } else {\n    const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin;\n    const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin;\n\n    if (right || bottom) {\n      arg.action = {\n        name: 'resize',\n        axes: (right ? 'x' : '') + (bottom ? 'y' : '')\n      };\n    }\n  }\n\n  return arg.action ? false : undefined;\n}\n\nfunction resizable(interactable, options, scope) {\n  if (is.object(options)) {\n    interactable.options.resize.enabled = options.enabled !== false;\n    interactable.setPerAction('resize', options);\n    interactable.setOnEvents('resize', options);\n\n    if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n      interactable.options.resize.axis = options.axis;\n    } else if (options.axis === null) {\n      interactable.options.resize.axis = scope.defaults.actions.resize.axis;\n    }\n\n    if (is.bool(options.preserveAspectRatio)) {\n      interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio;\n    } else if (is.bool(options.square)) {\n      interactable.options.resize.square = options.square;\n    }\n\n    return interactable;\n  }\n\n  if (is.bool(options)) {\n    interactable.options.resize.enabled = options;\n    return interactable;\n  }\n\n  return interactable.options.resize;\n}\n\nfunction checkResizeEdge(name, value, page, element, interactableElement, rect, margin) {\n  // false, '', undefined, null\n  if (!value) {\n    return false;\n  } // true value, use pointer coords and element rect\n\n\n  if (value === true) {\n    // if dimensions are negative, \"switch\" edges\n    const width = is.number(rect.width) ? rect.width : rect.right - rect.left;\n    const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top; // don't use margin greater than half the relevent dimension\n\n    margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2));\n\n    if (width < 0) {\n      if (name === 'left') {\n        name = 'right';\n      } else if (name === 'right') {\n        name = 'left';\n      }\n    }\n\n    if (height < 0) {\n      if (name === 'top') {\n        name = 'bottom';\n      } else if (name === 'bottom') {\n        name = 'top';\n      }\n    }\n\n    if (name === 'left') {\n      return page.x < (width >= 0 ? rect.left : rect.right) + margin;\n    }\n\n    if (name === 'top') {\n      return page.y < (height >= 0 ? rect.top : rect.bottom) + margin;\n    }\n\n    if (name === 'right') {\n      return page.x > (width >= 0 ? rect.right : rect.left) - margin;\n    }\n\n    if (name === 'bottom') {\n      return page.y > (height >= 0 ? rect.bottom : rect.top) - margin;\n    }\n  } // the remaining checks require an element\n\n\n  if (!is.element(element)) {\n    return false;\n  }\n\n  return is.element(value) // the value is an element to use as a resize handle\n  ? value === element // otherwise check if element matches value as selector\n  : dom.matchesUpTo(element, value, interactableElement);\n}\n/* eslint-disable multiline-ternary */\n\n\nfunction initCursors(browser) {\n  return browser.isIe9 ? {\n    x: 'e-resize',\n    y: 's-resize',\n    xy: 'se-resize',\n    top: 'n-resize',\n    left: 'w-resize',\n    bottom: 's-resize',\n    right: 'e-resize',\n    topleft: 'se-resize',\n    bottomright: 'se-resize',\n    topright: 'ne-resize',\n    bottomleft: 'ne-resize'\n  } : {\n    x: 'ew-resize',\n    y: 'ns-resize',\n    xy: 'nwse-resize',\n    top: 'ns-resize',\n    left: 'ew-resize',\n    bottom: 'ns-resize',\n    right: 'ew-resize',\n    topleft: 'nwse-resize',\n    bottomright: 'nwse-resize',\n    topright: 'nesw-resize',\n    bottomleft: 'nesw-resize'\n  };\n}\n/* eslint-enable multiline-ternary */\n\n\nfunction start({\n  iEvent,\n  interaction\n}) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n    return;\n  }\n\n  const resizeEvent = iEvent;\n  const rect = interaction.rect;\n  interaction._rects = {\n    start: extend({}, rect),\n    corrected: extend({}, rect),\n    previous: extend({}, rect),\n    delta: {\n      left: 0,\n      right: 0,\n      width: 0,\n      top: 0,\n      bottom: 0,\n      height: 0\n    }\n  };\n  resizeEvent.edges = interaction.prepared.edges;\n  resizeEvent.rect = interaction._rects.corrected;\n  resizeEvent.deltaRect = interaction._rects.delta;\n}\n\nfunction move({\n  iEvent,\n  interaction\n}) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n    return;\n  }\n\n  const resizeEvent = iEvent;\n  const resizeOptions = interaction.interactable.options.resize;\n  const invert = resizeOptions.invert;\n  const invertible = invert === 'reposition' || invert === 'negate';\n  const current = interaction.rect;\n  const {\n    start: startRect,\n    corrected,\n    delta: deltaRect,\n    previous\n  } = interaction._rects;\n  extend(previous, corrected);\n\n  if (invertible) {\n    // if invertible, copy the current rect\n    extend(corrected, current);\n\n    if (invert === 'reposition') {\n      // swap edge values if necessary to keep width/height positive\n      if (corrected.top > corrected.bottom) {\n        const swap = corrected.top;\n        corrected.top = corrected.bottom;\n        corrected.bottom = swap;\n      }\n\n      if (corrected.left > corrected.right) {\n        const swap = corrected.left;\n        corrected.left = corrected.right;\n        corrected.right = swap;\n      }\n    }\n  } else {\n    // if not invertible, restrict to minimum of 0x0 rect\n    corrected.top = Math.min(current.top, startRect.bottom);\n    corrected.bottom = Math.max(current.bottom, startRect.top);\n    corrected.left = Math.min(current.left, startRect.right);\n    corrected.right = Math.max(current.right, startRect.left);\n  }\n\n  corrected.width = corrected.right - corrected.left;\n  corrected.height = corrected.bottom - corrected.top;\n\n  for (const edge in corrected) {\n    deltaRect[edge] = corrected[edge] - previous[edge];\n  }\n\n  resizeEvent.edges = interaction.prepared.edges;\n  resizeEvent.rect = corrected;\n  resizeEvent.deltaRect = deltaRect;\n}\n\nfunction end({\n  iEvent,\n  interaction\n}) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n    return;\n  }\n\n  const resizeEvent = iEvent;\n  resizeEvent.edges = interaction.prepared.edges;\n  resizeEvent.rect = interaction._rects.corrected;\n  resizeEvent.deltaRect = interaction._rects.delta;\n}\n\nfunction updateEventAxes({\n  iEvent,\n  interaction\n}) {\n  if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) {\n    return;\n  }\n\n  const options = interaction.interactable.options;\n  const resizeEvent = iEvent;\n\n  if (options.resize.square) {\n    if (interaction.resizeAxes === 'y') {\n      resizeEvent.delta.x = resizeEvent.delta.y;\n    } else {\n      resizeEvent.delta.y = resizeEvent.delta.x;\n    }\n\n    resizeEvent.axes = 'xy';\n  } else {\n    resizeEvent.axes = interaction.resizeAxes;\n\n    if (interaction.resizeAxes === 'x') {\n      resizeEvent.delta.y = 0;\n    } else if (interaction.resizeAxes === 'y') {\n      resizeEvent.delta.x = 0;\n    }\n  }\n}\n\nconst resize = {\n  id: 'actions/resize',\n  before: ['actions/drag'],\n  install,\n  listeners: {\n    'interactions:new': ({\n      interaction\n    }) => {\n      interaction.resizeAxes = 'xy';\n    },\n    'interactions:action-start': arg => {\n      start(arg);\n      updateEventAxes(arg);\n    },\n    'interactions:action-move': arg => {\n      move(arg);\n      updateEventAxes(arg);\n    },\n    'interactions:action-end': end,\n    'auto-start:check': resizeChecker\n  },\n  defaults: {\n    square: false,\n    preserveAspectRatio: false,\n    axis: 'xy',\n    // use default margin\n    margin: NaN,\n    // object with props left, right, top, bottom which are\n    // true/false values to resize when the pointer is over that edge,\n    // CSS selectors to match the handles for each direction\n    // or the Elements for each handle\n    edges: null,\n    // a value of 'none' will limit the resize rect to a minimum of 0x0\n    // 'negate' will alow the rect to have negative width/height\n    // 'reposition' will keep the width/height positive by swapping\n    // the top and bottom edges and/or swapping the left and right edges\n    invert: 'none'\n  },\n  cursors: null,\n\n  getCursor({\n    edges,\n    axis,\n    name\n  }) {\n    const cursors = resize.cursors;\n    let result = null;\n\n    if (axis) {\n      result = cursors[name + axis];\n    } else if (edges) {\n      let cursorKey = '';\n\n      for (const edge of ['top', 'bottom', 'left', 'right']) {\n        if (edges[edge]) {\n          cursorKey += edge;\n        }\n      }\n\n      result = cursors[cursorKey];\n    }\n\n    return result;\n  },\n\n  defaultMargin: null\n};\nexport default resize;\n//# sourceMappingURL=plugin.js.map", "/* eslint-disable import/order, no-console, eol-last */\nimport interact, { init } from \"../../interact/index.js\";\nimport plugin from \"./plugin.js\";\n\nif (typeof window === 'object' && !!window) {\n  init(window);\n}\n\ninteract.use(plugin);\n//# sourceMappingURL=index.js.map", "export default (() => {});\n//# sourceMappingURL=edgeTarget.js.map", "export default (() => {});\n//# sourceMappingURL=elements.js.map", "export default (grid => {\n  const coordFields = [['x', 'y'], ['left', 'top'], ['right', 'bottom'], ['width', 'height']].filter(([xField, yField]) => xField in grid || yField in grid);\n\n  const gridFunc = (x, y) => {\n    const {\n      range,\n      limits = {\n        left: -Infinity,\n        right: Infinity,\n        top: -Infinity,\n        bottom: Infinity\n      },\n      offset = {\n        x: 0,\n        y: 0\n      }\n    } = grid;\n    const result = {\n      range,\n      grid,\n      x: null,\n      y: null\n    };\n\n    for (const [xField, yField] of coordFields) {\n      const gridx = Math.round((x - offset.x) / grid[xField]);\n      const gridy = Math.round((y - offset.y) / grid[yField]);\n      result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x));\n      result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y));\n    }\n\n    return result;\n  };\n\n  gridFunc.grid = grid;\n  gridFunc.coordFields = coordFields;\n  return gridFunc;\n});\n//# sourceMappingURL=grid.js.map", "export { default as edgeTarget } from \"./edgeTarget.js\";\nexport { default as elements } from \"./elements.js\";\nexport { default as grid } from \"./grid.js\";\n//# sourceMappingURL=all.js.map", "import extend from \"../utils/extend.js\";\nimport * as allSnappers from \"./all.js\";\nconst snappersPlugin = {\n  id: 'snappers',\n\n  install(scope) {\n    const {\n      interactStatic: interact\n    } = scope;\n    interact.snappers = extend(interact.snappers || {}, allSnappers);\n    interact.createSnapGrid = interact.snappers.grid;\n  }\n\n};\nexport default snappersPlugin;\n//# sourceMappingURL=plugin.js.map", "import clone from \"../utils/clone.js\";\nimport extend from \"../utils/extend.js\";\nimport * as rectUtils from \"../utils/rect.js\";\nexport default class Modification {\n  constructor(interaction) {\n    this.states = [];\n    this.startOffset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.startDelta = null;\n    this.result = null;\n    this.endResult = null;\n    this.edges = void 0;\n    this.interaction = void 0;\n    this.interaction = interaction;\n    this.result = createResult();\n  }\n\n  start({\n    phase\n  }, pageCoords) {\n    const {\n      interaction\n    } = this;\n    const modifierList = getModifierList(interaction);\n    this.prepareStates(modifierList);\n    this.edges = extend({}, interaction.edges);\n    this.startOffset = getRectOffset(interaction.rect, pageCoords);\n    this.startDelta = {\n      x: 0,\n      y: 0\n    };\n    const arg = {\n      phase,\n      pageCoords,\n      preEnd: false\n    };\n    this.result = createResult();\n    this.startAll(arg);\n    const result = this.result = this.setAll(arg);\n    return result;\n  }\n\n  fillArg(arg) {\n    const {\n      interaction\n    } = this;\n    arg.interaction = interaction;\n    arg.interactable = interaction.interactable;\n    arg.element = interaction.element;\n    arg.rect = arg.rect || interaction.rect;\n    arg.edges = this.edges;\n    arg.startOffset = this.startOffset;\n  }\n\n  startAll(arg) {\n    this.fillArg(arg);\n\n    for (const state of this.states) {\n      if (state.methods.start) {\n        arg.state = state;\n        state.methods.start(arg);\n      }\n    }\n  }\n\n  setAll(arg) {\n    this.fillArg(arg);\n    const {\n      phase,\n      preEnd,\n      skipModifiers,\n      rect: unmodifiedRect\n    } = arg;\n    arg.coords = extend({}, arg.pageCoords);\n    arg.rect = extend({}, unmodifiedRect);\n    const states = skipModifiers ? this.states.slice(skipModifiers) : this.states;\n    const newResult = createResult(arg.coords, arg.rect);\n\n    for (const state of states) {\n      const {\n        options\n      } = state;\n      const lastModifierCoords = extend({}, arg.coords);\n      let returnValue = null;\n\n      if (state.methods.set && this.shouldDo(options, preEnd, phase)) {\n        arg.state = state;\n        returnValue = state.methods.set(arg);\n        rectUtils.addEdges(this.interaction.edges, arg.rect, {\n          x: arg.coords.x - lastModifierCoords.x,\n          y: arg.coords.y - lastModifierCoords.y\n        });\n      }\n\n      newResult.eventProps.push(returnValue);\n    }\n\n    newResult.delta.x = arg.coords.x - arg.pageCoords.x;\n    newResult.delta.y = arg.coords.y - arg.pageCoords.y;\n    newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left;\n    newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right;\n    newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top;\n    newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom;\n    const prevCoords = this.result.coords;\n    const prevRect = this.result.rect;\n\n    if (prevCoords && prevRect) {\n      const rectChanged = newResult.rect.left !== prevRect.left || newResult.rect.right !== prevRect.right || newResult.rect.top !== prevRect.top || newResult.rect.bottom !== prevRect.bottom;\n      newResult.changed = rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y;\n    }\n\n    return newResult;\n  }\n\n  applyToInteraction(arg) {\n    const {\n      interaction\n    } = this;\n    const {\n      phase\n    } = arg;\n    const curCoords = interaction.coords.cur;\n    const startCoords = interaction.coords.start;\n    const {\n      result,\n      startDelta\n    } = this;\n    const curDelta = result.delta;\n\n    if (phase === 'start') {\n      extend(this.startDelta, result.delta);\n    }\n\n    for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) {\n      coordsSet.page.x += delta.x;\n      coordsSet.page.y += delta.y;\n      coordsSet.client.x += delta.x;\n      coordsSet.client.y += delta.y;\n    }\n\n    const {\n      rectDelta\n    } = this.result;\n    const rect = arg.rect || interaction.rect;\n    rect.left += rectDelta.left;\n    rect.right += rectDelta.right;\n    rect.top += rectDelta.top;\n    rect.bottom += rectDelta.bottom;\n    rect.width = rect.right - rect.left;\n    rect.height = rect.bottom - rect.top;\n  }\n\n  setAndApply(arg) {\n    const {\n      interaction\n    } = this;\n    const {\n      phase,\n      preEnd,\n      skipModifiers\n    } = arg;\n    const result = this.setAll({\n      preEnd,\n      phase,\n      pageCoords: arg.modifiedCoords || interaction.coords.cur.page\n    });\n    this.result = result; // don't fire an action move if a modifier would keep the event in the same\n    // cordinates as before\n\n    if (!result.changed && (!skipModifiers || skipModifiers < this.states.length) && interaction.interacting()) {\n      return false;\n    }\n\n    if (arg.modifiedCoords) {\n      const {\n        page\n      } = interaction.coords.cur;\n      const adjustment = {\n        x: arg.modifiedCoords.x - page.x,\n        y: arg.modifiedCoords.y - page.y\n      };\n      result.coords.x += adjustment.x;\n      result.coords.y += adjustment.y;\n      result.delta.x += adjustment.x;\n      result.delta.y += adjustment.y;\n    }\n\n    this.applyToInteraction(arg);\n  }\n\n  beforeEnd(arg) {\n    const {\n      interaction,\n      event\n    } = arg;\n    const states = this.states;\n\n    if (!states || !states.length) {\n      return;\n    }\n\n    let doPreend = false;\n\n    for (const state of states) {\n      arg.state = state;\n      const {\n        options,\n        methods\n      } = state;\n      const endPosition = methods.beforeEnd && methods.beforeEnd(arg);\n\n      if (endPosition) {\n        this.endResult = endPosition;\n        return false;\n      }\n\n      doPreend = doPreend || !doPreend && this.shouldDo(options, true, arg.phase, true);\n    }\n\n    if (doPreend) {\n      // trigger a final modified move before ending\n      interaction.move({\n        event,\n        preEnd: true\n      });\n    }\n  }\n\n  stop(arg) {\n    const {\n      interaction\n    } = arg;\n\n    if (!this.states || !this.states.length) {\n      return;\n    }\n\n    const modifierArg = extend({\n      states: this.states,\n      interactable: interaction.interactable,\n      element: interaction.element,\n      rect: null\n    }, arg);\n    this.fillArg(modifierArg);\n\n    for (const state of this.states) {\n      modifierArg.state = state;\n\n      if (state.methods.stop) {\n        state.methods.stop(modifierArg);\n      }\n    }\n\n    this.states = null;\n    this.endResult = null;\n  }\n\n  prepareStates(modifierList) {\n    this.states = [];\n\n    for (let index = 0; index < modifierList.length; index++) {\n      const {\n        options,\n        methods,\n        name\n      } = modifierList[index];\n      this.states.push({\n        options,\n        methods,\n        index,\n        name\n      });\n    }\n\n    return this.states;\n  }\n\n  restoreInteractionCoords({\n    interaction: {\n      coords,\n      rect,\n      modification\n    }\n  }) {\n    if (!modification.result) {\n      return;\n    }\n\n    const {\n      startDelta\n    } = modification;\n    const {\n      delta: curDelta,\n      rectDelta\n    } = modification.result;\n    const coordsAndDeltas = [[coords.start, startDelta], [coords.cur, curDelta]];\n\n    for (const [coordsSet, delta] of coordsAndDeltas) {\n      coordsSet.page.x -= delta.x;\n      coordsSet.page.y -= delta.y;\n      coordsSet.client.x -= delta.x;\n      coordsSet.client.y -= delta.y;\n    }\n\n    rect.left -= rectDelta.left;\n    rect.right -= rectDelta.right;\n    rect.top -= rectDelta.top;\n    rect.bottom -= rectDelta.bottom;\n  }\n\n  shouldDo(options, preEnd, phase, requireEndOnly) {\n    if ( // ignore disabled modifiers\n    !options || options.enabled === false || // check if we require endOnly option to fire move before end\n    requireEndOnly && !options.endOnly || // don't apply endOnly modifiers when not ending\n    options.endOnly && !preEnd || // check if modifier should run be applied on start\n    phase === 'start' && !options.setStart) {\n      return false;\n    }\n\n    return true;\n  }\n\n  copyFrom(other) {\n    this.startOffset = other.startOffset;\n    this.startDelta = other.startDelta;\n    this.edges = other.edges;\n    this.states = other.states.map(s => clone(s));\n    this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect));\n  }\n\n  destroy() {\n    for (const prop in this) {\n      this[prop] = null;\n    }\n  }\n\n}\n\nfunction createResult(coords, rect) {\n  return {\n    rect,\n    coords,\n    delta: {\n      x: 0,\n      y: 0\n    },\n    rectDelta: {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventProps: [],\n    changed: true\n  };\n}\n\nfunction getModifierList(interaction) {\n  const actionOptions = interaction.interactable.options[interaction.prepared.name];\n  const actionModifiers = actionOptions.modifiers;\n\n  if (actionModifiers && actionModifiers.length) {\n    return actionModifiers;\n  }\n\n  return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize'].map(type => {\n    const options = actionOptions[type];\n    return options && options.enabled && {\n      options,\n      methods: options._methods\n    };\n  }).filter(m => !!m);\n}\n\nexport function getRectOffset(rect, coords) {\n  return rect ? {\n    left: coords.x - rect.left,\n    top: coords.y - rect.top,\n    right: rect.right - coords.x,\n    bottom: rect.bottom - coords.y\n  } : {\n    left: 0,\n    top: 0,\n    right: 0,\n    bottom: 0\n  };\n}\n//# sourceMappingURL=Modification.js.map", "import { InteractEvent } from \"../core/InteractEvent.js\";\nimport Interaction from \"../core/Interaction.js\";\nimport Modification from \"./Modification.js\";\nexport function makeModifier(module, name) {\n  const {\n    defaults\n  } = module;\n  const methods = {\n    start: module.start,\n    set: module.set,\n    beforeEnd: module.beforeEnd,\n    stop: module.stop\n  };\n\n  const modifier = _options => {\n    const options = _options || {};\n    options.enabled = options.enabled !== false; // add missing defaults to options\n\n    for (const prop in defaults) {\n      if (!(prop in options)) {\n        options[prop] = defaults[prop];\n      }\n    }\n\n    const m = {\n      options,\n      methods,\n      name,\n      enable: () => {\n        options.enabled = true;\n        return m;\n      },\n      disable: () => {\n        options.enabled = false;\n        return m;\n      }\n    };\n    return m;\n  };\n\n  if (name && typeof name === 'string') {\n    // for backwrads compatibility\n    modifier._defaults = defaults;\n    modifier._methods = methods;\n  }\n\n  return modifier;\n}\nexport function addEventModifiers({\n  iEvent,\n  interaction: {\n    modification: {\n      result\n    }\n  }\n}) {\n  if (result) {\n    iEvent.modifiers = result.eventProps;\n  }\n}\nconst modifiersBase = {\n  id: 'modifiers/base',\n  before: ['actions'],\n  install: scope => {\n    scope.defaults.perAction.modifiers = [];\n  },\n  listeners: {\n    'interactions:new': ({\n      interaction\n    }) => {\n      interaction.modification = new Modification(interaction);\n    },\n    'interactions:before-action-start': arg => {\n      const {\n        modification\n      } = arg.interaction;\n      modification.start(arg, arg.interaction.coords.start.page);\n      arg.interaction.edges = modification.edges;\n      modification.applyToInteraction(arg);\n    },\n    'interactions:before-action-move': arg => arg.interaction.modification.setAndApply(arg),\n    'interactions:before-action-end': arg => arg.interaction.modification.beforeEnd(arg),\n    'interactions:action-start': addEventModifiers,\n    'interactions:action-move': addEventModifiers,\n    'interactions:action-end': addEventModifiers,\n    'interactions:after-action-start': arg => arg.interaction.modification.restoreInteractionCoords(arg),\n    'interactions:after-action-move': arg => arg.interaction.modification.restoreInteractionCoords(arg),\n    'interactions:stop': arg => arg.interaction.modification.stop(arg)\n  }\n};\nexport default modifiersBase;\n//# sourceMappingURL=base.js.map", "/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This module forces elements to be resized with a specified dx/dy ratio.\n *\n * ```js\n * interact(target).resizable({\n *   modifiers: [\n *     interact.modifiers.snapSize({\n *       targets: [ interact.snappers.grid({ x: 20, y: 20 }) ],\n *     }),\n *     interact.aspectRatio({ ratio: 'preserve' }),\n *   ],\n * });\n * ```\n */\nimport extend from \"../utils/extend.js\";\nimport { addEdges } from \"../utils/rect.js\";\nimport Modification from \"./Modification.js\";\nimport { makeModifier } from \"./base.js\";\nconst aspectRatio = {\n  start(arg) {\n    const {\n      state,\n      rect,\n      edges: originalEdges,\n      pageCoords: coords\n    } = arg;\n    let {\n      ratio\n    } = state.options;\n    const {\n      equalDelta,\n      modifiers\n    } = state.options;\n\n    if (ratio === 'preserve') {\n      ratio = rect.width / rect.height;\n    }\n\n    state.startCoords = extend({}, coords);\n    state.startRect = extend({}, rect);\n    state.ratio = ratio;\n    state.equalDelta = equalDelta;\n    const linkedEdges = state.linkedEdges = {\n      top: originalEdges.top || originalEdges.left && !originalEdges.bottom,\n      left: originalEdges.left || originalEdges.top && !originalEdges.right,\n      bottom: originalEdges.bottom || originalEdges.right && !originalEdges.top,\n      right: originalEdges.right || originalEdges.bottom && !originalEdges.left\n    };\n    state.xIsPrimaryAxis = !!(originalEdges.left || originalEdges.right);\n\n    if (state.equalDelta) {\n      state.edgeSign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1);\n    } else {\n      const negativeSecondaryEdge = state.xIsPrimaryAxis ? linkedEdges.top : linkedEdges.left;\n      state.edgeSign = negativeSecondaryEdge ? -1 : 1;\n    }\n\n    extend(arg.edges, linkedEdges);\n\n    if (!modifiers || !modifiers.length) {\n      return;\n    }\n\n    const subModification = new Modification(arg.interaction);\n    subModification.copyFrom(arg.interaction.modification);\n    subModification.prepareStates(modifiers);\n    state.subModification = subModification;\n    subModification.startAll({ ...arg\n    });\n  },\n\n  set(arg) {\n    const {\n      state,\n      rect,\n      coords\n    } = arg;\n    const initialCoords = extend({}, coords);\n    const aspectMethod = state.equalDelta ? setEqualDelta : setRatio;\n    aspectMethod(state, state.xIsPrimaryAxis, coords, rect);\n\n    if (!state.subModification) {\n      return null;\n    }\n\n    const correctedRect = extend({}, rect);\n    addEdges(state.linkedEdges, correctedRect, {\n      x: coords.x - initialCoords.x,\n      y: coords.y - initialCoords.y\n    });\n    const result = state.subModification.setAll({ ...arg,\n      rect: correctedRect,\n      edges: state.linkedEdges,\n      pageCoords: coords,\n      prevCoords: coords,\n      prevRect: correctedRect\n    });\n    const {\n      delta\n    } = result;\n\n    if (result.changed) {\n      const xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y); // do aspect modification again with critical edge axis as primary\n\n      aspectMethod(state, xIsCriticalAxis, result.coords, result.rect);\n      extend(coords, result.coords);\n    }\n\n    return result.eventProps;\n  },\n\n  defaults: {\n    ratio: 'preserve',\n    equalDelta: false,\n    modifiers: [],\n    enabled: false\n  }\n};\n\nfunction setEqualDelta({\n  startCoords,\n  edgeSign\n}, xIsPrimaryAxis, coords) {\n  if (xIsPrimaryAxis) {\n    coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign;\n  } else {\n    coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign;\n  }\n}\n\nfunction setRatio({\n  startRect,\n  startCoords,\n  ratio,\n  edgeSign\n}, xIsPrimaryAxis, coords, rect) {\n  if (xIsPrimaryAxis) {\n    const newHeight = rect.width / ratio;\n    coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign;\n  } else {\n    const newWidth = rect.height * ratio;\n    coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign;\n  }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio');\nexport { aspectRatio };\n//# sourceMappingURL=aspectRatio.js.map", "const noop = () => {};\n\nnoop._defaults = {};\nexport default noop;\n//# sourceMappingURL=noop.js.map", "import extend from \"../../utils/extend.js\";\nimport is from \"../../utils/is.js\";\nimport * as rectUtils from \"../../utils/rect.js\";\nimport { makeModifier } from \"../base.js\";\n\nfunction start({\n  rect,\n  startOffset,\n  state,\n  interaction,\n  pageCoords\n}) {\n  const {\n    options\n  } = state;\n  const {\n    elementRect\n  } = options;\n  const offset = extend({\n    left: 0,\n    top: 0,\n    right: 0,\n    bottom: 0\n  }, options.offset || {});\n\n  if (rect && elementRect) {\n    const restriction = getRestrictionRect(options.restriction, interaction, pageCoords);\n\n    if (restriction) {\n      const widthDiff = restriction.right - restriction.left - rect.width;\n      const heightDiff = restriction.bottom - restriction.top - rect.height;\n\n      if (widthDiff < 0) {\n        offset.left += widthDiff;\n        offset.right += widthDiff;\n      }\n\n      if (heightDiff < 0) {\n        offset.top += heightDiff;\n        offset.bottom += heightDiff;\n      }\n    }\n\n    offset.left += startOffset.left - rect.width * elementRect.left;\n    offset.top += startOffset.top - rect.height * elementRect.top;\n    offset.right += startOffset.right - rect.width * (1 - elementRect.right);\n    offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom);\n  }\n\n  state.offset = offset;\n}\n\nfunction set({\n  coords,\n  interaction,\n  state\n}) {\n  const {\n    options,\n    offset\n  } = state;\n  const restriction = getRestrictionRect(options.restriction, interaction, coords);\n\n  if (!restriction) {\n    return;\n  }\n\n  const rect = rectUtils.xywhToTlbr(restriction);\n  coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left);\n  coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top);\n}\n\nexport function getRestrictionRect(value, interaction, coords) {\n  if (is.func(value)) {\n    return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction]);\n  } else {\n    return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element);\n  }\n}\nconst defaults = {\n  restriction: null,\n  elementRect: null,\n  offset: null,\n  endOnly: false,\n  enabled: false\n};\nconst restrict = {\n  start,\n  set,\n  defaults\n};\nexport default makeModifier(restrict, 'restrict');\nexport { restrict };\n//# sourceMappingURL=pointer.js.map", "// This module adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n//   edges: { top: true, left: true },\n//   restrictEdges: {\n//     inner: { top: 200, left: 200, right: 400, bottom: 400 },\n//     outer: { top:   0, left:   0, right: 600, bottom: 600 },\n//   },\n// })\nimport extend from \"../../utils/extend.js\";\nimport * as rectUtils from \"../../utils/rect.js\";\nimport { makeModifier } from \"../base.js\";\nimport { getRestrictionRect } from \"./pointer.js\";\nconst noInner = {\n  top: +Infinity,\n  left: +Infinity,\n  bottom: -Infinity,\n  right: -Infinity\n};\nconst noOuter = {\n  top: -Infinity,\n  left: -Infinity,\n  bottom: +Infinity,\n  right: +Infinity\n};\n\nfunction start({\n  interaction,\n  startOffset,\n  state\n}) {\n  const {\n    options\n  } = state;\n  let offset;\n\n  if (options) {\n    const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page);\n    offset = rectUtils.rectToXY(offsetRect);\n  }\n\n  offset = offset || {\n    x: 0,\n    y: 0\n  };\n  state.offset = {\n    top: offset.y + startOffset.top,\n    left: offset.x + startOffset.left,\n    bottom: offset.y - startOffset.bottom,\n    right: offset.x - startOffset.right\n  };\n}\n\nfunction set({\n  coords,\n  edges,\n  interaction,\n  state\n}) {\n  const {\n    offset,\n    options\n  } = state;\n\n  if (!edges) {\n    return;\n  }\n\n  const page = extend({}, coords);\n  const inner = getRestrictionRect(options.inner, interaction, page) || {};\n  const outer = getRestrictionRect(options.outer, interaction, page) || {};\n  fixRect(inner, noInner);\n  fixRect(outer, noOuter);\n\n  if (edges.top) {\n    coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top);\n  } else if (edges.bottom) {\n    coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom);\n  }\n\n  if (edges.left) {\n    coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left);\n  } else if (edges.right) {\n    coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right);\n  }\n}\n\nfunction fixRect(rect, defaults) {\n  for (const edge of ['top', 'left', 'bottom', 'right']) {\n    if (!(edge in rect)) {\n      rect[edge] = defaults[edge];\n    }\n  }\n\n  return rect;\n}\n\nconst defaults = {\n  inner: null,\n  outer: null,\n  offset: null,\n  endOnly: false,\n  enabled: false\n};\nconst restrictEdges = {\n  noInner,\n  noOuter,\n  start,\n  set,\n  defaults\n};\nexport default makeModifier(restrictEdges, 'restrictEdges');\nexport { restrictEdges };\n//# sourceMappingURL=edges.js.map", "import extend from \"../../utils/extend.js\";\nimport { makeModifier } from \"../base.js\";\nimport { restrict } from \"./pointer.js\";\nconst defaults = extend({\n  get elementRect() {\n    return {\n      top: 0,\n      left: 0,\n      bottom: 1,\n      right: 1\n    };\n  },\n\n  set elementRect(_) {}\n\n}, restrict.defaults);\nconst restrictRect = {\n  start: restrict.start,\n  set: restrict.set,\n  defaults\n};\nexport default makeModifier(restrictRect, 'restrictRect');\nexport { restrictRect };\n//# sourceMappingURL=rect.js.map", "import extend from \"../../utils/extend.js\";\nimport * as rectUtils from \"../../utils/rect.js\";\nimport { makeModifier } from \"../base.js\";\nimport { restrictEdges } from \"./edges.js\";\nimport { getRestrictionRect } from \"./pointer.js\";\nconst noMin = {\n  width: -Infinity,\n  height: -Infinity\n};\nconst noMax = {\n  width: +Infinity,\n  height: +Infinity\n};\n\nfunction start(arg) {\n  return restrictEdges.start(arg);\n}\n\nfunction set(arg) {\n  const {\n    interaction,\n    state,\n    rect,\n    edges\n  } = arg;\n  const {\n    options\n  } = state;\n\n  if (!edges) {\n    return;\n  }\n\n  const minSize = rectUtils.tlbrToXywh(getRestrictionRect(options.min, interaction, arg.coords)) || noMin;\n  const maxSize = rectUtils.tlbrToXywh(getRestrictionRect(options.max, interaction, arg.coords)) || noMax;\n  state.options = {\n    endOnly: options.endOnly,\n    inner: extend({}, restrictEdges.noInner),\n    outer: extend({}, restrictEdges.noOuter)\n  };\n\n  if (edges.top) {\n    state.options.inner.top = rect.bottom - minSize.height;\n    state.options.outer.top = rect.bottom - maxSize.height;\n  } else if (edges.bottom) {\n    state.options.inner.bottom = rect.top + minSize.height;\n    state.options.outer.bottom = rect.top + maxSize.height;\n  }\n\n  if (edges.left) {\n    state.options.inner.left = rect.right - minSize.width;\n    state.options.outer.left = rect.right - maxSize.width;\n  } else if (edges.right) {\n    state.options.inner.right = rect.left + minSize.width;\n    state.options.outer.right = rect.left + maxSize.width;\n  }\n\n  restrictEdges.set(arg);\n  state.options = options;\n}\n\nconst defaults = {\n  min: null,\n  max: null,\n  endOnly: false,\n  enabled: false\n};\nconst restrictSize = {\n  start,\n  set,\n  defaults\n};\nexport default makeModifier(restrictSize, 'restrictSize');\nexport { restrictSize };\n//# sourceMappingURL=size.js.map", "import extend from \"../../utils/extend.js\";\nimport getOriginXY from \"../../utils/getOriginXY.js\";\nimport hypot from \"../../utils/hypot.js\";\nimport is from \"../../utils/is.js\";\nimport { resolveRectLike, rectToXY } from \"../../utils/rect.js\";\nimport { makeModifier } from \"../base.js\";\n\nfunction start(arg) {\n  const {\n    interaction,\n    interactable,\n    element,\n    rect,\n    state,\n    startOffset\n  } = arg;\n  const {\n    options\n  } = state;\n  const origin = options.offsetWithOrigin ? getOrigin(arg) : {\n    x: 0,\n    y: 0\n  };\n  let snapOffset;\n\n  if (options.offset === 'startCoords') {\n    snapOffset = {\n      x: interaction.coords.start.page.x,\n      y: interaction.coords.start.page.y\n    };\n  } else {\n    const offsetRect = resolveRectLike(options.offset, interactable, element, [interaction]);\n    snapOffset = rectToXY(offsetRect) || {\n      x: 0,\n      y: 0\n    };\n    snapOffset.x += origin.x;\n    snapOffset.y += origin.y;\n  }\n\n  const {\n    relativePoints\n  } = options;\n  state.offsets = rect && relativePoints && relativePoints.length ? relativePoints.map((relativePoint, index) => ({\n    index,\n    relativePoint,\n    x: startOffset.left - rect.width * relativePoint.x + snapOffset.x,\n    y: startOffset.top - rect.height * relativePoint.y + snapOffset.y\n  })) : [extend({\n    index: 0,\n    relativePoint: null\n  }, snapOffset)];\n}\n\nfunction set(arg) {\n  const {\n    interaction,\n    coords,\n    state\n  } = arg;\n  const {\n    options,\n    offsets\n  } = state;\n  const origin = getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name);\n  const page = extend({}, coords);\n  const targets = [];\n\n  if (!options.offsetWithOrigin) {\n    page.x -= origin.x;\n    page.y -= origin.y;\n  }\n\n  for (const offset of offsets) {\n    const relativeX = page.x - offset.x;\n    const relativeY = page.y - offset.y;\n\n    for (let index = 0, len = options.targets.length; index < len; index++) {\n      const snapTarget = options.targets[index];\n      let target;\n\n      if (is.func(snapTarget)) {\n        target = snapTarget(relativeX, relativeY, interaction._proxy, offset, index);\n      } else {\n        target = snapTarget;\n      }\n\n      if (!target) {\n        continue;\n      }\n\n      targets.push({\n        x: (is.number(target.x) ? target.x : relativeX) + offset.x,\n        y: (is.number(target.y) ? target.y : relativeY) + offset.y,\n        range: is.number(target.range) ? target.range : options.range,\n        source: snapTarget,\n        index,\n        offset\n      });\n    }\n  }\n\n  const closest = {\n    target: null,\n    inRange: false,\n    distance: 0,\n    range: 0,\n    delta: {\n      x: 0,\n      y: 0\n    }\n  };\n\n  for (const target of targets) {\n    const range = target.range;\n    const dx = target.x - page.x;\n    const dy = target.y - page.y;\n    const distance = hypot(dx, dy);\n    let inRange = distance <= range; // Infinite targets count as being out of range\n    // compared to non infinite ones that are in range\n\n    if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n      inRange = false;\n    }\n\n    if (!closest.target || (inRange // is the closest target in range?\n    ? closest.inRange && range !== Infinity // the pointer is relatively deeper in this target\n    ? distance / range < closest.distance / closest.range // this target has Infinite range and the closest doesn't\n    : range === Infinity && closest.range !== Infinity || // OR this target is closer that the previous closest\n    distance < closest.distance : // The other is not in range and the pointer is closer to this target\n    !closest.inRange && distance < closest.distance)) {\n      closest.target = target;\n      closest.distance = distance;\n      closest.range = range;\n      closest.inRange = inRange;\n      closest.delta.x = dx;\n      closest.delta.y = dy;\n    }\n  }\n\n  if (closest.inRange) {\n    coords.x = closest.target.x;\n    coords.y = closest.target.y;\n  }\n\n  state.closest = closest;\n  return closest;\n}\n\nfunction getOrigin(arg) {\n  const {\n    element\n  } = arg.interaction;\n  const optionsOrigin = rectToXY(resolveRectLike(arg.state.options.origin, null, null, [element]));\n  const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name);\n  return origin;\n}\n\nconst defaults = {\n  range: Infinity,\n  targets: null,\n  offset: null,\n  offsetWithOrigin: true,\n  origin: null,\n  relativePoints: null,\n  endOnly: false,\n  enabled: false\n};\nconst snap = {\n  start,\n  set,\n  defaults\n};\nexport default makeModifier(snap, 'snap');\nexport { snap };\n//# sourceMappingURL=pointer.js.map", "// This module allows snapping of the size of targets during resize\n// interactions.\nimport extend from \"../../utils/extend.js\";\nimport is from \"../../utils/is.js\";\nimport { makeModifier } from \"../base.js\";\nimport { snap } from \"./pointer.js\";\n\nfunction start(arg) {\n  const {\n    state,\n    edges\n  } = arg;\n  const {\n    options\n  } = state;\n\n  if (!edges) {\n    return null;\n  }\n\n  arg.state = {\n    options: {\n      targets: null,\n      relativePoints: [{\n        x: edges.left ? 0 : 1,\n        y: edges.top ? 0 : 1\n      }],\n      offset: options.offset || 'self',\n      origin: {\n        x: 0,\n        y: 0\n      },\n      range: options.range\n    }\n  };\n  state.targetFields = state.targetFields || [['width', 'height'], ['x', 'y']];\n  snap.start(arg);\n  state.offsets = arg.state.offsets;\n  arg.state = state;\n}\n\nfunction set(arg) {\n  const {\n    interaction,\n    state,\n    coords\n  } = arg;\n  const {\n    options,\n    offsets\n  } = state;\n  const relative = {\n    x: coords.x - offsets[0].x,\n    y: coords.y - offsets[0].y\n  };\n  state.options = extend({}, options);\n  state.options.targets = [];\n\n  for (const snapTarget of options.targets || []) {\n    let target;\n\n    if (is.func(snapTarget)) {\n      target = snapTarget(relative.x, relative.y, interaction);\n    } else {\n      target = snapTarget;\n    }\n\n    if (!target) {\n      continue;\n    }\n\n    for (const [xField, yField] of state.targetFields) {\n      if (xField in target || yField in target) {\n        target.x = target[xField];\n        target.y = target[yField];\n        break;\n      }\n    }\n\n    state.options.targets.push(target);\n  }\n\n  const returnValue = snap.set(arg);\n  state.options = options;\n  return returnValue;\n}\n\nconst defaults = {\n  range: Infinity,\n  targets: null,\n  offset: null,\n  endOnly: false,\n  enabled: false\n};\nconst snapSize = {\n  start,\n  set,\n  defaults\n};\nexport default makeModifier(snapSize, 'snapSize');\nexport { snapSize };\n//# sourceMappingURL=size.js.map", "/**\n * @module modifiers/snapEdges\n *\n * @description\n * WOW> This module allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n *   snapEdges: {\n *     targets: [interact.snappers.grid({ x: 100, y: 50 })],\n *   },\n * })\n *\n * interact(target).resizable({\n *   snapEdges: {\n *     targets: [\n *       interact.snappers.grid({\n *        top: 50,\n *        left: 50,\n *        bottom: 100,\n *        right: 100,\n *       }),\n *     ],\n *   },\n * })\n * ```\n */\nimport clone from \"../../utils/clone.js\";\nimport extend from \"../../utils/extend.js\";\nimport { makeModifier } from \"../base.js\";\nimport { snapSize } from \"./size.js\";\n\nfunction start(arg) {\n  const {\n    edges\n  } = arg;\n\n  if (!edges) {\n    return null;\n  }\n\n  arg.state.targetFields = arg.state.targetFields || [[edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom']];\n  return snapSize.start(arg);\n}\n\nconst snapEdges = {\n  start,\n  set: snapSize.set,\n  defaults: extend(clone(snapSize.defaults), {\n    targets: null,\n    range: null,\n    offset: {\n      x: 0,\n      y: 0\n    }\n  })\n};\nexport default makeModifier(snapEdges, 'snapEdges');\nexport { snapEdges };\n//# sourceMappingURL=edges.js.map", "/* eslint-disable node/no-extraneous-import */\nimport aspectRatio from \"./aspectRatio.js\";\nimport avoid from \"./avoid.js\";\nimport restrictEdges from \"./restrict/edges.js\";\nimport restrict from \"./restrict/pointer.js\";\nimport restrictRect from \"./restrict/rect.js\";\nimport restrictSize from \"./restrict/size.js\";\nimport rubberband from \"./rubberband.js\";\nimport snapEdges from \"./snap/edges.js\";\nimport snap from \"./snap/pointer.js\";\nimport snapSize from \"./snap/size.js\";\nimport spring from \"./spring.js\";\nimport transform from \"./transform.js\";\nexport default {\n  aspectRatio,\n  restrictEdges,\n  restrict,\n  restrictRect,\n  restrictSize,\n  snapEdges,\n  snap,\n  snapSize,\n  spring,\n  avoid,\n  transform,\n  rubberband\n};\n//# sourceMappingURL=all.js.map", "import snappers from \"../snappers/plugin.js\";\nimport all from \"./all.js\";\nimport base from \"./base.js\";\nconst modifiers = {\n  id: 'modifiers',\n\n  install(scope) {\n    const {\n      interactStatic: interact\n    } = scope;\n    scope.usePlugin(base);\n    scope.usePlugin(snappers);\n    interact.modifiers = all; // for backwrads compatibility\n\n    for (const type in all) {\n      const {\n        _defaults,\n        _methods\n      } = all[type];\n      _defaults._methods = _methods;\n      scope.defaults.perAction[type] = _defaults;\n    }\n  }\n\n};\nexport default modifiers;\n//# sourceMappingURL=plugin.js.map", "/* eslint-disable import/order, no-console, eol-last */\nimport interact, { init } from \"../interact/index.js\";\nimport plugin from \"./plugin.js\";\n\nif (typeof window === 'object' && !!window) {\n  init(window);\n}\n\ninteract.use(plugin);\n//# sourceMappingURL=index.js.map", "/* eslint-disable no-console */\nimport { Scope } from \"../core/scope.js\";\nimport domObjects from \"../utils/domObjects.js\";\nimport { parentNode } from \"../utils/domUtils.js\";\nimport extend from \"../utils/extend.js\";\nimport is from \"../utils/is.js\";\nimport * as win from \"../utils/window.js\";\nvar CheckName;\n\n(function (CheckName) {\n  CheckName[\"touchAction\"] = \"touchAction\";\n  CheckName[\"boxSizing\"] = \"boxSizing\";\n  CheckName[\"noListeners\"] = \"noListeners\";\n})(CheckName || (CheckName = {}));\n\nconst prefix = '[interact.js] ';\nconst links = {\n  touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n  boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing'\n}; // eslint-disable-next-line no-undef\n\nconst isProduction = \"development\" === 'production'; // eslint-disable-next-line no-restricted-syntax\n\nfunction install(scope, {\n  logger\n} = {}) {\n  const {\n    Interactable,\n    defaults\n  } = scope;\n  scope.logger = logger || console;\n  defaults.base.devTools = {\n    ignore: {}\n  };\n\n  Interactable.prototype.devTools = function (options) {\n    if (options) {\n      extend(this.options.devTools, options);\n      return this;\n    }\n\n    return this.options.devTools;\n  };\n}\n\nconst checks = [{\n  name: CheckName.touchAction,\n\n  perform({\n    element\n  }) {\n    return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/);\n  },\n\n  getInfo({\n    element\n  }) {\n    return [element, links.touchAction];\n  },\n\n  text: 'Consider adding CSS \"touch-action: none\" to this element\\n'\n}, {\n  name: CheckName.boxSizing,\n\n  perform(interaction) {\n    const {\n      element\n    } = interaction;\n    return interaction.prepared.name === 'resize' && element instanceof domObjects.HTMLElement && !hasStyle(element, 'boxSizing', /border-box/);\n  },\n\n  text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n\n  getInfo({\n    element\n  }) {\n    return [element, links.boxSizing];\n  }\n\n}, {\n  name: CheckName.noListeners,\n\n  perform(interaction) {\n    const actionName = interaction.prepared.name;\n    const moveListeners = interaction.interactable.events.types[`${actionName}move`] || [];\n    return !moveListeners.length;\n  },\n\n  getInfo(interaction) {\n    return [interaction.prepared.name, interaction.interactable];\n  },\n\n  text: 'There are no listeners set for this action'\n}];\n\nfunction hasStyle(element, prop, styleRe) {\n  const value = element.style[prop] || win.window.getComputedStyle(element)[prop];\n  return styleRe.test((value || '').toString());\n}\n\nfunction parentHasStyle(element, prop, styleRe) {\n  let parent = element;\n\n  while (is.element(parent)) {\n    if (hasStyle(parent, prop, styleRe)) {\n      return true;\n    }\n\n    parent = parentNode(parent);\n  }\n\n  return false;\n}\n\nconst id = 'dev-tools';\nconst defaultExport = isProduction ? {\n  id,\n  install: () => {}\n} : {\n  id,\n  install,\n  listeners: {\n    'interactions:action-start': ({\n      interaction\n    }, scope) => {\n      for (const check of checks) {\n        const options = interaction.interactable && interaction.interactable.options;\n\n        if (!(options && options.devTools && options.devTools.ignore[check.name]) && check.perform(interaction)) {\n          scope.logger.warn(prefix + check.text, ...check.getInfo(interaction));\n        }\n      }\n    }\n  },\n  checks,\n  CheckName,\n  links,\n  prefix\n};\nexport default defaultExport;\n//# sourceMappingURL=plugin.js.map", "/* eslint-disable import/order, no-console, eol-last */\nimport interact, { init } from \"../interact/index.js\";\nimport plugin from \"./plugin.js\";\n\nif (typeof window === 'object' && !!window) {\n  init(window);\n}\n\ninteract.use(plugin);\n//# sourceMappingURL=index.js.map", "<template>\r\n    <div ref=\"item\"\r\n         class=\"vue-grid-item\"\r\n         :class=\"classObj\"\r\n         :style=\"style\"\r\n    >\r\n        <slot></slot>\r\n        <span v-if=\"resizableAndNotStatic\" ref=\"handle\" :class=\"resizableHandleClass\"></span>\r\n        <!--<span v-if=\"draggable\" ref=\"dragHandle\" class=\"vue-draggable-handle\"></span>-->\r\n    </div>\r\n</template>\r\n<style>\r\n    .vue-grid-item {\r\n        transition: all 200ms ease;\r\n        transition-property: left, top, right;\r\n        /* add right for rtl */\r\n    }\r\n\r\n    .vue-grid-item.no-touch {\r\n        -ms-touch-action: none;\r\n        touch-action: none;\r\n    }\r\n\r\n    .vue-grid-item.cssTransforms {\r\n        transition-property: transform;\r\n        left: 0;\r\n        right: auto;\r\n    }\r\n\r\n    .vue-grid-item.cssTransforms.render-rtl {\r\n        left: auto;\r\n        right: 0;\r\n    }\r\n\r\n    .vue-grid-item.resizing {\r\n        opacity: 0.6;\r\n        z-index: 3;\r\n    }\r\n\r\n    .vue-grid-item.vue-draggable-dragging {\r\n        transition:none;\r\n        z-index: 3;\r\n    }\r\n\r\n    .vue-grid-item.vue-grid-placeholder {\r\n        background: red;\r\n        opacity: 0.2;\r\n        transition-duration: 100ms;\r\n        z-index: 2;\r\n        -webkit-user-select: none;\r\n        -moz-user-select: none;\r\n        -ms-user-select: none;\r\n        -o-user-select: none;\r\n        user-select: none;\r\n    }\r\n\r\n    .vue-grid-item > .vue-resizable-handle {\r\n        position: absolute;\r\n        width: 20px;\r\n        height: 20px;\r\n        bottom: 0;\r\n        right: 0;\r\n        background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg08IS0tIEdlbmVyYXRvcjogQWRvYmUgRmlyZXdvcmtzIENTNiwgRXhwb3J0IFNWRyBFeHRlbnNpb24gYnkgQWFyb24gQmVhbGwgKGh0dHA6Ly9maXJld29ya3MuYWJlYWxsLmNvbSkgLiBWZXJzaW9uOiAwLjYuMSAgLS0+DTwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DTxzdmcgaWQ9IlVudGl0bGVkLVBhZ2UlMjAxIiB2aWV3Qm94PSIwIDAgNiA2IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDAiIHZlcnNpb249IjEuMSINCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiDQl4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjZweCIgaGVpZ2h0PSI2cHgiDT4NCTxnIG9wYWNpdHk9IjAuMzAyIj4NCQk8cGF0aCBkPSJNIDYgNiBMIDAgNiBMIDAgNC4yIEwgNCA0LjIgTCA0LjIgNC4yIEwgNC4yIDAgTCA2IDAgTCA2IDYgTCA2IDYgWiIgZmlsbD0iIzAwMDAwMCIvPg0JPC9nPg08L3N2Zz4=');\r\n        background-position: bottom right;\r\n        padding: 0 3px 3px 0;\r\n        background-repeat: no-repeat;\r\n        background-origin: content-box;\r\n        box-sizing: border-box;\r\n        cursor: se-resize;\r\n    }\r\n\r\n    .vue-grid-item > .vue-rtl-resizable-handle {\r\n        bottom: 0;\r\n        left: 0;\r\n        background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAuMDAwMDAwMDAwMDAwMDAyIiBoZWlnaHQ9IjEwLjAwMDAwMDAwMDAwMDAwMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDwhLS0gQ3JlYXRlZCB3aXRoIE1ldGhvZCBEcmF3IC0gaHR0cDovL2dpdGh1Yi5jb20vZHVvcGl4ZWwvTWV0aG9kLURyYXcvIC0tPgogPGc+CiAgPHRpdGxlPmJhY2tncm91bmQ8L3RpdGxlPgogIDxyZWN0IGZpbGw9Im5vbmUiIGlkPSJjYW52YXNfYmFja2dyb3VuZCIgaGVpZ2h0PSIxMiIgd2lkdGg9IjEyIiB5PSItMSIgeD0iLTEiLz4KICA8ZyBkaXNwbGF5PSJub25lIiBvdmVyZmxvdz0idmlzaWJsZSIgeT0iMCIgeD0iMCIgaGVpZ2h0PSIxMDAlIiB3aWR0aD0iMTAwJSIgaWQ9ImNhbnZhc0dyaWQiPgogICA8cmVjdCBmaWxsPSJ1cmwoI2dyaWRwYXR0ZXJuKSIgc3Ryb2tlLXdpZHRoPSIwIiB5PSIwIiB4PSIwIiBoZWlnaHQ9IjEwMCUiIHdpZHRoPSIxMDAlIi8+CiAgPC9nPgogPC9nPgogPGc+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxsaW5lIGNhbnZhcz0iI2ZmZmZmZiIgY2FudmFzLW9wYWNpdHk9IjEiIHN0cm9rZS1saW5lY2FwPSJ1bmRlZmluZWQiIHN0cm9rZS1saW5lam9pbj0idW5kZWZpbmVkIiBpZD0ic3ZnXzEiIHkyPSItNzAuMTc4NDA3IiB4Mj0iMTI0LjQ2NDE3NSIgeTE9Ii0zOC4zOTI3MzciIHgxPSIxNDQuODIxMjg5IiBzdHJva2Utd2lkdGg9IjEuNSIgc3Ryb2tlPSIjMDAwIiBmaWxsPSJub25lIi8+CiAgPGxpbmUgc3Ryb2tlPSIjNjY2NjY2IiBzdHJva2UtbGluZWNhcD0idW5kZWZpbmVkIiBzdHJva2UtbGluZWpvaW49InVuZGVmaW5lZCIgaWQ9InN2Z181IiB5Mj0iOS4xMDY5NTciIHgyPSIwLjk0NzI0NyIgeTE9Ii0wLjAxODEyOCIgeDE9IjAuOTQ3MjQ3IiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz4KICA8bGluZSBzdHJva2UtbGluZWNhcD0idW5kZWZpbmVkIiBzdHJva2UtbGluZWpvaW49InVuZGVmaW5lZCIgaWQ9InN2Z183IiB5Mj0iOSIgeDI9IjEwLjA3MzUyOSIgeTE9IjkiIHgxPSItMC42NTU2NCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiM2NjY2NjYiIGZpbGw9Im5vbmUiLz4KIDwvZz4KPC9zdmc+);\r\n        background-position: bottom left;\r\n        padding-left: 3px;\r\n        background-repeat: no-repeat;\r\n        background-origin: content-box;\r\n        cursor: sw-resize;\r\n        right: auto;\r\n    }\r\n\r\n    .vue-grid-item.disable-userselect {\r\n        user-select: none;\r\n    }\r\n</style>\r\n<script>\r\n    import {setTopLeft, setTopRight, setTransformRtl, setTransform} from '@/helpers/utils';\r\n    import {getControlPosition, createCoreData} from '@/helpers/draggableUtils';\r\n    import {getColsFromBreakpoint} from '@/helpers/responsiveUtils';\r\n    import {getDocumentDir} from \"@/helpers/DOM\";\r\n    //    var eventBus = require('./eventBus');\r\n\r\n    import '@interactjs/auto-start'\r\n    import '@interactjs/auto-scroll'\r\n    import '@interactjs/actions/drag'\r\n    import '@interactjs/actions/resize'\r\n    import '@interactjs/modifiers'\r\n    import '@interactjs/dev-tools'\r\n    import interact from '@interactjs/interact'\r\n\r\n    export default {\r\n        name: \"GridItem\",\r\n        props: {\r\n            /*cols: {\r\n             type: Number,\r\n             required: true\r\n             },*/\r\n            /*containerWidth: {\r\n             type: Number,\r\n             required: true\r\n\r\n             },\r\n             rowHeight: {\r\n             type: Number,\r\n             required: true\r\n             },\r\n             margin: {\r\n             type: Array,\r\n             required: true\r\n             },\r\n             maxRows: {\r\n             type: Number,\r\n             required: true\r\n             },*/\r\n            isDraggable: {\r\n                type: Boolean,\r\n                required: false,\r\n                default: null\r\n            },\r\n            isResizable: {\r\n                type: Boolean,\r\n                required: false,\r\n                default: null\r\n            },\r\n            isBounded: {\r\n                type: Boolean,\r\n                required: false,\r\n                default: null\r\n            },\r\n            /*useCssTransforms: {\r\n             type: Boolean,\r\n             required: true\r\n             },\r\n             */\r\n            static: {\r\n                type: Boolean,\r\n                required: false,\r\n                default: false\r\n            },\r\n            minH: {\r\n                type: Number,\r\n                required: false,\r\n                default: 1\r\n            },\r\n            minW: {\r\n                type: Number,\r\n                required: false,\r\n                default: 1\r\n            },\r\n            maxH: {\r\n                type: Number,\r\n                required: false,\r\n                default: Infinity\r\n            },\r\n            maxW: {\r\n                type: Number,\r\n                required: false,\r\n                default: Infinity\r\n            },\r\n            x: {\r\n                type: Number,\r\n                required: true\r\n            },\r\n            y: {\r\n                type: Number,\r\n                required: true\r\n            },\r\n            w: {\r\n                type: Number,\r\n                required: true\r\n            },\r\n            h: {\r\n                type: Number,\r\n                required: true\r\n            },\r\n            i: {\r\n                required: true\r\n            },\r\n            dragIgnoreFrom: {\r\n                type: String,\r\n                required: false,\r\n                default: 'a, button'\r\n            },\r\n            dragAllowFrom: {\r\n                type: String,\r\n                required: false,\r\n                default: null\r\n            },\r\n            resizeIgnoreFrom: {\r\n                type: String,\r\n                required: false,\r\n                default: 'a, button'\r\n            },\r\n            preserveAspectRatio: {\r\n                type: Boolean,\r\n                required: false,\r\n                default: false,\r\n            },\r\n            dragOption:{\r\n                type:Object,\r\n                required: false,\r\n                default: ()=>({}),\r\n            },\r\n            resizeOption:{\r\n                type:Object,\r\n                required: false,\r\n                default: ()=>({}),\r\n            }\r\n        },\r\n        inject: [\"eventBus\", \"layout\"],\r\n        data: function () {\r\n            return {\r\n                cols: 1,\r\n                containerWidth: 100,\r\n                rowHeight: 30,\r\n                margin: [10, 10],\r\n                maxRows: Infinity,\r\n                draggable: null,\r\n                resizable: null,\r\n                transformScale: 1,\r\n                useCssTransforms: true,\r\n                useStyleCursor: true,\r\n\r\n                isDragging: false,\r\n                dragging: null,\r\n                isResizing: false,\r\n                resizing: null,\r\n                lastX: NaN,\r\n                lastY: NaN,\r\n                lastW: NaN,\r\n                lastH: NaN,\r\n                style: {},\r\n                rtl: false,\r\n\r\n                dragEventSet: false,\r\n                resizeEventSet: false,\r\n\r\n                previousW: null,\r\n                previousH: null,\r\n                previousX: null,\r\n                previousY: null,\r\n                innerX: this.x,\r\n                innerY: this.y,\r\n                innerW: this.w,\r\n                innerH: this.h\r\n            }\r\n        },\r\n        created () {\r\n            let self = this;\r\n\r\n            // Accessible refernces of functions for removing in beforeDestroy\r\n            self.updateWidthHandler = function (width) {\r\n                self.updateWidth(width);\r\n            };\r\n\r\n            self.compactHandler = function (layout) {\r\n                self.compact(layout);\r\n            };\r\n\r\n            self.setDraggableHandler = function (isDraggable) {\r\n                if (self.isDraggable === null) {\r\n                    self.draggable = isDraggable;\r\n                }\r\n            };\r\n\r\n            self.setResizableHandler = function (isResizable) {\r\n                if (self.isResizable === null) {\r\n                    self.resizable = isResizable;\r\n                }\r\n            };\r\n\r\n            self.setBoundedHandler = function (isBounded) {\r\n                if (self.isBounded === null) {\r\n                    self.bounded = isBounded;\r\n                }\r\n            };\r\n\r\n            self.setTransformScaleHandler = function (transformScale) {\r\n                self.transformScale = transformScale\r\n            };\r\n\r\n            self.setRowHeightHandler = function (rowHeight) {\r\n                self.rowHeight = rowHeight;\r\n            };\r\n\r\n            self.setMaxRowsHandler = function (maxRows) {\r\n                self.maxRows = maxRows;\r\n            };\r\n\r\n            self.directionchangeHandler = () => {\r\n                this.rtl = getDocumentDir() === 'rtl';\r\n                this.compact();\r\n            };\r\n\r\n            self.setColNum = (colNum) => {\r\n               self.cols = parseInt(colNum);\r\n            }\r\n\r\n            this.eventBus.$on('updateWidth', self.updateWidthHandler);\r\n            this.eventBus.$on('compact', self.compactHandler);\r\n            this.eventBus.$on('setDraggable', self.setDraggableHandler);\r\n            this.eventBus.$on('setResizable', self.setResizableHandler);\r\n            this.eventBus.$on('setBounded', self.setBoundedHandler);\r\n            this.eventBus.$on('setTransformScale', self.setTransformScaleHandler)\r\n            this.eventBus.$on('setRowHeight', self.setRowHeightHandler);\r\n            this.eventBus.$on('setMaxRows', self.setMaxRowsHandler);\r\n            this.eventBus.$on('directionchange', self.directionchangeHandler);\r\n            this.eventBus.$on('setColNum', self.setColNum)\r\n\r\n            this.rtl = getDocumentDir() === 'rtl';\r\n        },\r\n        beforeDestroy: function(){\r\n            let self = this;\r\n            //Remove listeners\r\n            this.eventBus.$off('updateWidth', self.updateWidthHandler);\r\n            this.eventBus.$off('compact', self.compactHandler);\r\n            this.eventBus.$off('setDraggable', self.setDraggableHandler);\r\n            this.eventBus.$off('setResizable', self.setResizableHandler);\r\n            this.eventBus.$off('setBounded', self.setBoundedHandler);\r\n            this.eventBus.$off('setTransformScale', self.setTransformScaleHandler)\r\n            this.eventBus.$off('setRowHeight', self.setRowHeightHandler);\r\n            this.eventBus.$off('setMaxRows', self.setMaxRowsHandler);\r\n            this.eventBus.$off('directionchange', self.directionchangeHandler);\r\n            this.eventBus.$off('setColNum', self.setColNum);\r\n            if (this.interactObj) {\r\n                this.interactObj.unset() // destroy interact intance\r\n            }\r\n        },\r\n        mounted: function () {\r\n            if (this.layout.responsive && this.layout.lastBreakpoint) {\r\n                this.cols = getColsFromBreakpoint(this.layout.lastBreakpoint, this.layout.cols);\r\n            } else {\r\n                this.cols = this.layout.colNum;\r\n            }\r\n            this.rowHeight = this.layout.rowHeight;\r\n            this.containerWidth = this.layout.width !== null ? this.layout.width : 100;\r\n            this.margin = this.layout.margin !== undefined ? this.layout.margin : [10, 10];\r\n            this.maxRows = this.layout.maxRows;\r\n\r\n            if (this.isDraggable === null) {\r\n                this.draggable = this.layout.isDraggable;\r\n            } else {\r\n                this.draggable = this.isDraggable;\r\n            }\r\n            if (this.isResizable === null) {\r\n                this.resizable = this.layout.isResizable;\r\n            } else {\r\n                this.resizable = this.isResizable;\r\n            }\r\n            if (this.isBounded === null) {\r\n                this.bounded = this.layout.isBounded;\r\n            } else {\r\n                this.bounded = this.isBounded;\r\n            }\r\n            this.transformScale = this.layout.transformScale\r\n            this.useCssTransforms = this.layout.useCssTransforms;\r\n            this.useStyleCursor = this.layout.useStyleCursor;\r\n            this.createStyle();\r\n        },\r\n        watch: {\r\n            isDraggable: function () {\r\n                this.draggable = this.isDraggable;\r\n            },\r\n            static: function () {\r\n                this.tryMakeDraggable();\r\n                this.tryMakeResizable();\r\n            },\r\n            draggable: function () {\r\n                this.tryMakeDraggable();\r\n            },\r\n            isResizable: function () {\r\n                this.resizable = this.isResizable;\r\n            },\r\n            isBounded: function () {\r\n                this.bounded = this.isBounded;\r\n            },\r\n            resizable: function () {\r\n                this.tryMakeResizable();\r\n            },\r\n            rowHeight: function () {\r\n                this.createStyle();\r\n                this.emitContainerResized();\r\n            },\r\n            cols: function () {\r\n                this.tryMakeResizable();\r\n                this.createStyle();\r\n                this.emitContainerResized();\r\n            },\r\n            containerWidth: function () {\r\n                this.tryMakeResizable();\r\n                this.createStyle();\r\n                this.emitContainerResized();\r\n            },\r\n            x: function (newVal) {\r\n                this.innerX = newVal;\r\n                this.createStyle();\r\n            },\r\n            y: function (newVal) {\r\n                this.innerY = newVal;\r\n                this.createStyle();\r\n            },\r\n            h: function (newVal) {\r\n                this.innerH = newVal\r\n                this.createStyle();\r\n                // this.emitContainerResized();\r\n            },\r\n            w: function (newVal) {\r\n                this.innerW = newVal;\r\n                this.createStyle();\r\n                // this.emitContainerResized();\r\n            },\r\n            renderRtl: function () {\r\n                // console.log(\"### renderRtl\");\r\n                this.tryMakeResizable();\r\n                this.createStyle();\r\n            },\r\n            minH: function () {\r\n                this.tryMakeResizable();\r\n            },\r\n            maxH: function () {\r\n                this.tryMakeResizable();\r\n            },\r\n            minW: function () {\r\n                this.tryMakeResizable();\r\n            },\r\n            maxW: function () {\r\n                this.tryMakeResizable();\r\n            },\r\n            \"$parent.margin\": function (margin) {\r\n                if (!margin || (margin[0] == this.margin[0] && margin[1] == this.margin[1])) {\r\n                    return;\r\n                }\r\n                this.margin = margin.map(m => Number(m));\r\n                this.createStyle();\r\n                this.emitContainerResized();\r\n            },\r\n        },\r\n        computed: {\r\n            classObj() {\r\n                return {\r\n                    'vue-resizable' : this.resizableAndNotStatic,\r\n                    'static': this.static,\r\n                    'resizing' : this.isResizing,\r\n                    'vue-draggable-dragging' : this.isDragging,\r\n                    'cssTransforms' : this.useCssTransforms,\r\n                    'render-rtl' : this.renderRtl,\r\n                    'disable-userselect': this.isDragging,\r\n                    'no-touch': this.isAndroid && this.draggableOrResizableAndNotStatic\r\n                }\r\n            },\r\n            resizableAndNotStatic(){\r\n                return this.resizable && !this.static;\r\n            },\r\n            draggableOrResizableAndNotStatic(){\r\n                return (this.draggable || this.resizable) && !this.static;\r\n            },\r\n            isAndroid() {\r\n                return navigator.userAgent.toLowerCase().indexOf(\"android\") !== -1;\r\n            },\r\n            renderRtl() {\r\n                return (this.layout.isMirrored) ? !this.rtl : this.rtl;\r\n            },\r\n            resizableHandleClass() {\r\n                if (this.renderRtl) {\r\n                    return 'vue-resizable-handle vue-rtl-resizable-handle';\r\n                } else {\r\n                    return 'vue-resizable-handle';\r\n                }\r\n            }\r\n        },\r\n        methods: {\r\n            createStyle: function () {\r\n                if (this.x + this.w > this.cols) {\r\n                    this.innerX = 0;\r\n                    this.innerW = (this.w > this.cols) ? this.cols : this.w\r\n                } else {\r\n                  this.innerX = this.x;\r\n                  this.innerW = this.w;\r\n                }\r\n                let pos = this.calcPosition(this.innerX, this.innerY, this.innerW, this.innerH);\r\n\r\n\r\n                if (this.isDragging) {\r\n                    pos.top = this.dragging.top;\r\n//                    Add rtl support\r\n                    if (this.renderRtl) {\r\n                        pos.right = this.dragging.left;\r\n                    } else {\r\n                        pos.left = this.dragging.left;\r\n                    }\r\n                }\r\n                if (this.isResizing) {\r\n                    pos.width = this.resizing.width;\r\n                    pos.height = this.resizing.height;\r\n                }\r\n\r\n                let style;\r\n                // CSS Transforms support (default)\r\n                if (this.useCssTransforms) {\r\n//                    Add rtl support\r\n                    if (this.renderRtl) {\r\n                        style = setTransformRtl(pos.top, pos.right, pos.width, pos.height);\r\n                    } else {\r\n                        style = setTransform(pos.top, pos.left, pos.width, pos.height);\r\n                    }\r\n\r\n                } else { // top,left (slow)\r\n//                    Add rtl support\r\n                    if (this.renderRtl) {\r\n                        style = setTopRight(pos.top, pos.right, pos.width, pos.height);\r\n                    } else {\r\n                        style = setTopLeft(pos.top, pos.left, pos.width, pos.height);\r\n                    }\r\n                }\r\n                this.style = style;\r\n            },\r\n            emitContainerResized() {\r\n                // this.style has width and height with trailing 'px'. The\r\n                // resized event is without them\r\n                let styleProps = {};\r\n                for (let prop of ['width', 'height']) {\r\n                    let val = this.style[prop];\r\n                    let matches = val.match(/^(\\d+)px$/);\r\n                    if (! matches)\r\n                        return;\r\n                    styleProps[prop] = matches[1];\r\n                }\r\n                this.$emit(\"container-resized\", this.i, this.h, this.w, styleProps.height, styleProps.width);\r\n            },\r\n            handleResize: function (event) {\r\n                if (this.static) return;\r\n                const position = getControlPosition(event);\r\n                // Get the current drag point from the event. This is used as the offset.\r\n                if (position == null) return; // not possible but satisfies flow\r\n                const {x, y} = position;\r\n\r\n                const newSize = {width: 0, height: 0};\r\n                let pos;\r\n                switch (event.type) {\r\n                    case \"resizestart\": {\r\n                        this.tryMakeResizable()\r\n                        this.previousW = this.innerW;\r\n                        this.previousH = this.innerH;\r\n                        pos = this.calcPosition(this.innerX, this.innerY, this.innerW, this.innerH);\r\n                        newSize.width = pos.width;\r\n                        newSize.height = pos.height;\r\n                        this.resizing = newSize;\r\n                        this.isResizing = true;\r\n                        break;\r\n                    }\r\n                    case \"resizemove\": {\r\n//                        console.log(\"### resize => \" + event.type + \", lastW=\" + this.lastW + \", lastH=\" + this.lastH);\r\n                        const coreEvent = createCoreData(this.lastW, this.lastH, x, y);\r\n                        if (this.renderRtl) {\r\n                            newSize.width = this.resizing.width - coreEvent.deltaX / this.transformScale;\r\n                        } else {\r\n                            newSize.width = this.resizing.width + coreEvent.deltaX / this.transformScale;\r\n                        }\r\n                        newSize.height = this.resizing.height + coreEvent.deltaY / this.transformScale;\r\n\r\n                        ///console.log(\"### resize => \" + event.type + \", deltaX=\" + coreEvent.deltaX + \", deltaY=\" + coreEvent.deltaY);\r\n                        this.resizing = newSize;\r\n                        break;\r\n                    }\r\n                    case \"resizeend\": {\r\n                        //console.log(\"### resize end => x=\" +this.innerX + \" y=\" + this.innerY + \" w=\" + this.innerW + \" h=\" + this.innerH);\r\n                        pos = this.calcPosition(this.innerX, this.innerY, this.innerW, this.innerH);\r\n                        newSize.width = pos.width;\r\n                        newSize.height = pos.height;\r\n//                        console.log(\"### resize end => \" + JSON.stringify(newSize));\r\n                        this.resizing = null;\r\n                        this.isResizing = false;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                // Get new WH\r\n                pos = this.calcWH(newSize.height, newSize.width);\r\n                if (pos.w < this.minW) {\r\n                    pos.w = this.minW;\r\n                }\r\n                if (pos.w > this.maxW) {\r\n                    pos.w = this.maxW;\r\n                }\r\n                if (pos.h < this.minH) {\r\n                    pos.h = this.minH;\r\n                }\r\n                if (pos.h > this.maxH) {\r\n                    pos.h = this.maxH;\r\n                }\r\n\r\n                if (pos.h < 1) {\r\n                    pos.h = 1;\r\n                }\r\n                if (pos.w < 1) {\r\n                    pos.w = 1;\r\n                }\r\n\r\n                this.lastW = x;\r\n                this.lastH = y;\r\n\r\n                if (this.innerW !== pos.w || this.innerH !== pos.h) {\r\n                    this.$emit(\"resize\", this.i, pos.h, pos.w, newSize.height, newSize.width);\r\n                }\r\n                if (event.type === \"resizeend\" && (this.previousW !== this.innerW || this.previousH !== this.innerH)) {\r\n                    this.$emit(\"resized\", this.i, pos.h, pos.w, newSize.height, newSize.width);\r\n                }\r\n                this.eventBus.$emit(\"resizeEvent\", event.type, this.i, this.innerX, this.innerY, pos.h, pos.w);\r\n            },\r\n            handleDrag(event) {\r\n                if (this.static) return;\r\n                if (this.isResizing) return;\r\n\r\n                const position = getControlPosition(event);\r\n\r\n                // Get the current drag point from the event. This is used as the offset.\r\n                if (position === null) return; // not possible but satisfies flow\r\n                const {x, y} = position;\r\n\r\n                // let shouldUpdate = false;\r\n                let newPosition = {top: 0, left: 0};\r\n                switch (event.type) {\r\n                    case \"dragstart\": {\r\n                        this.previousX = this.innerX;\r\n                        this.previousY = this.innerY;\r\n\r\n                        let parentRect = event.target.offsetParent.getBoundingClientRect();\r\n                        let clientRect = event.target.getBoundingClientRect();\r\n\r\n                        const cLeft = clientRect.left / this.transformScale;\r\n                        const pLeft = parentRect.left / this.transformScale;\r\n                        const cRight = clientRect.right / this.transformScale;\r\n                        const pRight = parentRect.right / this.transformScale;\r\n                        const cTop = clientRect.top / this.transformScale;\r\n                        const pTop = parentRect.top / this.transformScale;\r\n\r\n                        if (this.renderRtl) {\r\n                          newPosition.left = (cRight - pRight) * -1;\r\n                        } else {\r\n                          newPosition.left = cLeft - pLeft;\r\n                        }\r\n                        newPosition.top = cTop - pTop;\r\n                        this.dragging = newPosition;\r\n                        this.isDragging = true;\r\n                        break;\r\n                    }\r\n                    case \"dragend\": {\r\n                        if (!this.isDragging) return;\r\n                        let parentRect = event.target.offsetParent.getBoundingClientRect();\r\n                        let clientRect = event.target.getBoundingClientRect();\r\n\r\n                        const cLeft = clientRect.left / this.transformScale;\r\n                        const pLeft = parentRect.left / this.transformScale;\r\n                        const cRight = clientRect.right / this.transformScale;\r\n                        const pRight = parentRect.right / this.transformScale;\r\n                        const cTop = clientRect.top / this.transformScale;\r\n                        const pTop = parentRect.top / this.transformScale;\r\n\r\n//                        Add rtl support\r\n                        if (this.renderRtl) {\r\n                            newPosition.left = (cRight - pRight) * -1;\r\n                        } else {\r\n                            newPosition.left = cLeft - pLeft;\r\n                        }\r\n                        newPosition.top = cTop - pTop;\r\n//                        console.log(\"### drag end => \" + JSON.stringify(newPosition));\r\n//                        console.log(\"### DROP: \" + JSON.stringify(newPosition));\r\n                        this.dragging = null;\r\n                        this.isDragging = false;\r\n                        // shouldUpdate = true;\r\n                        break;\r\n                    }\r\n                    case \"dragmove\": {\r\n                        const coreEvent = createCoreData(this.lastX, this.lastY, x, y);\r\n//                        Add rtl support\r\n                        if (this.renderRtl) {\r\n                            newPosition.left = this.dragging.left - coreEvent.deltaX / this.transformScale;\r\n                        } else {\r\n                            newPosition.left = this.dragging.left + coreEvent.deltaX / this.transformScale;\r\n                        }\r\n                        newPosition.top = this.dragging.top + coreEvent.deltaY / this.transformScale;\r\n                        if(this.bounded){\r\n                            const bottomBoundary = event.target.offsetParent.clientHeight - this.calcGridItemWHPx(this.h, this.rowHeight, this.margin[1]);\r\n                            newPosition.top = this.clamp(newPosition.top, 0, bottomBoundary);\r\n                            const colWidth = this.calcColWidth();\r\n                            const rightBoundary = this.containerWidth - this.calcGridItemWHPx(this.w, colWidth, this.margin[0]);\r\n                            newPosition.left = this.clamp(newPosition.left, 0, rightBoundary);\r\n                        }\r\n//                        console.log(\"### drag => \" + event.type + \", x=\" + x + \", y=\" + y);\r\n//                        console.log(\"### drag => \" + event.type + \", deltaX=\" + coreEvent.deltaX + \", deltaY=\" + coreEvent.deltaY);\r\n//                        console.log(\"### drag end => \" + JSON.stringify(newPosition));\r\n                        this.dragging = newPosition;\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                // Get new XY\r\n                let pos;\r\n                if (this.renderRtl) {\r\n                    pos = this.calcXY(newPosition.top, newPosition.left);\r\n                } else {\r\n                    pos = this.calcXY(newPosition.top, newPosition.left);\r\n                }\r\n\r\n                this.lastX = x;\r\n                this.lastY = y;\r\n\r\n                if (this.innerX !== pos.x || this.innerY !== pos.y) {\r\n                    this.$emit(\"move\", this.i, pos.x, pos.y);\r\n                }\r\n                if (event.type === \"dragend\" && (this.previousX !== this.innerX || this.previousY !== this.innerY)) {\r\n                    this.$emit(\"moved\", this.i, pos.x, pos.y);\r\n                }\r\n                this.eventBus.$emit(\"dragEvent\", event.type, this.i, pos.x, pos.y, this.innerH, this.innerW);\r\n            },\r\n            calcPosition: function (x, y, w, h) {\r\n                const colWidth = this.calcColWidth();\r\n                // add rtl support\r\n                let out;\r\n                if (this.renderRtl) {\r\n                    out = {\r\n                        right: Math.round(colWidth * x + (x + 1) * this.margin[0]),\r\n                        top: Math.round(this.rowHeight * y + (y + 1) * this.margin[1]),\r\n                        // 0 * Infinity === NaN, which causes problems with resize constriants;\r\n                        // Fix this if it occurs.\r\n                        // Note we do it here rather than later because Math.round(Infinity) causes deopt\r\n                        width: w === Infinity ? w : Math.round(colWidth * w + Math.max(0, w - 1) * this.margin[0]),\r\n                        height: h === Infinity ? h : Math.round(this.rowHeight * h + Math.max(0, h - 1) * this.margin[1])\r\n                    };\r\n                } else {\r\n                    out = {\r\n                        left: Math.round(colWidth * x + (x + 1) * this.margin[0]),\r\n                        top: Math.round(this.rowHeight * y + (y + 1) * this.margin[1]),\r\n                        // 0 * Infinity === NaN, which causes problems with resize constriants;\r\n                        // Fix this if it occurs.\r\n                        // Note we do it here rather than later because Math.round(Infinity) causes deopt\r\n                        width: w === Infinity ? w : Math.round(colWidth * w + Math.max(0, w - 1) * this.margin[0]),\r\n                        height: h === Infinity ? h : Math.round(this.rowHeight * h + Math.max(0, h - 1) * this.margin[1])\r\n                    };\r\n                }\r\n\r\n\r\n                return out;\r\n            },\r\n            /**\r\n             * Translate x and y coordinates from pixels to grid units.\r\n             * @param  {Number} top  Top position (relative to parent) in pixels.\r\n             * @param  {Number} left Left position (relative to parent) in pixels.\r\n             * @return {Object} x and y in grid units.\r\n             */\r\n            // TODO check if this function needs change in order to support rtl.\r\n            calcXY(top, left) {\r\n                const colWidth = this.calcColWidth();\r\n\r\n                // left = colWidth * x + margin * (x + 1)\r\n                // l = cx + m(x+1)\r\n                // l = cx + mx + m\r\n                // l - m = cx + mx\r\n                // l - m = x(c + m)\r\n                // (l - m) / (c + m) = x\r\n                // x = (left - margin) / (coldWidth + margin)\r\n                let x = Math.round((left - this.margin[0]) / (colWidth + this.margin[0]));\r\n                let y = Math.round((top - this.margin[1]) / (this.rowHeight + this.margin[1]));\r\n\r\n                // Capping\r\n                x = Math.max(Math.min(x, this.cols - this.innerW), 0);\r\n                y = Math.max(Math.min(y, this.maxRows - this.innerH), 0);\r\n\r\n                return {x, y};\r\n            },\r\n            // Helper for generating column width\r\n            calcColWidth() {\r\n                const colWidth = (this.containerWidth - (this.margin[0] * (this.cols + 1))) / this.cols;\r\n               // console.log(\"### COLS=\" + this.cols + \" COL WIDTH=\" + colWidth + \" MARGIN \" + this.margin[0]);\r\n                return colWidth;\r\n            },\r\n            // This can either be called:\r\n            // calcGridItemWHPx(w, colWidth, margin[0])\r\n            // or\r\n            // calcGridItemWHPx(h, rowHeight, margin[1])\r\n            calcGridItemWHPx(gridUnits,colOrRowSize,marginPx) {\r\n                // 0 * Infinity === NaN, which causes problems with resize contraints\r\n                if (!Number.isFinite(gridUnits)) return gridUnits;\r\n                return Math.round(\r\n                    colOrRowSize * gridUnits + Math.max(0, gridUnits - 1) * marginPx\r\n                );\r\n            },\r\n\r\n            // Similar to _.clamp\r\n            clamp(num, lowerBound, upperBound) {\r\n                return Math.max(Math.min(num, upperBound), lowerBound);\r\n            },\r\n\r\n            /**\r\n             * Given a height and width in pixel values, calculate grid units.\r\n             * @param  {Number} height Height in pixels.\r\n             * @param  {Number} width  Width in pixels.\r\n             * @param  {Boolean} autoSizeFlag  function autoSize identifier.\r\n             * @return {Object} w, h as grid units.\r\n             */\r\n            calcWH(height, width, autoSizeFlag = false) {\r\n                const colWidth = this.calcColWidth();\r\n\r\n                // width = colWidth * w - (margin * (w - 1))\r\n                // ...\r\n                // w = (width + margin) / (colWidth + margin)\r\n                let w = Math.round((width + this.margin[0]) / (colWidth + this.margin[0]));\r\n                let h = 0;\r\n                if (!autoSizeFlag) {\r\n                    h = Math.round((height + this.margin[1]) / (this.rowHeight + this.margin[1]));\r\n                } else {\r\n                    h = Math.ceil((height + this.margin[1]) / (this.rowHeight + this.margin[1]));\r\n                }\r\n\r\n                // Capping\r\n                w = Math.max(Math.min(w, this.cols - this.innerX), 0);\r\n                h = Math.max(Math.min(h, this.maxRows - this.innerY), 0);\r\n                return {w, h};\r\n            },\r\n            updateWidth: function (width, colNum) {\r\n                this.containerWidth = width;\r\n                if (colNum !== undefined && colNum !== null) {\r\n                    this.cols = colNum;\r\n                }\r\n            },\r\n            compact: function () {\r\n                this.createStyle();\r\n            },\r\n            tryMakeDraggable: function(){\r\n                const self = this;\r\n                if (this.interactObj === null || this.interactObj === undefined) {\r\n                    this.interactObj = interact(this.$refs.item);\r\n                    if (!this.useStyleCursor) {\r\n                        this.interactObj.styleCursor(false);\r\n                    }\r\n                }\r\n                if (this.draggable && !this.static) {\r\n                    const opts = {\r\n                        ignoreFrom: this.dragIgnoreFrom,\r\n                        allowFrom: this.dragAllowFrom,\r\n                        ...this.dragOption\r\n                    };\r\n                    this.interactObj.draggable(opts);\r\n                    /*this.interactObj.draggable({allowFrom: '.vue-draggable-handle'});*/\r\n                    if (!this.dragEventSet) {\r\n                        this.dragEventSet = true;\r\n                        this.interactObj.on('dragstart dragmove dragend', function (event) {\r\n                            self.handleDrag(event);\r\n                        });\r\n                    }\r\n                } else {\r\n                    this.interactObj.draggable({\r\n                        enabled: false\r\n                    });\r\n                }\r\n            },\r\n            tryMakeResizable: function(){\r\n                const self = this;\r\n                if (this.interactObj === null || this.interactObj === undefined) {\r\n                    this.interactObj = interact(this.$refs.item);\r\n                    if (!this.useStyleCursor) {\r\n                        this.interactObj.styleCursor(false);\r\n                    }\r\n                }\r\n                if (this.resizable && !this.static) {\r\n                    let maximum = this.calcPosition(0,0, this.maxW, this.maxH);\r\n                    let minimum = this.calcPosition(0,0, this.minW, this.minH);\r\n\r\n                    // console.log(\"### MAX \" + JSON.stringify(maximum));\r\n                    // console.log(\"### MIN \" + JSON.stringify(minimum));\r\n\r\n                    const opts = {\r\n                        // allowFrom: \".\" + this.resizableHandleClass.trim().replace(\" \", \".\"),\r\n                        edges: {\r\n                            left: false,\r\n                            right: \".\" + this.resizableHandleClass.trim().replace(\" \", \".\"),\r\n                            bottom: \".\" + this.resizableHandleClass.trim().replace(\" \", \".\"),\r\n                            top: false\r\n                        },\r\n                        ignoreFrom: this.resizeIgnoreFrom,\r\n                        restrictSize: {\r\n                            min: {\r\n                                height: minimum.height * this.transformScale,\r\n                                width: minimum.width * this.transformScale\r\n                            },\r\n                            max: {\r\n                                height: maximum.height * this.transformScale,\r\n                                width: maximum.width * this.transformScale\r\n                            }\r\n                        },\r\n                        ...this.resizeOption,\r\n                    };\r\n\r\n                    if (this.preserveAspectRatio) {\r\n                        opts.modifiers = [\r\n                            interact.modifiers.aspectRatio({\r\n                                ratio: 'preserve'\r\n                            }),\r\n                        ]\r\n                    }\r\n\r\n                    this.interactObj.resizable(opts);\r\n                    if (!this.resizeEventSet) {\r\n                        this.resizeEventSet = true;\r\n                        this.interactObj\r\n                            .on('resizestart resizemove resizeend', function (event) {\r\n                                self.handleResize(event);\r\n                            });\r\n                    }\r\n                } else {\r\n                    this.interactObj.resizable({\r\n                        enabled: false\r\n                    });\r\n                }\r\n            },\r\n            autoSize: function() {\r\n                // ok here we want to calculate if a resize is needed\r\n                this.previousW = this.innerW;\r\n                this.previousH = this.innerH;\r\n\r\n                let newSize=this.$slots.default[0].elm.getBoundingClientRect();\r\n                let pos = this.calcWH(newSize.height, newSize.width, true);\r\n                if (pos.w < this.minW) {\r\n                    pos.w = this.minW;\r\n                }\r\n                if (pos.w > this.maxW) {\r\n                    pos.w = this.maxW;\r\n                }\r\n                if (pos.h < this.minH) {\r\n                    pos.h = this.minH;\r\n                }\r\n                if (pos.h > this.maxH) {\r\n                    pos.h = this.maxH;\r\n                }\r\n\r\n                if (pos.h < 1) {\r\n                    pos.h = 1;\r\n                }\r\n                if (pos.w < 1) {\r\n                    pos.w = 1;\r\n                }\r\n\r\n                // this.lastW = x; // basically, this is copied from resizehandler, but shouldn't be needed\r\n                // this.lastH = y;\r\n\r\n                if (this.innerW !== pos.w || this.innerH !== pos.h) {\r\n                    this.$emit(\"resize\", this.i, pos.h, pos.w, newSize.height, newSize.width);\r\n                }\r\n                if (this.previousW !== pos.w || this.previousH !== pos.h) {\r\n                    this.$emit(\"resized\", this.i, pos.h, pos.w, newSize.height, newSize.width);\r\n                    this.eventBus.$emit(\"resizeEvent\", \"resizeend\", this.i, this.innerX, this.innerY, pos.h, pos.w);\r\n                }\r\n            }\r\n        },\r\n    }\r\n</script>\r\n", "import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridItem.vue?vue&type=script&lang=js&\"", "import { render, staticRenderFns } from \"./GridItem.vue?vue&type=template&id=e7489122&\"\nimport script from \"./GridItem.vue?vue&type=script&lang=js&\"\nexport * from \"./GridItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GridItem.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports", "// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n", "\"use strict\";\n\nvar utils = require(\"./utils\");\n\nmodule.exports = function batchProcessorMaker(options) {\n    options             = options || {};\n    var reporter        = options.reporter;\n    var asyncProcess    = utils.getOption(options, \"async\", true);\n    var autoProcess     = utils.getOption(options, \"auto\", true);\n\n    if(autoProcess && !asyncProcess) {\n        reporter && reporter.warn(\"Invalid options combination. auto=true and async=false is invalid. Setting async=true.\");\n        asyncProcess = true;\n    }\n\n    var batch = Batch();\n    var asyncFrameHandler;\n    var isProcessing = false;\n\n    function addFunction(level, fn) {\n        if(!isProcessing && autoProcess && asyncProcess && batch.size() === 0) {\n            // Since this is async, it is guaranteed to be executed after that the fn is added to the batch.\n            // This needs to be done before, since we're checking the size of the batch to be 0.\n            processBatchAsync();\n        }\n\n        batch.add(level, fn);\n    }\n\n    function processBatch() {\n        // Save the current batch, and create a new batch so that incoming functions are not added into the currently processing batch.\n        // Continue processing until the top-level batch is empty (functions may be added to the new batch while processing, and so on).\n        isProcessing = true;\n        while (batch.size()) {\n            var processingBatch = batch;\n            batch = Batch();\n            processingBatch.process();\n        }\n        isProcessing = false;\n    }\n\n    function forceProcessBatch(localAsyncProcess) {\n        if (isProcessing) {\n            return;\n        }\n\n        if(localAsyncProcess === undefined) {\n            localAsyncProcess = asyncProcess;\n        }\n\n        if(asyncFrameHandler) {\n            cancelFrame(asyncFrameHandler);\n            asyncFrameHandler = null;\n        }\n\n        if(localAsyncProcess) {\n            processBatchAsync();\n        } else {\n            processBatch();\n        }\n    }\n\n    function processBatchAsync() {\n        asyncFrameHandler = requestFrame(processBatch);\n    }\n\n    function clearBatch() {\n        batch           = {};\n        batchSize       = 0;\n        topLevel        = 0;\n        bottomLevel     = 0;\n    }\n\n    function cancelFrame(listener) {\n        // var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n        var cancel = clearTimeout;\n        return cancel(listener);\n    }\n\n    function requestFrame(callback) {\n        // var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function(fn) { return window.setTimeout(fn, 20); };\n        var raf = function(fn) { return setTimeout(fn, 0); };\n        return raf(callback);\n    }\n\n    return {\n        add: addFunction,\n        force: forceProcessBatch\n    };\n};\n\nfunction Batch() {\n    var batch       = {};\n    var size        = 0;\n    var topLevel    = 0;\n    var bottomLevel = 0;\n\n    function add(level, fn) {\n        if(!fn) {\n            fn = level;\n            level = 0;\n        }\n\n        if(level > topLevel) {\n            topLevel = level;\n        } else if(level < bottomLevel) {\n            bottomLevel = level;\n        }\n\n        if(!batch[level]) {\n            batch[level] = [];\n        }\n\n        batch[level].push(fn);\n        size++;\n    }\n\n    function process() {\n        for(var level = bottomLevel; level <= topLevel; level++) {\n            var fns = batch[level];\n\n            for(var i = 0; i < fns.length; i++) {\n                var fn = fns[i];\n                fn();\n            }\n        }\n    }\n\n    function getSize() {\n        return size;\n    }\n\n    return {\n        add: add,\n        process: process,\n        size: getSize\n    };\n}\n", "// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n", "'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n  var it = toPrimitive(argument, false);\n  if (typeof it == 'string' && it.length > 2) {\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0);\n    var third, radix, maxCode;\n    if (first === 43 || first === 45) {\n      third = it.charCodeAt(2);\n      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if (first === 48) {\n      switch (it.charCodeAt(1)) {\n        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default: return +it;\n      }\n      for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n        code = digits.charCodeAt(i);\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\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n  $Number = function Number(value) {\n    var it = arguments.length < 1 ? 0 : value;\n    var that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for (var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++) {\n    if (has(Base, key = keys[j]) && !has($Number, key)) {\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}\n", "module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n", "var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n", "/**\n * Resize detection strategy that injects divs to elements in order to detect resize events on scroll events.\n * Heavily inspired by: https://github.com/marcj/css-element-queries/blob/master/src/ResizeSensor.js\n */\n\n\"use strict\";\n\nvar forEach = require(\"../collection-utils\").forEach;\n\nmodule.exports = function(options) {\n    options             = options || {};\n    var reporter        = options.reporter;\n    var batchProcessor  = options.batchProcessor;\n    var getState        = options.stateHandler.getState;\n    var hasState        = options.stateHandler.hasState;\n    var idHandler       = options.idHandler;\n\n    if (!batchProcessor) {\n        throw new Error(\"Missing required dependency: batchProcessor\");\n    }\n\n    if (!reporter) {\n        throw new Error(\"Missing required dependency: reporter.\");\n    }\n\n    //TODO: Could this perhaps be done at installation time?\n    var scrollbarSizes = getScrollbarSizes();\n\n    var styleId = \"erd_scroll_detection_scrollbar_style\";\n    var detectionContainerClass = \"erd_scroll_detection_container\";\n\n    function initDocument(targetDocument) {\n        // Inject the scrollbar styling that prevents them from appearing sometimes in Chrome.\n        // The injected container needs to have a class, so that it may be styled with CSS (pseudo elements).\n        injectScrollStyle(targetDocument, styleId, detectionContainerClass);\n    }\n\n    initDocument(window.document);\n\n    function buildCssTextString(rules) {\n        var seperator = options.important ? \" !important; \" : \"; \";\n\n        return (rules.join(seperator) + seperator).trim();\n    }\n\n    function getScrollbarSizes() {\n        var width = 500;\n        var height = 500;\n\n        var child = document.createElement(\"div\");\n        child.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width*2 + \"px\", \"height: \" + height*2 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n        var container = document.createElement(\"div\");\n        container.style.cssText = buildCssTextString([\"position: absolute\", \"width: \" + width + \"px\", \"height: \" + height + \"px\", \"overflow: scroll\", \"visibility: none\", \"top: \" + -width*3 + \"px\", \"left: \" + -height*3 + \"px\", \"visibility: hidden\", \"margin: 0\", \"padding: 0\"]);\n\n        container.appendChild(child);\n\n        document.body.insertBefore(container, document.body.firstChild);\n\n        var widthSize = width - container.clientWidth;\n        var heightSize = height - container.clientHeight;\n\n        document.body.removeChild(container);\n\n        return {\n            width: widthSize,\n            height: heightSize\n        };\n    }\n\n    function injectScrollStyle(targetDocument, styleId, containerClass) {\n        function injectStyle(style, method) {\n            method = method || function (element) {\n                targetDocument.head.appendChild(element);\n            };\n\n            var styleElement = targetDocument.createElement(\"style\");\n            styleElement.innerHTML = style;\n            styleElement.id = styleId;\n            method(styleElement);\n            return styleElement;\n        }\n\n        if (!targetDocument.getElementById(styleId)) {\n            var containerAnimationClass = containerClass + \"_animation\";\n            var containerAnimationActiveClass = containerClass + \"_animation_active\";\n            var style = \"/* Created by the element-resize-detector library. */\\n\";\n            style += \".\" + containerClass + \" > div::-webkit-scrollbar { \" + buildCssTextString([\"display: none\"]) + \" }\\n\\n\";\n            style += \".\" + containerAnimationActiveClass + \" { \" + buildCssTextString([\"-webkit-animation-duration: 0.1s\", \"animation-duration: 0.1s\", \"-webkit-animation-name: \" + containerAnimationClass, \"animation-name: \" + containerAnimationClass]) + \" }\\n\";\n            style += \"@-webkit-keyframes \" + containerAnimationClass +  \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\\n\";\n            style += \"@keyframes \" + containerAnimationClass +          \" { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } }\";\n            injectStyle(style);\n        }\n    }\n\n    function addAnimationClass(element) {\n        element.className += \" \" + detectionContainerClass + \"_animation_active\";\n    }\n\n    function addEvent(el, name, cb) {\n        if (el.addEventListener) {\n            el.addEventListener(name, cb);\n        } else if(el.attachEvent) {\n            el.attachEvent(\"on\" + name, cb);\n        } else {\n            return reporter.error(\"[scroll] Don't know how to add event listeners.\");\n        }\n    }\n\n    function removeEvent(el, name, cb) {\n        if (el.removeEventListener) {\n            el.removeEventListener(name, cb);\n        } else if(el.detachEvent) {\n            el.detachEvent(\"on\" + name, cb);\n        } else {\n            return reporter.error(\"[scroll] Don't know how to remove event listeners.\");\n        }\n    }\n\n    function getExpandElement(element) {\n        return getState(element).container.childNodes[0].childNodes[0].childNodes[0];\n    }\n\n    function getShrinkElement(element) {\n        return getState(element).container.childNodes[0].childNodes[0].childNodes[1];\n    }\n\n    /**\n     * Adds a resize event listener to the element.\n     * @public\n     * @param {element} element The element that should have the listener added.\n     * @param {function} listener The listener callback to be called for each resize event of the element. The element will be given as a parameter to the listener callback.\n     */\n    function addListener(element, listener) {\n        var listeners = getState(element).listeners;\n\n        if (!listeners.push) {\n            throw new Error(\"Cannot add listener to an element that is not detectable.\");\n        }\n\n        getState(element).listeners.push(listener);\n    }\n\n    /**\n     * Makes an element detectable and ready to be listened for resize events. Will call the callback when the element is ready to be listened for resize changes.\n     * @private\n     * @param {object} options Optional options object.\n     * @param {element} element The element to make detectable\n     * @param {function} callback The callback to be called when the element is ready to be listened for resize changes. Will be called with the element as first parameter.\n     */\n    function makeDetectable(options, element, callback) {\n        if (!callback) {\n            callback = element;\n            element = options;\n            options = null;\n        }\n\n        options = options || {};\n\n        function debug() {\n            if (options.debug) {\n                var args = Array.prototype.slice.call(arguments);\n                args.unshift(idHandler.get(element), \"Scroll: \");\n                if (reporter.log.apply) {\n                    reporter.log.apply(null, args);\n                } else {\n                    for (var i = 0; i < args.length; i++) {\n                        reporter.log(args[i]);\n                    }\n                }\n            }\n        }\n\n        function isDetached(element) {\n            function isInDocument(element) {\n                var isInShadowRoot = element.getRootNode && element.getRootNode().contains(element);\n                return element === element.ownerDocument.body || element.ownerDocument.body.contains(element) || isInShadowRoot;\n            }\n\n            if (!isInDocument(element)) {\n                return true;\n            }\n\n            // FireFox returns null style in hidden iframes. See https://github.com/wnr/element-resize-detector/issues/68 and https://bugzilla.mozilla.org/show_bug.cgi?id=795520\n            if (window.getComputedStyle(element) === null) {\n                return true;\n            }\n\n            return false;\n        }\n\n        function isUnrendered(element) {\n            // Check the absolute positioned container since the top level container is display: inline.\n            var container = getState(element).container.childNodes[0];\n            var style = window.getComputedStyle(container);\n            return !style.width || style.width.indexOf(\"px\") === -1; //Can only compute pixel value when rendered.\n        }\n\n        function getStyle() {\n            // Some browsers only force layouts when actually reading the style properties of the style object, so make sure that they are all read here,\n            // so that the user of the function can be sure that it will perform the layout here, instead of later (important for batching).\n            var elementStyle            = window.getComputedStyle(element);\n            var style                   = {};\n            style.position              = elementStyle.position;\n            style.width                 = element.offsetWidth;\n            style.height                = element.offsetHeight;\n            style.top                   = elementStyle.top;\n            style.right                 = elementStyle.right;\n            style.bottom                = elementStyle.bottom;\n            style.left                  = elementStyle.left;\n            style.widthCSS              = elementStyle.width;\n            style.heightCSS             = elementStyle.height;\n            return style;\n        }\n\n        function storeStartSize() {\n            var style = getStyle();\n            getState(element).startSize = {\n                width: style.width,\n                height: style.height\n            };\n            debug(\"Element start size\", getState(element).startSize);\n        }\n\n        function initListeners() {\n            getState(element).listeners = [];\n        }\n\n        function storeStyle() {\n            debug(\"storeStyle invoked.\");\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            var style = getStyle();\n            getState(element).style = style;\n        }\n\n        function storeCurrentSize(element, width, height) {\n            getState(element).lastWidth = width;\n            getState(element).lastHeight  = height;\n        }\n\n        function getExpandChildElement(element) {\n            return getExpandElement(element).childNodes[0];\n        }\n\n        function getWidthOffset() {\n            return 2 * scrollbarSizes.width + 1;\n        }\n\n        function getHeightOffset() {\n            return 2 * scrollbarSizes.height + 1;\n        }\n\n        function getExpandWidth(width) {\n            return width + 10 + getWidthOffset();\n        }\n\n        function getExpandHeight(height) {\n            return height + 10 + getHeightOffset();\n        }\n\n        function getShrinkWidth(width) {\n            return width * 2 + getWidthOffset();\n        }\n\n        function getShrinkHeight(height) {\n            return height * 2 + getHeightOffset();\n        }\n\n        function positionScrollbars(element, width, height) {\n            var expand          = getExpandElement(element);\n            var shrink          = getShrinkElement(element);\n            var expandWidth     = getExpandWidth(width);\n            var expandHeight    = getExpandHeight(height);\n            var shrinkWidth     = getShrinkWidth(width);\n            var shrinkHeight    = getShrinkHeight(height);\n            expand.scrollLeft   = expandWidth;\n            expand.scrollTop    = expandHeight;\n            shrink.scrollLeft   = shrinkWidth;\n            shrink.scrollTop    = shrinkHeight;\n        }\n\n        function injectContainerElement() {\n            var container = getState(element).container;\n\n            if (!container) {\n                container                   = document.createElement(\"div\");\n                container.className         = detectionContainerClass;\n                container.style.cssText     = buildCssTextString([\"visibility: hidden\", \"display: inline\", \"width: 0px\", \"height: 0px\", \"z-index: -1\", \"overflow: hidden\", \"margin: 0\", \"padding: 0\"]);\n                getState(element).container = container;\n                addAnimationClass(container);\n                element.appendChild(container);\n\n                var onAnimationStart = function () {\n                    getState(element).onRendered && getState(element).onRendered();\n                };\n\n                addEvent(container, \"animationstart\", onAnimationStart);\n\n                // Store the event handler here so that they may be removed when uninstall is called.\n                // See uninstall function for an explanation why it is needed.\n                getState(element).onAnimationStart = onAnimationStart;\n            }\n\n            return container;\n        }\n\n        function injectScrollElements() {\n            function alterPositionStyles() {\n                var style = getState(element).style;\n\n                if(style.position === \"static\") {\n                    element.style.setProperty(\"position\", \"relative\",options.important ? \"important\" : \"\");\n\n                    var removeRelativeStyles = function(reporter, element, style, property) {\n                        function getNumericalValue(value) {\n                            return value.replace(/[^-\\d\\.]/g, \"\");\n                        }\n\n                        var value = style[property];\n\n                        if(value !== \"auto\" && getNumericalValue(value) !== \"0\") {\n                            reporter.warn(\"An element that is positioned static has style.\" + property + \"=\" + value + \" which is ignored due to the static positioning. The element will need to be positioned relative, so the style.\" + property + \" will be set to 0. Element: \", element);\n                            element.style[property] = 0;\n                        }\n                    };\n\n                    //Check so that there are no accidental styles that will make the element styled differently now that is is relative.\n                    //If there are any, set them to 0 (this should be okay with the user since the style properties did nothing before [since the element was positioned static] anyway).\n                    removeRelativeStyles(reporter, element, style, \"top\");\n                    removeRelativeStyles(reporter, element, style, \"right\");\n                    removeRelativeStyles(reporter, element, style, \"bottom\");\n                    removeRelativeStyles(reporter, element, style, \"left\");\n                }\n            }\n\n            function getLeftTopBottomRightCssText(left, top, bottom, right) {\n                left = (!left ? \"0\" : (left + \"px\"));\n                top = (!top ? \"0\" : (top + \"px\"));\n                bottom = (!bottom ? \"0\" : (bottom + \"px\"));\n                right = (!right ? \"0\" : (right + \"px\"));\n\n                return [\"left: \" + left, \"top: \" + top, \"right: \" + right, \"bottom: \" + bottom];\n            }\n\n            debug(\"Injecting elements\");\n\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            alterPositionStyles();\n\n            var rootContainer = getState(element).container;\n\n            if (!rootContainer) {\n                rootContainer = injectContainerElement();\n            }\n\n            // Due to this WebKit bug https://bugs.webkit.org/show_bug.cgi?id=80808 (currently fixed in Blink, but still present in WebKit browsers such as Safari),\n            // we need to inject two containers, one that is width/height 100% and another that is left/top -1px so that the final container always is 1x1 pixels bigger than\n            // the targeted element.\n            // When the bug is resolved, \"containerContainer\" may be removed.\n\n            // The outer container can occasionally be less wide than the targeted when inside inline elements element in WebKit (see https://bugs.webkit.org/show_bug.cgi?id=152980).\n            // This should be no problem since the inner container either way makes sure the injected scroll elements are at least 1x1 px.\n\n            var scrollbarWidth          = scrollbarSizes.width;\n            var scrollbarHeight         = scrollbarSizes.height;\n            var containerContainerStyle = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\", \"left: 0px\", \"top: 0px\"]);\n            var containerStyle          = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: hidden\", \"z-index: -1\", \"visibility: hidden\"].concat(getLeftTopBottomRightCssText(-(1 + scrollbarWidth), -(1 + scrollbarHeight), -scrollbarHeight, -scrollbarWidth)));\n            var expandStyle             = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n            var shrinkStyle             = buildCssTextString([\"position: absolute\", \"flex: none\", \"overflow: scroll\", \"z-index: -1\", \"visibility: hidden\", \"width: 100%\", \"height: 100%\"]);\n            var expandChildStyle        = buildCssTextString([\"position: absolute\", \"left: 0\", \"top: 0\"]);\n            var shrinkChildStyle        = buildCssTextString([\"position: absolute\", \"width: 200%\", \"height: 200%\"]);\n\n            var containerContainer      = document.createElement(\"div\");\n            var container               = document.createElement(\"div\");\n            var expand                  = document.createElement(\"div\");\n            var expandChild             = document.createElement(\"div\");\n            var shrink                  = document.createElement(\"div\");\n            var shrinkChild             = document.createElement(\"div\");\n\n            // Some browsers choke on the resize system being rtl, so force it to ltr. https://github.com/wnr/element-resize-detector/issues/56\n            // However, dir should not be set on the top level container as it alters the dimensions of the target element in some browsers.\n            containerContainer.dir              = \"ltr\";\n\n            containerContainer.style.cssText    = containerContainerStyle;\n            containerContainer.className        = detectionContainerClass;\n            container.className                 = detectionContainerClass;\n            container.style.cssText             = containerStyle;\n            expand.style.cssText                = expandStyle;\n            expandChild.style.cssText           = expandChildStyle;\n            shrink.style.cssText                = shrinkStyle;\n            shrinkChild.style.cssText           = shrinkChildStyle;\n\n            expand.appendChild(expandChild);\n            shrink.appendChild(shrinkChild);\n            container.appendChild(expand);\n            container.appendChild(shrink);\n            containerContainer.appendChild(container);\n            rootContainer.appendChild(containerContainer);\n\n            function onExpandScroll() {\n                var state = getState(element);\n                if (state && state.onExpand) {\n                    state.onExpand();\n                } else {\n                    debug(\"Aborting expand scroll handler: element has been uninstalled\");\n                }\n            }\n\n            function onShrinkScroll() {\n                var state = getState(element);\n                if (state && state.onShrink) {\n                    state.onShrink();\n                } else {\n                    debug(\"Aborting shrink scroll handler: element has been uninstalled\");\n                }\n            }\n\n            addEvent(expand, \"scroll\", onExpandScroll);\n            addEvent(shrink, \"scroll\", onShrinkScroll);\n\n            // Store the event handlers here so that they may be removed when uninstall is called.\n            // See uninstall function for an explanation why it is needed.\n            getState(element).onExpandScroll = onExpandScroll;\n            getState(element).onShrinkScroll = onShrinkScroll;\n        }\n\n        function registerListenersAndPositionElements() {\n            function updateChildSizes(element, width, height) {\n                var expandChild             = getExpandChildElement(element);\n                var expandWidth             = getExpandWidth(width);\n                var expandHeight            = getExpandHeight(height);\n                expandChild.style.setProperty(\"width\", expandWidth + \"px\", options.important ? \"important\" : \"\");\n                expandChild.style.setProperty(\"height\", expandHeight + \"px\", options.important ? \"important\" : \"\");\n            }\n\n            function updateDetectorElements(done) {\n                var width           = element.offsetWidth;\n                var height          = element.offsetHeight;\n\n                // Check whether the size has actually changed since last time the algorithm ran. If not, some steps may be skipped.\n                var sizeChanged = width !== getState(element).lastWidth || height !== getState(element).lastHeight;\n\n                debug(\"Storing current size\", width, height);\n\n                // Store the size of the element sync here, so that multiple scroll events may be ignored in the event listeners.\n                // Otherwise the if-check in handleScroll is useless.\n                storeCurrentSize(element, width, height);\n\n                // Since we delay the processing of the batch, there is a risk that uninstall has been called before the batch gets to execute.\n                // Since there is no way to cancel the fn executions, we need to add an uninstall guard to all fns of the batch.\n\n                batchProcessor.add(0, function performUpdateChildSizes() {\n                    if (!sizeChanged) {\n                        return;\n                    }\n\n                    if (!getState(element)) {\n                        debug(\"Aborting because element has been uninstalled\");\n                        return;\n                    }\n\n                    if (!areElementsInjected()) {\n                        debug(\"Aborting because element container has not been initialized\");\n                        return;\n                    }\n\n                    if (options.debug) {\n                        var w = element.offsetWidth;\n                        var h = element.offsetHeight;\n\n                        if (w !== width || h !== height) {\n                            reporter.warn(idHandler.get(element), \"Scroll: Size changed before updating detector elements.\");\n                        }\n                    }\n\n                    updateChildSizes(element, width, height);\n                });\n\n                batchProcessor.add(1, function updateScrollbars() {\n                    // This function needs to be invoked event though the size is unchanged. The element could have been resized very quickly and then\n                    // been restored to the original size, which will have changed the scrollbar positions.\n\n                    if (!getState(element)) {\n                        debug(\"Aborting because element has been uninstalled\");\n                        return;\n                    }\n\n                    if (!areElementsInjected()) {\n                        debug(\"Aborting because element container has not been initialized\");\n                        return;\n                    }\n\n                    positionScrollbars(element, width, height);\n                });\n\n                if (sizeChanged && done) {\n                    batchProcessor.add(2, function () {\n                        if (!getState(element)) {\n                            debug(\"Aborting because element has been uninstalled\");\n                            return;\n                        }\n\n                        if (!areElementsInjected()) {\n                          debug(\"Aborting because element container has not been initialized\");\n                          return;\n                        }\n\n                        done();\n                    });\n                }\n            }\n\n            function areElementsInjected() {\n                return !!getState(element).container;\n            }\n\n            function notifyListenersIfNeeded() {\n                function isFirstNotify() {\n                    return getState(element).lastNotifiedWidth === undefined;\n                }\n\n                debug(\"notifyListenersIfNeeded invoked\");\n\n                var state = getState(element);\n\n                // Don't notify if the current size is the start size, and this is the first notification.\n                if (isFirstNotify() && state.lastWidth === state.startSize.width && state.lastHeight === state.startSize.height) {\n                    return debug(\"Not notifying: Size is the same as the start size, and there has been no notification yet.\");\n                }\n\n                // Don't notify if the size already has been notified.\n                if (state.lastWidth === state.lastNotifiedWidth && state.lastHeight === state.lastNotifiedHeight) {\n                    return debug(\"Not notifying: Size already notified\");\n                }\n\n\n                debug(\"Current size not notified, notifying...\");\n                state.lastNotifiedWidth = state.lastWidth;\n                state.lastNotifiedHeight = state.lastHeight;\n                forEach(getState(element).listeners, function (listener) {\n                    listener(element);\n                });\n            }\n\n            function handleRender() {\n                debug(\"startanimation triggered.\");\n\n                if (isUnrendered(element)) {\n                    debug(\"Ignoring since element is still unrendered...\");\n                    return;\n                }\n\n                debug(\"Element rendered.\");\n                var expand = getExpandElement(element);\n                var shrink = getShrinkElement(element);\n                if (expand.scrollLeft === 0 || expand.scrollTop === 0 || shrink.scrollLeft === 0 || shrink.scrollTop === 0) {\n                    debug(\"Scrollbars out of sync. Updating detector elements...\");\n                    updateDetectorElements(notifyListenersIfNeeded);\n                }\n            }\n\n            function handleScroll() {\n                debug(\"Scroll detected.\");\n\n                if (isUnrendered(element)) {\n                    // Element is still unrendered. Skip this scroll event.\n                    debug(\"Scroll event fired while unrendered. Ignoring...\");\n                    return;\n                }\n\n                updateDetectorElements(notifyListenersIfNeeded);\n            }\n\n            debug(\"registerListenersAndPositionElements invoked.\");\n\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            getState(element).onRendered = handleRender;\n            getState(element).onExpand = handleScroll;\n            getState(element).onShrink = handleScroll;\n\n            var style = getState(element).style;\n            updateChildSizes(element, style.width, style.height);\n        }\n\n        function finalizeDomMutation() {\n            debug(\"finalizeDomMutation invoked.\");\n\n            if (!getState(element)) {\n                debug(\"Aborting because element has been uninstalled\");\n                return;\n            }\n\n            var style = getState(element).style;\n            storeCurrentSize(element, style.width, style.height);\n            positionScrollbars(element, style.width, style.height);\n        }\n\n        function ready() {\n            callback(element);\n        }\n\n        function install() {\n            debug(\"Installing...\");\n            initListeners();\n            storeStartSize();\n\n            batchProcessor.add(0, storeStyle);\n            batchProcessor.add(1, injectScrollElements);\n            batchProcessor.add(2, registerListenersAndPositionElements);\n            batchProcessor.add(3, finalizeDomMutation);\n            batchProcessor.add(4, ready);\n        }\n\n        debug(\"Making detectable...\");\n\n        if (isDetached(element)) {\n            debug(\"Element is detached\");\n\n            injectContainerElement();\n\n            debug(\"Waiting until element is attached...\");\n\n            getState(element).onRendered = function () {\n                debug(\"Element is now attached\");\n                install();\n            };\n        } else {\n            install();\n        }\n    }\n\n    function uninstall(element) {\n        var state = getState(element);\n\n        if (!state) {\n            // Uninstall has been called on a non-erd element.\n            return;\n        }\n\n        // Uninstall may have been called in the following scenarios:\n        // (1) Right between the sync code and async batch (here state.busy = true, but nothing have been registered or injected).\n        // (2) In the ready callback of the last level of the batch by another element (here, state.busy = true, but all the stuff has been injected).\n        // (3) After the installation process (here, state.busy = false and all the stuff has been injected).\n        // So to be on the safe side, let's check for each thing before removing.\n\n        // We need to remove the event listeners, because otherwise the event might fire on an uninstall element which results in an error when trying to get the state of the element.\n        state.onExpandScroll && removeEvent(getExpandElement(element), \"scroll\", state.onExpandScroll);\n        state.onShrinkScroll && removeEvent(getShrinkElement(element), \"scroll\", state.onShrinkScroll);\n        state.onAnimationStart && removeEvent(state.container, \"animationstart\", state.onAnimationStart);\n\n        state.container && element.removeChild(state.container);\n    }\n\n    return {\n        makeDetectable: makeDetectable,\n        addListener: addListener,\n        uninstall: uninstall,\n        initDocument: initDocument\n    };\n};\n", "var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n", "'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n", "var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n", "var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n", "module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n", "module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n", "\"use strict\";\n\nvar prop = \"_erd\";\n\nfunction initState(element) {\n    element[prop] = {};\n    return getState(element);\n}\n\nfunction getState(element) {\n    return element[prop];\n}\n\nfunction cleanState(element) {\n    delete element[prop];\n}\n\nmodule.exports = {\n    initState: initState,\n    getState: getState,\n    cleanState: cleanState\n};\n", "module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n", "// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n", "export * from \"-!../../node_modules/vue-style-loader/index.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GridLayout.vue?vue&type=style&index=0&lang=css&\"", "\"use strict\";\n\nvar forEach                 = require(\"./collection-utils\").forEach;\nvar elementUtilsMaker       = require(\"./element-utils\");\nvar listenerHandlerMaker    = require(\"./listener-handler\");\nvar idGeneratorMaker        = require(\"./id-generator\");\nvar idHandlerMaker          = require(\"./id-handler\");\nvar reporterMaker           = require(\"./reporter\");\nvar browserDetector         = require(\"./browser-detector\");\nvar batchProcessorMaker     = require(\"batch-processor\");\nvar stateHandler            = require(\"./state-handler\");\n\n//Detection strategies.\nvar objectStrategyMaker     = require(\"./detection-strategy/object.js\");\nvar scrollStrategyMaker     = require(\"./detection-strategy/scroll.js\");\n\nfunction isCollection(obj) {\n    return Array.isArray(obj) || obj.length !== undefined;\n}\n\nfunction toArray(collection) {\n    if (!Array.isArray(collection)) {\n        var array = [];\n        forEach(collection, function (obj) {\n            array.push(obj);\n        });\n        return array;\n    } else {\n        return collection;\n    }\n}\n\nfunction isElement(obj) {\n    return obj && obj.nodeType === 1;\n}\n\n/**\n * @typedef idHandler\n * @type {object}\n * @property {function} get Gets the resize detector id of the element.\n * @property {function} set Generate and sets the resize detector id of the element.\n */\n\n/**\n * @typedef Options\n * @type {object}\n * @property {boolean} callOnAdd    Determines if listeners should be called when they are getting added.\n                                    Default is true. If true, the listener is guaranteed to be called when it has been added.\n                                    If false, the listener will not be guarenteed to be called when it has been added (does not prevent it from being called).\n * @property {idHandler} idHandler  A custom id handler that is responsible for generating, setting and retrieving id's for elements.\n                                    If not provided, a default id handler will be used.\n * @property {reporter} reporter    A custom reporter that handles reporting logs, warnings and errors.\n                                    If not provided, a default id handler will be used.\n                                    If set to false, then nothing will be reported.\n * @property {boolean} debug        If set to true, the the system will report debug messages as default for the listenTo method.\n */\n\n/**\n * Creates an element resize detector instance.\n * @public\n * @param {Options?} options Optional global options object that will decide how this instance will work.\n */\nmodule.exports = function(options) {\n    options = options || {};\n\n    //idHandler is currently not an option to the listenTo function, so it should not be added to globalOptions.\n    var idHandler;\n\n    if (options.idHandler) {\n        // To maintain compatability with idHandler.get(element, readonly), make sure to wrap the given idHandler\n        // so that readonly flag always is true when it's used here. This may be removed next major version bump.\n        idHandler = {\n            get: function (element) { return options.idHandler.get(element, true); },\n            set: options.idHandler.set\n        };\n    } else {\n        var idGenerator = idGeneratorMaker();\n        var defaultIdHandler = idHandlerMaker({\n            idGenerator: idGenerator,\n            stateHandler: stateHandler\n        });\n        idHandler = defaultIdHandler;\n    }\n\n    //reporter is currently not an option to the listenTo function, so it should not be added to globalOptions.\n    var reporter = options.reporter;\n\n    if(!reporter) {\n        //If options.reporter is false, then the reporter should be quiet.\n        var quiet = reporter === false;\n        reporter = reporterMaker(quiet);\n    }\n\n    //batchProcessor is currently not an option to the listenTo function, so it should not be added to globalOptions.\n    var batchProcessor = getOption(options, \"batchProcessor\", batchProcessorMaker({ reporter: reporter }));\n\n    //Options to be used as default for the listenTo function.\n    var globalOptions = {};\n    globalOptions.callOnAdd     = !!getOption(options, \"callOnAdd\", true);\n    globalOptions.debug         = !!getOption(options, \"debug\", false);\n\n    var eventListenerHandler    = listenerHandlerMaker(idHandler);\n    var elementUtils            = elementUtilsMaker({\n        stateHandler: stateHandler\n    });\n\n    //The detection strategy to be used.\n    var detectionStrategy;\n    var desiredStrategy = getOption(options, \"strategy\", \"object\");\n    var importantCssRules = getOption(options, \"important\", false);\n    var strategyOptions = {\n        reporter: reporter,\n        batchProcessor: batchProcessor,\n        stateHandler: stateHandler,\n        idHandler: idHandler,\n        important: importantCssRules\n    };\n\n    if(desiredStrategy === \"scroll\") {\n        if (browserDetector.isLegacyOpera()) {\n            reporter.warn(\"Scroll strategy is not supported on legacy Opera. Changing to object strategy.\");\n            desiredStrategy = \"object\";\n        } else if (browserDetector.isIE(9)) {\n            reporter.warn(\"Scroll strategy is not supported on IE9. Changing to object strategy.\");\n            desiredStrategy = \"object\";\n        }\n    }\n\n    if(desiredStrategy === \"scroll\") {\n        detectionStrategy = scrollStrategyMaker(strategyOptions);\n    } else if(desiredStrategy === \"object\") {\n        detectionStrategy = objectStrategyMaker(strategyOptions);\n    } else {\n        throw new Error(\"Invalid strategy name: \" + desiredStrategy);\n    }\n\n    //Calls can be made to listenTo with elements that are still being installed.\n    //Also, same elements can occur in the elements list in the listenTo function.\n    //With this map, the ready callbacks can be synchronized between the calls\n    //so that the ready callback can always be called when an element is ready - even if\n    //it wasn't installed from the function itself.\n    var onReadyCallbacks = {};\n\n    /**\n     * Makes the given elements resize-detectable and starts listening to resize events on the elements. Calls the event callback for each event for each element.\n     * @public\n     * @param {Options?} options Optional options object. These options will override the global options. Some options may not be overriden, such as idHandler.\n     * @param {element[]|element} elements The given array of elements to detect resize events of. Single element is also valid.\n     * @param {function} listener The callback to be executed for each resize event for each element.\n     */\n    function listenTo(options, elements, listener) {\n        function onResizeCallback(element) {\n            var listeners = eventListenerHandler.get(element);\n            forEach(listeners, function callListenerProxy(listener) {\n                listener(element);\n            });\n        }\n\n        function addListener(callOnAdd, element, listener) {\n            eventListenerHandler.add(element, listener);\n\n            if(callOnAdd) {\n                listener(element);\n            }\n        }\n\n        //Options object may be omitted.\n        if(!listener) {\n            listener = elements;\n            elements = options;\n            options = {};\n        }\n\n        if(!elements) {\n            throw new Error(\"At least one element required.\");\n        }\n\n        if(!listener) {\n            throw new Error(\"Listener required.\");\n        }\n\n        if (isElement(elements)) {\n            // A single element has been passed in.\n            elements = [elements];\n        } else if (isCollection(elements)) {\n            // Convert collection to array for plugins.\n            // TODO: May want to check so that all the elements in the collection are valid elements.\n            elements = toArray(elements);\n        } else {\n            return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n        }\n\n        var elementsReady = 0;\n\n        var callOnAdd = getOption(options, \"callOnAdd\", globalOptions.callOnAdd);\n        var onReadyCallback = getOption(options, \"onReady\", function noop() {});\n        var debug = getOption(options, \"debug\", globalOptions.debug);\n\n        forEach(elements, function attachListenerToElement(element) {\n            if (!stateHandler.getState(element)) {\n                stateHandler.initState(element);\n                idHandler.set(element);\n            }\n\n            var id = idHandler.get(element);\n\n            debug && reporter.log(\"Attaching listener to element\", id, element);\n\n            if(!elementUtils.isDetectable(element)) {\n                debug && reporter.log(id, \"Not detectable.\");\n                if(elementUtils.isBusy(element)) {\n                    debug && reporter.log(id, \"System busy making it detectable\");\n\n                    //The element is being prepared to be detectable. Do not make it detectable.\n                    //Just add the listener, because the element will soon be detectable.\n                    addListener(callOnAdd, element, listener);\n                    onReadyCallbacks[id] = onReadyCallbacks[id] || [];\n                    onReadyCallbacks[id].push(function onReady() {\n                        elementsReady++;\n\n                        if(elementsReady === elements.length) {\n                            onReadyCallback();\n                        }\n                    });\n                    return;\n                }\n\n                debug && reporter.log(id, \"Making detectable...\");\n                //The element is not prepared to be detectable, so do prepare it and add a listener to it.\n                elementUtils.markBusy(element, true);\n                return detectionStrategy.makeDetectable({ debug: debug, important: importantCssRules }, element, function onElementDetectable(element) {\n                    debug && reporter.log(id, \"onElementDetectable\");\n\n                    if (stateHandler.getState(element)) {\n                        elementUtils.markAsDetectable(element);\n                        elementUtils.markBusy(element, false);\n                        detectionStrategy.addListener(element, onResizeCallback);\n                        addListener(callOnAdd, element, listener);\n\n                        // Since the element size might have changed since the call to \"listenTo\", we need to check for this change,\n                        // so that a resize event may be emitted.\n                        // Having the startSize object is optional (since it does not make sense in some cases such as unrendered elements), so check for its existance before.\n                        // Also, check the state existance before since the element may have been uninstalled in the installation process.\n                        var state = stateHandler.getState(element);\n                        if (state && state.startSize) {\n                            var width = element.offsetWidth;\n                            var height = element.offsetHeight;\n                            if (state.startSize.width !== width || state.startSize.height !== height) {\n                                onResizeCallback(element);\n                            }\n                        }\n\n                        if(onReadyCallbacks[id]) {\n                            forEach(onReadyCallbacks[id], function(callback) {\n                                callback();\n                            });\n                        }\n                    } else {\n                        // The element has been unisntalled before being detectable.\n                        debug && reporter.log(id, \"Element uninstalled before being detectable.\");\n                    }\n\n                    delete onReadyCallbacks[id];\n\n                    elementsReady++;\n                    if(elementsReady === elements.length) {\n                        onReadyCallback();\n                    }\n                });\n            }\n\n            debug && reporter.log(id, \"Already detecable, adding listener.\");\n\n            //The element has been prepared to be detectable and is ready to be listened to.\n            addListener(callOnAdd, element, listener);\n            elementsReady++;\n        });\n\n        if(elementsReady === elements.length) {\n            onReadyCallback();\n        }\n    }\n\n    function uninstall(elements) {\n        if(!elements) {\n            return reporter.error(\"At least one element is required.\");\n        }\n\n        if (isElement(elements)) {\n            // A single element has been passed in.\n            elements = [elements];\n        } else if (isCollection(elements)) {\n            // Convert collection to array for plugins.\n            // TODO: May want to check so that all the elements in the collection are valid elements.\n            elements = toArray(elements);\n        } else {\n            return reporter.error(\"Invalid arguments. Must be a DOM element or a collection of DOM elements.\");\n        }\n\n        forEach(elements, function (element) {\n            eventListenerHandler.removeAllListeners(element);\n            detectionStrategy.uninstall(element);\n            stateHandler.cleanState(element);\n        });\n    }\n\n    function initDocument(targetDocument) {\n        detectionStrategy.initDocument && detectionStrategy.initDocument(targetDocument);\n    }\n\n    return {\n        listenTo: listenTo,\n        removeListener: eventListenerHandler.removeListener,\n        removeAllListeners: eventListenerHandler.removeAllListeners,\n        uninstall: uninstall,\n        initDocument: initDocument\n    };\n};\n\nfunction getOption(options, name, defaultValue) {\n    var value = options[name];\n\n    if((value === undefined || value === null) && defaultValue !== undefined) {\n        return defaultValue;\n    }\n\n    return value;\n}\n", "'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n", "// document.currentScript polyfill by Adam Miller\n\n// MIT license\n\n(function(document){\n  var currentScript = \"currentScript\",\n      scripts = document.getElementsByTagName('script'); // Live NodeList collection\n\n  // If browser needs currentScript polyfill, add get currentScript() to the document object\n  if (!(currentScript in document)) {\n    Object.defineProperty(document, currentScript, {\n      get: function(){\n\n        // IE 6-10 supports script readyState\n        // IE 10+ support stack trace\n        try { throw new Error(); }\n        catch (err) {\n\n          // Find the second match for the \"at\" string to get file src url from stack.\n          // Specifically works with the format of stack traces in IE.\n          var i, res = ((/.*at [^\\(]*\\((.*):.+:.+\\)$/ig).exec(err.stack) || [false])[1];\n\n          // For all scripts on the page, if src matches or if ready state is interactive, return the script tag\n          for(i in scripts){\n            if(scripts[i].src == res || scripts[i].readyState == \"interactive\"){\n              return scripts[i];\n            }\n          }\n\n          // If no match, return null\n          return null;\n        }\n      }\n    });\n  }\n})(document);\n", "// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n", "module.exports = require('./_shared')('native-function-to-string', Function.toString);\n", "var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n", "// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n  if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n    require('current-script-polyfill')\n  }\n\n  var i\n  if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n    __webpack_public_path__ = i[1] // eslint-disable-line\n  }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n", "import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n", "// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it) {\n    return typeof it == 'number' && _isFinite(it);\n  }\n});\n", "module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n", "import './lib/commons'\nimport './lib/i18n'\nimport './gobierto_admin'\nimport './gobierto_dashboards'\n", "// Run this files BEFORE everything to avoid JS \"imports\" hoisting\nimport './modules/jquery';\nimport './modules/i18n';\n\nimport Rails from \"@rails/ujs\";\nRails.start()\n\n// NOTE: these modules are required for the legacy views\nimport './modules/module-search';\nimport './modules/module-sessions';\nimport './modules/module-site_header';\nimport './modules/magnific-popup';\nimport './modules/globals.js';\nimport './modules/tabs';\nimport './modules/velocity_settings';\nimport './modules/shareContent';\nimport './modules/separate-tabs';\nimport './modules/check-start-turbolinks';\nimport './modules/iframe_handler';\n", "// Do that to avoid JS \"imports\" hoisting\n// https://gorails.com/episodes/how-to-use-jquery-with-esbuild\nimport $ from 'jquery'\n\nwindow.$ = $\nwindow.jQuery = $\n", "// Do that to avoid JS \"imports\" hoisting\nimport I18n from 'i18n-js'\n\nwindow.I18n = I18n\n", "import 'devbridge-autocomplete';\nimport { AUTOCOMPLETE_DEFAULTS } from '../../../lib/shared';\n\n$(document).on('turbolinks:load', function() {\n  var $input = $('input#gobierto_search:visible');\n  var $mobile_input = $('input#gobierto_search_mobile');\n\n  function truncateOnWord(str, limit) {\n    var trimmable = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u2028\\u2029\\u3000\\uFEFF';\n    var reg = new RegExp('(?=[' + trimmable + '])');\n    var words = str.split(reg);\n    var count = 0;\n    return words.filter(function(word) {\n      count += word.length;\n      return count <= limit;\n    }).join('');\n  }\n\n  function itemUpdatedAt(d){\n    if (d['searchable_updated_at'] == null)\n      return;\n\n    return `${I18n.t(\"layouts.search.updated\")}: ${I18n.l(\"date.formats.short\", d['searchable_updated_at'])}`;\n  }\n\n  function itemDescription(d){\n    var maxLength = 200;\n    var description = (d['description'] || '');\n    if (description === '' || description.length < maxLength)\n      return description;\n    return truncateOnWord(description, maxLength) + '...';\n  }\n\n  function itemType(d){\n    let class_name = d['class_name'] || d['searchable_type']\n    if (class_name === undefined)\n      return;\n\n    switch (class_name){\n      case 'GobiertoPeople::Person':\n        return I18n.t(\"layouts.search.person_item\");\n      case 'GobiertoPeople::PersonPost':\n        return I18n.t(\"layouts.search.person_post_item\");\n      case 'GobiertoCalendars::Event':\n        return I18n.t(\"layouts.search.event_item\");\n      case 'GobiertoPeople::PersonStatement':\n        return I18n.t(\"layouts.search.person_statement_item\");\n      case 'GobiertoCms::Page':\n        return I18n.t(\"layouts.search.page_item\");\n      case 'GobiertoBudgets::BudgetLine':\n        if (d[\"meta\"] != null && d['meta']['kind'] === 'I') {\n          return I18n.t(\"layouts.search.budget_line_item_income\");\n        } else {\n          return I18n.t(\"layouts.search.budget_line_item_expense\");\n        }\n      case 'GobiertoPlans::Node':\n        return I18n.t(\"layouts.search.plan_project_item\");\n      case 'GobiertoData::Dataset':\n        return I18n.t(\"layouts.search.dataset_item\");\n    }\n  }\n\n  function formattedResult(d){\n    return `<a class=\"result\" href=\"${d['resource_path']}\" data-turbolinks=\"false\">\n             <h2>${d['title']}</h2>\n             <div class=\"description\">\n               <div>${itemDescription(d)}</div>\n               <span class=\"soft item_type\">${itemType(d)}</span>\n               ${itemUpdatedAt(d) ? ` \u00B7 <span class=\"soft updated_at\">${itemUpdatedAt(d)}</span>` : ''}\n             </div>\n           </a>`\n  }\n\n  var searchOptions = {\n    serviceUrl: '/api/v1/search',\n    dataType: 'json',\n    params: window.searchClient === undefined ?\n      {} :\n      {\n        filters:\n          {\n            searchable_type: window.searchClient.searchable_types\n          }\n      },\n    beforeRender(container) {\n      container.css({ width: '100%' })\n    },\n    transformResult: function(response) {\n      return {\n        suggestions: response.data.map(item => ({\n          value: item.attributes.title,\n          data: item.attributes\n        }))\n      }\n    },\n    formatResult: function(suggestion){\n      return formattedResult(suggestion.data)\n    },\n    noSuggestionNotice: `<div class=\"result\"><p>${ I18n.t(\"layouts.search.no_results\") }</p></div>`\n  };\n\n  $input.devbridgeAutocomplete($.extend({ appendTo: $input.parent() }, AUTOCOMPLETE_DEFAULTS, searchOptions));\n  $mobile_input.devbridgeAutocomplete($.extend({ appendTo: $mobile_input.parent() }, AUTOCOMPLETE_DEFAULTS, searchOptions));\n});\n", "// legacy\nimport { AUTOCOMPLETE_DEFAULTS } from './modules/autocomplete_settings.js';\nimport { URLParams } from './modules/URLParams.js';\nimport d3locale from './modules/d3-locale.js';\nimport { createScaleColors } from './modules/createScaleColors.js';\nimport { slugString } from './modules/slugString.js';\nimport accounting from 'accounting';\nimport { SETTINGS } from './modules/accounting_settings.js';\naccounting.settings = SETTINGS;\n\n// new modules\nimport { Datepicker } from './modules/air-datepicker.js';\nimport { readMore } from './modules/read-more.js';\nimport { HorizontalCarousel } from './modules/horizontal-carousel.js';\nimport { ImageLightbox } from './modules/image-lightbox.js';\nimport { RangeSlider } from './modules/range-slider.js';\nimport { Middleware } from './modules/middleware.js';\nimport { debounce } from './modules/debounce.js';\nimport { checkAndReportAccessibility } from './modules/accessibility.js';\nimport { groupBy } from './modules/groupBy.js';\nimport { formatNumbers } from './modules/d3-format-numbers.js';\nimport appsignal from './modules/appsignal.js';\nimport wordwrap from './modules/wordwrap.js';\nimport tspans from './modules/tspans.js';\nimport divide from './modules/safe-division.js';\n\nexport {\n  AUTOCOMPLETE_DEFAULTS,\n  accounting,\n  createScaleColors,\n  d3locale,\n  URLParams,\n  RangeSlider,\n  Datepicker,\n  readMore,\n  HorizontalCarousel,\n  ImageLightbox,\n  Middleware,\n  slugString,\n  debounce,\n  checkAndReportAccessibility,\n  groupBy,\n  formatNumbers,\n  appsignal,\n  wordwrap,\n  tspans,\n  divide\n};\n", "export const AUTOCOMPLETE_DEFAULTS = {\n  dataType: 'json',\n  minChars: 3,\n  showNoSuggestionNotice: true,\n  noSuggestionNotice: 'Lo sentimos, pero no hay resultados.',\n  preserveInput: true,\n  autoSelectFirst: true,\n  triggerSelectOnValidInput: false,\n  preventBadQueries: false,\n  tabDisabled: true\n};", "// Fallback IE\nconst updateQueryStringParam = (key, value, url) => {\n  let urlQueryString = url || \"\"\n  // let urlQueryString = document.location.search\n  let newParam = key + '=' + value\n  let params = newParam\n\n  // If the \"search\" string exists, then build params from it\n  if (urlQueryString) {\n    var updateRegex = new RegExp('([?&])' + key + '[^&]*');\n    var removeRegex = new RegExp('([?&])' + key + '=[^&;]+[&;]?');\n\n    if (typeof value == 'undefined' || value == null || value == '') { // Remove param if value is empty\n      params = urlQueryString.replace(removeRegex, \"$1\");\n      params = params.replace(/[&;]$/, \"\");\n\n    } else if (urlQueryString.match(updateRegex) !== null) { // If param exists already, update it\n      params = urlQueryString.replace(updateRegex, \"$1\" + newParam);\n\n    } else { // Otherwise, add it to end of query string\n      params = urlQueryString + '&' + newParam;\n    }\n  }\n\n  return params\n};\n\nexport const URLParams = function(args) {\n\n  let params = \"\"\n\n  // Break if no endpoint\n  if (!args.endpoint) throw \"No endpoint provided\"\n\n  // Force param object to be present\n  if (!args.hasOwnProperty(\"params\")) {\n    args.params = {}\n  }\n\n  if (window.URLSearchParams) {\n    params = new URLSearchParams()\n\n    for (var param in args.params) {\n      if (args.params.hasOwnProperty(param)) {\n        params.set(param, args.params[param])\n      }\n    }\n  } else {\n    params = \"\"\n    // IE 10+\n    for (var ieParam in args.params) {\n      if (args.params.hasOwnProperty(ieParam)) {\n        params = updateQueryStringParam(ieParam, args.params[ieParam], params)\n      }\n    }\n  }\n\n  return `${args.endpoint}?${params.toString()}`\n}\n", "var es = {\n  \"decimal\": \",\",\n  \"thousands\": \".\",\n  \"grouping\": [3],\n  \"currency\": [\"\u20AC\", \"\"],\n  \"dateTime\": \"%a %b %e %X %Y\",\n  \"date\": \"%d/%m/%Y\",\n  \"time\": \"%H:%M:%S\",\n  \"periods\": [\"AM\", \"PM\"],\n  \"days\": [\"Domingo\", \"Lunes\", \"Martes\", \"Mi\u00E9rcoles\", \"Jueves\", \"Viernes\", \"S\u00E1bado\"],\n  \"shortDays\": [\"Dom\", \"Lun\", \"Mar\", \"Mi\", \"Jue\", \"Vie\", \"Sab\"],\n  \"months\": [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\n  \"shortMonths\": [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"]\n};\n\nvar ca = {\n  \"decimal\": \",\",\n  \"thousands\": \".\",\n  \"grouping\": [3],\n  \"currency\": [\"\u20AC\", \"\"],\n  \"dateTime\": \"%a %b %e %X %Y\",\n  \"date\": \"%d/%m/%Y\",\n  \"time\": \"%H:%M:%S\",\n  \"periods\": [\"AM\", \"PM\"],\n  \"days\": [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"],\n  \"shortDays\": [\"Diu\", \"Dill\", \"Dim\", \"Dime\", \"Dij\", \"Div\", \"Div\"],\n  \"months\": [\"Gener\", \"Febrer\", \"Mar\u00E7\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"],\n  \"shortMonths\": [\"Gen\", \"Feb\", \"Mar\u00E7\", \"Abr\", \"Maig\", \"Juny\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Des\"]\n}\n\nvar en = {\n  \"decimal\": \",\",\n  \"thousands\": \".\",\n  \"grouping\": [3],\n  \"currency\": [\"\u20AC\", \"\"],\n  \"dateTime\": \"%a %b %e %X %Y\",\n  \"date\": \"%d/%m/%Y\",\n  \"time\": \"%H:%M:%S\",\n  \"periods\": [\"AM\", \"PM\"],\n  \"days\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  \"shortDays\": [\"Sun\", \"Mon\", \"Tues\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  \"months\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  \"shortMonths\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n}\n\nexport default { es, en, ca }", "import * as d3 from 'd3';\n\nexport function createScaleColors(values, arrayDomain) {\n  let colorsGobiertoExtend = [\"var(--color-gobierto-turquoise)\", \"var(--color-gobierto-blue)\", \"var(--color-gobierto-red)\", \"var(--color-gobierto-yellow)\", \"var(--color-gobierto-extra-5)\", \"var(--color-gobierto-extra-6)\", \"var(--color-gobierto-extra-7)\", \"var(--color-gobierto-extra-8)\", \"var(--color-gobierto-extra-9)\", \"var(--color-gobierto-extra-10)\" ]\n  colorsGobiertoExtend = colorsGobiertoExtend.slice(0, values)\n\n  const colors = d3.scaleOrdinal()\n    .domain(arrayDomain)\n    .range(colorsGobiertoExtend);\n  return colors;\n}\n", "export * from \"d3-array\";\nexport * from \"d3-axis\";\nexport * from \"d3-brush\";\nexport * from \"d3-chord\";\nexport * from \"d3-color\";\nexport * from \"d3-contour\";\nexport * from \"d3-delaunay\";\nexport * from \"d3-dispatch\";\nexport * from \"d3-drag\";\nexport * from \"d3-dsv\";\nexport * from \"d3-ease\";\nexport * from \"d3-fetch\";\nexport * from \"d3-force\";\nexport * from \"d3-format\";\nexport * from \"d3-geo\";\nexport * from \"d3-hierarchy\";\nexport * from \"d3-interpolate\";\nexport * from \"d3-path\";\nexport * from \"d3-polygon\";\nexport * from \"d3-quadtree\";\nexport * from \"d3-random\";\nexport * from \"d3-scale\";\nexport * from \"d3-scale-chromatic\";\nexport * from \"d3-selection\";\nexport * from \"d3-shape\";\nexport * from \"d3-time\";\nexport * from \"d3-time-format\";\nexport * from \"d3-timer\";\nexport * from \"d3-transition\";\nexport * from \"d3-zoom\";\n", "export {default as bisect, bisectRight, bisectLeft, bisectCenter} from \"./bisect.js\";\nexport {default as ascending} from \"./ascending.js\";\nexport {default as bisector} from \"./bisector.js\";\nexport {blur, blur2, blurImage} from \"./blur.js\";\nexport {default as count} from \"./count.js\";\nexport {default as cross} from \"./cross.js\";\nexport {default as cumsum} from \"./cumsum.js\";\nexport {default as descending} from \"./descending.js\";\nexport {default as deviation} from \"./deviation.js\";\nexport {default as extent} from \"./extent.js\";\nexport {Adder, fsum, fcumsum} from \"./fsum.js\";\nexport {default as group, flatGroup, flatRollup, groups, index, indexes, rollup, rollups} from \"./group.js\";\nexport {default as groupSort} from \"./groupSort.js\";\nexport {default as bin, default as histogram} from \"./bin.js\"; // Deprecated; use bin.\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis.js\";\nexport {default as thresholdScott} from \"./threshold/scott.js\";\nexport {default as thresholdSturges} from \"./threshold/sturges.js\";\nexport {default as max} from \"./max.js\";\nexport {default as maxIndex} from \"./maxIndex.js\";\nexport {default as mean} from \"./mean.js\";\nexport {default as median, medianIndex} from \"./median.js\";\nexport {default as merge} from \"./merge.js\";\nexport {default as min} from \"./min.js\";\nexport {default as minIndex} from \"./minIndex.js\";\nexport {default as mode} from \"./mode.js\";\nexport {default as nice} from \"./nice.js\";\nexport {default as pairs} from \"./pairs.js\";\nexport {default as permute} from \"./permute.js\";\nexport {default as quantile, quantileIndex, quantileSorted} from \"./quantile.js\";\nexport {default as quickselect} from \"./quickselect.js\";\nexport {default as range} from \"./range.js\";\nexport {default as rank} from \"./rank.js\";\nexport {default as least} from \"./least.js\";\nexport {default as leastIndex} from \"./leastIndex.js\";\nexport {default as greatest} from \"./greatest.js\";\nexport {default as greatestIndex} from \"./greatestIndex.js\";\nexport {default as scan} from \"./scan.js\"; // Deprecated; use leastIndex.\nexport {default as shuffle, shuffler} from \"./shuffle.js\";\nexport {default as sum} from \"./sum.js\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks.js\";\nexport {default as transpose} from \"./transpose.js\";\nexport {default as variance} from \"./variance.js\";\nexport {default as zip} from \"./zip.js\";\nexport {default as every} from \"./every.js\";\nexport {default as some} from \"./some.js\";\nexport {default as filter} from \"./filter.js\";\nexport {default as map} from \"./map.js\";\nexport {default as reduce} from \"./reduce.js\";\nexport {default as reverse} from \"./reverse.js\";\nexport {default as sort} from \"./sort.js\";\nexport {default as difference} from \"./difference.js\";\nexport {default as disjoint} from \"./disjoint.js\";\nexport {default as intersection} from \"./intersection.js\";\nexport {default as subset} from \"./subset.js\";\nexport {default as superset} from \"./superset.js\";\nexport {default as union} from \"./union.js\";\nexport {InternMap, InternSet} from \"internmap\";\n", "import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n  for (let i = 1, n = keys.length; i < n; ++i) {\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n  }\n  return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n  return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n  return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new InternMap();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n", "export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "export default function identity(x) {\n  return x;\n}\n", "export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n", "export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n", "export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n", "export {\n  axisTop,\n  axisRight,\n  axisBottom,\n  axisLeft\n} from \"./axis.js\";\n", "import identity from \"./identity.js\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n", "export default function(x) {\n  return x;\n}\n", "export {\n  default as brush,\n  brushX,\n  brushY,\n  brushSelection\n} from \"./brush.js\";\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n", "export {default as dispatch} from \"./dispatch.js\";\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n", "export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n", "function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don\u2019t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(update) {\n  return new Array(update.length);\n}\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n", "export default function() {\n  return Array.from(this);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n", "export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n", "export default function() {\n  return !this.node();\n}\n", "export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n", "function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n", "function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n", "function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n", "function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n", "function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n", "function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n", "function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n", "function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n", "function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n", "export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n", "export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n", "export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n", "export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "export default x => () => x;\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n", "export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n", "import \"./selection/index.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n", "export {\n  now,\n  timer,\n  timerFlush\n} from \"./timer.js\";\n\nexport {\n  default as timeout\n} from \"./timeout.js\";\n\nexport {\n  default as interval\n} from \"./interval.js\";\n", "var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we\u2019re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n", "export {\n  linear as easeLinear\n} from \"./linear.js\";\n\nexport {\n  quadInOut as easeQuad,\n  quadIn as easeQuadIn,\n  quadOut as easeQuadOut,\n  quadInOut as easeQuadInOut\n} from \"./quad.js\";\n\nexport {\n  cubicInOut as easeCubic,\n  cubicIn as easeCubicIn,\n  cubicOut as easeCubicOut,\n  cubicInOut as easeCubicInOut\n} from \"./cubic.js\";\n\nexport {\n  polyInOut as easePoly,\n  polyIn as easePolyIn,\n  polyOut as easePolyOut,\n  polyInOut as easePolyInOut\n} from \"./poly.js\";\n\nexport {\n  sinInOut as easeSin,\n  sinIn as easeSinIn,\n  sinOut as easeSinOut,\n  sinInOut as easeSinInOut\n} from \"./sin.js\";\n\nexport {\n  expInOut as easeExp,\n  expIn as easeExpIn,\n  expOut as easeExpOut,\n  expInOut as easeExpInOut\n} from \"./exp.js\";\n\nexport {\n  circleInOut as easeCircle,\n  circleIn as easeCircleIn,\n  circleOut as easeCircleOut,\n  circleInOut as easeCircleInOut\n} from \"./circle.js\";\n\nexport {\n  bounceOut as easeBounce,\n  bounceIn as easeBounceIn,\n  bounceOut as easeBounceOut,\n  bounceInOut as easeBounceInOut\n} from \"./bounce.js\";\n\nexport {\n  backInOut as easeBack,\n  backIn as easeBackIn,\n  backOut as easeBackOut,\n  backInOut as easeBackInOut\n} from \"./back.js\";\n\nexport {\n  elasticOut as easeElastic,\n  elasticIn as easeElasticIn,\n  elasticOut as easeElasticOut,\n  elasticInOut as easeElasticInOut\n} from \"./elastic.js\";\n", "export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "export default x => () => x;\n", "export default function BrushEvent(type, {\n  sourceEvent,\n  target,\n  selection,\n  mode,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    selection: {value: selection, enumerable: true, configurable: true},\n    mode: {value: mode, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n", "export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n", "export {default as dsvFormat} from \"./dsv.js\";\nexport {csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows, csvFormatRow, csvFormatValue} from \"./csv.js\";\nexport {tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows, tsvFormatRow, tsvFormatValue} from \"./tsv.js\";\nexport {default as autoType} from \"./autoType.js\";\n", "var EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nexport default function(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows,\n    formatRow: formatRow,\n    formatValue: formatValue\n  };\n}\n", "import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n", "import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n", "export {default as blob} from \"./blob.js\";\nexport {default as buffer} from \"./buffer.js\";\nexport {default as dsv, csv, tsv} from \"./dsv.js\";\nexport {default as image} from \"./image.js\";\nexport {default as json} from \"./json.js\";\nexport {default as text} from \"./text.js\";\nexport {default as xml, html, svg} from \"./xml.js\";\n", "import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n  return function(input, init, row) {\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n    return text(input, init).then(function(response) {\n      return parse(response, row);\n    });\n  };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n  var format = dsvFormat(delimiter);\n  return text(input, init).then(function(response) {\n    return format.parse(response, row);\n  });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n", "function responseText(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.text();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseText);\n}\n", "export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale.js\";\nexport {default as formatLocale} from \"./locale.js\";\nexport {default as formatSpecifier, FormatSpecifier} from \"./formatSpecifier.js\";\nexport {default as precisionFixed} from \"./precisionFixed.js\";\nexport {default as precisionPrefix} from \"./precisionPrefix.js\";\nexport {default as precisionRound} from \"./precisionRound.js\";\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n        // grouped, and fractional or exponential \u201Csuffix\u201D part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n", "export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, \u00B1Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n", "export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n", "export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n", "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", "export default function(x) {\n  return x;\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", "export {\n  default as scaleBand,\n  point as scalePoint\n} from \"./band.js\";\n\nexport {\n  default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n  default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n  default as scaleLog\n} from \"./log.js\";\n\nexport {\n  default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n  default as scaleOrdinal,\n  implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n  default as scalePow,\n  sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n  default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n  default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n  default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n  default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n  default as scaleTime\n} from \"./time.js\";\n\nexport {\n  default as scaleUtc\n} from \"./utcTime.js\";\n\nexport {\n  default as scaleSequential,\n  sequentialLog as scaleSequentialLog,\n  sequentialPow as scaleSequentialPow,\n  sequentialSqrt as scaleSequentialSqrt,\n  sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential.js\";\n\nexport {\n  default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\n\nexport {\n  default as scaleDiverging,\n  divergingLog as scaleDivergingLog,\n  divergingPow as scaleDivergingPow,\n  divergingSqrt as scaleDivergingSqrt,\n  divergingSymlog as scaleDivergingSymlog\n} from \"./diverging.js\";\n\nexport {\n  default as tickFormat\n} from \"./tickFormat.js\";\n", "import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n", "export {default as bisect, bisectRight, bisectLeft, bisectCenter} from \"./bisect.js\";\nexport {default as ascending} from \"./ascending.js\";\nexport {default as bisector} from \"./bisector.js\";\nexport {default as count} from \"./count.js\";\nexport {default as cross} from \"./cross.js\";\nexport {default as cumsum} from \"./cumsum.js\";\nexport {default as descending} from \"./descending.js\";\nexport {default as deviation} from \"./deviation.js\";\nexport {default as extent} from \"./extent.js\";\nexport {Adder, fsum, fcumsum} from \"./fsum.js\";\nexport {default as group, flatGroup, flatRollup, groups, index, indexes, rollup, rollups} from \"./group.js\";\nexport {default as groupSort} from \"./groupSort.js\";\nexport {default as bin, default as histogram} from \"./bin.js\"; // Deprecated; use bin.\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis.js\";\nexport {default as thresholdScott} from \"./threshold/scott.js\";\nexport {default as thresholdSturges} from \"./threshold/sturges.js\";\nexport {default as max} from \"./max.js\";\nexport {default as maxIndex} from \"./maxIndex.js\";\nexport {default as mean} from \"./mean.js\";\nexport {default as median} from \"./median.js\";\nexport {default as merge} from \"./merge.js\";\nexport {default as min} from \"./min.js\";\nexport {default as minIndex} from \"./minIndex.js\";\nexport {default as mode} from \"./mode.js\";\nexport {default as nice} from \"./nice.js\";\nexport {default as pairs} from \"./pairs.js\";\nexport {default as permute} from \"./permute.js\";\nexport {default as quantile, quantileSorted} from \"./quantile.js\";\nexport {default as quickselect} from \"./quickselect.js\";\nexport {default as range} from \"./range.js\";\nexport {default as rank} from \"./rank.js\";\nexport {default as least} from \"./least.js\";\nexport {default as leastIndex} from \"./leastIndex.js\";\nexport {default as greatest} from \"./greatest.js\";\nexport {default as greatestIndex} from \"./greatestIndex.js\";\nexport {default as scan} from \"./scan.js\"; // Deprecated; use leastIndex.\nexport {default as shuffle, shuffler} from \"./shuffle.js\";\nexport {default as sum} from \"./sum.js\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks.js\";\nexport {default as transpose} from \"./transpose.js\";\nexport {default as variance} from \"./variance.js\";\nexport {default as zip} from \"./zip.js\";\nexport {default as every} from \"./every.js\";\nexport {default as some} from \"./some.js\";\nexport {default as filter} from \"./filter.js\";\nexport {default as map} from \"./map.js\";\nexport {default as reduce} from \"./reduce.js\";\nexport {default as reverse} from \"./reverse.js\";\nexport {default as sort} from \"./sort.js\";\nexport {default as difference} from \"./difference.js\";\nexport {default as disjoint} from \"./disjoint.js\";\nexport {default as intersection} from \"./intersection.js\";\nexport {default as subset} from \"./subset.js\";\nexport {default as superset} from \"./superset.js\";\nexport {default as union} from \"./union.js\";\nexport {InternMap, InternSet} from \"internmap\";\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can\u2019t do this\n  // for a comparator (except for specific, known comparators) because we can\u2019t\n  // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n", "export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n", "export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n", "var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function ticks(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n    if (r0 * step < start) ++r0;\n    if (r1 * step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) * step;\n  } else {\n    step = -step;\n    let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n    if (r0 / step < start) ++r0;\n    if (r1 / step > stop) --r1;\n    ticks = new Array(n = r1 - r0 + 1);\n    while (++i < n) ticks[i] = (r0 + i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n", "import max from \"./max.js\";\nimport min from \"./min.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n", "export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n", "export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n", "export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n", "export default function number(x) {\n  return +x;\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n", "import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n", "export {default as zoom} from \"./zoom.js\";\nexport {default as zoomTransform, identity as zoomIdentity, Transform as ZoomTransform} from \"./transform.js\";\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\n          .start()\n          .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n          .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p, event) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p, event);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = pointer(event);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won\u2019t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent(event);\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n", "export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    var group = select.apply(this, arguments);\n    return group == null ? [] : array(group);\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n", "export default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n", "function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return this.children;\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport array from \"../array.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don\u2019t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = array(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(update) {\n  return new Array(update.length);\n}\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(selection) {\n  if (!(selection instanceof Selection)) throw new Error(\"invalid merge\");\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n", "export default function() {\n  return Array.from(this);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n", "export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n", "export default function() {\n  return !this.node();\n}\n", "export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n", "function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n", "function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n", "function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n", "function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n", "function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n", "function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n", "function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n", "function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n", "function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n", "export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n", "import \"./selection/index.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n", "export {default as dispatch} from \"./dispatch.js\";\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n", "export {\n  now,\n  timer,\n  timerFlush\n} from \"./timer.js\";\n\nexport {\n  default as timeout\n} from \"./timeout.js\";\n\nexport {\n  default as interval\n} from \"./interval.js\";\n", "var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n", "export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n", "export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "export default x => () => x;\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we\u2019re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n", "export {\n  linear as easeLinear\n} from \"./linear.js\";\n\nexport {\n  quadInOut as easeQuad,\n  quadIn as easeQuadIn,\n  quadOut as easeQuadOut,\n  quadInOut as easeQuadInOut\n} from \"./quad.js\";\n\nexport {\n  cubicInOut as easeCubic,\n  cubicIn as easeCubicIn,\n  cubicOut as easeCubicOut,\n  cubicInOut as easeCubicInOut\n} from \"./cubic.js\";\n\nexport {\n  polyInOut as easePoly,\n  polyIn as easePolyIn,\n  polyOut as easePolyOut,\n  polyInOut as easePolyInOut\n} from \"./poly.js\";\n\nexport {\n  sinInOut as easeSin,\n  sinIn as easeSinIn,\n  sinOut as easeSinOut,\n  sinInOut as easeSinInOut\n} from \"./sin.js\";\n\nexport {\n  expInOut as easeExp,\n  expIn as easeExpIn,\n  expOut as easeExpOut,\n  expInOut as easeExpInOut\n} from \"./exp.js\";\n\nexport {\n  circleInOut as easeCircle,\n  circleIn as easeCircleIn,\n  circleOut as easeCircleOut,\n  circleInOut as easeCircleInOut\n} from \"./circle.js\";\n\nexport {\n  bounceOut as easeBounce,\n  bounceIn as easeBounceIn,\n  bounceOut as easeBounceOut,\n  bounceInOut as easeBounceInOut\n} from \"./bounce.js\";\n\nexport {\n  backInOut as easeBack,\n  backIn as easeBackIn,\n  backOut as easeBackOut,\n  backInOut as easeBackInOut\n} from \"./back.js\";\n\nexport {\n  elasticOut as easeElastic,\n  elasticIn as easeElasticIn,\n  elasticOut as easeElasticOut,\n  elasticInOut as easeElasticInOut\n} from \"./elastic.js\";\n", "export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      i;\n\n  if (schedules) {\n    name = name == null ? null : name + \"\";\n    for (i in schedules) {\n      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n        return new Transition([[node]], root, name, +i);\n      }\n    }\n  }\n\n  return null;\n}\n", "export default x => () => x;\n", "export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n", "export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n", "export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n", "export function slugString(string) {\n  return string\n    .normalize(\"NFD\")\n    .replace(/[\\u0300-\\u036f]/g, \"\") // remove accents\n    .replace(/ /g, \"-\") // turn spaces into dashes\n    .replace(/[^A-Z0-9-]/gi, \"\") // remove everything but letters, numbers and dashes; case insensitive\n    .toLowerCase();\n}\n", "export const SETTINGS = {\n  currency: {\n    symbol: \"\u20AC\", // default currency symbol is '$'\n    format: \"%v %s\", // controls output: %s = symbol, %v = value/number (can be object: see below)\n    decimal: \",\", // decimal point separator\n    thousand:  \".\", // thousands separator\n    precision: 2 // decimal places\n  },\n  number: {\n    precision: 2, // default precision on numbers is 0\n    decimal: \",\", // decimal point separator\n    thousand: \".\", // thousands separator\n  }\n}\n", "import 'air-datepicker';\nimport 'air-datepicker/dist/css/datepicker.css';\n\n$.fn.datepicker.language[\"en\"] = {\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n  today: \"Today\",\n  clear: \"Clear\",\n  dateFormat: \"mm/dd/yyyy\",\n  timeFormat: \"hh:ii aa\",\n  firstDay: 0\n};\n\n$.fn.datepicker.language[\"ca\"] = {\n  days: [\"Diumenge\", \"Dilluns\", \"Dimarts\", \"Dimecres\", \"Dijous\", \"Divendres\", \"Dissabte\"],\n  daysShort: [\"Diu\", \"Dill\", \"Dima\", \"Dime\", \"Dij\", \"Div\", \"Dis\"],\n  daysMin: [\"Dg\", \"Dl\", \"Dm\", \"Dc\", \"Dj\", \"Dv\", \"Ds\"],\n  months: [\"Gener\", \"Febrer\", \"Mar\u00E7\", \"Abril\", \"Maig\", \"Juny\", \"Juliol\", \"Agost\", \"Setembre\", \"Octubre\", \"Novembre\", \"Desembre\"],\n  monthsShort: [\"Gen\", \"Feb\", \"Mar\", \"Abr\", \"Mai\", \"Jun\", \"Jul\", \"Ago\", \"Set\", \"Oct\", \"Nov\", \"Des\"],\n  today: \"Avui\",\n  clear: \"Netejar\",\n  dateFormat: \"dd/mm/yyyy\",\n  timeFormat: \"hh:ii aa\",\n  firstDay: 1\n};\n\n$.fn.datepicker.language[\"es\"] = {\n  days: [\"Domingo\", \"Lunes\", \"Martes\", \"Mi\u00E9rcoles\", \"Jueves\", \"Viernes\", \"S\u00E1bado\"],\n  daysShort: [\"Dom\", \"Lun\", \"Mar\", \"Mie\", \"Jue\", \"Vie\", \"Sab\"],\n  daysMin: [\"Do\", \"Lu\", \"Ma\", \"Mi\", \"Ju\", \"Vi\", \"Sa\"],\n  months: [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"],\n  monthsShort: [\"Ene\", \"Feb\", \"Mar\", \"Abr\", \"May\", \"Jun\", \"Jul\", \"Ago\", \"Sep\", \"Oct\", \"Nov\", \"Dic\"],\n  today: \"Hoy\",\n  clear: \"Limpiar\",\n  dateFormat: \"dd/mm/yyyy\",\n  timeFormat: \"hh:ii aa\",\n  firstDay: 1\n};\n\n// http://t1m0n.name/air-datepicker/docs/\nexport class Datepicker {\n  constructor(elem, options) {\n    this.element = elem || undefined\n\n    if (this.element) {\n      const $selector = $(this.element)\n      if ($selector.data('datepicker') === undefined) {\n        $selector.datepicker(options);\n      }\n\n      return $selector.data('datepicker');\n    }\n  }\n\n  destroy() {\n    $(this.element).data('datepicker').destroy()\n  }\n}\n", "require('./datepicker');\r\nrequire('./body');\r\nrequire('./navigation');\r\nrequire('./timepicker');", "export const readMore = el => {\n  el.firstElementChild.querySelector(\"[data-toggle]\").addEventListener(\"click\", () => el.classList.add(\"is-active\"));\n  el.lastElementChild.querySelector(\"[data-toggle]\").addEventListener(\"click\", () => el.classList.remove(\"is-active\"));\n};\n\n// Static initialization\n$(document).on(\"turbolinks:load\", function() {\n  const elements = document.querySelectorAll(\".js-read-more\");\n  elements.forEach(el => readMore(el));\n});\n", "import { ImageLightbox } from './image-lightbox';\n\nexport class HorizontalCarousel {\n  constructor(carousel) {\n    if (carousel) {\n      this.content = carousel.firstElementChild;\n      this.next = carousel.querySelector(\"[data-next]\");\n      this.prev = carousel.querySelector(\"[data-prev]\");\n\n      // initializations\n      const { visibleItems, thumbnails } = carousel.dataset\n      this.start = 0;\n      this.thumbnails = thumbnails;\n\n      if (this.thumbnails && this.content.children.length > 1) {\n        carousel.parentNode.insertBefore(document.createElement(\"div\"), carousel.parentNode.firstElementChild)\n        this.setActiveThumbnail(this.content.firstElementChild)\n\n        // event handling for thumbnails\n        Array.from(this.content.children).forEach(child => {\n          child.addEventListener(\"click\", this.onThumbnailClick.bind(this))\n          child.classList.add(\"is-thumbnail\")\n        })\n\n        const avg = [...this.content.children].reduce((acc, b) => acc + b.getBoundingClientRect().width, 0) / this.content.children.length\n        // const [{ width: totalWidth }, { width }] = [, this.content.children[1].getBoundingClientRect()]\n        this.visibleItems = this.content.getBoundingClientRect().width / avg\n      } else {\n        this.visibleItems = parseInt(visibleItems) || 1;\n        Array.from(this.content.children).forEach(child => (child.style.flex = `0 0 calc(100% / ${this.visibleItems})`));\n      }\n\n      this.maxValue = (this.content.children.length - this.visibleItems) * (100 / this.visibleItems);\n\n      // init frames\n      this.setVisibility(this.next, this.start < this.maxValue);\n      this.setVisibility(this.prev, this.start !== 0);\n\n      // event handling\n      this.next.addEventListener(\"click\", this.onNextClick.bind(this));\n      this.prev.addEventListener(\"click\", this.onPrevClick.bind(this));\n    } else {\n      console.warn(\"Horizontal Carousel Error: DOM Element missing\");\n    }\n  }\n\n  setTransform() {\n    this.content.style.transform = `translateX(${this.start}%)`;\n  }\n\n  setVisibility(element, visible = true) {\n    element.style.visibility = visible ? \"visible\" : \"hidden\";\n  }\n\n  setActiveThumbnail(node) {\n    const carousel = this.content.parentNode\n    const copy = node.cloneNode(true)\n    copy.classList.remove(\"is-thumbnail\")\n    copy.classList.add(\"is-active\")\n    copy.style = \"position:relative;\"\n    carousel.parentNode.replaceChild(copy, carousel.parentNode.firstElementChild)\n\n    new ImageLightbox(copy)\n\n    copy.querySelector(\"img\").addEventListener(\"load\", this.onImageLoad.bind(this))\n  }\n\n  onNextClick() {\n    if (Math.abs(this.start) < this.maxValue) {\n      this.start -= 100 / this.visibleItems;\n      this.start = Math.ceil(Math.abs(this.start)) > this.maxValue ? -1 * this.maxValue : this.start\n      this.setTransform(this.start);\n    }\n\n    this.setVisibility(this.next, Math.abs(this.start) < this.maxValue);\n    this.setVisibility(this.prev, this.start < 0);\n  }\n\n  onPrevClick() {\n    if (this.start < 0) {\n      this.start += 100 / this.visibleItems;\n      this.start = Math.ceil(this.start) > 0 ? 0 : this.start\n      this.setTransform(this.start);\n    }\n\n    this.setVisibility(this.prev, this.start < 0);\n    this.setVisibility(this.next, Math.abs(this.start) < this.maxValue);\n  }\n\n  onThumbnailClick({ currentTarget }) {\n    this.setActiveThumbnail(currentTarget)\n  }\n\n  onImageLoad({ target }) {\n    const { naturalHeight, naturalWidth } = target;\n    if (naturalHeight > naturalWidth) {\n      target.classList.add(\"is-portrait\");\n    }\n  }\n\n  destroy() {\n    this.next.removeEventListener(\"click\", this.onNextClick.bind(this));\n    this.prev.removeEventListener(\"click\", this.onPrevClick.bind(this));\n\n    if (this.thumbnails && this.content.children.length > 1) {\n      Array.from(this.content.children).forEach(child => child.removeEventListener(\"click\", this.onThumbnailClick.bind(this)))\n    }\n  }\n}\n\n// Static initialization\n$(document).on(\"turbolinks:load\", function() {\n  const carousels = document.querySelectorAll(\".js-horizontal-carousel\");\n  carousels.forEach(carousel => new HorizontalCarousel(carousel));\n});\n", "export class ImageLightbox {\n  constructor(lightbox) {\n    if (lightbox) {\n      const isImg = this.isImage(lightbox);\n\n      if (isImg || this.containsAnImg(lightbox)) {\n        const options = {\n          type: \"image\",\n          closeOnContentClick: true,\n          closeBtnInside: false,\n          image: {\n            verticalFit: true\n          },\n          items: {\n            src: isImg ? lightbox.src : lightbox.querySelector(\"img\").src\n          }\n        };\n\n        $(lightbox).magnificPopup(options);\n      } else {\n        console.warn(\"Image-lightbox Error: there's no images in the markup\");\n      }\n    } else {\n      console.warn(\"Image-lightbox Error: DOM Element missing\");\n    }\n  }\n\n  isImage(node) {\n    return node.tagName === \"IMG\";\n  }\n\n  containsAnImg(node) {\n    return node.querySelector(\"img\") !== null;\n  }\n}\n\n// Static initialization\n$(document).on(\"turbolinks:load\", function() {\n  const lightboxes = document.querySelectorAll(\".js-image-lightbox\");\n  lightboxes.forEach(lightbox => new ImageLightbox(lightbox));\n});\n", "// https://api.jqueryui.com/slider/\nexport class RangeSlider {\n  constructor({ elem, min = 0, max = 100, defaultRange = [min, max], rangeCallback = () => {} }) {\n    this.element = elem || undefined;\n\n    if (this.element) {\n      $(this.element).slider({\n        range: true,\n        min,\n        max,\n        values: defaultRange,\n        slide: rangeCallback\n      });\n    }\n  }\n\n  destroy() {\n    $(this.element).slider(\"destroy\")\n  }\n}\n", "import { translate } from '../../../lib/vue/filters'\n\nexport class Middleware {\n  constructor({ dictionary, filters }) {\n    this.dictionary = dictionary || []\n    this.filters = filters || []\n  }\n\n  getFilters(stats) {\n    const filters = [];\n\n    for (let index = 0; index < this.filters.length; index++) {\n      const { id: key, allowedValues, hideDropdown, ...rest } = this.filters[index];\n      const element = stats[key];\n      const { field_type: type, vocabulary_terms: options = [], name_translations: title = {} } = this.getAttributesByKey(key);\n\n      filters.push({\n        ...element,\n        ...rest,\n        title: translate(title),\n        options: Array.isArray(options) ? options.map(opt => ({ ...opt, title: translate(opt.name_translations) })) : [],\n        type: type ? type : key,\n        key,\n        allowedValues,\n        hideDropdown\n      });\n    }\n\n    return filters;\n  }\n\n  getAttributesByKey(prop) {\n    const { attributes = {} } =\n      this.dictionary.find(entry => {\n        const { attributes: { uid = \"\" } = {} } = entry;\n        return uid === prop;\n      }) || {};\n\n    return attributes;\n  }\n}\n", "export const translate = (value = {}) => {\n  const lang = I18n.locale || \"es\";\n  // Look for the language key, fallback to the first found key\n  return Object.prototype.hasOwnProperty.call(value, lang) && value[lang]\n    ? value[lang]\n    : value[Object.keys(value)[0]];\n};\n\nexport const money = (value, opts = {}) => {\n  const lang = I18n.locale || \"es\";\n  const options = { style: \"currency\", currency: \"EUR\", ...opts };\n  return value !== undefined && value !== null\n    ? parseFloat(value).toLocaleString(lang, options)\n    : undefined;\n};\n\nexport const date = (value, opts = {}) => {\n  if (!value) return null\n  const lang = I18n.locale || \"es\";\n  return value instanceof Date\n    ? value.toLocaleDateString(lang, opts)\n    : new Date(value).toLocaleDateString(lang, opts);\n};\n\nexport const truncate = (value = \"\", opts = {}) => {\n  const { length = 30, omission = \"\u2026\" } = opts\n  return value.length <= length\n    ? value\n    : `${value.substring(0, length)}${omission}`\n};\n\nexport const percent = value => {\n  if (typeof value !== \"number\") return;\n  return (value / 100).toLocaleString(I18n.locale, {\n    style: \"percent\",\n    maximumFractionDigits: 1\n  });\n};\n\nexport const VueFiltersMixin = {\n  methods: {\n    translate,\n    money,\n    date,\n    truncate,\n    percent\n  },\n  filters: {\n    translate,\n    money,\n    date,\n    truncate,\n    percent\n  }\n};\n", "export const debounce = (func, timeout) => {\n  let timer = undefined;\n  return (...args) => {\n    const next = () => func(...args);\n    if (timer) {\n      clearTimeout(timer);\n    }\n    timer = setTimeout(next, timeout > 0 ? timeout : 300);\n  };\n}", "import axeCore from 'axe-core';\nimport '../../../../assets/stylesheets/modules/accessibility.css';\n\nlet cache = {}\nlet style = {}\nlet lastNotification = ''\n\nconst deferred = {}\nconst impacts = [...axeCore.constants.impact].reverse()\n\nexport function checkAndReportAccessibility (node, label) {\n  const deferred = createDeferred()\n  style = { ...defaultOptions.style }\n\n  axeCore.run(node || document, defaultOptions.runOptions, (error, results) => {\n    if (error) deferred.reject(error)\n    if (results && !results.violations.length) return\n    if (JSON.stringify(results.violations) === lastNotification) return\n\n    defaultOptions.customResultHandler ? defaultOptions.customResultHandler(error, results) : standardResultHandler(error, results, label)\n    deferred.resolve()\n    lastNotification = JSON.stringify(results.violations)\n  })\n  return deferred.promise\n}\n\nconst standardResultHandler = function (errorInfo, results, label) {\n  results.violations = results.violations.filter(result => {\n    result.nodes = result.nodes.filter(node => {\n      const key = node.target.toString() + result.id\n      const retVal = (!cache[key])\n      cache[key] = key\n      return retVal\n    })\n    return (!!result.nodes.length)\n  })\n\n  if (results.violations.length) {\n    const violations = sortViolations(results.violations)\n    console.group(`%cAxe issues ${label ? '- ' + label : ''}`, style.head)\n    violations.forEach(result => {\n      console.groupCollapsed('%c%s%c %s %s %c%s', style[result.impact || 'minor'], result.impact, style.title, result.help, '\\n', style.url, result.helpUrl)\n      result.nodes.forEach(node => {\n        failureSummary(node, 'any')\n        failureSummary(node, 'none')\n      })\n      console.groupEnd()\n    })\n    console.groupEnd()\n  }\n}\n\nexport function resetCache () {\n  cache = {}\n}\n\nexport function resetLastNotification () {\n  lastNotification = ''\n}\n\nexport const draf = (cb) => requestAnimationFrame(() => requestAnimationFrame(cb))\n\nfunction sortViolations (violations) {\n  let sorted = []\n  impacts.forEach(impact => {\n    sorted = [...sorted, ...violations.filter(violation => violation.impact === impact)]\n  })\n  return sorted\n}\n\nfunction createDeferred () {\n  deferred.promise = new Promise((resolve, reject) => {\n    deferred.resolve = resolve\n    deferred.reject = reject\n  })\n  return deferred\n}\n\nfunction failureSummary (node, key) {\n  if (node[key].length > 0) {\n    logElement(node, console.groupCollapsed)\n    logHtml(node)\n    logFailureMessage(node, key)\n\n    var relatedNodes = []\n    node[key].forEach(check => {\n      relatedNodes = relatedNodes.concat(check.relatedNodes)\n    })\n\n    if (relatedNodes.length > 0) {\n      console.groupCollapsed('Related nodes')\n      relatedNodes.forEach(relatedNode => {\n        logElement(relatedNode, console.log)\n        logHtml(relatedNode)\n      })\n      console.groupEnd()\n    }\n    console.groupEnd()\n  }\n}\n\nfunction logElement (node, logFn) {\n  const el = document.querySelector(node.target.toString())\n  if (!el) {\n    return logFn('Selector: %c%s', style.boldCourier, node.target.toString())\n  }\n  logFn('Element: %o', el)\n}\n\nfunction logHtml (node) {\n  console.log('HTML: %c%s', style.boldCourier, node.html)\n}\n\nfunction logFailureMessage (node, key) {\n  const message = axeCore._audit.data.failureSummaries[key]\n    .failureMessage(node[key]\n      .map(function (check) {\n        return check.message || ''\n      }))\n  console.error(message)\n}\n\nexport const defaultOptions = {\n  auto: true,\n  allowConsoleClears: true,\n  clearConsoleOnUpdate: false,\n  delay: 500,\n  config: {\n    branding: {\n      application: 'vue-axe'\n    }\n  },\n  runOptions: {\n    reporter: 'v2',\n    resultTypes: ['violations']\n  },\n  style: {\n    head: 'padding:6px;font-size:20px;font-weight:bold;',\n    boldCourier: 'font-weight:bold;font-family:Courier;',\n    moderate: 'padding:2px 4px;border-radius:5px;background-color:#FFBA52;color:#222;font-weight:normal;',\n    critical: 'padding:2px 4px;border-radius:5px;background-color:#AD0000;color:#fff;font-weight:normal;',\n    serious: 'padding:2px 4px;border-radius:5px;background-color:#333;color:#FFCE85;font-weight:normal;',\n    minor: 'padding:2px 4px;border-radius:5px;background-color:#333;color:#FFCE85;font-weight:normal;',\n    title: 'font-color:black;font-weight:bold;',\n    url: 'font-color:#4D4D4D;font-weight:normal;'\n  },\n  plugins: []\n}\n\nexport function clear (forceClear = false, options) {\n  resetCache()\n  if (forceClear || options.clearConsoleOnUpdate) {\n    resetLastNotification()\n    if (options.allowConsoleClears) {\n      console.clear()\n    }\n  }\n}\n", "/**\n * Returns an object whose keys are the different groups, i.e. the different values of the groupBy property\n * @param {Array} xs array element\n * @param {String} key property to be grouped by.\n */\nexport const groupBy = (xs, key) => xs.reduce((rv, x) => {\n  (rv[x[key]] = rv[x[key]] || []).push(x);\n  return rv;\n}, {});\n", "import * as d3 from 'd3';\nimport { d3locale } from '../../../lib/shared';\n\nexport const formatNumbers = (value) => {\n  const lang = I18n.locale || \"es\";\n  return value.toString().length >= 7 ? d3.format(\".2s\")(value) : d3.formatDefaultLocale(d3locale[lang]).format(',.0f')(value)\n};\n", "import Appsignal from '@appsignal/javascript'\nimport { plugin } from '@appsignal/plugin-window-events'\n\nconst appsignal = new Appsignal({\n  key: process.env.APPSIGNAL_PUSH_API_KEY\n});\n\n// https://docs.appsignal.com/front-end/plugins/plugin-window-events.html\nappsignal.use(plugin())\n\nexport default appsignal;\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n", "// Utils\nexport * from \"./utils/functional\"\nexport * from \"./utils/hashmap\"\nexport * from \"./utils/error\"\nexport * from \"./utils/url\"\nexport * from \"./utils/async\"\nexport * from \"./utils/environment\"\nexport * from \"./utils/push-api\"\n\n// Classes\nexport { Serializable } from \"./serializable\"\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n", "/**\n * Taken from from https://github.com/reduxjs/redux\n *\n * (This file used to be a TypeScript port of the `compose` function, but since\n * Redux has been ported to TypeScript, it's now an exact copy)\n */\n\ntype Func<T extends any[], R> = (...a: T) => R\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n *   to left. For example, `compose(f, g, h)` is identical to doing\n *   `(...args) => f(g(h(...args)))`.\n */\nexport function compose(): <R>(a: R) => R\n\nexport function compose<F extends Function>(f: F): F\n\n/* two functions */\nexport function compose<A, T extends any[], R>(\n  f1: (a: A) => R,\n  f2: Func<T, A>\n): Func<T, R>\n\n/* three functions */\nexport function compose<A, B, T extends any[], R>(\n  f1: (b: B) => R,\n  f2: (a: A) => B,\n  f3: Func<T, A>\n): Func<T, R>\n\n/* four functions */\nexport function compose<A, B, C, T extends any[], R>(\n  f1: (c: C) => R,\n  f2: (b: B) => C,\n  f3: (a: A) => B,\n  f4: Func<T, A>\n): Func<T, R>\n\n/* rest */\nexport function compose<R>(\n  f1: (a: any) => R,\n  ...funcs: Function[]\n): (...args: any[]) => R\n\nexport function compose<R>(...funcs: Function[]): (...args: any[]) => R\n\nexport function compose(...funcs: Function[]) {\n  if (funcs.length === 0) {\n    // infer the argument type so it is usable in inference down the line\n    return <T>(arg: T) => arg\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0]\n  }\n\n  return funcs.reduce((a, b) => (...args: any) => a(b(...args)))\n}\n", "import type { HashMap, HashMapValue } from \"@appsignal/types\"\n\n/**\n * Converts all values in a flat object to a string.\n *\n * Adapted from https://stackoverflow.com/questions/46982698/how-do-i-convert-all-property-values-in-an-object-to-type-string\n */\nexport function toHashMapString(\n  obj?: HashMap<any>\n): HashMap<string> | undefined {\n  if (!obj) return\n\n  Object.keys(obj).forEach(k => {\n    if (typeof obj[k] === \"object\") {\n      obj[k] = JSON.stringify(obj[k])\n    }\n\n    obj[k] = String(obj[k])\n  })\n\n  return obj\n}\n\n/**\n * Converts any non-string, boolean or number value in an object to a string\n */\nexport function toHashMap(\n  obj?: HashMap<any>\n): HashMap<HashMapValue> | undefined {\n  if (!obj) return\n\n  Object.keys(obj).forEach(k => {\n    if (\n      typeof obj[k] === \"string\" ||\n      typeof obj[k] === \"boolean\" ||\n      typeof obj[k] === \"number\"\n    ) {\n      return\n    }\n\n    obj[k] = JSON.stringify(obj[k])\n  })\n\n  return obj\n}\n", "/**\n * Check if the given object is an error-like object.\n *\n * @param   {Error | T}     error      An `Error` object or an error-like object\n *\n * @return  {boolean}\n */\nexport function isError<T extends Error>(error: Error | T): boolean {\n  return (\n    typeof error === \"object\" && typeof (error as any).message !== \"undefined\"\n  )\n}\n\n/**\n * Get backtrace from an `Error` object, or an error-like object\n *\n * @param   {Error | T}     error      An `Error` object or an error-like object\n *\n * @return  {string[]}                 A backtrace\n */\nexport function getStacktrace<T extends Error>(error: Error | T): string[] {\n  if (\n    typeof (error as any).stacktrace !== \"undefined\" ||\n    typeof (error as any)[\"opera#sourceloc\"] !== \"undefined\"\n  ) {\n    // probably opera\n    const { stacktrace = \"\" } = error as any\n    return stacktrace\n      .split(\"\\n\")\n      .filter((line: string | undefined) => line !== \"\")\n  } else if (error.stack) {\n    // an Error or a plain object that resembles an error\n    const { stack = \"\" } = error\n    return stack.split(\"\\n\").filter(line => line !== \"\")\n  } else {\n    // probably IE9 :(\n    return [\"No stacktrace available\"]\n  }\n}\n", "/**\n * Encodes given object into url-friendly format\n *\n * @param   {object}  object:   [object: An object that contains serializable values]\n *\n * @return  {string}            [Encoded URI params]\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join(\"&\")\n}\n", "/**\n * Returns `true` if the function is an async function.\n *\n * Adapted from https://davidwalsh.name/javascript-detect-async-function\n */\nexport const isAsync = (fn: Function) => fn.constructor.name === \"AsyncFunction\"\n", "/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * Originally from https://github.com/getsentry/sentry-javascript/\n */\n\nexport function isNodeEnv(): boolean {\n  return (\n    Object.prototype.toString.call(\n      typeof process !== \"undefined\" ? process : 0\n    ) === \"[object process]\"\n  )\n}\n\n/**\n * Safely get global scope object\n *\n * Originally from https://github.com/getsentry/sentry-javascript/\n */\nexport function getGlobalObject<T>(): T {\n  return (isNodeEnv()\n    ? global\n    : typeof window !== \"undefined\"\n    ? window\n    : typeof self !== \"undefined\"\n    ? self\n    : {}) as T\n}\n", "import fetch from \"isomorphic-unfetch\"\n\nexport async function validatePushApiKey({\n  endpoint = \"https://push.appsignal.com\",\n  apiKey\n}: {\n  endpoint?: string\n  apiKey: string\n}) {\n  const { status } = await fetch(`${endpoint}/1/auth?api_key=${apiKey}`)\n\n  switch (status) {\n    case 200:\n      return true\n    case 401:\n      return false\n    default:\n      throw new Error(\n        `Invalid ${status} response from server when authenticating`\n      )\n  }\n}\n", "export class Serializable<T = [] | {}> {\n  protected _data: T\n\n  constructor(data: T) {\n    this._data = data\n  }\n\n  public toJSON(): string {\n    return JSON.stringify(this._data)\n  }\n\n  public serialize(): T {\n    return this._data\n  }\n}\n", "// Do not touch this file, auto-generated by scripts/create-version\nexport const VERSION = \"1.3.27\"\n", "import { getGlobalObject, isNodeEnv } from \"@appsignal/core\"\n\nexport class Environment {\n  /**\n   * Serializes the current browser environment into an object.\n   */\n  public static serialize(): { [key: string]: string } {\n    return {\n      transport: this.transport(),\n      origin: this.origin()\n    }\n  }\n\n  /**\n   * Returns the origin of the current context.\n   *\n   * @return  {string}       The origin URL\n   */\n  public static origin(): string {\n    const globals = getGlobalObject<Window>()\n\n    // environments like nodejs or react native where an origin isn't relavent\n    if (!globals.location) {\n      return \"\"\n    }\n\n    return (\n      globals.location.origin ||\n      `${globals.location.protocol}//${globals.location.hostname}`\n    )\n  }\n\n  /**\n   * Returns the best currently available API that the current browser supports\n   * for making HTTP requests.\n   *\n   * @return  {string}       The name of the best availble HTTP transport\n   */\n  public static transport(): string {\n    // we throw out the typechecking here as the transports aren't exported\n    // using TS' `Window` type\n    const globals = getGlobalObject<Window>() as any\n\n    // we ignore jest here, as it's a false positive for a node\n    // environment and breaks the tests\n    if (isNodeEnv() && typeof jest === \"undefined\") {\n      return \"NodeHTTP\"\n    } else if (globals.XDomainRequest) {\n      return \"XDomainRequest\"\n    } else if (globals.XMLHttpRequest && !globals.fetch) {\n      return \"XMLHttpRequest\"\n    } else {\n      return \"fetch\"\n    }\n  }\n\n  /**\n   * Indicates whether promises are available in the current browser\n   * or environment.\n   *\n   * Adapted from https://github.com/Modernizr/Modernizr/blob/master/feature-detects/es6/promises.js\n   *\n   * @return  {boolean}       A value indicating if Promises are supported\n   */\n  public static supportsPromises(): boolean {\n    // we throw out the typechecking here as the transports aren't exported\n    // using TS' `Window` type\n    const globals = getGlobalObject<Window>() as any\n\n    return (\n      \"Promise\" in globals &&\n      // Some of these methods are missing from\n      // Firefox/Chrome experimental implementations\n      \"resolve\" in globals.Promise &&\n      \"reject\" in globals.Promise &&\n      \"all\" in globals.Promise &&\n      \"race\" in globals.Promise &&\n      // Older version of the spec had a resolver object\n      // as the arg rather than a function\n      (function () {\n        var resolve\n        new globals.Promise(function (r: any) {\n          resolve = r\n        })\n        return typeof resolve === \"function\"\n      })()\n    )\n  }\n}\n", "import { Transport } from \"../interfaces/transport\"\n\n// Fixes TypeScript complaining about this class\n// not existing\ndeclare var XDomainRequest: any\n\nexport class XDomainTransport implements Transport {\n  public url: string\n\n  constructor(url: string) {\n    this.url = url\n  }\n\n  public send(data: string): Promise<any> {\n    return new Promise((resolve, reject) => {\n      const req = new XDomainRequest()\n      const rx = new RegExp(\"^https?:\")\n\n      req.onload = () => resolve({})\n\n      // XDomainRequest will only make a request to a URL with\n      // the same protocol\n      req.open(\"POST\", this.url.replace(rx, window?.location?.protocol))\n\n      setTimeout(() => {\n        try {\n          req.send(data)\n        } catch (e) {\n          reject(e)\n        }\n      }, 0)\n    })\n  }\n}\n", "import { Transport } from \"../interfaces/transport\"\n\nexport class XHRTransport implements Transport {\n  public url: string\n\n  constructor(url: string) {\n    this.url = url\n  }\n\n  public send(data: string): Promise<any> {\n    return new Promise((resolve, reject) => {\n      try {\n        const req = new XMLHttpRequest()\n\n        req.onreadystatechange = () => {\n          if (req.readyState === XMLHttpRequest.DONE) {\n            resolve({})\n          }\n        }\n\n        req.open(\"POST\", this.url)\n        req.send(data)\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n}\n", "import { Transport } from \"../interfaces/transport\"\n\nexport class FetchTransport implements Transport {\n  public url: string\n\n  constructor(url: string, headers?: { [key: string]: string }) {\n    this.url = url\n  }\n\n  public async send(data: string): Promise<any> {\n    const res = await fetch(this.url, {\n      method: \"POST\",\n      body: data\n    })\n\n    const { statusText, ok } = res\n\n    return ok ? Promise.resolve({}) : Promise.reject({ statusText })\n  }\n}\n", "import { Transport } from \"../interfaces/transport\"\nimport type https from \"https\"\nexport class NodeTransport implements Transport {\n  public url: string\n  private https: Promise<typeof https>\n\n  constructor(url: string) {\n    this.url = url\n    this.https = import(\"https\")\n  }\n\n  public send(data: string): Promise<any> {\n    const options = {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        \"Content-Length\": data.length\n      }\n    }\n\n    return new Promise((resolve, reject) => {\n      this.https\n        .then(https => {\n          const req = https\n            .request(this.url, options, () => {})\n            .on(\"error\", error => reject(error))\n\n          req.write(data)\n          req.end()\n\n          resolve({})\n        })\n        .catch(reason => {\n          console.warn(\n            \"NodeTransport is being used, but the HTTPS module could not be imported. No data will be sent to AppSignal.\"\n          )\n          reject(reason)\n        })\n    })\n  }\n}\n", "import { urlEncode } from \"@appsignal/core\"\n\nimport { Environment } from \"./environment\"\nimport { Span } from \"./span\"\n\nimport { XDomainTransport } from \"./transports/xdomain\"\nimport { XHRTransport } from \"./transports/xhr\"\nimport { FetchTransport } from \"./transports/fetch\"\nimport { NodeTransport } from \"./transports/node\"\n\nimport { PushApiOptions } from \"./interfaces/options\"\nimport { Transport } from \"./interfaces/transport\"\n\nexport class PushApi {\n  private _uri: string\n  private _apiKey: string\n  private _clientVersion: string\n  private _transport: Transport\n\n  /**\n   * Creates a new instance of the Push API client.\n   *\n   * @constructor\n   *\n   * @param   {object}  options  An object of options to configure the Push API client\n   */\n  constructor(options: PushApiOptions) {\n    this._uri = options.uri || \"https://appsignal-endpoint.net/collect\"\n    this._apiKey = options.key\n    this._clientVersion = options.version\n\n    this._transport = this._createTransport(this._url())\n  }\n\n  /**\n   * Pushes a transaction to the Push API.\n   *\n   * @param   {Span}     span     A single API `Span`\n   *\n   * @return  {Promise<Span>}     A single API `Span`\n   */\n  public async push(span: Span): Promise<Span> {\n    await this._transport.send(span.toJSON())\n    return span\n  }\n\n  /**\n   * Creates an instance of a new `Transport` object. A `Transport` is a\n   * browser API that is able to sent HTTP requests to an endpoint. A\n   * transport is selected based on the best available in the current\n   * environment.\n   *\n   * @return  {ITransport}  A Transport object\n   */\n  private _createTransport(url: string): Transport {\n    switch (Environment.transport()) {\n      case \"XDomainRequest\":\n        return new XDomainTransport(url)\n      case \"XMLHttpRequest\":\n        return new XHRTransport(url)\n      case \"NodeHTTP\":\n        return new NodeTransport(url)\n      default:\n        return new FetchTransport(url)\n    }\n  }\n\n  /**\n   * Constructs a complete URL for accessing the Push API.\n   *\n   * @return  {string}  A Push API URL string\n   */\n  private _url(): string {\n    const auth = this._authorization()\n    return `${this._uri}?${urlEncode(auth)}`\n  }\n\n  /**\n   * Creates an object of API credentials.\n   *\n   * @return  {object}  API credentials\n   */\n  private _authorization(): object {\n    return {\n      api_key: this._apiKey,\n      version: this._clientVersion\n    }\n  }\n}\n", "import {\n  Serializable,\n  getStacktrace,\n  toHashMapString,\n  isError\n} from \"@appsignal/core\"\nimport type {\n  JSSpanData,\n  Breadcrumb,\n  HashMap,\n  HashMapValue\n} from \"@appsignal/types\"\n\nexport class Span extends Serializable<JSSpanData> {\n  constructor(span?: Partial<JSSpanData>) {\n    super({\n      timestamp: Math.round(new Date().getTime() / 1000),\n      namespace: \"frontend\",\n      error: {\n        name: \"NullError\",\n        message: \"No error has been set\",\n        backtrace: []\n      },\n      ...span\n    })\n  }\n\n  public setAction(name: string): this {\n    if (!name || typeof name !== \"string\") {\n      return this\n    }\n\n    this._data.action = name\n    return this\n  }\n\n  public setNamespace(name: string): this {\n    if (!name || typeof name !== \"string\") {\n      return this\n    }\n\n    this._data.namespace = name\n    return this\n  }\n\n  public setError<T extends Error>(error: Error | T): this {\n    if (!error || !isError(error)) return this\n\n    this._data.error = {\n      name: error.name || \"[unknown]\",\n      message: error.message,\n      backtrace: getStacktrace(error)\n    }\n\n    return this\n  }\n\n  public setTags(tags: HashMap<string>): this {\n    this._data.tags = { ...this._data.tags, ...toHashMapString(tags) }\n    return this\n  }\n\n  public setParams(params: HashMap<any>): this {\n    this._data.params = { ...this._data.params, ...params }\n    return this\n  }\n\n  public setBreadcrumbs(breadcrumbs: Breadcrumb[]): this {\n    this._data.breadcrumbs = breadcrumbs\n    return this\n  }\n}\n", "import { Span } from \"./span\"\n\nexport class Queue {\n  private _data: Span[]\n\n  constructor(data?: Span[]) {\n    this._data = data || []\n  }\n\n  public clear() {\n    this._data = []\n  }\n\n  public values(): Span[] {\n    return this._data\n  }\n\n  public push(item: Span | Span[]) {\n    return Array.isArray(item)\n      ? this._data.push(...item)\n      : this._data.push(item)\n  }\n\n  public *drain() {\n    while (this._data.length > 0) {\n      yield this._data.shift()\n    }\n  }\n}\n", "import { getGlobalObject } from \"@appsignal/core\"\n\nimport { Queue } from \"./queue\"\nimport { PushApi } from \"./api\"\n\ntype DispatcherOptions = { limit: number; initialDuration: number }\n\nexport class Dispatcher {\n  public options: DispatcherOptions\n\n  private _queue: Queue\n  private _api: PushApi\n  private _retries = 0\n  private _timerID = 0\n  private _duration = 0\n\n  constructor(\n    queue: Queue,\n    api: PushApi,\n    options?: Partial<DispatcherOptions>\n  ) {\n    this._api = api\n    this._queue = queue\n\n    this.options = {\n      limit: 5,\n      initialDuration: 1000,\n      ...options\n    }\n\n    this.reset()\n  }\n\n  public schedule(time = this._duration): number {\n    const globals = getGlobalObject<Window>()\n\n    // @TODO: make this configurable?\n    const BACKOFF_FACTOR = 1.3\n\n    const cb = async () => {\n      for (let span of this._queue.drain()) {\n        if (!span) return\n\n        try {\n          await this._api.push(span)\n        } catch (e) {\n          // when the first promise fails, reschedule a timer\n          const expDuration = Math.floor(Math.pow(time, BACKOFF_FACTOR))\n\n          this._retries = this._retries - 1\n\n          if (this._retries === 0) {\n            this.reset()\n          } else {\n            this._queue.push(span)\n            this._timerID = this.schedule(expDuration)\n          }\n\n          return\n        }\n      }\n\n      // reset once all promises are cleared\n      this.reset()\n    }\n\n    return globals.setTimeout(cb, time)\n  }\n\n  public reset() {\n    const { limit, initialDuration } = this.options\n    this._retries = limit\n    this._duration = initialDuration\n  }\n}\n", "/**\n * The AppSignal client.\n * @module Appsignal\n */\n\nimport { compose, toHashMap } from \"@appsignal/core\"\nimport type { Breadcrumb, JSClient, Hook, HashMap } from \"@appsignal/types\"\n\nimport { VERSION } from \"./version\"\nimport { PushApi } from \"./api\"\nimport { Environment } from \"./environment\"\nimport { Span } from \"./span\"\nimport { Queue } from \"./queue\"\nimport { Dispatcher } from \"./dispatcher\"\n\nimport { AppsignalOptions } from \"./interfaces/options\"\n\nexport default class Appsignal implements JSClient {\n  public VERSION = VERSION\n  public ignored: RegExp[] = []\n\n  private _dispatcher: Dispatcher\n  private _options: AppsignalOptions\n  private _api: PushApi\n  private _breadcrumbs: Breadcrumb[] = []\n\n  private _hooks = {\n    decorators: Array<Hook>(),\n    overrides: Array<Hook>()\n  }\n\n  private _env = Environment.serialize()\n  private _queue = new Queue([])\n\n  /**\n   * Creates a new instance of the AppSignal client.\n   *\n   * @constructor\n   *\n   * @param   {AppsignalOptions}  options        An object of options to configure the AppSignal client\n   */\n  constructor(options: AppsignalOptions) {\n    const { key = \"\", uri, revision, ignoreErrors } = options\n\n    // `revision` should be a `string`, but we attempt to\n    // normalise to one anyway\n    if (revision && typeof revision !== \"string\") {\n      options.revision = String(revision)\n    }\n\n    // starting with no key means nothing will be sent to the API\n    if (key === \"\") {\n      console.info(\"[APPSIGNAL]: Started in development mode.\")\n    }\n\n    this._api = new PushApi({\n      key,\n      uri,\n      version: this.VERSION\n    })\n\n    // ignored exceptions are checked against the `message`\n    // property of a given `Error`\n    if (ignoreErrors && Array.isArray(ignoreErrors)) {\n      this.ignored = ignoreErrors\n    }\n\n    this._dispatcher = new Dispatcher(this._queue, this._api)\n\n    this._options = options\n  }\n\n  /**\n   * Records and sends a browser `Error` to AppSignal.\n   *\n   * @param   {Error}             error          A JavaScript Error object\n   * @param   {Function | void}   fn             Optional callback function to modify span before it's sent.\n   *\n   * @return  {Promise<Span> | void}             An API response, or `void` if `Promise` is unsupported.\n   */\n  public send<T>(error: Error, fn?: (span: Span) => T): Promise<Span> | void\n\n  /**\n   * Records and sends a browser `Error` to AppSignal.\n   *\n   * @param   {Error}             error          A JavaScript Error object\n   * @param   {object}            tags           An key, value object of tags\n   * @param   {string}            namespace      An optional namespace name\n   *\n   * @return  {Promise<Span> | void}             An API response, or `void` if `Promise` is unsupported.\n   */\n  public send(\n    error: Error,\n    tags?: object,\n    namespace?: string\n  ): Promise<Span> | void\n\n  /**\n   * Records and sends an Appsignal `Span` object to AppSignal.\n   *\n   * @param   {Error}             error          A JavaScript Error object\n   *\n   * @return  {Promise<Span>}                    An API response, or `void` if `Promise` is unsupported.\n   */\n  public send(span: Span): Promise<Span> | void\n\n  /**\n   *\n   * @param   {Error | Span}      data           A JavaScript Error or Appsignal Span object\n   * @param   {object | Function} tagsOrFn       An key-value object of tags or a callback function to customize the span before it is sent.\n   * @param   {string}            namespace      DEPRECATED: An optional namespace name.\n   *\n   * @return  {Promise<Span> | void}             An API response, or `void` if `Promise` is unsupported.\n   */\n  public send<T>(\n    data: Error | Span,\n    tagsOrFn?: object | ((span: Span) => T),\n    namespace?: string\n  ): Promise<any> | void {\n    if (!(data instanceof Error) && !(data instanceof Span)) {\n      // @TODO: route this through a central logger\n      console.error(\n        \"[APPSIGNAL]: Can't send error, given error is not a valid type\"\n      )\n      return\n    }\n\n    // handle user defined ignores\n    if (this.ignored.length !== 0) {\n      if (\n        data instanceof Error &&\n        this.ignored.some(el => el.test(data.message))\n      ) {\n        console.warn(`[APPSIGNAL]: Ignored an error: ${data.message}`)\n        return\n      }\n\n      if (data instanceof Span) {\n        const { error } = data.serialize()\n\n        // using the bang operator here as tsc doesnt recognise that we are\n        // checking for the value to be set as the first predicate\n        if (error.message && this.ignored.some(el => el.test(error.message!))) {\n          console.warn(`[APPSIGNAL]: Ignored a span: ${error.message}`)\n          return\n        }\n      }\n    }\n\n    // a \"span\" currently refers to a fixed point in time, as opposed to\n    // a range or length in time. this may change in future!\n    const span = data instanceof Span ? data : this._createSpanFromError(data)\n\n    // A Span can be \"decorated\" with metadata after it has been created,\n    // but before it is sent to the API and before metadata provided\n    // as arguments is added\n    if (this._hooks.decorators.length > 0) {\n      compose(...this._hooks.decorators)(span)\n    }\n\n    if (tagsOrFn) {\n      if (typeof tagsOrFn === \"function\") {\n        const callback = tagsOrFn\n        callback(span)\n      } else {\n        console.warn(\n          \"[APPSIGNAL]: DEPRECATED: Calling the `send`/`sendError` function with a tags object is deprecated. Use the callback argument instead.\"\n        )\n        const tags = (toHashMap(tagsOrFn) || {}) as HashMap<string>\n        span.setTags(tags)\n      }\n    }\n    if (namespace) {\n      console.warn(\n        \"[APPSIGNAL]: DEPRECATED: Calling the `send`/`sendError` function with a namespace is deprecated. Use the callback argument instead.\"\n      )\n      span.setNamespace(namespace)\n    }\n\n    if (this._breadcrumbs.length > 0) span.setBreadcrumbs(this._breadcrumbs)\n\n    // A Span can be \"overridden\" with metadata after it has been created,\n    // but before it is sent to the API and after metadata provided\n    // as arguments is added\n    if (this._hooks.overrides.length > 0) {\n      compose(...this._hooks.overrides)(span)\n    }\n\n    if (Environment.supportsPromises()) {\n      // clear breadcrumbs as they are now loaded into the span,\n      // and we are sure that it's possible to send them\n      this._breadcrumbs = []\n\n      // if no key is supplied, we just output the span to the console\n      // and rethrow the error\n      if (!this._options.key) {\n        // @TODO: route this through a central logger\n        console.warn(\n          \"[APPSIGNAL]: Span not sent because we're in development mode:\",\n          span\n        )\n\n        if (data instanceof Error) {\n          throw data\n        }\n      } else {\n        // attempt to push to the API\n        return this._api.push(span).catch(() => {\n          this._queue.push(span)\n\n          // schedule on next tick\n          setTimeout(() => this._dispatcher.schedule(), 0)\n        })\n      }\n    } else {\n      // @TODO: route this through a central logger\n      console.error(\n        \"[APPSIGNAL]: Error not sent. A Promise polyfill is required.\"\n      )\n      return\n    }\n  }\n\n  sendError<T>(error: Error): Promise<Span> | void\n  sendError<T>(error: Error, callback: (span: Span) => T): Promise<Span> | void\n  sendError<T>(\n    error: Error,\n    tags?: object,\n    namespace?: string\n  ): Promise<Span> | void\n\n  /**\n   * Records and sends a browser `Error` to AppSignal. An alias to `#send()`\n   * to maintain compatibility.\n   *\n   * @param   {Error}             error          A JavaScript Error object\n   * @param   {object | Function} tagsOrFn       An key-value object of tags or callback function to customize the span before it is sent.\n   * @param   {string}            namespace      DEPRECATED: An optional namespace name\n   *\n   * @return  {Promise<Span> | void}             An API response, or `void` if `Promise` is unsupported.\n   */\n  public sendError<T>(\n    error: Error,\n    tagsOrFn?: object | ((span: Span) => T),\n    namespace?: string\n  ): Promise<Span> | void {\n    return this.send(error, tagsOrFn, namespace)\n  }\n\n  /**\n   * Registers and installs a valid plugin.\n   *\n   * A plugin is typically a function that can be used to provide a\n   * reference to the `Appsignal` instance via returning a function\n   * that can be bound to `this`.\n   *\n   * @param   {Plugin}            plugin         A JavaScript Error object\n   *\n   * @return  {void}\n   */\n  public use(plugin: Function): void {\n    plugin.call(this)\n  }\n\n  /**\n   * Creates a new `Span`, augmented with the current environment.\n   *\n   * @param   {Function | void}   fn         Optional function to modify span\n   *\n   * @return  {Span}              An AppSignal `Span` object\n   */\n  public createSpan(fn?: (span: Span) => void): Span {\n    const { revision = \"\", namespace } = this._options\n\n    const span = new Span({\n      environment: this._env,\n      revision\n    })\n\n    // set default namespace from constructor if none is set\n    if (namespace) span.setNamespace(namespace)\n\n    if (fn && typeof fn === \"function\") fn(span)\n\n    return span\n  }\n\n  /**\n   * Wraps and catches errors within a given function. If the function throws an\n   * error, a rejected `Promise` will be returned and the error thrown will be\n   * logged to AppSignal.\n   */\n  public async wrap<T>(fn: () => T, callbackFn?: (span: Span) => T): Promise<T>\n\n  /**\n   * Wraps and catches errors within a given function. If the function throws an\n   * error, a rejected `Promise` will be returned and the error thrown will be\n   * logged to AppSignal.\n   */\n  public async wrap<T>(\n    fn: () => T,\n    tags?: object,\n    namespace?: string\n  ): Promise<T>\n\n  /**\n   * Wraps and catches errors within a given function. If the function throws an\n   * error, a rejected `Promise` will be returned and the error thrown will be\n   * logged to AppSignal.\n   *\n   * @param   {Function}          fn             A function to wrap\n   * @param   {object | Function} tagsOrFn       An key-value object of tags or a callback function to customize the span before it is sent.\n   * @param   {string}            namespace      DEPRECATED: An optional namespace name\n   *\n   * @return  {Promise<any>}      A Promise containing the return value of the function, or a `Span` if an error was thrown.\n   */\n  public async wrap<T>(\n    fn: () => T,\n    tagsOrFn?: object | ((span: Span) => T),\n    namespace?: string\n  ): Promise<T> {\n    try {\n      return await fn()\n    } catch (e) {\n      await this.sendError(e, tagsOrFn, namespace)\n      return Promise.reject(e)\n    }\n  }\n\n  /**\n   * Registers a span decorator to be applied every time a Span\n   * is sent to the Push API\n   *\n   * @param   {Function}  decorator  A decorator function, returning `Span`\n   *\n   * @return  {void}\n   */\n  public addDecorator<T extends Hook>(decorator: T): void {\n    this._hooks.decorators.push(decorator)\n  }\n\n  /**\n   * Registers a span override to be applied every time a Span\n   * is sent to the Push API\n   *\n   * @param   {Function}  override  An override function, returning `Span`\n   *\n   * @return  {void}\n   */\n  public addOverride<T extends Hook>(override: T): void {\n    this._hooks.overrides.push(override)\n  }\n\n  /**\n   * Sends a demonstration error to AppSignal.\n   *\n   * @return  {void}\n   */\n  public demo(): void {\n    const span = this._createSpanFromError(\n      new Error(\n        \"Hello world! This is an error used for demonstration purposes.\"\n      )\n    )\n\n    span\n      .setAction(\"TestAction\")\n      .setParams({\n        path: \"/hello\",\n        method: \"GET\"\n      })\n      .setTags({\n        demo_sample: \"true\"\n      })\n\n    this.send(span)\n  }\n\n  /**\n   * Adds a breadcrumb.\n   *\n   * @param   {Breadcrumb}  breadcrumb  A valid breadcrumb\n   *\n   * @return  {void}\n   */\n  public addBreadcrumb(breadcrumb: Omit<Breadcrumb, \"timestamp\">): void {\n    const crumb: Breadcrumb = {\n      timestamp: Math.round(new Date().getTime() / 1000),\n      ...breadcrumb,\n      metadata: toHashMap(breadcrumb.metadata)\n    }\n\n    if (!crumb.category) {\n      console.warn(\"[APPSIGNAL]: Breadcrumb not added. `category` is missing.\")\n      return\n    }\n\n    if (!crumb.action) {\n      console.warn(\"[APPSIGNAL]: Breadcrumb not added. `action` is missing.\")\n      return\n    }\n\n    if (this._breadcrumbs.length === 20) {\n      this._breadcrumbs.pop()\n    }\n\n    this._breadcrumbs.unshift(crumb)\n  }\n\n  /**\n   * Creates a valid AppSignal `Span` from a JavaScript `Error`\n   * object.\n   *\n   * @param   {Error}  error  A JavaScript error\n   *\n   * @return  {Span}         An AppSignal event\n   */\n  private _createSpanFromError(error: Error): Span {\n    const event = this.createSpan()\n    event.setError(error)\n\n    return event\n  }\n}\n", "import type { JSClient } from \"@appsignal/types\"\nimport { isError } from \"@appsignal/core\"\n\nfunction windowEventsPlugin(options?: { [key: string]: any }) {\n  const ctx = window as Window\n\n  const opts = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options\n  }\n\n  return function (this: JSClient) {\n    const self = this\n\n    const prev = {\n      onError: ctx.onerror,\n      unhandledRejection: ctx.onunhandledrejection\n    }\n\n    function _onErrorHandler(\n      this: WindowEventHandlers,\n      event: Event | string,\n      source?: string,\n      lineno?: number,\n      colno?: number,\n      error?: Error\n    ): void {\n      const span = self.createSpan()\n\n      // handles \"Script error.\" message in some browsers when script is loaded\n      // cross origin.\n      // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#Notes\n      if (\n        typeof event === \"string\" &&\n        lineno === 0 &&\n        /Script error\\.?/.test(event)\n      ) {\n        console.warn(\n          \"[APPSIGNAL]: Cross-domain or eval script error detected, error ignored\"\n        )\n      } else {\n        if (error) {\n          span.setError(error)\n        } else {\n          // handle browsers that don't supply an `error` argument\n          // or don't return a stacktrace\n          span.setError({\n            name: \"Error\",\n            // `event` shoiuld be the message in most browsers\n            message:\n              typeof event === \"string\"\n                ? event\n                : 'An HTML onerror=\"\" handler failed to execute',\n            stack: `at ${source}:${lineno}${colno ? `:${colno}` : \"\"}`\n          })\n        }\n\n        self.send(span)\n      }\n\n      if (typeof prev.onError === \"function\") {\n        prev.onError.apply(this, arguments as any)\n      }\n    }\n\n    function _onUnhandledRejectionHandler(\n      this: WindowEventHandlers,\n      event: PromiseRejectionEvent\n    ): void {\n      const span = self.createSpan()\n\n      let error: Error\n\n      if (event && event.reason && isError(event.reason)) {\n        error = event.reason\n      } else {\n        error = {\n          name: \"UnhandledPromiseRejectionError\",\n          message: _reasonFromEvent(event)\n        }\n      }\n\n      span.setError(error)\n\n      self.send(span)\n\n      if (typeof prev.unhandledRejection === \"function\") {\n        prev.unhandledRejection.apply(this, arguments as any)\n      }\n    }\n\n    if (opts.onerror) {\n      ctx.onerror = _onErrorHandler\n    }\n\n    if (opts.onunhandledrejection) {\n      ctx.onunhandledrejection = _onUnhandledRejectionHandler\n    }\n  }\n\n  function _reasonFromEvent(event: PromiseRejectionEvent): string {\n    if (!event || !event.reason) {\n      return \"\"\n    }\n\n    if (typeof event.reason === \"string\") {\n      return event.reason\n    }\n\n    return JSON.stringify(event.reason, circularReplacer())\n  }\n\n  function circularReplacer() {\n    const seenValue: any[] = []\n    const seenKey: string[] = []\n    return (key: string, value: any) => {\n      if (typeof value === \"object\" && value !== null) {\n        const i = seenValue.indexOf(value)\n        if (i !== -1) {\n          return `[cyclic value: ${seenKey[i] || \"root object\"}]`\n        } else {\n          seenValue.push(value)\n          seenKey.push(key)\n        }\n      }\n\n      return value\n    }\n  }\n}\n\nexport const plugin = windowEventsPlugin\n", "// https://github.com/gka/d3-jetpack/blob/main/src/wordwrap.js\n\nimport * as d3 from 'd3';\n\n// while this might not be reprentative for all fonts, it is\n// still better than assuming every character has the same width\n// (set monospace=true if you want to bypass this)\nvar CHAR_W = {\n    A:7,a:7,B:8,b:7,C:8,c:6,D:9,d:7,E:7,e:7,F:7,f:4,G:9,g:7,H:9,h:7,I:3,i:3,J:5,j:3,K:8,k:6,L:7,l:3,M:11,\n    m:11,N:9,n:7,O:9,o:7,P:8,p:7,Q:9,q:7,R:8,r:4,S:8,s:6,T:7,t:4,U:9,u:7,V:7,v:6,W:11,w:9,X:7,x:6,Y:7,y:6,Z:7,z:5,\n    '.':2,',':2,':':2,';':2\n};\n\nexport default function(line, maxCharactersPerLine, minCharactersPerLine, monospace) {\n    var l, lines = [], w = [], words = [], w1, maxChars, minChars, maxLineW, minLineW;\n    w1 = line.split(' ');\n    w1.forEach(function(s, i) {\n        var w2 = s.split('-');\n        var lw = (i < w1.length - 1 ? ' ' : '');\n        if (w2.length > 1) {\n            w2.forEach(function(t, j) {\n                w.push(t + (j < w2.length - 1 ? '-' : lw));\n            });\n        } else {\n            w.push(s + lw);\n        }\n    });\n    maxChars = maxCharactersPerLine || 40;\n    minChars = minCharactersPerLine || Math.max(3, Math.min(maxChars * 0.5, 0.75 * w.map(word_len).sort(num_asc)[Math.round(w.length / 2)]));\n    maxLineW = maxChars * CHAR_W.a;\n    minLineW = minChars * CHAR_W.a;\n    l = 0;\n    w.forEach(function(d) {\n        var ww = d3.sum(d.split('').map(char_w));\n        if (l + ww > maxLineW && l > minLineW) {\n            lines.push(words.join(''));\n            words.length = 0;\n            l = 0;\n        }\n        l += ww;\n        return words.push(d);\n    });\n    if (words.length) {\n        lines.push(words.join(''));\n    }\n    return lines.filter(function(d) {\n        return d !== '';\n    });\n    function char_w(c) { return !monospace && CHAR_W[c] || CHAR_W.a; }\n    function word_len(d) { return d.length; }\n    function num_asc(a, b) { return a - b; }\n}\n", "// https://github.com/gka/d3-jetpack/blob/main/src/tspans.js\n\nexport default function(lines, lh) {\n  return this.selectAll('tspan')\n      .data(function(d, i) {\n        return (typeof(lines) === 'function' ? lines.call(this, d, i) : lines)\n          .map(function(l) {\n            return { line: l, parent: d };\n          });\n      })\n      .enter()\n    .append('tspan')\n      .text(function(d) { return d.line; })\n      .attr('x', 0)\n      .attr('dy', function(d, i) { return i ? (typeof(lh) === 'function' ? lh.call(this, d.parent, d.line, i) : lh) || 15 : 0; });\n}\n", "export default function divide(a, b, def = 0) {\n  if (b === 0) return def\n  return a / b\n}\n", "import 'velocity-animate'\n\n$(document).on('turbolinks:load', function() {\n\n\t$('.show_login_box').click(function(e) {\n\t\te.preventDefault();\n\t\t$('.password_recovery_box').addClass(\"hidden\");\n\t\t$('.login_box').removeClass('hidden').velocity(\"transition.slideLeftIn\");\n\t});\n\n\t$('.show_password_recovery_box').click(function(e) {\n\t\te.preventDefault();\n\t\t$('.login_box').addClass(\"hidden\");\n\t\t$('.password_recovery_box').removeClass('hidden').velocity(\"transition.slideLeftIn\");\n\t});\n\n});\n", "import 'velocity-animate'\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n  menuResponsive()\n})\n\nfunction menuResponsive() {\n  $('.nav_control, .close').click(function(e) {\n    e.preventDefault();\n\n    $('body').velocity('scroll', {\n      duration: 500,\n      offset: -40,\n      easing: 'ease-in-out'\n    });\n\n    // Style itself\n    var $selector;\n    if ($(this).hasClass('nav_control')) {\n      $selector = $('.nav_control');\n    } else {\n      $selector = $('.close');\n    }\n\n    $selector.find('i').toggleClass('fa-bars fa-times');\n    $selector.parent().toggleClass('hamburger_container--transparent');\n\n    $('.js-mobile-header').toggle();\n    $('.js-mobile-nav').toggle();\n    $('.js-mobile-buttons').toggle();\n  });\n\n  $('.site_header_logo .search_icon').click(function(e) {\n    e.preventDefault();\n    $('.search_control').velocity(\"fadeIn\", {\n      complete: function (element) {\n        $(element[0]).find('input').removeClass('hidden').focus();\n      }\n    });\n  });\n\n  $('.site_header_logo .search_control input').on('focusout', function() {\n    $('.search_control').velocity(\"fadeOut\");\n  });\n\n  $('.follow_process').on('click', function() {\n    $(this)\n      .toggleClass('checked')\n      .find('.fa')\n      .toggleClass('fa-rss fa-star')\n      .velocity({ translateY: -5 }, { duration: 100, loop: 2 })\n      .next('span')\n      .toggleText('Sigue este proceso', '\u00A1Proceso seguido!');\n  });\n\n  $('.scroll-up').on('click', function() {\n    $('body').velocity('scroll', {\n      duration: 500,\n      offset: -40,\n      easing: 'ease-in-out'\n    });\n  });\n\n  $('.js-submenu-toggle').on('click', function() {\n    $('.js-slider:visible').toggleClass('is-open');\n  });\n\n  $('.js-item-toggle').on('click', function() {\n    var parent = $(this).parent();\n\n    // If open same menu-item, just close it.\n    if (parent.next().find('.js-slider').hasClass('is-open')) {\n      parent.next().find('.js-slider').removeClass('is-open');\n      return;\n    }\n\n    // Closes all menus\n    parent.closest('.js-mobile-nav').find('.is-open').removeClass('is-open');\n\n    // Delayed to get accordion effect\n    setTimeout(function () {\n      // Open sibling menu\n      parent.next().find('.js-slider').toggleClass('is-open');\n    }, 200);\n\n    // REVIEW:\n    // if ($(this).prev().find('a').attr('href') === \"/participacion\") {\n    //   $('.js-secondary_nav').addClass('is-open');\n    // } else {\n    //   $('.js-secondary_nav').removeClass('is-open');\n    // }\n  });\n}\n", "import { GOBIERTO_DASHBOARDS } from '../../../lib/events';\nimport 'magnific-popup';\n\nfunction addMagnificPopups() {\n  // flag storing whether the modal trigger is a dashboard initializer or not\n  let isDashboardTrigger = false\n\n  $(\".open_remote_modal\").magnificPopup({\n    type: \"ajax\",\n    removalDelay: 300,\n    mainClass: \"mfp-move-horizontal\",\n    // closeOnContentClick: !isDashboardTrigger,\n    // closeOnBgClick: !isDashboardTrigger,\n    callbacks: {\n      change: function({ el }) {\n        const { dataset } = el[0] || {} // 0 is a jQuery value, not array index\n\n        // if the modal trigger (.open_remote_modal) contains data-dashboards-maker directive\n        // then it activates the trigger. Once the DOM (the modal content) has been loaded, ajaxContentAdded will dispatch the event.\n        // it must be done in this callback, due to next one does not provide access to \"el\" object\n        isDashboardTrigger = (!!dataset?.dashboardsMaker)\n      },\n      ajaxContentAdded: function() {\n        // This conditionals are always true \u00AC\u00AC\n        if (window.GobiertoAdmin && window.GobiertoAdmin.process_stages_controller) {\n          window.GobiertoAdmin.process_stages_controller.form();\n        }\n        if (window.GobiertoAdmin && window.GobiertoAdmin.globalized_forms_component) {\n          window.GobiertoAdmin.globalized_forms_component.handleGlobalizedForm();\n        }\n        if (window.GobiertoAdmin && window.GobiertoAdmin.gobierto_citizens_charters_editions_intervals_controller) {\n          window.GobiertoAdmin.gobierto_citizens_charters_editions_intervals_controller.handleForm();\n        }\n        if (window.GobiertoAdmin && window.GobiertoAdmin.admin_groups_admins_controller) {\n          window.GobiertoAdmin.admin_groups_admins_controller.index();\n        }\n        if (window.GobiertoAdmin && window.GobiertoAdmin.terms_controller) {\n          window.GobiertoAdmin.terms_controller.form()\n        }\n\n        // autofocus on the first modal input field\n        $(\".modal .form_item input[type=text]:visible\").first().focus()\n\n        if (isDashboardTrigger) {\n          const event = new Event(GOBIERTO_DASHBOARDS.CREATE)\n          document.dispatchEvent(event)\n        }\n    },\n    }\n  });\n}\n\n$(document).on(\"turbolinks:load ajax:complete ajaxSuccess\", addMagnificPopups);\n", "export const GOBIERTO_BUDGETS = {\n  LOADED: \"chart-loaded\"\n}\n\nexport const GOBIERTO_DASHBOARDS = {\n  CREATE: \"create-dashboard-maker\",\n  LOAD: \"load-dashboard-viewer\",\n  LOADED: \"dashboard-viewer-loaded\",\n  SELECTED: \"dashboard-viewer-selected\"\n}", "import 'tipsy-1a';\n\n/* Toggle text method */\n$.fn.extend({\n  toggleText: function(a, b) {\n    return this.text(this.text() == b ? a : b);\n  }\n});\n\n$(document).on(\"ajax:complete ajaxSuccess\", function() {\n  $(\".tipsit\").tipsy({ fade: false, gravity: \"s\", html: true });\n  $(\".tipsit-n\").tipsy({ fade: false, gravity: \"n\", html: true });\n  $(\".tipsit-w\").tipsy({ fade: false, gravity: \"w\", html: true });\n  $(\".tipsit-e\").tipsy({ fade: false, gravity: \"e\", html: true });\n  $(\".tipsit-treemap\").tipsy({ fade: false, gravity: $.fn.tipsy.autoNS, html: true });\n});\n\n$(document).on(\"turbolinks:load\", function() {\n  // Include here common callbacks and behaviours\n\n  // Tabs navigation\n  $(\"[data-tab-target]\").on(\"click\", function(e) {\n    e.preventDefault();\n    var target = $(this).data(\"tab-target\");\n    var scope = $(\"[data-tab-scope]\").length ? $(this).closest(\"[data-tab-scope]\") : $(\"body\");\n\n    scope\n      .find(\"[data-tab-target]\")\n      .parent()\n      .removeClass(\"active\");\n    scope\n      .find('[data-tab-target=\"' + target + '\"]')\n      .parent()\n      .addClass(\"active\");\n    scope.find(\"[data-tab]\").removeClass(\"active\");\n    scope.find('[data-tab=\"' + target + '\"]').addClass(\"active\");\n  });\n\n  function toggleTarget($this) {\n    var $target = $('[data-toggle-target=\"' + $this.data(\"toggle\") + '\"]');\n    $this.is(\":checked\") ? $target.show() : $target.hide();\n  }\n\n  $(\"[data-toggle-target]\").hide();\n  $(\"[data-toggle]\").each(function() {\n    toggleTarget($(this));\n  });\n  $(\"[data-toggle]\").click(function() {\n    toggleTarget($(this));\n  });\n});\n", "// tipsy, facebook style tooltips for jquery\n// version 1.0.0a\n// (c) 2008-2010 jason frame [jason@onehackoranother.com]\n// released under the MIT license\n\n(function($) {\n    \n    function maybeCall(thing, ctx) {\n        return (typeof thing == 'function') ? (thing.call(ctx)) : thing;\n    };\n    \n    function isElementInDOM(ele) {\n      while (ele = ele.parentNode) {\n        if (ele == document) return true;\n      }\n      return false;\n    };\n    \n    function Tipsy(element, options) {\n        this.$element = $(element);\n        this.options = options;\n        this.enabled = true;\n        this.fixTitle();\n    };\n    \n    Tipsy.prototype = {\n        show: function() {\n            var title = this.getTitle();\n            if (title && this.enabled) {\n                var $tip = this.tip();\n                \n                $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);\n                $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity\n                $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body);\n                \n                var pos = $.extend({}, this.$element.offset(), {\n                    width: this.$element[0].offsetWidth,\n                    height: this.$element[0].offsetHeight\n                });\n                \n                var actualWidth = $tip[0].offsetWidth,\n                    actualHeight = $tip[0].offsetHeight,\n                    gravity = maybeCall(this.options.gravity, this.$element[0]);\n                \n                var tp;\n                switch (gravity.charAt(0)) {\n                    case 'n':\n                        tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};\n                        break;\n                    case 's':\n                        tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};\n                        break;\n                    case 'e':\n                        tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};\n                        break;\n                    case 'w':\n                        tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};\n                        break;\n                }\n                \n                if (gravity.length == 2) {\n                    if (gravity.charAt(1) == 'w') {\n                        tp.left = pos.left + pos.width / 2 - 15;\n                    } else {\n                        tp.left = pos.left + pos.width / 2 - actualWidth + 15;\n                    }\n                }\n                \n                $tip.css(tp).addClass('tipsy-' + gravity);\n                $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0);\n                if (this.options.className) {\n                    $tip.addClass(maybeCall(this.options.className, this.$element[0]));\n                }\n                \n                if (this.options.fade) {\n                    $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});\n                } else {\n                    $tip.css({visibility: 'visible', opacity: this.options.opacity});\n                }\n            }\n        },\n        \n        hide: function() {\n            if (this.options.fade) {\n                this.tip().stop().fadeOut(function() { $(this).remove(); });\n            } else {\n                this.tip().remove();\n            }\n        },\n        \n        fixTitle: function() {\n            var $e = this.$element;\n            if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {\n                $e.attr('original-title', $e.attr('title') || '').removeAttr('title');\n            }\n        },\n        \n        getTitle: function() {\n            var title, $e = this.$element, o = this.options;\n            this.fixTitle();\n            var title, o = this.options;\n            if (typeof o.title == 'string') {\n                title = $e.attr(o.title == 'title' ? 'original-title' : o.title);\n            } else if (typeof o.title == 'function') {\n                title = o.title.call($e[0]);\n            }\n            title = ('' + title).replace(/(^\\s*|\\s*$)/, \"\");\n            return title || o.fallback;\n        },\n        \n        tip: function() {\n            if (!this.$tip) {\n                this.$tip = $('<div class=\"tipsy\"></div>').html('<div class=\"tipsy-arrow\"></div><div class=\"tipsy-inner\"></div>');\n                this.$tip.data('tipsy-pointee', this.$element[0]);\n            }\n            return this.$tip;\n        },\n        \n        validate: function() {\n            if (!this.$element[0].parentNode) {\n                this.hide();\n                this.$element = null;\n                this.options = null;\n            }\n        },\n        \n        enable: function() { this.enabled = true; },\n        disable: function() { this.enabled = false; },\n        toggleEnabled: function() { this.enabled = !this.enabled; }\n    };\n    \n    $.fn.tipsy = function(options) {\n        \n        if (options === true) {\n            return this.data('tipsy');\n        } else if (typeof options == 'string') {\n            var tipsy = this.data('tipsy');\n            if (tipsy) tipsy[options]();\n            return this;\n        }\n        \n        options = $.extend({}, $.fn.tipsy.defaults, options);\n        \n        function get(ele) {\n            var tipsy = $.data(ele, 'tipsy');\n            if (!tipsy) {\n                tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\n                $.data(ele, 'tipsy', tipsy);\n            }\n            return tipsy;\n        }\n        \n        function enter() {\n            var tipsy = get(this);\n            tipsy.hoverState = 'in';\n            if (options.delayIn == 0) {\n                tipsy.show();\n            } else {\n                tipsy.fixTitle();\n                setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);\n            }\n        };\n        \n        function leave() {\n            var tipsy = get(this);\n            tipsy.hoverState = 'out';\n            if (options.delayOut == 0) {\n                tipsy.hide();\n            } else {\n                setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);\n            }\n        };\n        \n        if (!options.live) this.each(function() { get(this); });\n        \n        if (options.trigger != 'manual') {\n            var binder   = options.live ? 'live' : 'bind',\n                eventIn  = options.trigger == 'hover' ? 'mouseenter' : 'focus',\n                eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';\n            this[binder](eventIn, enter)[binder](eventOut, leave);\n        }\n        \n        return this;\n        \n    };\n    \n    $.fn.tipsy.defaults = {\n        className: null,\n        delayIn: 0,\n        delayOut: 0,\n        fade: false,\n        fallback: '',\n        gravity: 'n',\n        html: false,\n        live: false,\n        offset: 0,\n        opacity: 0.8,\n        title: 'title',\n        trigger: 'hover'\n    };\n    \n    $.fn.tipsy.revalidate = function() {\n      $('.tipsy').each(function() {\n        var pointee = $.data(this, 'tipsy-pointee');\n        if (!pointee || !isElementInDOM(pointee)) {\n          $(this).remove();\n        }\n      });\n    };\n    \n    // Overwrite this method to provide options on a per-element basis.\n    // For example, you could store the gravity in a 'tipsy-gravity' attribute:\n    // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\n    // (remember - do not modify 'options' in place!)\n    $.fn.tipsy.elementOptions = function(ele, options) {\n        return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\n    };\n    \n    $.fn.tipsy.autoNS = function() {\n        return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';\n    };\n    \n    $.fn.tipsy.autoWE = function() {\n        return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';\n    };\n    \n    /**\n     * yields a closure of the supplied parameters, producing a function that takes\n     * no arguments and is suitable for use as an autogravity function like so:\n     *\n     * @param margin (int) - distance from the viewable region edge that an\n     *        element should be before setting its tooltip's gravity to be away\n     *        from that edge.\n     * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\n     *        if there are no viewable region edges effecting the tooltip's\n     *        gravity. It will try to vary from this minimally, for example,\n     *        if 'sw' is preferred and an element is near the right viewable \n     *        region edge, but not the top edge, it will set the gravity for\n     *        that element's tooltip to be 'se', preserving the southern\n     *        component.\n     */\n     $.fn.tipsy.autoBounds = function(margin, prefer) {\n\t\treturn function() {\n\t\t\tvar dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)},\n\t\t\t    boundTop = $(document).scrollTop() + margin,\n\t\t\t    boundLeft = $(document).scrollLeft() + margin,\n\t\t\t    $this = $(this);\n\n\t\t\tif ($this.offset().top < boundTop) dir.ns = 'n';\n\t\t\tif ($this.offset().left < boundLeft) dir.ew = 'w';\n\t\t\tif ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e';\n\t\t\tif ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's';\n\n\t\t\treturn dir.ns + (dir.ew ? dir.ew : '');\n\t\t}\n\t};\n    \n})(jQuery);\n", "$(document).on('turbolinks:load', function() {\n  (function () {\n    var tablist = document.querySelectorAll('[role=\"tablist\"]')[0];\n    var tabs;\n    // eslint-disable-next-line\n    var panels;\n\n    generateArrays();\n\n    function generateArrays () {\n      tabs = document.querySelectorAll('[role=\"tab\"]');\n      panels = document.querySelectorAll('[role=\"tabpanel\"]');\n    }\n\n    // For easy reference\n    var keys = {\n      end: 35,\n      home: 36,\n      left: 37,\n      up: 38,\n      right: 39,\n      down: 40,\n      enter: 13,\n      space: 32\n    };\n\n    // Add or substract depenign on key pressed\n    var direction = {\n      37: -1,\n      38: -1,\n      39: 1,\n      40: 1\n    };\n\n    // Bind listeners\n    for (var i = 0; i < tabs.length; ++i) {\n      addListeners(i);\n    }\n\n    function addListeners (index) {\n      tabs[index].addEventListener('click', clickEventListener);\n      tabs[index].addEventListener('keydown', keydownEventListener);\n      tabs[index].addEventListener('keyup', keyupEventListener);\n\n      // Build an array with all tabs (<button>s) in it\n      tabs[index].index = index;\n    }\n\n    // When a tab is clicked, activateTab is fired to activate it\n    function clickEventListener (event) {\n      var tab = event.target;\n      activateTab(tab, false);\n    }\n\n    // Handle keydown on tabs\n    function keydownEventListener (event) {\n      var key = event.keyCode;\n\n      switch (key) {\n        case keys.end:\n          event.preventDefault();\n          // Activate last tab\n          focusLastTab();\n          break;\n        case keys.home:\n          event.preventDefault();\n          // Activate first tab\n          focusFirstTab();\n          break;\n\n        // Up and down are in keydown\n        // because we need to prevent page scroll >:)\n        case keys.up:\n        case keys.down:\n          determineOrientation(event);\n          break;\n      }\n    }\n\n    // Handle keyup on tabs\n    function keyupEventListener (event) {\n      var key = event.keyCode;\n\n      switch (key) {\n        case keys.left:\n        case keys.right:\n          determineOrientation(event);\n          break;\n        case keys.enter:\n        case keys.space:\n          activateTab(event.target);\n          break;\n      }\n    }\n\n    // When a tablist\u2019s aria-orientation is set to vertical,\n    // only up and down arrow should function.\n    // In all other cases only left and right arrow function.\n    function determineOrientation (event) {\n      var key = event.keyCode;\n      var vertical = tablist.getAttribute('aria-orientation') == 'vertical';\n      var proceed = false;\n\n      if (vertical) {\n        if (key === keys.up || key === keys.down) {\n          event.preventDefault();\n          proceed = true;\n        }\n      }\n      else {\n        if (key === keys.left || key === keys.right) {\n          proceed = true;\n        }\n      }\n\n      if (proceed) {\n        switchTabOnArrowPress(event);\n      }\n    }\n\n    // Either focus the next, previous, first, or last tab\n    // depening on key pressed\n    function switchTabOnArrowPress (event) {\n      var pressed = event.keyCode;\n\n      if (direction[pressed]) {\n        var target = event.target;\n        if (target.index !== undefined) {\n          if (tabs[target.index + direction[pressed]]) {\n            tabs[target.index + direction[pressed]].focus();\n          }\n          else if (pressed === keys.left || pressed === keys.up) {\n            focusLastTab();\n          }\n          else if (pressed === keys.right || pressed == keys.down) {\n            focusFirstTab();\n          }\n        }\n      }\n    }\n\n    // Activates any given tab panel\n    function activateTab (tab, setFocus) {\n      setFocus = setFocus || true;\n      // Deactivate all other tabs\n\n      var currentTabpanel = $(tab).closest('[role=\"tabpanel\"]');\n\n      deactivateTabs(currentTabpanel);\n\n      // Remove tabindex attribute\n      tab.removeAttribute('tabindex');\n\n      // Set the tab as selected\n      tab.setAttribute('aria-selected', 'true');\n\n      // Get the value of aria-controls (which is an ID)\n      var controls = tab.getAttribute('aria-controls');\n\n      // Remove hidden attribute from tab panel to make it visible\n      var tabPanel = document.getElementById(controls);\n\n      if (tabPanel) {\n        tabPanel.removeAttribute('hidden');\n      }\n\n      // Set focus when required\n      if (setFocus) {\n        tab.focus();\n      }\n    }\n\n    // Deactivate all tabs and tab panels\n    function deactivateTabs (currentTabpanel) {\n      var tabsInCurrentTabpanel = $(currentTabpanel).find('[role=\"tab\"]');\n\n      for (var t = 0; t < tabsInCurrentTabpanel.length; t++) {\n        tabsInCurrentTabpanel[t].setAttribute('tabindex', '-1');\n        tabsInCurrentTabpanel[t].setAttribute('aria-selected', 'false');\n      }\n    }\n\n    // Make a guess\n    function focusFirstTab () {\n      tabs[0].focus();\n    }\n\n    // Make a guess\n    function focusLastTab () {\n      tabs[tabs.length - 1].focus();\n    }\n\n    // Determine whether there should be a delay\n    // when user navigates with the arrow keys\n    // eslint-disable-next-line\n    function determineDelay () {\n      var hasDelay = tablist.hasAttribute('data-delay');\n      var delay = 0;\n\n      if (hasDelay) {\n        var delayValue = tablist.getAttribute('data-delay');\n        if (delayValue) {\n          delay = delayValue;\n        }\n        else {\n          // If no value is specified, default to 300ms\n          delay = 300;\n        }\n      }\n\n      return delay;\n    }\n  })();\n});\n", "import 'velocity-animate'\nimport 'velocity-ui-pack'\n\n$(document).on('turbolinks:load', function() {\n  $.Velocity.RegisterEffect(\"transition.slideLeftLongOut\", { defaultDuration: 500, calls: [[ { opacity: [ 0, 1 ], translateX: -500, translateZ: 0 } ]],reset: { translateX: 0 } })\n  $.Velocity.RegisterEffect(\"transition.slideLeftLongIn\", { defaultDuration: 500, calls: [[ { opacity: [ 1, 0 ], translateX: [0,-500], translateZ: 0 } ]] })\n  $.Velocity.RegisterEffect(\"transition.slideRightLongOut\", { defaultDuration: 500, calls: [[ { opacity: [ 0, 1 ], translateX: 500, translateZ: 0 } ]],reset: { translateX: 0 } })\n  $.Velocity.RegisterEffect(\"transition.slideRightLongIn\", { defaultDuration: 500, calls: [[ { opacity: [ 1, 0 ], translateX: [0,500], translateZ: 0 } ]] })\n});\n", "import * as flight from 'flightjs'\n\nexport var shareContent = flight.component(function(){\n  this.attributes({\n    url: \"\",\n    modalOptions: 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=300,width=600'\n  });\n\n  this.after('initialize', function() {\n\n    var twitterElement = document.querySelector(\".twitter\");\n    var facebookElement = document.querySelector(\".facebook\");\n\n    if (this.$node.find('[data-share-url]').length > 0){\n      this.attr.url = this.$node.find('[data-share-url]').data('share-url');\n    }\n\n    if (this.$node.data('anchor') !== undefined){\n      this.attr.url += '#' + this.$node.data('anchor');\n    }\n\n    var twitterHandleContent = document.head.querySelector(\"[name='twitter:site']\")\n\n    if (twitterHandleContent === null && twitterElement) {\n      twitterElement.style.display = 'none'\n    } else if (twitterElement) {\n      twitterElement.style.display = 'inline-block'\n      facebookElement.style.display = 'inline-block'\n    }\n\n    this.attr.twitterHandle = twitterHandleContent === null ? '' : twitterHandleContent.content\n\n\n    if (this.attr.url === \"\") {\n      this.attr.url = window.location.href;\n    }\n\n    this.twitterLink = this.$node.find('[data-share-network=twitter]');\n    this.facebookLink = this.$node.find('[data-share-network=facebook]');\n    this.linkedinLink = this.$node.find('[data-share-network=linkedin]');\n    this.emailLink = this.$node.find('[data-share-network=email]');\n    this.codeLink = this.$node.find('[data-share-network=code]');\n\n    if (this.twitterLink)\n      this.twitterLink.on('click', this.clickTwitterHandle.bind(this));\n\n    if (this.facebookLink)\n      this.facebookLink.on('click', this.clickFacebookHandle.bind(this));\n\n    if (this.linkedinLink)\n      this.linkedinLink.on('click', this.clickLinkedinHandle.bind(this));\n\n    if (this.emailLink.length)\n      this.emailLink.on('click', this.clickEmailHandle.bind(this));\n  });\n\n  this.clickTwitterHandle = function(e) {\n    e.preventDefault();\n    try {\n      var twitter_intent_url = 'https://twitter.com/intent/tweet?text=' + this.shareText();\n      if (this.attr.twitterHashtags != undefined) {\n        twitter_intent_url += '&hashtags= ' + this.attr.twitterHashtags;\n      }\n      twitter_intent_url += '&url=' + encodeURIComponent(this.attr.url);\n      if (this.attr.twitterHandle != undefined) {\n        twitter_intent_url += '&via=' + this.attr.twitterHandle;\n      }\n\n      window.open(twitter_intent_url, '', this.attr.modalOptions);\n\n    } catch (missingShareTextNode) {\n      console.warn('Error: missing share Text Node');\n    }\n  };\n\n  this.clickFacebookHandle = function(e) {\n    e.preventDefault();\n    window.open('http://www.facebook.com/sharer/sharer.php?u='+ encodeURIComponent(this.attr.url), '', this.attr.modalOptions);\n  };\n\n  this.clickLinkedinHandle = function(e) {\n    e.preventDefault();\n\n    window.open('https://www.linkedin.com/shareArticle?mini=true&url='+encodeURIComponent(this.attr.url)+'&title=' + this.shareText(), '', this.attr.modalOptions);\n  };\n\n  this.clickEmailHandle = function(e) {\n    e.preventDefault();\n    try {\n      window.location.href = 'mailto:?subject=Recommended article from ICIJ&body=' + this.shareText() + ' ' + encodeURIComponent(this.attr.url);\n    } catch (missingShareTextNode) {\n      console.warn('Error: missing share Text Node');\n    }\n  };\n\n  this.shareText = function(){\n    var text;\n    var textNode = this.$node.find('[data-share-text]');\n\n    if (textNode.length && textNode.data('share-text') !== undefined) {\n      text = textNode.data('share-text');\n    } else {\n      if (!textNode.length)\n        textNode = $('[data-share-text]')\n      if (!textNode.length)\n        textNode = $('h1');\n      text = $.trim(textNode.text());\n      if (!text.length)\n        text = window.document.title;\n    }\n\n    if (text.length > 101) {\n      text = text.substring(0,101) + '\u2026';\n    }\n    return text;\n  };\n});\n\n$(document).on('turbolinks:load ajax:complete ajaxSuccess', function() {\n  shareContent.attachTo('[data-share]');\n});\n", "$(document).on(\"turbolinks:load\", function() {\n  const tabs = document.querySelectorAll(\"[role^=tabs]\");\n  const activeClass = \"is-active\";\n\n  const getSeed = str => {\n    const pattern = new RegExp(/^tabs-(.*)/);\n    const match = pattern.exec(str) || [];\n    return match.length > 1 ? match[1] : undefined;\n  };\n\n  const deactivate = elems => {\n    for (let i = 0; i < elems.length; i++) {\n      elems[i].classList.remove(activeClass);\n    }\n  };\n\n  const activate = elems => {\n    for (let i = 0; i < elems.length; i++) {\n      elems[i].classList.add(activeClass);\n    }\n  };\n\n  tabs.forEach(tab => {\n    const seed = getSeed(tab.getAttribute(\"role\"));\n\n    if (seed) {\n      const tabscontent = document.querySelector(`[role=tabscontent-${seed}]`);\n      const tabcontent = tabscontent.querySelectorAll(\"[role=tabcontent]\");\n      const tablinks = tab.querySelectorAll(\"[role=tablink]\");\n\n      for (let i = 0; i < tablinks.length; i++) {\n        if (tablinks[i].classList.contains(activeClass) || tabcontent[i].classList.contains(activeClass)) {\n          activate([tablinks[i], tabcontent[i]]);\n        }\n\n        tablinks[i].addEventListener(\"click\", function(event) {\n          const elem = event.currentTarget;\n\n          if (!elem.classList.contains(activeClass)) {\n            deactivate([...tablinks, ...tabcontent]);\n\n            const index = [...tablinks].indexOf(elem);\n            activate([elem, tabcontent[index]]);\n          }\n        });\n      }\n    }\n  });\n});\n", "import Turbolinks from 'turbolinks'\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const disableTurbolinks = document.querySelector(\"body[data-turbolinks='false']\")\n\n  // If we don't found at body level this tag, we enable Turbolinks by default\n  if (!disableTurbolinks) {\n    Turbolinks.start()\n  }\n})\n", "// iFrame communication\nexport function handleIFramePageLoaded() {\n  // If the current page has been loaded in an iframe\n  if (window.location !== window.parent.location) {\n    // Send a message to the iframe container with the URL (href + hash) and the title of the document\n    let message = {\n      type: 'gobiertoIframeUrl',\n      href: window.location.href,\n      hash: window.location.hash,\n      title: window.document.title\n    };\n    window.parent.postMessage(message, '*');\n  }\n}\n\n$(document).on(\"turbolinks:load\", () => handleIFramePageLoaded())\n", "import './modules/translations.js'\n", "I18n.translations || (I18n.translations = {});\nI18n.translations[\"ca\"] = I18n.extend((I18n.translations[\"ca\"] || {}), JSON.parse('{\"activemodel\":{\"attributes\":{\"gobierto_admin/admin_confirmation_form\":{\"email\":\"Email\"},\"gobierto_admin/admin_edit_password_form\":{\"password\":\"Contrasenya\",\"password_confirmation\":\"Confirmaci\u00F3 de la contrasenya\"},\"gobierto_admin/admin_form\":{\"email\":\"Email\",\"name\":\"Nom\",\"password\":\"Contrasenya\",\"password_confirmation\":\"Confirmaci\u00F3 de la contrasenya\",\"site_ids\":\"Sites\",\"site_modules\":\"M\u00F2duls\"},\"gobierto_admin/admin_group_form\":{\"name\":\"Nom del grup\"},\"gobierto_admin/admin_invitation_form\":{\"emails\":\"Emails\",\"site_ids\":\"Sites\"},\"gobierto_admin/admin_new_password_form\":{\"email\":\"Email\"},\"gobierto_admin/file_attachment_form\":{\"description\":\"Descripci\u00F3\",\"file_digest\":\"Aquest arxiu\",\"name\":\"Nom\"},\"gobierto_admin/gobierto_budgets/options_form\":{\"budgets_guide_page\":\"P\u00E0gina de la guia de pressupostos (si no selecciones niguna se mostrar\u00E0 el text per defecte)\",\"comparison_compare_municipalities\":\"Mostrar municipis espec\u00EDfics\",\"comparison_context_table_enabled\":\"Mostrar taula de contexte\",\"comparison_show_widget\":\"Mostrar widget comparaci\u00F3\",\"comparison_tool_enabled\":\"Comparaci\u00F3\",\"feedback_emails\":\"Correu-e per a rebre participacions\",\"receipt_configuration\":\"Configuraci\u00F3 del rebut\"},\"gobierto_admin/gobierto_calendars/calendar_configuration_form\":{\"ibm_notes_pwd\":\"La contrasenya\",\"ibm_notes_url\":\"La URL\",\"ibm_notes_usr\":\"El nom d\\'usuari\",\"microsoft_exchange_pwd\":\"La contrasenya\",\"microsoft_exchange_url\":\"La URL\",\"microsoft_exchange_usr\":\"El nom d\\'usuari\"},\"gobierto_admin/gobierto_calendars/event_form\":{\"attachment_file\":\"Fitxer adjunt\",\"description\":\"Descripci\u00F3\",\"ends_at\":\"Data de finalitzaci\u00F3\",\"starts_at\":\"Data de comen\u00E7ament\",\"title\":\"T\u00EDtol\",\"title_translations\":\"T\u00EDtol\"},\"gobierto_admin/gobierto_cms/page_form\":{\"body\":\"Contingut\",\"published_on\":\"Data de publicaci\u00F3\",\"slug\":\"URL\",\"title\":\"T\u00EDtol\"},\"gobierto_admin/gobierto_cms/section_form\":{\"slug\":\"URL\",\"title\":\"T\u00EDtol\"},\"gobierto_admin/gobierto_common/collection_form\":{\"container_global_id\":\"Contenidor\",\"container_id\":\"Contenidor\",\"item_type\":\"Tipus\",\"slug\":\"URL\",\"title\":\"T\u00EDtol\"},\"gobierto_admin/gobierto_common/custom_field_form\":{\"date\":\"Data\",\"field_type\":\"Tipus de camp\",\"image\":\"Imatge\",\"indicators\":\"Indicadors\",\"localized_paragraph\":\"Text llarg\",\"localized_string\":\"Text (l\u00EDnia)\",\"multiple_options\":\"Selecci\u00F3 m\u00FAltiple\",\"name\":\"Nom\",\"numeric\":\"Nombre\",\"options\":\"Opcions\",\"paragraph\":\"Text llarg sense traduccions\",\"single_option\":\"Selecci\u00F3 \u00FAnica\",\"string\":\"Text sense traduccions (l\u00EDnia)\",\"uid\":\"Identificador\",\"vocabulary_options\":\"Vocabulari\"},\"gobierto_admin/gobierto_common/term_form\":{\"description\":\"Descripci\u00F3\",\"external_id\":\"ID extern\",\"name\":\"Nom\",\"slug\":\"Slug\",\"term_id\":\"T\u00E9rme Pare\"},\"gobierto_admin/gobierto_common/vocabulary_form\":{\"name\":\"Nom\"},\"gobierto_admin/gobierto_data/dataset_form\":{\"name\":\"Nom\",\"slug\":\"Slug\",\"table_name\":\"Nom de la taula\"},\"gobierto_admin/gobierto_data/settings_form\":{\"api_settings_max_dataset_size_for_queries\":\"Mida m\u00E0xima de datasets sense limitar la vista pr\u00E8via (MB)\",\"db_config\":\"Configuraci\u00F3 de la connexi\u00F3 a la base de dades\",\"frontend_enabled\":\"Front-end visible\"},\"gobierto_admin/gobierto_investments/project_form\":{\"external_id\":\"ID extern\",\"title\":\"T\u00EDtol\"},\"gobierto_admin/gobierto_observatory/settings_form\":{\"observatory_config\":\"Configuraci\u00F3 de l\\'observatori\"},\"gobierto_admin/gobierto_people/person_form\":{\"avatar_file\":\"Avatar\",\"avatar_url\":\"Avatar\",\"bio\":\"Biografia\",\"bio_file\":\"Fitxer adjunt\",\"bio_url\":\"Fichero adjunto\",\"category\":\"Categoria\",\"charge\":\"C\u00E0rrec\",\"email\":\"Correu-e\",\"name\":\"Nom\",\"party\":\"Posici\u00F3\",\"political_group_id\":\"Grup pol\u00EDtic\"},\"gobierto_admin/gobierto_people/person_post_form\":{\"body\":\"Contingut\",\"tags\":\"Tags\",\"title\":\"T\u00EDtol\"},\"gobierto_admin/gobierto_people/person_statement_form\":{\"attachment_file\":\"Fitxer adjunt\",\"published_on\":\"Data de publicaci\u00F3\",\"title\":\"T\u00EDtol\",\"title_translations\":\"T\u00EDtol\"},\"gobierto_admin/gobierto_people/political_group_form\":{\"name\":\"Nom de l\\'grupaci\u00F3\"},\"gobierto_admin/gobierto_plans/node_form\":{\"category_id\":\"Categoria\",\"ends_at\":\"Data de fi\",\"name\":\"Projecte\",\"progress\":\"Progr\u00E9s\",\"starts_at\":\"Data d\\'inici\",\"status_id\":\"Estat\"},\"gobierto_admin/gobierto_plans/plan_form\":{\"configuration_data\":\"Configuraci\u00F3\",\"css\":\"CSS\",\"csv_file\":\"Fitxer CSV\",\"footer\":\"Peu de p\u00E0gina\",\"introduction\":\"Introducci\u00F3\",\"plan_type_id\":\"Tipus\",\"slug\":\"url\",\"statuses_vocabulary_id\":\"Vocabulari de estats\",\"title\":\"T\u00EDtol\",\"vocabulary_id\":\"Vocabulari de categories\",\"year\":\"Any\"},\"gobierto_admin/gobierto_plans/plan_type_form\":{\"name\":\"Nom\",\"slug\":\"url\"},\"gobierto_admin/gobierto_visualizations/settings_form\":{\"visualizations_config\":\"Configuraci\u00F3 de les visualitzacions\"},\"gobierto_admin/issue_form\":{\"name\":\"Nom\",\"slug\":\"URL\"},\"gobierto_admin/scope_form\":{\"name\":\"Nom\"},\"gobierto_admin/site_form\":{\"admin_custom_code\":\"Codi personalitzat d\\'admin\",\"available_locales\":\"Idiomes disponibles\",\"default_locale\":\"Idioma per defecte\",\"domain\":\"Domini\",\"foot_markup\":\"HTML de Peu\",\"google_analytics_id\":\"Codi de Google Analytics\",\"head_markup\":\"HTML de Cap\u00E7alera\",\"home_page\":\"M\u00F2dul d\\'inici\",\"home_page_item_id\":\"P\u00E0gina d\\'inici\",\"links_markup\":\"HTML de Enlla\u00E7os\",\"logo_file\":\"Logotip\",\"name\":\"Nom de l\\'entitat\",\"organization_id\":\"Identificador de l\\'organitzaci\u00F3 (codi INE)\",\"organization_name\":\"Organitzaci\u00F3\",\"populate_data_api_token\":\"API token Populate Data\",\"privacy_page_id\":\"P\u00E0gina privacitat\",\"raw_configuration_variables\":\"Altres variables configuraci\u00F3\",\"registration_disabled\":\"Deshabilitar el registre (nom\u00E9s oculta els enlla\u00E7os al registre/login)\",\"reply_to_email\":\"Direcci\u00F3 de resposta en correus-e\",\"title\":\"Nom del site\"},\"gobierto_admin/user_form\":{\"email\":\"Email\",\"name\":\"Nom\"},\"gobierto_admin/user_password_form\":{\"password\":\"Contrasenya\",\"password_confirmation\":\"Confirmaci\u00F3n de contrasenya\"},\"gobierto_dashboards/dashboard_form\":{\"title\":\"T\u00EDtol\"},\"gobierto_people/person_message\":{\"body\":\"Missatge\",\"email\":\"El teu e-mail\",\"name\":\"El teu nom\"},\"user/census_verification_form\":{\"date_of_birth\":\"Data de naixement\",\"document_number\":\"Nombre de document\",\"site\":\"Lloc\"},\"user/confirmation_form\":{\"date_of_birth\":\"Data de naixement\",\"document_number\":\"Nombre de document\",\"email\":\"El teu Correu-e\",\"gender\":\"Genre\",\"name\":\"El teu Nom\",\"password\":\"La teva contrasenya\",\"password_confirmation\":\"La teva contrasenya, de nou\"},\"user/confirmation_request_form\":{\"email\":\"El teu Correu-e\"},\"user/edit_password_form\":{\"password\":\"La teva contrasenya\",\"password_confirmation\":\"La teva contrasenya, de nou\"},\"user/new_password_form\":{\"email\":\"El teu Correu-e\"},\"user/registration_form\":{\"email\":\"El teu Correu-e\"},\"user/session_form\":{\"email\":\"El teu Correu-e\",\"password\":\"La teva Contrasenya\"},\"user/settings_form\":{\"date_of_birth\":\"Data de naixement\",\"email\":\"El teu Correu-e\",\"gender\":\"Genre\",\"name\":\"El teu Nom\",\"password\":\"La teva contrasenya\",\"password_confirmation\":\"La teva contrasenya, de nou\"},\"user/subscription_form\":{\"subscribable\":\"Recurs\",\"user\":\"Usuari\",\"user_email\":\"Correu-e\"}},\"errors\":{\"models\":{\"gobierto_admin/gobierto_common/vocabulary_terms_import_form\":{\"attributes\":{\"base\":{\"invalid_row\":\"Hi ha una fila amb dades inv\u00E0lid: %{row_data}\"}}},\"gobierto_admin/gobierto_data/dataset_form\":{\"attributes\":{\"table_name\":{\"invalid_table\":\"No es pot accedir a la taula. Missatge d\\'error: \\\\\"%{error_message}\\\\\"\"}}},\"gobierto_admin/gobierto_data/settings_form\":{\"attributes\":{\"db_config\":{\"invalid_connection\":\"No es pot connectar amb les dades de configuraci\u00F3. Missatge d\\'error: \\\\\"%{error_message}\\\\\"\",\"invalid_format\":\"La configuraci\u00F3 no t\u00E9 un format JSON v\u00E0lid\"}}},\"gobierto_admin/gobierto_observatory/settings_form\":{\"attributes\":{\"observatory_config\":{\"invalid_format\":\"La configuraci\u00F3 no t\u00E9 un format JSON v\u00E0lid\",\"invalid_values\":\"La configuraci\u00F3 no t\u00E9 valors v\u00E0lids\"}}},\"gobierto_admin/gobierto_plans/plan_data_form\":{\"attributes\":{\"base\":{\"category_not_found\":\"Alguna de les categories no s\\'ha pogut trobar. Contingut de la fila: %{row_data}\",\"external_id_taken\":\"El camp external_id ja est\u00E0 en \u00FAs, b\u00E9 perqu\u00E8 una altra fila t\u00E9 el mateix external_id o perqu\u00E8 estava buida i autom\u00E0ticament es va assignar el mateix valor. Contingut de la fila: %{row_data}\",\"file_not_found\":\"Fitxer no trobat\",\"invalid_columns\":\"No estan totes les columnes necess\u00E0ries\",\"invalid_format\":\"Format de fitxer inv\u00E0lid\",\"invalid_row\":\"Hi ha una fila amb dades inv\u00E0lid: %{row_data}\",\"status_missing\":\"L\\'estat de la fila no s\\'ha trobat en el vocabulari d\\'estats corresponent o hi ha un estat a la fila per\u00F2 no hi ha un vocabulari d\\'estats configurat en el pla. Contingut de la fila: %{row_data}\",\"term_not_found\":\"No ha estat possible trobar el terme \\'%{term}\\' en el vocabulari \\'%{vocabulary}\\' usat per la columna \\'Node.%{uid}\\'\",\"used_resource\":\"El vocabulari empra termes que s\\'usen en altres parts de l\\'aplicaci\u00F3\"}}},\"gobierto_admin/gobierto_plans/plan_table_custom_fields_form\":{\"attributes\":{\"base\":{\"file_not_found\":\"Fitxer no trobat\",\"invalid_columns\":\"No estan totes les columnes necess\u00E0ries\",\"invalid_format\":\"Format de fitxer inv\u00E0lid\"}}},\"gobierto_admin/gobierto_plans/projects_form\":{\"attributes\":{\"base\":{\"category_missing\":\"Categoria no trobada en dades del projecte. Si us plau, proporcioneu un category_id o category_external_id v\u00E0lid. Dades del projecte: %{json_data}\",\"failed_import\":\"El projecte amb les dades seg\u00FCents no ha pogut ser importat: %{json_data}\",\"status_missing\":\"Estat no trobat en dades del projecte. Si us plau, proporciona un status_id o status_external_id v\u00E0lid. Dades del projecte: %{json_data}\"}}},\"gobierto_admin/gobierto_visualizations/settings_form\":{\"attributes\":{\"visualizations_config\":{\"invalid_format\":\"La configuraci\u00F3 no t\u00E9 un format JSON v\u00E0lid\",\"invalid_values\":\"La configuraci\u00F3 no t\u00E9 valors v\u00E0lids\"}}},\"gobierto_data/dataset_form\":{\"attributes\":{\"data_file\":{\"no_file_included\":\"L\\'arxiu no s\\'ha pogut carregar. Si us plau, revisa la petici\u00F3 i assegura\\'t que el contingut de l\\'arxiu s\\'hagi incl\u00F2s en ella\"}}}}},\"models\":{\"gobierto_admin/admin_confirmation_form\":\"Confirmaci\u00F3\",\"gobierto_admin/admin_edit_password_form\":\"Canvi de contrasenya\",\"gobierto_admin/admin_form\":\"Administrador\",\"gobierto_admin/admin_group_form\":\"Grup\",\"gobierto_admin/admin_invitation_form\":\"Invitaci\u00F3\",\"gobierto_admin/admin_new_password_form\":\"Recuperaci\u00F3 de contrasenya\",\"gobierto_admin/file_attachment_form\":\"Canvi en el fitxer\",\"gobierto_admin/gobierto_budgets/options_form\":\"Opcions\",\"gobierto_admin/gobierto_calendars/event_form\":\"Esdeveniment\",\"gobierto_admin/gobierto_cms/page_form\":\"P\u00E0gina\",\"gobierto_admin/gobierto_cms/section_form\":\"Secci\u00F3\",\"gobierto_admin/gobierto_common/collection_form\":\"Col\u00B7lecci\u00F3\",\"gobierto_admin/gobierto_common/content_block_form\":\"Bloc de contingut\",\"gobierto_admin/gobierto_common/term_form\":\"Terme\",\"gobierto_admin/gobierto_common/vocabulary_form\":\"Vocabulari\",\"gobierto_admin/gobierto_people/person_form\":\"Perfil\",\"gobierto_admin/gobierto_people/person_post_form\":\"Post\",\"gobierto_admin/gobierto_people/person_statement_form\":\"Declaraci\u00F3\",\"gobierto_admin/gobierto_people/political_group_form\":\"Agrupaci\u00F3 pol\u00EDtica\",\"gobierto_admin/issue_form\":\"Tema\",\"gobierto_admin/scope_form\":\"\u00C0mbit\",\"gobierto_admin/site_form\":\"Lloc\",\"gobierto_admin/user_form\":\"Usuari\",\"gobierto_admin/user_password_form\":\"Canvi de contrasenya\",\"gobierto_admin/user_welcome_message_form\":\"Email de benvinguda\",\"gobierto_people/person_message\":\"Missatge\",\"user/census_verification_form\":\"Verificaci\u00F3 de la identitat\",\"user/confirmation_form\":\"Confirmaci\u00F3\",\"user/confirmation_request_form\":\"Sol\u00B7licitud de confirmaci\u00F3\",\"user/edit_password_form\":\"Canviar contrasenya\",\"user/new_password_form\":\"Recuperar contrasenya\",\"user/registration_form\":\"Registre\",\"user/session_form\":\"Sessi\u00F3\",\"user/settings_form\":\"Ajusts\",\"user/subscription_form\":\"Subscripci\u00F3\"}},\"activerecord\":{\"attributes\":{\"gobierto_admin/api_token\":{\"domain\":\"Domini\",\"name\":\"Nom\"},\"gobierto_admin/permission/site_option\":{\"resource_types\":{\"calendars\":\"Agendes\",\"custom_fields\":\"Camps personalitzats\",\"customize\":\"Personalitzar site\",\"documents\":\"Documents\",\"templates\":\"Plantilles\",\"vocabularies\":\"Vocabularis\"}},\"gobierto_attachments/attachment\":{\"current_version\":\"Versi\u00F3 actual\",\"description\":\"Descripci\u00F3\",\"file_digest\":\"Fitxer\",\"file_name\":\"Nom del fitxer\",\"file_size\":\"Mida del fitxer\",\"name\":\"Nom\",\"url\":\"URL\"},\"gobierto_calendars/event_attendee\":{\"charge\":\"C\u00E0rrec\",\"name\":\"Nom\",\"person\":\"Persona\"},\"gobierto_calendars/event_location\":{\"address\":\"Adre\u00E7a\",\"name\":\"Nom\"},\"gobierto_calendars/filtering_rule\":{\"remove_filtering_text\":\"Eliminar text filtrat\"},\"gobierto_cms/page\":{\"body\":\"Contingut\",\"slug\":\"URL\",\"title\":\"T\u00EDtol\"},\"gobierto_common/api_token_form\":{\"domain\":\"Domini\",\"name\":\"Nom\"},\"gobierto_common/content_block_field\":{\"field_type\":\"Tipus de camp\",\"field_types\":{\"currency\":\"Moneda\",\"date\":\"Data\",\"text\":\"Tipus de camp\",\"url\":\"URL\"}},\"gobierto_people/trip\":{\"accomodation_expenses\":\"Hotels i allotjament\",\"food_expenses\":\"Dietes i manutenci\u00F3\",\"other_expenses\":\"Altres despeses\",\"total_expenses\":\"Despeses totals\",\"transport_expenses\":\"Transport\"},\"user/api_token\":{\"domain\":\"Domini\",\"name\":\"Nom\"}},\"enums\":{\"gobierto_calendars/filtering_rule\":{\"action\":{\"ignore\":\"Ignorar\",\"import\":\"Importar\",\"import_as_draft\":\"Importar como esborrany\"},\"condition\":{\"contains\":\"Cont\u00E9\",\"ends_with\":\"Termina per\",\"not_contains\":\"No cont\u00E9\",\"not_starts_with\":\"No comen\u00E7a per\",\"starts_with\":\"Comen\u00E7a per\"},\"field\":{\"description\":\"Cos\",\"title\":\"T\u00EDtol\"}}},\"errors\":{\"messages\":{\"record_invalid\":\"La validaci\u00F3 ha fallat: %{errors}\"},\"models\":{\"gobierto_admin/api_token\":{\"attributes\":{\"domain\":{\"not_valid_format\":\"Format inv\u00E0lid\"}}},\"gobierto_common/custom_field_record\":{\"attributes\":{\"item\":{\"wrong_item_class\":\"no est\u00E0 associat a un item de la classe adequada\"}}},\"gobierto_common/term\":{\"attributes\":{\"base\":{\"has_dependent_resources_html\":\"Est\u00E0 sent usat pels recursos:\\\\u003c/br\\\\u003e %{dependencies_list}\"}}},\"gobierto_data/connection\":{\"missing_configuration\":\"La base de dades no est\u00E0 configurada\"},\"user/api_token\":{\"attributes\":{\"domain\":{\"not_valid_format\":\"Format inv\u00E0lid\"}}}}},\"messages\":{\"gobierto_attachments/attachment\":{\"file_too_big\":\"El fitxer excedeix la mida m\u00E0xima\"}},\"models\":{\"gobierto_attachments/attachment\":\"Adjunt\",\"gobierto_calendars/event\":\"Esdeveniment\",\"gobierto_calendars/event_attendee\":\"Assistent\",\"gobierto_calendars/event_location\":\"Localitzaci\u00F3\",\"gobierto_cms/news\":\"Noticia\",\"gobierto_cms/news_plural\":\"Noticies\",\"gobierto_cms/page\":\"P\u00E0gina\",\"gobierto_cms/pages_collection\":\"Col\u00B7lecci\u00F3 de P\u00E0gines\",\"gobierto_common/content_block_field\":\"Camp\",\"gobierto_data/dataset\":{\"one\":\"Conjunt de dades\",\"other\":\"Conjunts de dades\"},\"gobierto_investments/project\":{\"one\":\"Projecte\",\"other\":\"Projectes\"},\"gobierto_people/person\":\"C\u00E0rrec\",\"gobierto_people/person_post\":\"Post\",\"gobierto_people/person_statement\":\"Declaraci\u00F3\",\"gobierto_plans/node\":{\"one\":\"Projecte\",\"other\":\"Projectes\"},\"gobierto_plans/plan\":{\"one\":\"Pla\",\"other\":\"Plans\"},\"user\":\"Usuari\"}},\"admin_gobierto_calendars\":{\"events\":{\"admin_gobierto_calendars_calendars_synchronized\":\"Calendaris sincronitzats\"}},\"admin_groups\":{\"events\":{\"admin_groups_admin_group_created\":\"Grup d\\'admin creat creat\",\"admin_groups_admin_group_updated\":\"Grup d\\'admin actualitzat\"}},\"admins\":{\"events\":{\"admins_admin_authorization_level_updated\":\"Nivel autoritzaci\u00F3 admin actualitzat\",\"admins_admin_created\":\"Admin creat\",\"admins_admin_group_member_created\":\"Admin afegit a grup de permisos\",\"admins_admin_group_member_deleted\":\"Admin eliminat de grup de permisos\",\"admins_admin_updated\":\"Admin actualitzat\",\"admins_invitation_accepted\":\"Invitaci\u00F3 admin aceptada\",\"admins_invitation_created\":\"Admin invitat\"}},\"based_on\":\"Web basat en\",\"census\":{\"events\":{\"census_census_imported\":\"Cens importat\"}},\"concerns\":{\"gobierto_common\":{\"api_tokens_concern\":{\"create\":{\"success\":\"El Token de l\\'API s\\'ha creat correctament\"},\"destroy\":{\"failed\":\"El Token de l\\'API no ha pogut ser eliminat\",\"success\":\"El Token de l\\'API s\\'ha eliminat correctament\"},\"update\":{\"success\":\"El Token de l\\'API s\\'ha actualizat correctament\"}}}},\"controllers\":{\"gobierto_budgets\":{\"api\":{\"data\":{\"expense\":\"Despesa\",\"income\":\"Ingr\u00E9s\"}},\"budgets_execution\":{\"index\":{\"alert\":\"No hi ha dades disponibles el %{year} aix\u00ED que et mostrem el primer any amb dades\"}}}},\"cookies_eu\":{\"cookies_text\":\"Les cookies ens ajuden a oferir els nostres serveis. En utilitzar els nostres serveis, acceptes l\\'\u00FAs de cookies.\",\"learn_more\":\"M\u00E9s informaci\u00F3\",\"ok\":\"OK\"},\"countries\":{\"AC\":\"illa de l\u2019Ascensi\u00F3\",\"AD\":\"Andorra\",\"AE\":\"Emirats \u00C0rabs Units\",\"AF\":\"Afganistan\",\"AG\":\"Antigua i Barbuda\",\"AI\":\"Anguilla\",\"AL\":\"Alb\u00E0nia\",\"AM\":\"Arm\u00E8nia\",\"AN\":\"Antilles Neerlandeses\",\"AO\":\"Angola\",\"AQ\":\"Ant\u00E0rtida\",\"AR\":\"Argentina\",\"AS\":\"Samoa Nord-americana\",\"AT\":\"\u00C0ustria\",\"AU\":\"Austr\u00E0lia\",\"AW\":\"Aruba\",\"AX\":\"illes \u00C5land\",\"AZ\":\"Azerbaidjan\",\"BA\":\"B\u00F2snia i Hercegovina\",\"BB\":\"Barbados\",\"BD\":\"Bangla Desh\",\"BE\":\"B\u00E8lgica\",\"BF\":\"Burkina Faso\",\"BG\":\"Bulg\u00E0ria\",\"BH\":\"Bahrain\",\"BI\":\"Burundi\",\"BJ\":\"Ben\u00EDn\",\"BL\":\"Saint Barth\u00E9lemy\",\"BM\":\"Bermudes\",\"BN\":\"Brunei\",\"BO\":\"Bol\u00EDvia\",\"BQ\":\"Carib Neerland\u00E8s\",\"BR\":\"Brasil\",\"BS\":\"Bahames\",\"BT\":\"Bhutan\",\"BV\":\"Bouvet\",\"BW\":\"Botswana\",\"BY\":\"Bielor\u00FAssia\",\"BZ\":\"Belize\",\"CA\":\"Canad\u00E0\",\"CC\":\"illes Cocos\",\"CD\":\"Congo - Kinshasa\",\"CF\":\"Rep\u00FAblica Centreafricana\",\"CG\":\"Congo - Brazzaville\",\"CH\":\"Su\u00EFssa\",\"CI\":\"Costa d\u2019Ivori\",\"CK\":\"illes Cook\",\"CL\":\"Xile\",\"CM\":\"Camerun\",\"CN\":\"Xina\",\"CO\":\"Col\u00F2mbia\",\"CP\":\"illa Clipperton\",\"CR\":\"Costa Rica\",\"CU\":\"Cuba\",\"CV\":\"Cap Verd\",\"CW\":\"Cura\u00E7ao\",\"CX\":\"illa Christmas\",\"CY\":\"Xipre\",\"CZ\":\"Rep\u00FAblica Txeca\",\"DE\":\"Alemanya\",\"DG\":\"Diego Garcia\",\"DJ\":\"Djibouti\",\"DK\":\"Dinamarca\",\"DM\":\"Dominica\",\"DO\":\"Rep\u00FAblica Dominicana\",\"DZ\":\"Alg\u00E8ria\",\"EA\":\"Ceuta i Melilla\",\"EC\":\"Equador\",\"EE\":\"Est\u00F2nia\",\"EG\":\"Egipte\",\"EH\":\"S\u00E0hara Occidental\",\"ER\":\"Eritrea\",\"ES\":\"Espanya\",\"ET\":\"Eti\u00F2pia\",\"EU\":\"Uni\u00F3 Europea\",\"FI\":\"Finl\u00E0ndia\",\"FJ\":\"Fiji\",\"FK\":\"Illes Malvines\",\"FM\":\"Micron\u00E8sia\",\"FO\":\"illes F\u00E8roe\",\"FR\":\"Fran\u00E7a\",\"GA\":\"Gabon\",\"GB\":\"Regne Unit\",\"GD\":\"Grenada\",\"GE\":\"Ge\u00F2rgia\",\"GF\":\"Guaiana Francesa\",\"GG\":\"Guernsey\",\"GH\":\"Ghana\",\"GI\":\"Gibraltar\",\"GL\":\"Grenl\u00E0ndia\",\"GM\":\"G\u00E0mbia\",\"GN\":\"Guinea\",\"GP\":\"Guadeloupe\",\"GQ\":\"Guinea Equatorial\",\"GR\":\"Gr\u00E8cia\",\"GS\":\"illes Ge\u00F2rgia del Sud i Sandwich del Sud\",\"GT\":\"Guatemala\",\"GU\":\"Guam\",\"GW\":\"Guinea Bissau\",\"GY\":\"Guyana\",\"HK\":\"Hong Kong (RAE Xina)\",\"HM\":\"Illa Heard i Illes McDonald\",\"HN\":\"Hondures\",\"HR\":\"Cro\u00E0cia\",\"HT\":\"Hait\u00ED\",\"HU\":\"Hongria\",\"IC\":\"illes Can\u00E0ries\",\"ID\":\"Indon\u00E8sia\",\"IE\":\"Irlanda\",\"IL\":\"Israel\",\"IM\":\"illa de Man\",\"IN\":\"\u00CDndia\",\"IO\":\"Territori Brit\u00E0nic de l\u2019Oce\u00E0 \u00CDndic\",\"IQ\":\"Iraq\",\"IR\":\"Iran\",\"IS\":\"Isl\u00E0ndia\",\"IT\":\"It\u00E0lia\",\"JE\":\"Jersey\",\"JM\":\"Jamaica\",\"JO\":\"Jord\u00E0nia\",\"JP\":\"Jap\u00F3\",\"KE\":\"Kenya\",\"KG\":\"Kirguizistan\",\"KH\":\"Cambodja\",\"KI\":\"Kiribati\",\"KM\":\"Comores\",\"KN\":\"Saint Christopher i Nevis\",\"KP\":\"Corea del Nord\",\"KR\":\"Corea del Sud\",\"KW\":\"Kuwait\",\"KY\":\"Illes Caiman\",\"KZ\":\"Kazakhstan\",\"LA\":\"Laos\",\"LB\":\"L\u00EDban\",\"LC\":\"Saint Lucia\",\"LI\":\"Liechtenstein\",\"LK\":\"Sri Lanka\",\"LR\":\"Lib\u00E8ria\",\"LS\":\"Lesotho\",\"LT\":\"Litu\u00E0nia\",\"LU\":\"Luxemburg\",\"LV\":\"Let\u00F2nia\",\"LY\":\"L\u00EDbia\",\"MA\":\"Marroc\",\"MC\":\"M\u00F2naco\",\"MD\":\"Mold\u00E0via\",\"ME\":\"Montenegro\",\"MF\":\"Saint Martin\",\"MG\":\"Madagascar\",\"MH\":\"illes Marshall\",\"MK\":\"Maced\u00F2nia\",\"ML\":\"Mali\",\"MM\":\"Myanmar (Birm\u00E0nia)\",\"MN\":\"Mong\u00F2lia\",\"MO\":\"Macau (RAE Xina)\",\"MP\":\"illes Mariannes del Nord\",\"MQ\":\"Martinica\",\"MR\":\"Maurit\u00E0nia\",\"MS\":\"Montserrat\",\"MT\":\"Malta\",\"MU\":\"Maurici\",\"MV\":\"Maldives\",\"MW\":\"Malawi\",\"MX\":\"M\u00E8xic\",\"MY\":\"Mal\u00E0isia\",\"MZ\":\"Mo\u00E7ambic\",\"NA\":\"Nam\u00EDbia\",\"NC\":\"Nova Caled\u00F2nia\",\"NE\":\"N\u00EDger\",\"NF\":\"Norfolk\",\"NG\":\"Nig\u00E8ria\",\"NI\":\"Nicaragua\",\"NL\":\"Pa\u00EFsos Baixos\",\"NO\":\"Noruega\",\"NP\":\"Nepal\",\"NR\":\"Nauru\",\"NU\":\"Niue\",\"NZ\":\"Nova Zelanda\",\"OM\":\"Oman\",\"PA\":\"Panam\u00E0\",\"PE\":\"Per\u00FA\",\"PF\":\"Polin\u00E8sia Francesa\",\"PG\":\"Papua Nova Guinea\",\"PH\":\"Filipines\",\"PK\":\"Pakistan\",\"PL\":\"Pol\u00F2nia\",\"PM\":\"Saint-Pierre-et-Miquelon\",\"PN\":\"illes Pitcairn\",\"PR\":\"Puerto Rico\",\"PS\":\"Palestina\",\"PT\":\"Portugal\",\"PW\":\"Palau\",\"PY\":\"Paraguai\",\"QA\":\"Qatar\",\"QO\":\"Territoris allunyats d\u2019Oceania\",\"RE\":\"Illa de la Reuni\u00F3\",\"RO\":\"Romania\",\"RS\":\"S\u00E8rbia\",\"RU\":\"R\u00FAssia\",\"RW\":\"Ruanda\",\"SA\":\"Ar\u00E0bia Saudita\",\"SB\":\"illes Salom\u00F3\",\"SC\":\"Seychelles\",\"SD\":\"Sudan\",\"SE\":\"Su\u00E8cia\",\"SG\":\"Singapur\",\"SH\":\"Saint Helena\",\"SI\":\"Eslov\u00E8nia\",\"SJ\":\"Svalbard i Jan Mayen\",\"SK\":\"Eslov\u00E0quia\",\"SL\":\"Sierra Leone\",\"SM\":\"San Marino\",\"SN\":\"Senegal\",\"SO\":\"Som\u00E0lia\",\"SR\":\"Surinam\",\"SS\":\"Sudan del Sud\",\"ST\":\"S\u00E3o Tom\u00E9 i Pr\u00EDncipe\",\"SV\":\"El Salvador\",\"SX\":\"Sint Maarten\",\"SY\":\"S\u00EDria\",\"SZ\":\"Swazil\u00E0ndia\",\"TA\":\"Trist\u00E3o da Cunha\",\"TC\":\"Illes Turks i Caicos\",\"TD\":\"Txad\",\"TF\":\"Territoris Francesos del Sud\",\"TG\":\"Togo\",\"TH\":\"Tail\u00E0ndia\",\"TJ\":\"Tadjikistan\",\"TK\":\"Tokelau\",\"TL\":\"Timor Oriental\",\"TM\":\"Turkmenistan\",\"TN\":\"Tun\u00EDsia\",\"TO\":\"Tonga\",\"TR\":\"Turquia\",\"TT\":\"Trinitat i Tobago\",\"TV\":\"Tuvalu\",\"TW\":\"Taiwan\",\"TZ\":\"Tanz\u00E0nia\",\"UA\":\"Ucra\u00EFna\",\"UG\":\"Uganda\",\"UM\":\"illes Perif\u00E8riques Menors dels EUA\",\"US\":\"Estats Units\",\"UY\":\"Uruguai\",\"UZ\":\"Uzbekistan\",\"VA\":\"Ciutat del Vatic\u00E0\",\"VC\":\"Saint Vincent i les Grenadines\",\"VE\":\"Vene\u00E7uela\",\"VG\":\"Illes Verges Brit\u00E0niques\",\"VI\":\"Illes Verges Nord-americanes\",\"VN\":\"Vietnam\",\"VU\":\"Vanuatu\",\"WF\":\"Wallis i Futuna\",\"WS\":\"Samoa\",\"XK\":\"Kosovo\",\"YE\":\"Iemen\",\"YT\":\"Mayotte\",\"ZA\":\"Rep\u00FAblica de Sud-\u00E0frica\",\"ZM\":\"Z\u00E0mbia\",\"ZW\":\"Zimb\u00E0bue\"},\"country\":\"Espanya\",\"date\":{\"abbr_day_names\":[\"dg\",\"dl\",\"dm\",\"dc\",\"dj\",\"dv\",\"ds\"],\"abbr_month_names\":[null,\"gen\",\"feb\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"oct\",\"nov\",\"des\"],\"day_names\":[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"],\"formats\":{\"day_month\":\"%d/%m\",\"default\":\"%d-%m-%Y\",\"long\":\"%d %B de %Y\",\"short\":\"%d %b\",\"shortest\":\"%d %b %y\"},\"month_names\":[null,\"gener\",\"febrer\",\"mar\u00E7\",\"abril\",\"maig\",\"juny\",\"juliol\",\"agost\",\"setembre\",\"octubre\",\"novembre\",\"desembre\"],\"order\":[\"day\",\"month\",\"year\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"fa aproximadament 1 hora\",\"other\":\"fa aproximadament %{count} hores\"},\"about_x_months\":{\"one\":\"fa aproximadament 1 mes\",\"other\":\"fa aproximadament %{count} mesos\"},\"about_x_years\":{\"one\":\"fa aproximadament 1 any\",\"other\":\"fa aproximadament %{count} anys\"},\"almost_x_years\":{\"one\":\"fa quasi 1 any\",\"other\":\"fa quasi %{count} anys\"},\"half_a_minute\":\"fa mig minut\",\"less_than_x_minutes\":{\"one\":\"fa menys d\\'1 minut\",\"other\":\"fa menys de %{count} minuts\"},\"less_than_x_seconds\":{\"one\":\"fa menys d\\'1 segon\",\"other\":\"fa menys de %{count} segons\"},\"over_x_years\":{\"one\":\"fa m\u00E9s d\\'1 any\",\"other\":\"fa m\u00E9s de %{count} anys\"},\"x_days\":{\"one\":\"fa 1 dia\",\"other\":\"fa %{count} dies\"},\"x_minutes\":{\"one\":\"fa 1 minut\",\"other\":\"fa %{count} minuts\"},\"x_months\":{\"one\":\"fa 1 mes\",\"other\":\"fa %{count} mesos\"},\"x_seconds\":{\"one\":\"fa 1 segon\",\"other\":\"fa %{count} segons\"},\"x_years\":{\"one\":\"fa 1 any\",\"other\":\"fa %{count} anys\"}},\"prompts\":{\"day\":\"Dia\",\"hour\":\"Hora\",\"minute\":\"Minuts\",\"month\":\"Mes\",\"second\":\"Segons\",\"year\":\"Any\"}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"ha de ser acceptat\",\"array_too_short\":{\"one\":\"\u00E9s massa curt (al menys 1 element)\",\"other\":\"\u00E9s massa curt (al menys %{count} elements)\"},\"blank\":\"no pot estar en blanc\",\"blank_for_modules\":\"L\\'organitzaci\u00F3 no est\u00E0 correctament configurada. L\\'identificador \u00E9s obligatori per als m\u00F2duls que has activat.\",\"collection_taken\":\"no pot tenir una altra col\u00B7lecci\u00F3 d\\'aquest tipus.\",\"confirmation\":\"no coincideix amb %{attribute}\",\"custom_fields\":{\"options\":{\"missing_vocabulary\":\"Alguna columna de tipus \\\\\"vocabulary\\\\\" no t\u00E9 valor en \\\\\"dataSource\\\\\"\",\"wrong_column_type\":\"Alguna columna no pertany a un tipus reconegut. Tipus reconeguts: \\\\\"text\\\\\", \\\\\"integer\\\\\", \\\\\"float\\\\\", \\\\\"date\\\\\" y \\\\\"vocabulary\\\\\"\",\"wrong_custom_field_uids\":\"Els uids configurats no existeixen o pertanyen a camps personalitzats que no tenen definit un valor de progr\u00E9s\"}},\"empty\":\"no pot estar buit\",\"equal_to\":\"ha de ser igual a %{count}\",\"even\":\"ha de ser parell\",\"exclusion\":\"est\u00E0 reservat\",\"greater_than\":\"ha de ser m\u00E9s gran que %{count}\",\"greater_than_or_equal_to\":\"ha de ser m\u00E9s gran o igual a %{count}\",\"inclusion\":\"no est\u00E0 incl\u00F3s a la llista\",\"invalid\":\"no \u00E9s v\u00E0lid\",\"invalid_consultation_response\":\"No s\\'ha desat la consulta. Per favor, revisa els valors i prova de nou.\",\"invalid_table_name\":\"Ha de comen\u00E7ar per una lletra o un gui\u00F3 baix; la resta nom\u00E9s pot contenir lletres, d\u00EDgits o guions baixos\",\"less_than\":\"ha de ser menor que %{count}\",\"less_than_or_equal_to\":\"ha de ser menor o igual a %{count}\",\"not_a_number\":\"no \u00E9s un n\u00FAmero\",\"not_an_integer\":\"ha de ser un enter\",\"not_found\":\"No es troba\",\"odd\":\"ha de ser senar\",\"other_than\":\"ha de ser diferent de %{count}\",\"page_as_homepage\":\"No s\\'ha pogut desar els canvis en la p\u00E0gina perqu\u00E8 no es pot canviar la vibilidad d\\'una p\u00E0gina que s\\'utilitza com p\u00E0gina principal.\",\"present\":\"ha de ser blanc\",\"record_invalid\":\"La validaci\u00F3 va fallar: %{errors}\",\"restrict_dependent_destroy\":{\"one\":\"No es pot eliminar el registre perque existeix %{record} dependent\",\"other\":\"No es pot eliminar el registre perque hi ha %{record} dependents\"},\"taken\":\"no est\u00E0 disponible\",\"too_long\":{\"one\":\"\u00E9s massa llarg (1 car\u00E0cter m\u00E0xim)\",\"other\":\"\u00E9s massa llarg (%{count} car\u00E0cters m\u00E0xim)\"},\"too_short\":{\"one\":\"\u00E9s massa curt (1 car\u00E0cter m\u00EDnim)\",\"other\":\"\u00E9s massa curt (%{count} car\u00E0cters m\u00EDnim)\"},\"wrong_length\":{\"one\":\"no t\u00E9 la longitud correcta (1 car\u00E0cter exactament)\",\"other\":\"no t\u00E9 la longitud correcta (%{count} car\u00E0cters exactament)\"}},\"template\":{\"body\":\"Hi ha hagut problemes amb els seg\u00FCents camps:\",\"header\":{\"one\":\"No s\\'ha pogut desar aquest/a %{model} perqu\u00E8 hi ha 1 error\",\"other\":\"No s\\'ha pogut desar aquest/a %{model} perqu\u00E8 hi ha hagut %{count} errors\"}}},\"gobierto_admin\":{\"activities\":{\"activities_list\":{\"header\":{\"action\":\"Acci\u00F3\",\"date\":\"Data\",\"ip\":\"IP\",\"recipient\":\"Receptor\",\"subject\":\"Subjecte\",\"user\":\"Usuari\"}},\"index\":{\"title\":\"Log de activitats\"}},\"admin\":{\"invitation_acceptances\":{\"show\":{\"error\":\"Esta URL no sembla ser v\u00E0lida\",\"success\":\"Sessi\u00F3 iniciada correctament\"}},\"invitations\":{\"create\":{\"error\":\"Hi ha hagut un problema al enviar les invitacions\",\"success\":\"Les invitacions s\\'han enviat correctament\",\"success_with_errors\":\"Algunes invitacions no han pogut ser enviades: %{email_addresses}.\"},\"form\":{\"placeholders\":{\"emails\":\"maria@hotmail.com, felipe@gmail.com\"},\"sites\":\"Sites amb acc\u00E9s\",\"submit\":\"Enviar invitacions\"},\"new\":{\"title\":\"Enviar invitacions\"}},\"passwords\":{\"create\":{\"error\":\"L\\'adre\u00E7a de e-mail que has indicat no sembla ser v\u00E0lida\",\"success\":\"Per favor, revisa el teu email per rebre instruccions\"},\"edit\":{\"error\":\"Esta URL no sembla ser v\u00E0lida\",\"title\":\"Establir una nueva contrasenya\"},\"edit_form\":{\"submit\":\"Canviar contrasenya\"},\"new\":{\"title\":\"Recuperar la teva contrasenya\"},\"new_form\":{\"placeholders\":{\"email\":\"fsanchez@gmail.com\"},\"submit\":\"Solicitar recuperaci\u00F3\"},\"update\":{\"error\":\"Hi va haver un problema al canviar la teua contrasenya\",\"success\":\"Sessi\u00F3 iniciada correctament\"}},\"settings\":{\"edit\":{\"password_block\":\"Contrasenya\",\"placeholders\":{\"email\":\"Email\",\"name\":\"Nom\"},\"title\":\"Edita les teves dades\"},\"update\":{\"error\":\"No s\\'han pogut guardar les dades\",\"success\":\"Dades actualitzades correctament\"}}},\"admin_groups\":{\"admins\":{\"modal_index\":{\"add\":\"Afegir\",\"add_title\":\"Afegir usuari\",\"created_at\":\"Acc\u00E9s concedit\",\"delete\":\"Eliminar acc\u00E9s\",\"email\":\"correu-e\",\"user\":\"Usuari\",\"users_with_access\":\"Usuaris amb acc\u00E9s\"}},\"breadcrumb\":{\"admin_groups\":\"Grups\"},\"create\":{\"success\":\"El Grup d\\'admins s\\'ha creat correctament\"},\"edit\":{\"title\":\"Permisos del grup: %{name}\"},\"form\":{\"action_names\":{\"create_projects\":\"Crea projectes\",\"delete_projects_all\":\"Elimina projectes (tots)\",\"delete_projects_assigned\":\"Elimina projectes (assignats)\",\"edit\":\"Editar\",\"edit_projects_all\":\"Edita projectes (tots)\",\"edit_projects_assigned\":\"Edita projectes (assignats)\",\"edit_projects_permissions_all\":\"Edita permisos de projectes (tots)\",\"edit_projects_permissions_assigned\":\"Edita permisos de projectes (assignats)\",\"manage_dashboards\":\"Administrar dashboards\",\"manage_plans\":\"Administrar plans\",\"moderate_projects_all\":\"Modera projectes (tots)\",\"moderate_projects_assigned\":\"Modera projectes (assignats)\",\"publish_projects_all\":\"Publica projectes (tots)\",\"publish_projects_assigned\":\"Publica projectes (assignats)\",\"update_projects_as_minor_change_all\":\"Desa canvis menors en projectes (tots)\",\"update_projects_as_minor_change_assigned\":\"Desa canvis menors en projectes (assignats)\",\"view_dashboards\":\"Veure dashboards\",\"view_projects_all\":\"Veure projectes (tots)\",\"view_projects_assigned\":\"Veure projectes (assignats)\"},\"actions\":\"Accions\",\"all\":\"Tots\",\"members\":{\"one\":\"Hi ha un administrador amb aquest grup.\",\"other\":\"Hi ha %{count} administradors amb aquest grup.\",\"zero\":\"Aquest grup no t\u00E9 administradors.\"},\"modules_permissions\":\"M\u00F2duls\",\"people\":\"Persones\",\"placeholders\":{\"name\":\"Grup glo bal d\\'administradors\"},\"site_options_permissions\":\"Lloc web\"},\"index\":{\"header\":{\"admin_group\":\"Grup\"},\"new\":\"Nou\",\"title\":\"Grups\"},\"new\":{\"title\":\"Nou grup\"},\"update\":{\"success\":\"El Grup d\\'admins s\\'ha actualizat correctament\"}},\"admin_mailer\":{\"invitation_instructions\":{\"bye\":\"Salutacions\",\"click_link\":\"Has estat convidat a col\u00B7laborar a la nostra plataforma web. Fes clic en el seg\u00FCent enlla\u00E7 per a crear el teu compte.\",\"hi\":\"Hola\",\"subject\":\"Has estat convidat a col\u00B7laborar a Gobierto\"},\"reset_password_instructions\":{\"bye\":\"Salutacions\",\"click_link\":\"Fes clic en el seg\u00FCent enlla\u00E7 per restaurar la teva contrasenya\",\"hi\":\"Hola\",\"subject\":\"Instruccions per activar el teu compte a Gobierto\"}},\"admin_unauthorized\":\"No tens prou permisos per a realitzar aquesta acci\u00F3\",\"admins\":{\"create\":{\"success\":\"El Admin s\\'ha creat correctament\"},\"edit\":{\"title\":\"Editar Administrador\"},\"form\":{\"activity_block\":\"Log d\\'actividad\",\"admin_groups_block\":\"Grup\",\"authorization_level\":{\"disabled\":\"Deshabilitat\",\"manager\":\"Manager\",\"regular\":\"Regular\"},\"password_block\":\"Contrasenya\",\"placeholders\":{\"email\":\"fgonzalez@gmail.com\",\"name\":\"Fernando Gonz\u00E1lez\"},\"sites_block\":\"Sites amb acc\u00E9s\",\"sites_block_description\":\"Aquest usuari pot accedir a administrar:\"},\"index\":{\"groups_and_permissions\":\"Grups i permisos\",\"header\":{\"admin\":\"Administrador\",\"created_at\":\"Creat\",\"email\":\"Email\",\"groups\":\"Grups\",\"last_sign_in_at\":\"\u00DAltim login\",\"primary_api_token\":\"Token de l\\'API primari\",\"role\":\"Rol\"},\"new\":\"Nou Administrador\",\"send_invitations\":\"Enviar invitacions\",\"title\":\"Administradors\",\"users_section\":\"Usuaris\",\"view_admin\":\"Veure Administrador\"},\"new\":{\"title\":\"Nou Administrador\"},\"show\":{\"admin_tokens\":\"Tokens d\\'autoritzaci\u00F3\",\"copy_to_clipboard\":\"Copia\",\"primary_api_token\":\"Token primari\"},\"update\":{\"success\":\"El Admin s\\'ha actualizat correctament\"}},\"api_tokens\":{\"api_token\":{\"primary\":\"Primari\"},\"edit\":{\"api_token\":\"Token de l\\'API %{name}\"},\"form\":{\"placeholders\":{\"domain\":\"www.example.org\",\"name\":\"Token per a aplicacions externes\"},\"update_token\":\"Actualitzar Token\"},\"list\":{\"header\":{\"created_at\":\"Creat\",\"domain\":\"Domini\",\"name\":\"Nom\",\"token\":\"Token\"},\"new\":\"Nou\",\"title\":\"Tokens de l\\'API\"},\"new\":{\"api_token\":\"Nou Token de l\\'API\"}},\"census\":{\"imports\":{\"create\":{\"error\":\"Hi ha hagut un error al importar el teu arxiu. Per favor, tria de nou.\",\"success\":\"S\\'ha importat %{record_count} registres\"},\"file_format_notes\":{\"instructions\":\"El arxiu a carregar deu de ser un CSV, sense fila de capcalera, amb les columnes de dades que vulguem que el usuari hagi de verificar. Per exemple, si volem validar DNI, data de naixement i codi postal, deurem preparar un arxiu com aquest:\"},\"form\":{\"disable_with\":\"Carregant...\",\"submit\":\"Carregant archiu de cens\"},\"new\":{\"final_notes\":\"es sustituir\u00E0n tots els registres, i si alg\u00FAn DNI d\\'usuari verificat deixa d\\'estar present, el usuari deixar\u00E1 de tindre acc\u00E9s\",\"import_status\":\"El cens ha sigut actualitzat per \u00FAltima volta el %{created_at} per %{admin_name} (%{admin_email}). El arxiu t\u00E9 %{imported_records} registres.\",\"title\":\"Configuraci\u00F3 de cens\"}}},\"custom_fields_plugins\":{\"budgets\":{\"area\":\"\u00C0rea\",\"assigned_amount\":\"Assignat\",\"budget_line\":\"Partida pressupost\u00E0ria\",\"custom\":\"Personalitzada\",\"economic\":\"Econ\u00F2mica\",\"full_amount\":\"Total\",\"functional\":\"Funcional\",\"not_available\":\"No disp.\",\"weight\":\"Pes\",\"year\":\"Any\"},\"common\":{\"custom\":\"Personalitzada\",\"economic\":\"Econ\u00F2mica\",\"functional\":\"Funcional\"},\"data_grid\":{\"remove_rows\":\"Eliminar files seleccionades\",\"select_deselect_all\":\"Seleccionar / Deseleccionar totes\"},\"progress\":{\"progress\":\"Progr\u00E9s\"},\"table\":{\"remove_rows\":\"Eliminar files seleccionades\",\"select_deselect_all\":\"Seleccionar / Deseleccionar totes\"}},\"custom_sessions\":{\"ldap_strategy\":{\"form\":{\"identifier\":\"Identificador\",\"password\":\"Contrasenya\",\"submit\":\"Enviar\"}}},\"gobierto_attachments\":{\"file_attachments\":{\"create\":{\"success_html\":\"El document s\\'ha creat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el document\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"El document s\\'ha archivat correctament\"},\"edit\":{\"title\":\"Modifica adjunt\"},\"form\":{\"file_constraints\":\"Adjuntar document\",\"placeholders\":{\"description\":\"Descripci\u00F3 del fitxer\",\"name\":\"Nom del document\",\"slug\":\"nom-del-document\"}},\"index\":{\"add_new_attachment\":\"Afegeix nou document\",\"collections\":\"Col\u00B7leccions\",\"created_at\":\"Creat\",\"header\":{\"collection\":\"Col\u00B7lecci\u00F3\",\"file_attachments\":\"Documents\"},\"latest_editions\":\"\u00DAltimes edicions\",\"new\":\"Nova\",\"title\":\"Documents\",\"updated_at\":\"Actualitzat\",\"view_collection\":\"Veure col\u00B7lecci\u00F3\"},\"new\":{\"title\":\"Nou document\"},\"recover\":{\"success\":\"El document s\\'ha recuperat correctament\"},\"update\":{\"success_html\":\"El document s\\'ha actualitzat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el document\\\\u003c/a\\\\u003e.\"}}},\"gobierto_budgets\":{\"feedback\":{\"index\":{\"answer1_0\":\"Si\",\"answer1_1\":\"No\",\"answer2_0\":\"Poc\",\"answer2_1\":\"Apropiat\",\"answer2_2\":\"Molt\",\"budget\":\"Pressupostat\",\"last\":\"\u00DAltima\",\"total_feedback\":\"Total opinions\",\"understand\":\"Ho entens?\",\"you_think\":\"Et sembla...\"}},\"options\":{\"index\":{\"comparison_compare_municipalities_desc\":\"Mostra una taula amb municipis espec\u00EDfics (amb dades disponbiles en presupuestos.gobierto.es - fes all\u00ED la comparaci\u00F3 avan\u00E7 d\\'incluir-los)\",\"comparison_context_table_enabled_desc\":\"Mostra la taula que ofereix context amb mitjanes provincials, auton\u00F2miques o estatals\",\"comparison_show_widget_desc\":\"Facilita l\\'acc\u00E9s a la ferramenta de comparaci\u00F3 de pressupostos de Gobierto: presupuestos.gobierto.es\",\"comparison_tool_enabled_desc\":\"Habilita ferramentes de comparaci\u00F3\",\"confirm_update_annual_data\":\"Comen\u00E7ar\u00E0 un proc\u00E9s en segon pla per actualitzar els fitxers. Continuar?\",\"elaboration\":\"Elaboraci\u00F3\",\"elaboration_desc1\":\"Habilita la secci\u00F3 d\\'Elaboraci\u00F3 del pressupost\",\"elaboration_desc2_html\":\"\\\\u003cstrong\\\\u003eImportant:\\\\u003c/strong\\\\u003e es necessari carregar les dades d\\'elaboraci\u00F3 avans. Contacta amb el teu administrador sin tens dubtes.\",\"feedback\":\"Micro-participacions\",\"feedback_desc\":\"Habilita la opci\u00F3 per a que els visitants opinen sobre les partides del pressupost\",\"feedback_emails_desc\":\"Les participacions (opini\u00F3 sobre partides i petici\u00F3 de m\u00E9s informaci\u00F3) s\\'enviar\u00E0n a aquesta direcci\u00F3\",\"indicators\":\"Indicadors\",\"indicators_desc1\":\"Habilita la secci\u00F3 Indicadors\",\"options\":\"Opcions\",\"providers\":\"Prove\u00EFdors i Factures\",\"providers_desc1\":\"Habilita la secci\u00F3 Prove\u00EFdors i Factures\",\"receipt\":\"Recibo de tus impuestos\",\"receipt_desc1\":\"Habilita la secci\u00F3n El recibo de tus impuestos\",\"receipt_desc2_html\":\"\\\\u003cstrong\\\\u003eImportante:\\\\u003c/strong\\\\u003e debes de rellenar el JSON con los datos.\",\"update_annual_data\":\"Generar fitxers de partides del pressupost per any\"},\"update\":{\"error\":\"No s\\'han pogut guardar les opcions: %{validation_errors}\",\"success\":\"Opcions desades correctament\"},\"update_annual_data\":{\"success\":\"S\\'ha llan\u00E7at un proc\u00E9s per generar els fitxers de partides del pressupost per any\"}},\"shared\":{\"tabs\":{\"budgets\":\"Pressupost\",\"feedback\":\"Opinions\",\"options\":\"Opcions\"}}},\"gobierto_calendars\":{\"calendar_configuration\":{\"edit\":{\"add_rule\":\"Crear regla\",\"calendar_integration\":\"Integraci\u00F3 de calendari\",\"confirm_sync\":\"Est\u00E0s segur?\",\"filter_events\":\"Filtrat d\\'esdeveniments\",\"filter_events_desc\":\"Quan s\\'importa un esdeveniment...\",\"filter_events_label\":\"Si el\",\"google_calendar\":\"Google Calendar\",\"ibm_notes\":\"IBM Notes\",\"labels\":{\"ibm_notes_pwd\":\"Contrasenya\",\"ibm_notes_url\":\"URL del calendari d\\'IBM Notes\",\"ibm_notes_usr\":\"Compte de IBM Notes\",\"microsoft_exchange_pwd\":\"Contrasenya\",\"microsoft_exchange_url\":\"URL del calendari\",\"microsoft_exchange_usr\":\"Compte de Microsoft Exchange\"},\"last_sync\":\"Darrera sincronitzaci\u00F3\",\"manage\":\"Gestiona la configuraci\u00F3 del calendari\",\"microsoft_exchange\":\"Microsoft Exchange\",\"placeholders\":{\"filter_text\":\"Text pel qual filtrar\",\"ibm_notes_url\":\"ex. https://example.com/mail/abc.nsf/api/calendar/events\",\"microsoft_exchange_url\":\"ex. https://example.com/ews/exchange.asmx\",\"username\":\"ex. perico85\"},\"remove_configuration\":\"Eliminar configuraci\u00F3\",\"sync\":\"Sincronitzar ara\",\"without_description\":\"No importar la descripci\u00F3 de l\\'esdeveniment\"},\"gobierto_people_person_navigation\":{\"calendar_configuration\":\"Configuraci\u00F3 del calendari\"},\"google_calendar_fields\":{\"calendar_configured\":\"Actualment esta persona t\u00E9 aquestos calendaris configurats\",\"share_link\":\"Comparteix aquest enlla\u00E7 amb el alt c\u00E0rrec per a permetre a Gobierto llegir els seus esdeveniments de Google Calendar:\"},\"sync_calendars\":{\"success\":\"Sincronitzaci\u00F3 realitzada\"},\"update\":{\"success\":\"Prefer\u00E8ncies actualitzades correctament\"}},\"collections\":{\"index\":{\"add_new_event\":\"Afegeix nou esdeveniment\",\"collections\":\"Calendaris\",\"header\":{\"collection\":\"Calendari\",\"events\":\"Esdeveniments\"},\"latest_editions\":\"\u00DAltims esdeveniments editats\",\"new\":\"Nou\",\"title\":\"Agendas\",\"view_collection\":\"Veure col\u00B7lecci\u00F3\"}},\"events\":{\"attendees_form\":{\"header\":{\"charge\":\"C\u00E0rrec\",\"name\":\"Nom\",\"person\":\"Persona\"},\"title\":\"Assistents\",\"view_person\":\"Veure persona\"},\"create\":{\"success_html\":\"El esdeveniment s\\'ha creat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el esdeveniment\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"El esdeveniment s\\'ha archivat correctament\"},\"edit\":{\"title\":\"Editar event\"},\"form\":{\"placeholders\":{\"slug\":\"event\",\"title\":\"T\u00EDtol del event\"},\"state\":{\"pending\":\"Pendent\",\"published\":\"Publicat\"}},\"index\":{\"configuration\":\"Configuraci\u00F3\",\"header\":{\"date\":\"Data\",\"event\":\"Dsdeveniment\",\"location\":\"Localitzaci\u00F3\",\"status\":\"Estat\"},\"new\":\"Nou esdeveniment\",\"past_events\":\"Esdeveniments passats\",\"pending_events\":\"Pendents de moderar\",\"published_events\":\"Esdeveniments publicats\",\"upcoming_events\":\"Pr\u00F2xims\",\"view_event\":\"Veure esdeveniment\",\"visibility_level\":{\"archived\":\"Archivat\",\"pending\":\"Borrador\",\"published\":\"Publicat\"}},\"locations_form\":{\"header\":{\"address\":\"Adre\u00E7a\",\"place\":\"Lloc\"},\"title\":\"Lloc\"},\"new\":{\"title\":\"Nou event\"},\"person_breadcrumb\":{\"back_to_collections\":\"\\\\u003c Tornar a agendes\"},\"recover\":{\"success\":\"El esdeveniment s\\'ha recuperat correctament\"},\"update\":{\"success_html\":\"El esdeveniment s\\'ha actualitzat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el esdeveniment\\\\u003c/a\\\\u003e.\"}}},\"gobierto_cms\":{\"file_attachments\":{\"index\":{\"title\":\"Documents\"}},\"pages\":{\"create\":{\"success_html\":\"La p\u00E0gina ha estat creada correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure la p\u00E0gina\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"La p\u00E0gina ha estat eliminada correctament\"},\"edit\":{\"title\":\"Editar p\u00E0gina\"},\"form\":{\"include_in_section\":\"Incloure a la secci\u00F3\",\"new_section\":\"(Nova secci\u00F3)\",\"placeholders\":{\"slug\":\"sobre-aquesta-web\",\"title\":\"T\u00EDtol de la p\u00E0gina\"},\"section\":\"Secci\u00F3\",\"visibility_level\":{\"active\":\"Publicada\",\"draft\":\"Borrador\"},\"without_parent\":\"(sense pare)\"},\"index\":{\"add_new\":\"Afegir nova\",\"collections\":\"Col\u00B7leccions\",\"header\":{\"collection\":\"Col\u00B7lecci\u00F3\",\"pages\":\"P\u00E0gines\",\"section\":\"Secci\u00F3\"},\"latest_editions\":\"\u00DAltimes edicions\",\"new\":\"Nova\",\"sections\":\"Seccions\",\"title\":\"CMS\",\"view_collection\":\"Veure col\u00B7lecci\u00F3\",\"view_section\":\"Veure secci\u00F3\"},\"new\":{\"title\":\"Nova p\u00E0gina\"},\"recover\":{\"success\":\"La p\u00E0gina ha estat recuperada correctament\"},\"update\":{\"success_html\":\"La p\u00E0gina ha estat actualitzada correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure la p\u00E0gina\\\\u003c/a\\\\u003e.\"}},\"sections\":{\"create\":{\"success\":\"La secci\u00F3 ha estat creada correctament.\"},\"edit_modal\":{\"title\":\"Editar secci\u00F3\"},\"form\":{\"placeholders\":{\"slug\":\"sobre-aquesta-seccio\",\"title\":\"T\u00EDtol de la secci\u00F3\"}},\"index\":{\"header\":{\"pages\":\"P\u00E0gines\",\"title\":\"Secci\u00F3\"},\"new\":\"Nova\",\"title\":\"Seccions\",\"view\":\"Veure secci\u00F3\"},\"new_modal\":{\"title\":\"Nova secci\u00F3\"},\"pages_filter\":{\"page_help\":\"Arrossega i deixa anar a la part esquerra per col\u00B7locar aquesta p\u00E0gina al men\u00FA\"},\"show\":{\"collapse\":\"Colapsar tot\",\"configuration\":\"Configuraci\u00F3\",\"delete_element\":\"Eliminar element del men\u00FA\",\"expand\":\"Expandir tot\",\"help\":\"Configureu els elements del vostre men\u00FA. Arrossega el tauler dret al men\u00FA de la esquerra\",\"last_edited_pages\":\"\u00DAltimes p\u00E0gines editades\",\"placeholders\":{\"search\":\"Escriu el t\u00EDtol de la p\u00E0gina per cercar\"},\"sections\":\"Seccions\",\"select_page\":\"Selecciona una p\u00E0gina per incloure en la secci\u00F3\",\"view\":\"Veure secci\u00F3\"},\"update\":{\"success\":\"La secci\u00F3 ha estat actualitzada correctament.\"}}},\"gobierto_common\":{\"collections\":{\"check_container_presence\":{\"container_not_found\":\"El recurs a qu\u00E8 pertany la col\u00B7lecci\u00F3 no es troba\"},\"create\":{\"success\":\"La col\u00B7lecci\u00F3 s\\'ha creat correctament.\"},\"edit_modal\":{\"title\":\"Edita col\u00B7lecci\u00F3\"},\"form\":{\"placeholders\":{\"slug\":\"sobre-aquesta-colleccio\",\"title\":\"Nom de la col\u00B7lecci\u00F3\"}},\"index\":{\"collections\":\"Col\u00B7leccions\",\"header\":{\"collection\":\"T\u00EDtol\",\"pages\":\"P\u00E1ginas\"},\"latest_editions\":\"\u00DAltimes edicions\",\"new\":\"Nou\",\"title\":\"CMS\",\"view_collection\":\"Veure col\u00B7lecci\u00F3\"},\"new_modal\":{\"title\":\"Nova col\u00B7lecci\u00F3\"},\"show\":{\"configuration\":\"Configuraci\u00F3\",\"file_attachments\":{\"created_at\":\"Creat\",\"file_name\":\"Nom del fitxer\",\"view\":\"Veure fitxer\"},\"new_attachment\":\"Nou\",\"new_page\":\"Nova\",\"pages\":{\"created_at\":\"Creada\",\"public\":\"P\u00FAblica\",\"published_on\":\"Publicada\",\"updated_at\":\"Actualitzada\",\"view\":\"Veure p\u00E0gina\",\"visibility_level\":{\"active\":\"Publicada\",\"archived\":\"Arxivada\",\"draft\":\"Borrador\"}}},\"update\":{\"success\":\"La col\u00B7lecci\u00F3 s\\'ha actualitzat correctament.\"}},\"content_blocks\":{\"create\":{\"success\":\"El bloc s\\'ha creat correctament\"},\"destroy\":{\"success\":\"El bloc s\\'ha eliminat correctament\"},\"edit\":{\"title\":\"Editar bloc\"},\"form\":{\"add_child\":\"Afegir columna\",\"fields\":\"Columnes\",\"title\":\"Nom del bloc\"},\"new\":{\"title\":\"Afegir bloc\"},\"update\":{\"success\":\"El bloc s\\'ha actualitzat correctament\"}},\"custom_fields\":{\"custom_fields\":{\"create\":{\"success\":\"Camp personalitzat creat correctament\"},\"date_options\":{\"date\":\"Data\",\"datetime\":\"Data i hora\",\"type\":\"Tipus\"},\"destroy\":{\"failed\":\"Hi ha hagut un error que ha impedit eliminar el camp personalitzat\",\"success\":\"Camp personalitzat eliminat correctament\"},\"edit\":{\"instance_title\":\"Edita %{field_name} de %{instance_name}\",\"title\":\"Edita %{name}\"},\"form\":{\"confirm\":\"Est\u00E0s segur?\",\"crop\":\"Retallar\",\"multiple\":\"M\u00FAltiple\",\"type\":\"Opcions de contingut\"},\"index\":{\"instance_title\":\"Camps personalitzats de %{instance_name}\",\"localized_custom_fields\":\"Camps tradu\u00EFbles\",\"new\":\"Afegir nou camp\",\"not_localized_custom_fields\":\"Camps no tradu\u00EFbles\",\"title\":\"Camps personalitzats\"},\"new\":{\"instance_title\":\"Nou camp de %{instance_name}\",\"title\":\"Nou camp\"},\"new_option\":{\"cancel_new_option\":\"Cancel\u00B7lar\",\"create\":\"Crear opci\u00F3\",\"new\":\"Nova opci\u00F3\"},\"numeric_options\":{\"currency\":\"Monet\u00E0ria\",\"generic\":\"Gen\u00E8rica\",\"unit_type\":\"Tipus d\\'unitat\"},\"options_form\":{\"add_option\":\"Afegir opci\u00F3\"},\"plugin\":{\"budgets\":\"Pressupostos\",\"progress\":\"Progr\u00E9s\",\"table\":\"Taula\",\"type\":\"Tipus\"},\"plugin_configuration_form\":{\"configuration\":\"Configuraci\u00F3\"},\"update\":{\"success\":\"Camp personalitzat actualitzat correctament\"},\"vocabulary_select\":{\"vocabulary\":\"Vocabulari d\\'opcions\"},\"vocabulary_type_select\":{\"multiple_select\":\"Selecci\u00F3 m\u00FAltiple\",\"single_select\":\"Selecci\u00F3 \u00FAnica\",\"tags\":\"Tags\",\"type\":\"Tipus\"}},\"forms\":{\"new_gallery_image\":{\"add_item\":\"Afegir imatge\",\"cancel_new_item\":\"Cancel\"}},\"module_resources\":{\"index\":{\"custom_fields_for_instances_of\":\"Camps personalitzats per a inst\u00E0ncies de %{name}\",\"empty\":\"De moment no hi ha cap model amb camps personalitzats habilitats\"}}},\"dynamic_content\":{\"form\":{\"add_child\":\"Afegir nou registre\",\"add_content_block\":\"Afegir nou bloc\",\"add_record\":\"Afegir\",\"attachment\":\"Adjunt\",\"attachment_file\":\"Arxiu adjunt\",\"cancel_record\":\"Cancel\u00B7lar\",\"delete_content_block\":\"Eliminar bloc\",\"delete_content_block_confirm\":\"Est\u00E0s segur de suprimir aquest bloc?\",\"download_attachment\":\"Descarregar adjunt\",\"edit_content_block\":\"Editar\",\"remove_attachment\":\"Eliminar adjunt\",\"save_record\":\"Guardar\"}},\"ordered_terms\":{\"create\":{\"success\":\"El terme s\\'ha creat correctament.\"},\"destroy\":{\"destroy_failed\":\"El terme no ha pogut ser eliminat: %{validation_errors}\",\"success\":\"El terme ha estat eliminat correctament.\"},\"edit_modal\":{\"title\":\"Edita %{term}\"},\"form\":{\"placeholders\":{\"description\":\"Descripci\u00F3 del terme\",\"external_id\":\"ID001\",\"name\":\"Nom del terme\",\"slug\":\"terme\"}},\"index\":{\"collapse_all\":\"Plegar tot\",\"explore\":\"Explora\",\"new\":\"Nou\",\"open_all\":\"Desplegar tot\",\"title\":\"Termes de %{vocabulary}\"},\"new_modal\":{\"title\":\"Nou terme\"},\"terms_tree\":{\"delete_confirm\":\"Est\u00E0s segur? Aquesta operaci\u00F3 no \u00E9s reversible\"},\"update\":{\"success\":\"El terme s\\'ha actualitzat correctament.\"}},\"terms\":{\"create\":{\"success\":\"El terme s\\'ha creat correctament.\"},\"destroy\":{\"destroy_failed\":\"El terme no ha pogut ser eliminat.\",\"success\":\"El terme ha estat eliminat correctament.\"},\"edit\":{\"edit\":\"Editar %{term}\"},\"form\":{\"placeholders\":{\"description\":\"El cavall \u00E9s un mam\u00EDfer herb\u00EDvor\",\"name\":\"Cavall\",\"slug\":\"regne-animal-cavall\"}},\"index\":{\"delete_confirm\":\"Est\u00E0s segur? Aquesta operaci\u00F3 no \u00E9s reversible\",\"header\":{\"description\":\"Descripci\u00F3\",\"level\":\"Nivell\",\"name\":\"Nom\",\"parent\":\"Pare\"},\"new\":\"Nou\",\"title\":\"Termes de %{vocabulary}\"},\"new\":{\"new\":\"Nou Terme\"},\"update\":{\"success\":\"El terme s\\'ha actualitzat correctament.\"}},\"vocabularies\":{\"create\":{\"success\":\"El vocabulari s\\'ha creat correctament.\"},\"destroy\":{\"destroy_failed\":\"El vocabulari no ha pogut ser eliminat perqu\u00E8 est\u00E0 en \u00FAs.\",\"success\":\"El vocabulari ha estat eliminat correctament.\"},\"edit\":{\"edit\":\"Editar %{vocabulary}\"},\"edit_modal\":{\"title\":\"Editar %{vocabulary}\"},\"form\":{\"placeholders\":{\"name\":\"Regne animal\",\"slug\":\"regne_animal\"}},\"index\":{\"delete_confirm\":\"Est\u00E0s segur? Aquesta operaci\u00F3 no \u00E9s reversible\",\"header\":{\"name\":\"Tema\",\"terms\":\"Termes\"},\"new\":\"Nou\",\"title\":\"Vocabularis\",\"view_vocabulary\":\"Veure termes\"},\"new\":{\"new\":\"Nou Vocabulari\"},\"new_modal\":{\"title\":\"Nou Vocabulari\"},\"show\":{\"created_at\":\"Creaci\u00F3\",\"terms\":\"Termes\",\"terms_count\":\"%{count} termes\"},\"update\":{\"success\":\"El vocabulari s\\'ha actualitzat correctament.\"}}},\"gobierto_core\":{\"site_templates\":{\"create\":{\"success\":\"La plantilla s\\'ha editat correctament.\"},\"destroy\":{\"success\":\"La plantilla s\\'ha esborrat correctament.\"},\"update\":{\"success\":\"La plantilla s\\'ha actualitzat correctament.\"}},\"templates\":{\"edit\":{\"preview\":\"Previsualitzar\",\"reset\":\"Resetejar\",\"reset_title\":\"Descarta els canvis guardats, i tornar a la plantilla original (ull, no podr\u00E0s recuperar la plantilla que hagis personalitzat)\",\"save\":\"Desar\"},\"index\":{\"edit_templates\":\"Edita plantilles\"}}},\"gobierto_dashboards\":{\"dashboards\":{\"destroy\":{\"success\":\"El dashboard s\\'ha esborrat correctament.\"},\"list_modal\":{\"add\":\"Afegiu-hi\",\"new\":\"\u00BFNecessiteu crear un nou dashboard?\",\"no_dashboards\":\"No hi ha cap dashboard\",\"title\":\"Seleccioneu el dashboard on incloure aquest indicador\"}}},\"gobierto_data\":{\"configuration\":{\"settings\":{\"edit\":{\"api_settings\":\"Configuraci\u00F3 de l\\'API\",\"db_config_placeholder\":\"{\\\\\"pool\\\\\":5, \\\\\"adapter\\\\\":\\\\\"postgresql\\\\\", \\\\\"database\\\\\":\\\\\"gobierto_test\\\\\", \\\\\"encoding\\\\\":\\\\\"unicode\\\\\", \\\\\"password\\\\\":\\\\\"gobierto\\\\\", \\\\\"username\\\\\":\\\\\"gobierto\\\\\"}\",\"frontend\":\"Front-end\",\"frontend_enabled\":\"Visible\",\"title\":\"Configuraci\u00F3\",\"update\":\"Actualitzar\"},\"title\":\"Preferencies\",\"update\":{\"success\":\"Configuraci\u00F3 guardada correctament\"}}},\"datasets\":{\"create\":{\"success\":\"El conjunt de dades s\\'ha creat correctament.\"},\"destroy\":{\"success\":\"El conjunt de dades s\\'ha esborrat correctament.\"},\"form\":{\"placeholders\":{\"name\":\"Habitants\",\"slug\":\"habitants\"}},\"index\":{\"header\":{\"name\":\"Nom\",\"status\":\"Estat\",\"table_name\":\"Nom de la taula\"},\"new\":\"Nou\",\"title\":\"Conjunts de dades\",\"view_dataset\":\"Veure conjunt de dades\"},\"new\":{\"title\":\"Nou conjunt de dades\"},\"update\":{\"success\":\"El conjunt de dades s\\'ha actualitzat correctament.\"}}},\"gobierto_investments\":{\"projects\":{\"create\":{\"success\":\"El projecte s\\'ha creat correctament.\"},\"destroy\":{\"success\":\"El projecte s\\'ha esborrat correctament.\"},\"form\":{\"placeholders\":{\"external_id\":\"ID001\",\"title\":\"Centre esportiu\"}},\"index\":{\"header\":{\"external_id\":\"ID extern\",\"title\":\"T\u00EDtol\"},\"new\":\"Nou\",\"title\":\"Projectes\",\"view_project\":\"Veure projecte\"},\"new\":{\"title\":\"Nou projecte\"},\"update\":{\"success\":\"El projecte s\\'ha actualitzat correctament.\"}}},\"gobierto_observatory\":{\"configuration\":{\"settings\":{\"edit\":{\"title\":\"Configuraci\u00F3 del observatori\",\"update\":\"Actualitzar\"},\"title\":\"Preferencies\",\"update\":{\"error\":\"Hi ha hagut un error al desar la configuraci\u00F3: %{validation_errors}\",\"success\":\"Configuraci\u00F3 guardada correctament\"}}}},\"gobierto_people\":{\"configuration\":{\"settings\":{\"edit\":{\"agendas\":\"Agendes\",\"blogs\":\"Blogs\",\"departments\":\"Departaments\",\"gifts\":\"Obsequis\",\"interest_groups\":\"Grups d\\'inter\u00E8s\",\"invitations\":\"Invitacions\",\"officials\":\"Persones\",\"placeholders\":{\"home_text_ca\":\"Text home catal\u00E0\",\"home_text_en\":\"Text home angl\u00E9s\",\"home_text_es\":\"Text home espanyol\"},\"political_groups_vocabulary\":\"Vocabulari de grups pol\u00EDtics\",\"statements\":\"Declaracions\",\"submodules_enabled\":\"Subm\u00F2duls habilitats\",\"trips\":\"Viatges\",\"update\":\"Actualitzar\"},\"update\":{\"error\":\"Hi ha hagut un error guardant les prefer\u00E8ncies\",\"success\":\"Prefer\u00E8ncies actualitzades correctament\"}},\"title\":\"Configuraci\u00F3\"},\"people\":{\"create\":{\"success_html\":\"El perfil s\\'ha creat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure la persona\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Editar persona\"},\"form\":{\"avatar_file_constraints\":\"Avatar de usuari (fitxer de 500x500)\",\"bio_file_constraints\":\"Adjuntar fitxer (PDF)\",\"category\":{\"executive\":\"Directiu\",\"politician\":\"Pol\u00EDtic\"},\"crop\":\"Retallar\",\"party\":{\"government\":\"Equip de Govern\",\"opposition\":\"Oposici\u00F3\"},\"placeholders\":{\"charge\":\"Alcalde\",\"email\":\"Correu-e\",\"name\":\"Rafael Garc\u00EDa\"}},\"index\":{\"configuration\":\"Configuraci\u00F3\",\"drag_to_sort\":\"Arrastra per a ordenar\",\"header\":{\"charge\":\"C\u00E0rrec\",\"events\":\"Esdeveniments\",\"person\":\"Persona\",\"posts\":\"Posts\",\"statements\":\"Declaracions\",\"status\":\"Estat\"},\"new\":\"Nova persona\",\"no_permissions\":\"No tens permisos per editar aquesta persona. Si la necessites editar, parla amb l\\'administrador\",\"title\":\"Persones\",\"view_person\":\"Veure persona\",\"visibility_level\":{\"active\":\"Publicat\",\"draft\":\"Borrador\"}},\"navigation\":{\"agenda\":\"Agenda\",\"person\":\"Persona\",\"posts\":\"Blog\",\"statements\":\"Declaracions\"},\"new\":{\"title\":\"Nova persona\"},\"person_events\":{\"index\":{\"title\":\"Agenda\"}},\"person_posts\":{\"create\":{\"success_html\":\"El post s\\'ha creat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el post\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Editar post\"},\"form\":{\"placeholders\":{\"tags\":\"personal, la meva carrera, sobre mi\",\"title\":\"Sobre mi\"}},\"index\":{\"header\":{\"date\":\"Data\",\"status\":\"Estat\",\"tags\":\"Tags\",\"title\":\"T\u00EDtol\"},\"new\":\"Nou post\",\"title\":\"Blog\",\"view_post\":\"Veure post\",\"visibility_level\":{\"active\":\"Publicat\",\"draft\":\"Borrador\"}},\"new\":{\"title\":\"Nou post\"},\"update\":{\"success_html\":\"El post s\\'ha actualitzat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el post\\\\u003c/a\\\\u003e.\"}},\"person_statements\":{\"create\":{\"success_html\":\"La declaraci\u00F3 s\\'ha creat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure la declaraci\u00F3\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Editar declaraci\u00F3\"},\"form\":{\"placeholders\":{\"title\":\"Declaraci\u00F3 de b\u00E9ns i activitats\"}},\"index\":{\"header\":{\"date\":\"Data\",\"statement\":\"Declaraci\u00F3\",\"status\":\"Estat\"},\"new\":\"Nova declaraci\u00F3\",\"title\":\"Declaracions\",\"view_statement\":\"Veure declaraci\u00F3\",\"visibility_level\":{\"active\":\"Publicada\",\"draft\":\"Borrador\"}},\"new\":{\"title\":\"Nou declaraci\u00F3\"},\"update\":{\"success_html\":\"La declaraci\u00F3 s\\'ha actualitzat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure la declaraci\u00F3\\\\u003c/a\\\\u003e.\"}},\"update\":{\"success_html\":\"El perfil s\\'ha actualitzat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure la persona\\\\u003c/a\\\\u003e.\"}},\"settings\":{\"title\":\"Preferencies\"}},\"gobierto_plans\":{\"admin_mailer\":{\"project_attributes_changed\":{\"bye\":\"Salutacions\",\"edition_change\":\"el contingut\",\"hi\":\"Hola\",\"intro_html\":\"%{author_name} ha actualitzat %{updates_list} al projecte %{project_link} del pla %{plan_title}.\",\"minor_change_notice\":\"El canvi s\\'ha desat com a menor amb el que no s\\'ha creat una nova versi\u00F3.\",\"moderation_stage_change\":\"l\\'estat de moderaci\u00F3 a %{value}\",\"subject\":\"S\\'ha modificat un projecte en el pla %{plan_title} de %{site_name}\",\"subject_with_changes\":\"S\\'ha modificat un projecte en el pla %{plan_title} de %{site_name} a %{changes}\",\"visibility_level_change\":\"l\\'estat de publicaci\u00F3 a %{value}\",\"visibility_levels\":{\"draft\":\"No publicat\",\"published\":\"Publicat\"}},\"project_created\":{\"bye\":\"Salutacions\",\"hi\":\"Hola\",\"intro_html\":\"%{author_name} ha creat un nou projecte %{project_link} en el pla %{plan_title}\",\"subject\":\"S\\'ha creat un projecte en el pla %{plan_title} de %{site_name}\"},\"project_deleted\":{\"bye\":\"Salutacions\",\"hi\":\"Hola\",\"intro_html\":\"%{author_name} ha eliminat el projecte %{project_name} del pla %{plan_link}\",\"subject\":\"S\\'ha eliminat un projecte del pla %{plan_title} de %{site_name}\"}},\"categories\":{\"calculated_headers\":{\"items\":\"Elements\",\"progress\":\"Progr\u00E9s\"},\"create\":{\"success\":\"La categoria s\\'ha creat correctament.\"},\"destroy\":{\"destroy_failed\":\"No pots esborrar una categoria mentre tingui projectes o altres elements associats.\",\"success\":\"La categoria ha estat eliminat correctament.\"},\"plan_summary\":{\"global_progress\":\"Progr\u00E9s global\",\"projects\":\"Projectes\"},\"update\":{\"success\":\"La categoria s\\'ha actualitzat correctament.\"}},\"dashboards\":{\"index\":{\"headers\":{\"status\":\"Visibilitat\",\"title\":\"T\u00EDtol\",\"updated\":\"Actualitzat\"},\"new\":\"Nou\",\"visibility_level\":{\"active\":\"P\u00FAblic\",\"draft\":\"Privat\"}}},\"plan_types\":{\"create\":{\"success\":\"El pla s\\'ha creat correctament.\"},\"destroy\":{\"has_items\":\"No es pot arxivar un tipus de pla mentre tingui elements associats.\",\"success\":\"El pla s\\'ha esborrat correctament.\"},\"edit\":{\"title\":\"Edita el tipus de pla\"},\"form\":{\"placeholders\":{\"name\":\"Nom del tipus de pla\",\"slug\":\"sobre-de-aquest-tipus-de-pla\"}},\"index\":{\"delete\":\"Esborrar\",\"header\":{\"type\":\"Tipus\"},\"new\":\"Nou\",\"title\":\"Tipus de plans\"},\"new\":{\"title\":\"Nou tipus de pla\"},\"update\":{\"success\":\"El pla pla s\\'ha actualizat correctament.\"}},\"plans\":{\"create\":{\"success_html\":\"Pla s\\'ha creat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el pla\\\\u003c/a\\\\u003e.\"},\"delete_contents\":{\"success\":\"Els projectes de el pla han estat correctament eliminats\",\"term_deletion_failed_html\":\"El terme \\\\\"%{term}\\\\\" de l\\'vocabulari \\\\\"%{vocabulary}\\\\\" no pot ser esborrat: %{message}\"},\"destroy\":{\"success\":\"El pla s\\'ha esborrat correctament.\"},\"edit\":{\"title\":\"Configuraci\u00F3\"},\"form\":{\"delete_contents\":\"Eliminar els projectes d\\'aquest pla\",\"delete_contents_confirm\":\"Confirma que vols eliminar els projectes d\\'aquest pla\",\"export_csv\":\"Exportar a CSV\",\"import_csv\":\"Importar des de CSV\",\"indicators\":\"indicadors\",\"placeholders\":{\"configuration_data\":\"{ \\\\\"open_node\\\\\": true }\",\"css\":\".gobierto_planification section.level_0 .cat_1 { background-color: rgba(0, 191, 255, 0.95); }\",\"footer\":\"Peu de p\u00E0gina del pla\",\"introduction\":\"Introducci\u00F3 del pla\",\"slug\":\"sobre-de-aquest-pla\",\"title\":\"T\u00EDtol del pla\",\"year\":2018},\"projects\":\"Projectes\",\"publish_last_version_automatically\":\"Publicar les versions noves dels projectes autom\u00E0ticament\"},\"import_csv\":{\"defaults\":{\"category\":{\"one\":\"element de nivell %{level}\",\"other\":\"elements de nivell %{level}\"},\"project\":{\"one\":\"projecte\",\"other\":\"projectes\"}},\"latest_update\":\"\u00DAltima actualitzaci\u00F3: %{datetime}\",\"no_data\":\"Encara no hi ha dades carregades\",\"there_are\":\"Hi ha %{info}\",\"title\":\"Importa CSV\"},\"import_csv_form\":{\"confirm_import\":\"N\\'est\u00E0s segur?\",\"custom_fields_table_plugin\":\"Camps personalitzats (plugin de taula)\",\"disable_with\":\"Carregant...\",\"more_info_html\":\"Per obtenir m\u00E9s informaci\u00F3 visita la documentaci\u00F3 \\\\u003ca href=\\\\\"%{url}\\\\\" target=\\\\\"_blank\\\\\"\\\\u003eImportar datos de un plan\\\\u003c/a\\\\u003e.\",\"plan_content\":\"Contingut del pla\",\"submit\":\"Importa des de fitxer CSV\",\"vocabulary_used_by_other_plans\":\"El vocabulari configurat per aquest pla ja est\u00E0 configurat per a algun altre. Si us plau, crea un vocabulari nou per aquest pla o elimina-de la configuraci\u00F3 dels altres plans que ho estiguin fent servir, at\u00E8s que s\\'esborrarien les seves dades amb la importaci\u00F3.\",\"warning\":\"\\\\u003cstrong\\\\u003eAv\u00EDs\\\\u003c/strong\\\\u003e A l\\'importar des d\\'un fitxer CSV, si el pla est\u00E0 buit s\\'afegiran termes als vocabularis associats amb categories i camps personalitzats a mesura que es trobin, per\u00F2 si el pla ja cont\u00E9 dades, al tractar-se d\\'una actualitzaci\u00F3, es produiran errors per als termes que no es trobin en els respectius vocabularis.\"},\"import_data\":{\"missing_file\":\"Es necessari seleccionar un fitxer per a la importaci\u00F3.\",\"success_html\":\"Les dades s\\'han importat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el pla\\\\u003c/a\\\\u003e.\"},\"index\":{\"header\":{\"elements\":\"Elements\",\"status\":\"Estat\",\"title\":\"T\u00EDtol\",\"type\":\"Tipus\",\"year\":\"Any\"},\"new\":\"Nou\",\"title\":\"Plans\",\"types\":\"Tipus\",\"view_plan\":\"Veure pla\",\"visibility_level\":{\"draft\":\"Esborrany\",\"published\":\"Publicat\"}},\"new\":{\"title\":\"Nou pla\"},\"recover\":{\"success\":\"El pla s\\'ha recuperat correctament.\"},\"update\":{\"success_html\":\"El tipus de pla s\\'ha actualizat correctament. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVeure el pla\\\\u003c/a\\\\u003e.\"}},\"projects\":{\"create\":{\"success\":\"El projecte s\\'ha creat correctament.\"},\"destroy\":{\"success\":\"El projecte s\\'ha esborrat correctament.\"},\"filter_form\":{\"author\":\"Autor\",\"category\":\"Categoria\",\"clear_filters\":\"Netejeu filtres\",\"filter\":\"Filtrar\",\"interval\":\"Rang de dates\",\"progress\":\"Progr\u00E9s\",\"search\":\"Cerca...\",\"status\":\"Estat\",\"submit\":\"Filtrar\"},\"filters_row\":{\"all\":\"Tots\",\"moderation_stage\":\"Moderaci\u00F3\",\"moderation_stage_value\":{\"approved\":\"Aprovats\",\"blank\":\"Sense moderaci\u00F3\",\"in_review\":\"En revisi\u00F3\",\"rejected\":\"No aprovats\",\"sent\":\"Enviat\",\"unsent\":\"No enviats\"},\"total\":\"Total\",\"versions_visibility_level\":\"Publicaci\u00F3\",\"versions_visibility_level_value\":{\"draft\":\"Esborrany\",\"published_up_to_date\":\"Publicat actualitzat\",\"published_with_unpublished_changes\":\"Publicat amb canvis sense publicar\"}},\"find_versioned_project\":{\"unavailable_version\":\"Versi\u00F3 no disponible\"},\"form\":{\"button\":{\"add_dashboard\":\"Afegir a un dashboard\"},\"placeholders\":{\"name\":\"T\u00EDtol del projecte\"}},\"index\":{\"headers\":{\"progress\":\"Progr\u00E9s\",\"project\":\"Projecte\",\"status\":\"Estat\",\"updated\":\"Actualitzat\",\"visibility_level\":\"Publicaci\u00F3\"},\"new\":\"Nou\",\"title\":\"Projectes de %{name}\",\"view\":\"Veure \u00EDtem\"},\"new\":{\"title\":\"Nou projecte\"},\"publish\":{\"confirm\":\"Vas a publicar aquest projecte, de manera que qualsevol usuari podr\u00E0 veure-ho.\",\"error\":\"El projecte no s\\'ha pogut publicar.\",\"success\":\"El projecte s\\'ha publicat correctament.\"},\"send\":{\"confirm\":\"Vas a enviar aquest projecte a un moderador per a la seva validaci\u00F3.\"},\"unpublish\":{\"error\":\"El projecte no s\\'ha pogut despublicar.\",\"success\":\"El projecte s\\'ha despublicat correctament.\"},\"update\":{\"moderation_reset\":\"Com que has modificat el projecte i no tens permisos de moderaci\u00F3 el seu estat ha estat mogut a No enviat.\",\"no_changes\":\"No s\\'han produ\u00EFt canvis al projecte. Mantenint la versi\u00F3 actual.\",\"success\":\"El projecte s\\'ha actualitzat correctament.\",\"suggest_unpublish_html\":\"El projecte est\u00E0 sense aprovar per\u00F2 publicat. \\\\u003ca rel=\\\\\"nofollow\\\\\" data-method=\\\\\"post\\\\\" href=\\\\\"%{url}\\\\\"\\\\u003eDespublicar\\\\u003c/a\\\\u003e.\"}},\"shared\":{\"navigation\":{\"configuration_tab\":\"Configuraci\u00F3\",\"dashboards_tab\":\"Dashboards\",\"plan_terms_tab\":\"Pla\",\"projects_tab\":\"Projectes\"}}},\"gobierto_visualizations\":{\"configuration\":{\"settings\":{\"edit\":{\"title\":\"Configuraci\u00F3 dels Visualitzacions\",\"update\":\"Actualitzar\"},\"title\":\"Preferencies\",\"update\":{\"error\":\"Hi ha hagut un error al desar la configuraci\u00F3: %{validation_errors}\",\"success\":\"Configuraci\u00F3 guardada correctament\"}}}},\"layouts\":{\"application\":{\"admin_dropdown\":{\"account\":\"El teu compte\",\"sign_out\":\"Tancar sessi\u00F3\"},\"calendars\":\"Agendes\",\"cms\":\"CMS\",\"collapse_menu\":\"Colapsar men\u00FA\",\"custom_fields\":\"Camps personalitzats\",\"dirty_forms\":{\"message\":\"Hi ha canvis sense desar. Est\u00E0s segur de voler continuar?\"},\"edit_site\":\"Personalitzar site\",\"file_attachments\":\"Documents\",\"global\":\"General\",\"hey_admin\":\"Hola, %{admin_name}\",\"manage_sites\":\"Gestionar sites\",\"modules\":{\"budgets\":\"Pressupostos\",\"data\":\"Dades\",\"investments\":\"Inversions\",\"observatory\":\"Observatori\",\"people\":\"Alts c\u00E0rrecs i Agendes\",\"plans\":\"Plans\",\"visualizations\":\"Visualitzacions\"},\"notifications\":\"Notificacions\",\"site_network\":\"Xarxa\",\"templates\":\"Plantilles\",\"users\":\"Usuaris\",\"view_documentation\":\"Veure documentaci\u00F3\",\"view_item\":\"Veure \u00EDtem\",\"view_site\":\"Veure site\",\"vocabularies\":\"Vocabularis\"}},\"module_helper\":{\"not_enabled\":\"No est\u00E0s autoritzat a realitzar esta acci\u00F3\"},\"session_helper\":{\"already_signed_in\":\"Ja est\u00E1s identificat\",\"not_authorized\":\"No est\u00E0s autoritzat a realitzar aquesta acci\u00F3\",\"not_signed_in\":\"Has d\\'estar identificat per continuar\"},\"sessions\":{\"create\":{\"error\":\"Les dades que has introduit no semblen ser v\u00E0lides. Per favor, tria de nou.\",\"success\":\"Sessi\u00F3 iniciada correctament\"},\"destroy\":{\"success\":\"Sessi\u00F3 tancada correctament\"},\"form\":{\"email\":\"Email\",\"password\":\"Contrasenya\",\"submit\":\"Enviar\"},\"new\":{\"forgot_your_password\":\"Has oblidat la contrasenya?\",\"title\":\"Iniciar sessi\u00F3\"}},\"shared\":{\"admin_widget_attachment\":{\"add_new_document\":\"Afegeix nou document\",\"attachments\":\"Documents\",\"copy_to_clipboard\":\"Copia URL\",\"description\":\"Descripci\u00F3\",\"document\":\"Document\",\"document_title\":\"T\u00EDtol del document\",\"drag_document_here\":\"Arrastra i solta el document aqu\u00ED\",\"edit_document\":\"Editar document\",\"include_file\":\"Incloure arxiu\",\"include_in_text\":\"Incloure arxiu en el text\",\"latest_documents\":\"\u00DAltims documents afexits\",\"no_docs\":\"No hi ha documents\",\"or\":\"o\",\"save\":\"Desar\",\"search\":\"Cercar\",\"select_file\":\"Tria un arxiu del disc dur\"},\"archive\":{\"confirm\":\"\u00BFSegur que vols arxivar aquest element? No es mostrar\u00E0 al front ni en llistes com aquesta. Vost\u00E8 podr\u00E0 recuperar-lo.\",\"element\":\"Arxivar aquest element\",\"elements\":\"Elements arxivats\"},\"draft\":\"Borrador\",\"form_locale_switchers\":{\"define_content_in_locale\":\"Defineix el contingut en la versi\u00F3 en %{locale_name}\",\"translate\":\"Traduxir\"},\"moderation_save_widget\":{\"change_moderation_status\":\"Canvia l\\'estat de moderaci\u00F3\",\"confirm\":\"Est\u00E0s segur?\",\"confirm_moderation_blocked_update\":\"Est\u00E0s segur? Si deseu modificacions en aquest projecte l\\'estat s\\'actualitzar\u00E0 a No enviat.\",\"edit_version\":\"Editant versi\u00F3\",\"last_versions\":\"\u00DAltimes versions\",\"minor_change\":\"Canvi menor (no guarda versi\u00F3)\",\"moderation\":\"Moderaci\u00F3\",\"moderation_info\":{\"new\":\"Un cop guardis el teu contingut, podr\u00E0s enviar-lo a moderaci\u00F3.\",\"publicable\":\"Fes click a Publicar perqu\u00E8 aquesta versi\u00F3 sigui visible p\u00FAblicament.\",\"publicable_html\":\"Fes click a Publicar perqu\u00E8 aquesta versi\u00F3 sigui visible p\u00FAblicament.\",\"published\":\"La versi\u00F3 actual \u00E9s la que est\u00E0 publicada.\",\"published_html\":\"La versi\u00F3 actual \u00E9s la que est\u00E0 publicada. \\\\u003ca rel=\\\\\"nofollow\\\\\" data-method=\\\\\"post\\\\\" href=\\\\\"%{url}\\\\\"\\\\u003eDespublicar\\\\u003c/a\\\\u003e.\",\"rejected\":\"La versi\u00F3 est\u00E0 rebutjada.\",\"sent\":\"El teu contingut ha estat enviat per a revisi\u00F3. Rebr\u00E0s una notificaci\u00F3 quan s\\'aprovi o et demanin canvis.\",\"unsent\":\"Quan el teu contingut estigui llest per a ser revisat per un moderador, fes click a Enviar.\"},\"moderation_status\":{\"approved\":\"Aprovat\",\"in_review\":\"En revisi\u00F3\",\"rejected\":\"No aprovat\",\"sent\":\"Enviat\",\"unsent\":\"No enviat\"},\"new_version\":\"Nova (no guardada)\",\"preview\":\"Previsualitzar\",\"previous_versions\":\"Versions anteriors\",\"publication_status\":{\"approved\":\"Publicada\",\"not_published\":\"No publicada\"},\"publish\":\"Publicar\",\"publish_last_version_automatically\":\"Publica autom\u00E0ticament aquesta versi\u00F3\",\"publish_status\":\"Estat\",\"published_version\":\"Versi\u00F3 publicada\",\"published_version_blank\":\"sense publicar encara\",\"save\":\"Guardar\",\"see_all\":\"veure totes\",\"send\":\"Enviar\",\"unpublish\":\"Despublicar\"},\"module\":\"M\u00F2dul\",\"recover\":{\"confirm\":\"Si es recupera un element, es tornar\u00E0 a llistar de nou.\",\"element\":\"Recuperar element\"},\"resource_admin_permissions_button\":{\"permissions\":\"Permisos\"},\"save_widget\":{\"save\":\"Guardar\",\"visibility_level\":{\"active\":\"P\u00FAblic\",\"draft\":\"Borrador\",\"published\":\"P\u00FAblic\"}}},\"sites\":{\"create\":{\"success\":\"El lloc s\\'ha creat correctament\"},\"destroy\":{\"success\":\"El lloc s\\'ha eliminat correctament\"},\"edit\":{\"title\":\"Personalitzar lloc\"},\"form\":{\"admin_authentication_modules\":\"Estrat\u00E8gies d\\'autenticaci\u00F3 per admins\",\"authentication_modules\":\"Estrat\u00E8gies d\\'autenticaci\u00F3 per a usuaris\",\"hints\":{\"domain\":{\"a_record\":\"Entrada A a %{target}\",\"cname_record\":\"Entrada CNAME a %{target}\",\"if_domain\":\"Si es un domini\",\"if_subdomain\":\"Si es un subdomini\",\"instructions\":\"Important: aquest domini deur\u00E0 estar creant previament per a que el lloc funcione correctament.\"},\"organization_id_html\":\"Pots buscar el codi \\\\u003ca href=\\\\\"https://populatetools.github.io/ine-places/places.html\\\\\" target=\\\\\"_blank\\\\\"\\\\u003een aquesta taula\\\\u003c/a\\\\u003e.\"},\"modules_enabled\":\"M\u00F3duls actius para aquest lloc\",\"password\":\"Contrasenya\",\"placeholders\":{\"domain\":\"gobierto.burjassot.es\",\"google_analytics_id\":\"UA-000000-01\",\"name\":\"Ajuntament de Burjassot\",\"organization_name\":\"Burjassot\",\"populate_data_api_token\":\"Token de API de Populate Data\",\"reply_to_email\":\"contacte@email.com\",\"title\":\"Transparencia i Participci\u00F3\"},\"registration\":\"Registre d\\'usuaris\",\"registration_disabled\":\"Deshabilitar el registre (nom\u00E9s oculta els enlla\u00E7os al registre/login)\",\"username\":\"Noe d\\'usuari\",\"visibility_level\":{\"active\":\"Publicat\",\"draft\":\"Borrador\"}},\"index\":{\"configuration\":\"Configuraci\u00F3\",\"header\":{\"created_at\":\"Creat\",\"domain\":\"Domini\",\"site\":\"Lloc\",\"status\":\"Estat\"},\"new\":\"Crear lloc\",\"title\":\"Sites\",\"view_site\":\"Veure lloc\"},\"new\":{\"title\":\"Crear lloc\"},\"pages\":\"P\u00E0gines\",\"sections\":\"Seccions\",\"update\":{\"success\":\"El lloc s\\'ha actualizat correctament\"}},\"users\":{\"edit\":{\"title\":\"Editar Usuari\"},\"form\":{\"change_password\":\"Canviar contrasenya\",\"password_block\":\"Contrasenya\",\"placeholders\":{\"email\":\"fgonzalez@gmail.com\",\"name\":\"Fernando Gonz\u00E1lez\"},\"resend_welcome_email\":\"Reenviar Email de benvinguda\",\"resend_welcome_email_notes\":\"amb enlla\u00E7 per canviar la contrasenya\"},\"index\":{\"admins_section\":\"Administradors\",\"census_configuration\":\"Cens\",\"header\":{\"created_at\":\"Creat\",\"email\":\"Email\",\"last_sign_in_at\":\"\u00DAltim login\",\"user\":\"Usuari\",\"verified\":\"Verificat\"},\"title\":\"Usuaris\",\"users\":{\"one\":\"%{count} usuari\",\"other\":\"%{count} usuaris\"},\"users_confirmed\":{\"one\":\"%{count}% confirmat\",\"other\":\"%{count}% confirmats\"},\"users_verified\":{\"one\":\"%{count}% verificat\",\"other\":\"%{count}% verificats\"},\"view_user\":\"Veure usuari\"},\"passwords\":{\"create\":{\"error\":\"Hi ha hagut un problema al canviar la contrasenya del usuari\",\"success\":\"La contrasenya del usuari s\\'ha canviat correctamente\"},\"form\":{\"submit\":\"Enviar\"},\"new\":{\"title\":\"Canviar contrasenya d\\'usuari\"}},\"session_information\":{\"created_at\":\"Creat\",\"last_sign_in\":\"\u00DAltim login\",\"site\":\"Site\"},\"update\":{\"success\":\"El Usuari s\\'ha actualitzat correctament\"},\"welcome_messages\":{\"create\":{\"error\":\"El missatge de benvinguda no s\\'ha pogut enviar. Per favor, tria de nou.\",\"success\":\"El missatge de benvinguda s\\'ha enviat\"}}},\"welcome\":{\"index\":{\"title\":\"Inici\"}}},\"gobierto_attachments\":{\"events\":{\"gobierto_attachments_attachment_created\":\"Document s\\'ha creat\",\"gobierto_attachments_attachment_updated\":\"Document s\\'ha actualitzat\"}},\"gobierto_budgets\":{\"budget_lines\":{\"explorer\":{\"examples\":\"Exemples\",\"expenses\":\"Despeses\",\"explore_the_detail\":\"Explora el detall\",\"income\":\"Ingressos\",\"search\":\"Cercar\",\"search_budget_line\":\"Cerca una partida espec\u00EDfica\"},\"index\":{\"amount\":\"Quantitat\",\"budget_guide_pitch\":\"Consulta la Guia del Pressupost\",\"budget_line\":\"Partida\",\"categories\":\"Categories pressupost\u00E0ries\",\"custom\":\"Personalitzada\",\"expense_in_what\":\"En qu\u00E8 es gasta\",\"expense_to_do_what\":\"Per a qu\u00E8 es gasta\",\"help\":\"T\\'expliquem com funciona un pressupost municipal\",\"income_from_what\":\"En qu\u00E8 s\\'ingressa\",\"per_inhabitant\":\"Per habitant\",\"title\":\"Pressupostos municipals en %{year}\"},\"show\":{\"about_this_line\":\"Sobre aquesta partida\",\"avg_province\":\"Mitjana %{kind} provincial\",\"avg_province_tooltip\":\"Mitjana d\\'aquesta partida en els municipis de la prov\u00EDncia\",\"back_to_parent\":\"Tornar a la partida pare\",\"budget_line_category\":\"Categoria\",\"budget_line_percentage\":\"Percentatge\",\"budget_line_value\":\"Quantitat\",\"budget_lines_distribution\":\"Distribuci\u00F3 de les despeses d\\'aquesta partida\",\"current_amount\":\"Pressupost actual\",\"current_amount_per_inhabitant\":\"Pressupost actual / hab.\",\"evolution\":\"Evoluci\u00F3\",\"give_your_opinion\":\"Opina sobre aquesta partida\",\"give_your_opinion_cta\":\"Entens de qu\u00E8 va aquesta partida? Et sembla molt, poc? Opina\",\"initial_estimate\":\"Pressupost inicial\",\"last_year\":\"L\\'any passat %{value}\",\"no_description\":\"No hi ha una descripci\u00F3 associada a aquesta partida.\",\"no_distribution\":\"No hi ha distribuci\u00F3 associada a aquesta partida.\",\"no_more_descendants\":\"No hi ha m\u00E9s subpartides\",\"not_available\":\"No disp.\",\"percentage\":\"% sobre el total del press.\",\"percentage_tooltip\":\"Percentage del pressupost total que suposa aquesta partida\",\"planned\":\"pressupostat\",\"planned_female\":\"pressupostada\",\"planned_per_inhabitant\":\"Pressupost inicial / hab.\",\"planned_per_inhabitant_tooltip\":\"Quantitat pressupostada dividida pel nombre d\\'habitants\",\"planned_tooltip\":\"Quantitat pressupostada\",\"raise_hand\":\"Al\u00E7a la m\u00E0\",\"real_value\":\"%{kind} real s\u00F3n %{value}\",\"real_vs_planned\":\"% execuci\u00F3\",\"real_vs_planned_tooltip\":\"Percentage de la partida que ha sigut executat\",\"sub_budget_lines\":\"Dins d\\'aquesta partida\",\"twitter_text_expense\":\"En @gobierto: Despesa municipal de %{name} en %{budget_line_name} al %{year}\",\"twitter_text_income\":\"En @gobierto: Ingr\u00E9s municipal de %{name} en %{budget_line_name} al %{year}\",\"updated\":\"actualitzat\",\"updated_female\":\"actualitzada\",\"vs_previous_year\":\"vs. exercici anterior\",\"vs_previous_year_tooltip\":\"Comparaci\u00F3 amb les dades de l\\'exercici anterior\"}},\"budgets\":{\"guide\":{\"budget_execution\":\"L\\'execuci\u00F3 pressupost\u00E0ria\",\"budget_execution_p1_html\":\"Aprovar un pressupost no vol dir que es quedi escrit en una pedra. Al llarg de l\\'any sorgeixen imprevistos que canvien la quantitat o la finalitat de les despeses. Aquests canvis s\u00F3n els que s\u2019anomenen l\u2019\\\\u003ca href=/presupuestos/ejecucion/%{year}\\\\\"\\\\u003eexecuci\u00F3 pressupost\u00E0ria\\\\u003c/a\\\\u003e.\",\"budget_execution_p2\":\"Per saber si l\u2019Ajuntament ha planificat b\u00E9 els comptes nom\u00E9s hem de comparar el pressupost i l\\'execuci\u00F3: ha gastat m\u00E9s del pressupostat? Li han sobrat diners? O s\\'ha ajustat al que preveia?\",\"capital_income\":\"Ingressos de capital\",\"capital_income_p1\":\"Procedeixen de la venda de propietats municipals com solars o finques. Tamb\u00E9 poden procedir de transfer\u00E8ncies d\u2019altres administracions (inclosos fons europeus) per a la realitzaci\u00F3 d\u2019inversions.\",\"classification\":\"Classificaci\u00F3 pressupost\u00E0ria\",\"classification_p1\":\"En aquesta eina, els ingressos estan classificats tenint en compte la seva naturalesa econ\u00F2mica, que estableix el seu origen. I les despeses, d\\'altra banda, estan classificades de dues formes: a partir de criteris de programa (en qu\u00E8 es gasten els diners) i econ\u00F2mics (com es gasten aquests diners).\",\"debt\":\"Quant deu el municipi\",\"description\":\"El pressupost municipal \u00E9s el pla econ\u00F2mic i financer que explica com l\u2019Ajuntament gestiona els diners p\u00FAblics per donar resposta a les necessitats del municipi. Serveix per planificar, programar, controlar i avaluar les actuacions municipals i fer el seguiment de les finances. \u00C9s una eina de car\u00E0cter anual i especifica les previsions d\u2019ingressos i despeses. Aqu\u00ED t\\'expliquem els conceptes m\u00E9s importants perqu\u00E8 siguin m\u00E9s comprensibles.\",\"economic\":\"Despesa econ\u00F2mica\",\"economic_p1\":\"\u00C9s la classificaci\u00F3 que indica la naturalesa de la despesa. Per exemple, \\\\\"despeses de personal\\\\\", que engloba els sous de tots els treballadors i treballadores de l\u2019Ajuntament.\",\"economic_p2\":\"En un pressupost oficial, els apartats principals es diuen cap\u00EDtols. I al seu torn, cada cap\u00EDtol es divideix en articles, conceptes i subconceptes.\",\"execution\":\"Execuci\u00F3 pressupost\u00E0ria\",\"expense_economic_1_desc\":\"Sous de funcionaris, personal laboral, \u00F2rgans de govern, personal directiu i eventual, aix\u00ED com les cotitzacions a la Seguretat Social i les despeses de formaci\u00F3.\",\"expense_economic_2_desc\":\"Subministraments, reparacions, materials i despeses de serveis o treballs realitzats per empreses externes contractades.\",\"expense_economic_3_desc\":\"Pagament d\\'interessos derivats d\\'operacions financeres.\",\"expense_economic_4_desc\":\"Aportacions a d\u2019altres entitats locals o empreses privades per finan\u00E7ar activitats o serveis, com els ajuts socials, beques, etc.\",\"expense_economic_5_desc\":\"S\u00F3n diners que cobreixen situacions d\\'emerg\u00E8ncia i despeses no previstes. La seva quantia est\u00E0 delimitada a la normativa.\",\"expense_economic_6_desc\":\"Construcci\u00F3 o rehabilitaci\u00F3 d\u2019equipaments, adquisici\u00F3 de maquin\u00E0ria o de b\u00E9ns inventariables aix\u00ED com totes les actuacions que incrementin la vida \u00FAtil del patrimoni municipal.\",\"expense_economic_7_desc\":\"S\u00F3n aportacions o transfer\u00E8ncies a d\u2019altres administracions i/o entitats per a la realitzaci\u00F3 de projectes d\u2019inversi\u00F3.\",\"expense_economic_8_desc\":\"Inclouen bestretes de personal, compra de valors financers, etc.\",\"expense_economic_9_desc\":\"Amortitzaci\u00F3 de pr\u00E9stecs i cr\u00E8dits.\",\"expense_functional_0_desc\":\"Aquesta partida es destina a pagar el deute acumulat per l\\'ajuntament.\",\"expense_functional_1_desc\":\"Cobreix les necessitats obligat\u00F2ries del municipi: clavegueram, neteja, enllumenat, seguretat, etc.\",\"expense_functional_2_desc\":\"S\u00F3n els diners que es destinen a actuacions assistencials i preventives. Per exemple, serveis socials, el foment de l\\'ocupaci\u00F3, Rescat Social, etc.\",\"expense_functional_3_desc\":\"Fa refer\u00E8ncia als serveis que milloren la qualitat de vida de la ciutadania: educaci\u00F3, cultura, esports, salut, etc.\",\"expense_functional_4_desc\":\"Inclou accions que ajuden a desenvolupar el potencial dels diferents sectors econ\u00F2mics, com infraestructures i transports.\",\"expense_functional_9_desc\":\"S\\'hi agrupen les despeses del mateix Ajuntament, com serveis de car\u00E0cter general o transfer\u00E8ncies a d\u2019altres organismes p\u00FAblics.\",\"expenses\":\"Despeses\",\"expenses_how\":\"A qu\u00E8 dedica l\\'Ajuntament els diners de la ciutadania? Les despeses es poden classificar de dues maneres: des del punt de vista de programa (en qu\u00E8 es gasta) i econ\u00F2mic (com es gasta). Des del punt de vista de programa, els diners es poden destinar a pagar deute p\u00FAblic, serveis p\u00FAblics o actuacions de promoci\u00F3 social, entre d\\'altres. I des del punt de vista econ\u00F2mic, s\\'utilitzen per pagar despeses de personal, manteniment d\\'equipaments i serveis, despeses financeres o transfer\u00E8ncies a les entitats de la ciutat (subvencions) i a d\\'altres administracions.\",\"expenses_per_inhabitant\":\"La despesa per habitant va ser de ...\",\"expenses_types\":\"Tipus de despesa\",\"expenses_types_p1\":\"Com fa servir l\\'Ajuntament els diners del pressupost? Les despeses es poden classificar de dues maneres: des del punt de vista de programa (en qu\u00E8 es gasta) i econ\u00F2mic (com es gasta). La quantitat de diners \u00E9s la mateixa, per\u00F2 la veiem des de dos punts de vista diferents.\",\"financial_income\":\"Ingressos financers\",\"financial_income_p1\":\"Poden ser interessos de dip\u00F2sits bancaris, dividents d\u2019accions o productes financers i noves operacions d\u2019endeutament.\",\"functional\":\"Despesa per programa\",\"functional_p1\":\"\u00C9s la classificaci\u00F3 m\u00E9s explicativa: indica, per exemple, quants diners es gasta l\u2019Ajuntament en la gesti\u00F3 de residus o en instal\u00B7lacions esportives, per exemple. En un pressupost oficial les despeses s\u2019estructuren en \u00E0rees i aquestes es divideixen en diferents tipologies de pol\u00EDtiques (promoci\u00F3 de l\u2019activitat econ\u00F2mica, culturals, esportives, ocupacionals, etc.), i tamb\u00E9 en grups i programes. Aquest nivell de profunditat permet con\u00E8ixer amb detall on van els diners.\",\"functional_p2\":\"\",\"how_much_debt\":\"Quant deu el municipi?\",\"how_much_debt_p1\":\"El deute viu d\\'un municipi indica el que deu l\\'Ajuntament a bancs i altres entitats financeres. Cal no confondre\u2019l amb el total del d\u00E8ficit del municipi (la difer\u00E8ncia entre els ingressos i les despeses).\",\"how_much_debt_p2\":\"\",\"how_much_debt_p3\":\"\",\"how_to_read\":\"Com es llegeix?\",\"how_to_read_p1_html\":\"Tots els pressupostos municipals tenen la mateixa estructura, definida legalment en l\\'\\\\u003ca href=\\\\\"https://www.boe.es/buscar/doc.php?id=BOE-A-2008-19916\\\\\"\\\\u003eOrdre EHA / 3565/2008\\\\u003c/a\\\\u003e. L\\'estructura b\u00E0sica \u00E9s senzilla: es divideix en ingressos i despeses. \u00C9s a dir, respon a les preguntes: d\\'on surten els diners? (ingressos) i en qu\u00E8 es gasten? (despeses).\",\"income\":\"Ingressos\",\"income_1_desc\":\"Graven la font de la renda, els fruits del patrimoni o d\\'una activitat econ\u00F2mica. Per exemple, l\u2019Impost de B\u00E9ns Immobles (IBI).\",\"income_2_desc\":\"Recull els ingressos derivats de la recaptaci\u00F3 d\u2019impostos per a la realitzaci\u00F3, dins del terme municipal, de qualsevol construcci\u00F3, instal\u00B7laci\u00F3 i obra.\",\"income_3_desc\":\"Imports que cobra l\\'Ajuntament per oferir serveis, com la taxa per la gesti\u00F3 dels residus,  els preus p\u00FAblics per serveis com escoles bressol, escola de m\u00FAsica, serveis d\\'atenci\u00F3 domiciali\u00E0ria, esportius, etc.\",\"income_4_desc\":\"Diners que l\\'Ajuntament rep de l\\'Estat, la Generalitat, la Diputaci\u00F3 de Barcelona, l\\'\u00C0rea Metropolitana de Barcelona i empreses privades (en alguns ajuntaments).\",\"income_5_desc\":\"Rendes de patrimoni del municipi. S\u00F3n els beneficis sobre b\u00E9ns que no es destinen a servei p\u00FAblic. Per exemple, els c\u00E0nons derivats de concessions, com la piscina, el tanatori, etc.\",\"income_6_desc\":\"Venda de solars i finques r\u00FAstiques.\",\"income_7_desc\":\"Ingressos procedents de qualsevol administraci\u00F3 p\u00FAblica o entitat destinats a finan\u00E7ar despeses de capital (solars o finques).\",\"income_8_desc\":\"S\u00F3n fiances o dip\u00F2sits.\",\"income_9_desc\":\"Cr\u00E8dits sol\u00B7licitats a bancs o a d\u2019altres entitats privades.\",\"income_p1\":\"Els ingressos es divideixen segons la seva naturalesa econ\u00F2mica, \u00E9s a dir, d\\'on venen els diners: a trav\u00E9s d\\'impostos, transfer\u00E8ncies d\\'altres administracions, taxes i preus p\u00FAblics o b\u00E9 de la gesti\u00F3 per tercers del patrimoni municipal. I tamb\u00E9 es divideixen segons la forma, \u00E9s a dir, si \u00E9s un cr\u00E8dit bancari, una propietat municipal que s\\'ha venut o un impost.\",\"income_p2\":\"En %{year} es van ingressar...\",\"intro_p1\":\"L\u2019equip de govern dissenya el pressupost i el redacta amb els serveis econ\u00F2mics. Posteriorment s\u2019informa i es treballa amb tots els grups municipals. En paral\u00B7lel s\u2019informa la ciutadania i les entitats en un acte p\u00FAblic i per \u00FAltim es presenta al ple municipal per al seu debat i aprovaci\u00F3.\",\"intro_p2\":\"Un cop aprovat al ple s\u2019obre un per\u00EDode de quinze dies perqu\u00E8 la ciutadania i els grups municipals facin al\u00B7legacions. Tot seguit, si no es produeixen al\u00B7legacions, queda aprovat definitivament.\",\"intro_p3\":\"Perqu\u00E8 el pressupost estigui vigent l\u20191 de gener ha de quedar aprovat definitivament abans del 31 de desembre de l\\'any anterior, si no es prorroga de forma autom\u00E0tica el de l\u2019any anterior.\",\"regular_income\":\"Ingressos corrents\",\"regular_income_p1\":\"Els impostos, els diners que les administracions transfereixen a cada municipi, i taxes i preus p\u00FAblics que recapta l\\'Ajuntament s\u00F3n els m\u00E9s habituals.\",\"sources\":\"Fonts\",\"sources_p1_html\":\"Per elaborar aquesta guia hem pres com a refer\u00E8ncia l\\'estructura oficial d\\'un pressupost municipal, definida a la \\\\u003ca href=\\\\\"https://www.boe.es/buscar/doc.php?id=BOE-A-2008-19916\\\\\"\\\\u003eOrdre EHA / 3565/2008\\\\u003c/a\\\\u003e i ens hem inspirat en altres documents com \\\\u003ca href=\\\\\"http://www.ocmcartagena.org/files/archive/Entendiendo-un-presupuesto-municipal.pdf\\\\\"\\\\u003eEntenent un pressupost municipal\\\\u003c/a\\\\u003e i \\\\u003ca href=\\\\\"https://docs.google.com/presentation/d/1oysDrJvlFxP0sKlzBalxvrV3lzSE5OCSKY7qd5yYpcA/pub?start=false\\\\u0026loop=false\\\\u0026delayms=3000\\\\u0026slide=id.p\\\\\"\\\\u003eGuia d\\'introducci\u00F3 als pressupostos municipals\\\\u003c/a\\\\u003e .\",\"title\":\"Com funciona un pressupost municipal\",\"types_income\":\"Tipus d\\'ingr\u00E9s\",\"types_income_p1\":\"Els ingressos tal com estableix la llei es divideixen en tres apartats:\",\"types_income_p2\":\"\",\"types_income_p3\":\"\"},\"index\":{\"at_a_glance\":\"Evoluci\u00F3 de la despesa i comparaci\u00F3\",\"at_years_end\":\"* a final del %{year}\",\"budget_guide\":\"Llegeix la Guia del Pressupost\",\"budget_lines_block\":{\"intro\":\"Aquestes s\u00F3n les partides del pressupost m\u00E9s importants al teu municipi.\",\"title\":\"Partides del pressupost\"},\"budget_receipt\":{\"intro\":\"Descobreix a qu\u00E8 es dediquen les teves aportacions\",\"title\":\"El rebut dels meus impostos\"},\"budget_slides\":{\"slide_1\":\"Gasto en asistencia social por habitante\",\"title\":\"Els pressupostos d\\'un cop d\\'ull\"},\"budgets_comparision\":{\"button\":\"Comparar\",\"text\":\"Compara el pressupost del %{site} amb el dels altres municipis des de\"},\"category_percentage\":\"Percentatge\",\"category_value\":\"Quantitat\",\"context\":\"Context\",\"data_of_year\":\"* dades del %{year}\",\"debt\":\"Deute\",\"debt_tooltip\":\"Deute del sector d\u2019administracions p\u00FAbliques %{of_the_organization_name}\",\"description\":\"En aquesta p\u00E0gina pots con\u00E8ixer la distribuci\u00F3 del pressupost, l\\'estat d\\'execuci\u00F3 de cada partida i com ha evolucionat la despesa per habitant\",\"executed\":\"Execuci\u00F3 del pres. actual\",\"executed_percent\":\"%{percentage}% del pressupost actual\",\"executed_percent_other_year_html\":\"El %{year} va ser un %{link}\",\"executed_tooltip\":\"Despesa executada respecte el pressupost actual (pressupost inicial m\u00E9s modificacions)\",\"execution_block\":{\"button\":\"Consulta l\\'execuci\u00F3 al complet\",\"expense\":\"Despesa\",\"income\":\"Ingressos\",\"intro\":\"Aix\u00ED s\\'est\u00E0 executant el pressupost municipal.\",\"last_update\":\"Darrera actualitzaci\u00F3: %{date}.\",\"title\":\"Execuci\u00F3\"},\"expenses\":\"Despeses\",\"expenses_per_inhabitant\":\"Despesa per habitant\",\"expenses_per_inhabitant_tooltip\":\"Pressupost inicial dividit pel nombre d\u2019habitants\",\"expenses_per_inhabitant_updated\":\"Pres. per hab. actual\",\"header\":\"Pressupostos\",\"in_total\":\"En total\",\"income\":\"Ingressos\",\"income_per_inhabitant\":\"Ingressos per habitant\",\"income_per_inhabitant_tooltip\":\"Pressupost inicial dividit pel nombre d\u2019habitants\",\"inhabitants\":\"Habitants\",\"inhabitants_tooltip\":\"Nombre d\u2019habitants\",\"initial_estimate\":\"sobre el pres. inicial\",\"initial_estimate_per_inhabitant\":\"sobre el pres. inicial per hab.\",\"less\":\"menys\",\"level_1_category\":\"Categoria nivell 1\",\"level_2_category\":\"Categoria nivell 2\",\"main_budget_levels_legend_down\":\"Han baixat\",\"main_budget_levels_legend_one\":\"Canvi entre aquest any\",\"main_budget_levels_legend_two\":\"i el passat\",\"main_budget_levels_legend_up\":\"Han pujat\",\"main_budget_levels_per_inhabitant\":\"per habitant\",\"main_budget_levels_timeline\":\"Compara despeses i ingressos any per any\",\"main_budget_levels_tooltip_article\":\"des de\",\"main_budget_levels_tooltip_down\":\"Ha baixat un\",\"main_budget_levels_tooltip_up\":\"Ha pujat un\",\"main_budget_lines\":\"Els principals ingressos i despeses %{from_your_organization_name}\",\"main_budget_lines_expense\":\"Despeses\",\"main_budget_lines_income\":\"Ingressos\",\"more\":\"m\u00E9s\",\"most_interesting_budget_lines\":\"Despeses que m\u00E9s t\\'interessen\",\"most_interesting_budget_lines_description\":\"Et mostrem algunes de les partides que m\u00E9s afecten en el dia a dia de la ciutadania. Tamb\u00E9 pots consultar l\\'explorador complet.\",\"not_available_short\":\"No disp.\",\"note_about_the_data\":\"Nota sobre les dades\",\"note_about_the_data_title\":\"La base de dades que utilitzem no inclou dades per al 100% dels municipis, aix\u00ED que les mitjanes estan calculades amb les dades que existeixen (que s\u00F3n la gran majoria). M\u00E9s informaci\u00F3 a les nostres preguntes freq\u00FCents.\",\"per_person\":\"Per habitant\",\"planned_vs_executed_other_year_html\":\"En %{year} va ser un %{link}\",\"search_for_a_budget_line\":\"Cerca una partida\",\"see_all\":\"Veure tots\",\"stories_header\":\"T\\'expliquem el pressupost\",\"story_1\":{\"lede\":\"Et contem quines s\u00F3n les prioritats pressupuest\u00E0ries per al 2017 segons les quals hem articulat el pla econ\u00F2mic.\",\"title\":\"Actuacions de car\u00E0cter general\"},\"story_2\":{\"lede\":\"Et contem quines s\u00F3n les prioritats pressupuest\u00E0ries per al 2017 segons les quals hem articulat el pla econ\u00F2mic.\",\"title\":\"Pressupostos i medi ambient\"},\"story_3\":{\"lede\":\"Et contem quines s\u00F3n les prioritats pressupuest\u00E0ries per al 2017 segons les quals hem articulat el pla econ\u00F2mic.\",\"title\":\"Potenciant l\\'esport\"},\"title\":\"Pressupostos municipals de %{place} - %{year}\",\"top_expense_category\":\"Categoria\",\"top_expense_value\":\"Quantitat\",\"top_income_category\":\"Categoria\",\"top_income_value\":\"Quantitat\",\"total_expenses\":\"Despesa total\",\"total_expenses_tooltip\":\"Pressupost inicial de despesa\",\"total_expenses_updated\":\"Pressupost actual\",\"visualize\":\"Visualitza les despeses per habitant o el total\"}},\"budgets_elaboration\":{\"index\":{\"at_a_glance\":\"Evoluci\u00F3 de la despesa i comparaci\u00F3\",\"auto_funding\":\"Capacitat d\\'autofinan\u00E7ament\",\"auto_funding_tooltip\":\"Percentatge dels ingressos fiscals respecte als ingressos corrents\",\"by_custom_category\":\"per \u00E0rea\",\"by_economic_expense\":\"en qu\u00E8 es gasta\",\"by_economic_income\":\"en qu\u00E8 s\\'ingressa\",\"by_functional_expense\":\"per a qu\u00E8\",\"category_percentage\":\"% s/ Total\",\"category_value\":\"Quantitat\",\"context\":\"Context\",\"debt_level\":\"Nivell d\\'endeutament\",\"debt_level_tooltip\":\"Necessitat de financiaci\u00F3 external pera a poder pagar despeses, una vegada utilizats els recursos tributaris i subvencions i transfer\u00E8ncies\",\"description\":\"L\\'equip de govern publica l\u2019esborrany del pressupost del pr\u00F2xim exercici per compartir en obert amb l\\'oposici\u00F3 i els ve\u00EFns i ve\u00EFnes. Entre tots i totes podem elaborar el pressupost m\u00E9s adient per a %{place_name}.\",\"diff_previous\":\"vs. anterior\",\"expenses_per_inhabitant\":\"Despesa per habitant\",\"expenses_per_inhabitant_tooltip\":\"Pressupost inicial dividit pel nombre d\\'habitants\",\"explore_the_detail\":\"Explora el detall\",\"header\":\"Tramitaci\u00F3 del pressupost %{year}\",\"in_total\":\"En total\",\"income_per_inhabitant\":\"Ingressos per habitant\",\"income_per_inhabitant_tooltip\":\"Pressupost inicial dividit pel nombre d\u2019habitants\",\"main_budget_levels_timeline\":\"Compara despeses i ingressos any per any\",\"main_budget_lines\":\"Els principals ingressos i despeses %{from_your_organization_name}\",\"main_budget_lines_expense\":\"Despeses\",\"main_budget_lines_income\":\"Ingressos\",\"metric_boxes_data\":\"Les dades\",\"metric_boxes_data_description\":\"Aix\u00ED canviar\u00E0 el pressupost del proper exercici\",\"net_savings\":\"Estalviament net\",\"net_savings_tooltip\":\"Ingressos corrents menys despeses corrents i despeses financieres\",\"next_year_proposal\":\"Proposta per al %{year}\",\"no_data\":\"Ni ha dades per a aquesta classificaci\u00F3\",\"note_about_the_data\":\"Nota sobre les dades\",\"note_about_the_data_title\":\"La base de dades que utilitzem no inclou dades per al 100% dels municipis, aix\u00ED que les mitjanes estan calculades amb les dades que existeixen (que s\u00F3n la gran majoria). M\u00E9s informaci\u00F3 a les nostres preguntes freq\u00FCents.\",\"per_person\":\"Per habitant\",\"proposal\":\"Proposta\",\"total_expenses\":\"Despesa total\",\"total_expenses_tooltip\":\"Pressupost inicial\",\"total_income\":\"Ingr\u00E9s total\",\"total_income_tooltip\":\"Pressupost inicial d\\'ingressos\",\"visualize\":\"Visualitza la despesa per habitant o total\"}},\"budgets_execution\":{\"execution_table\":{\"deviation\":\"Desviaci\u00F3\",\"executed\":\"Executat\",\"planned\":\"Pres.\",\"view_less\":\"Veure menys\",\"view_more\":\"Veure m\u00E9s\"},\"index\":{\"budget_guide\":\"Consulta la Guia del pressupost\",\"budget_lines_expense_higher\":\"Partides de despeses molt superiors al pressupost\",\"budget_lines_expense_lower\":\"Partides de despeses molt inferiors al pressupost\",\"budget_lines_income_higher\":\"Partides d\\'ingressos molt superiors al pressupost\",\"budget_lines_income_lower\":\"Partides d\\'ingressos molt inferiors al pressupost\",\"category\":\"Categoria\",\"custom_button\":\"Personalitzada\",\"description\":\"L\\'execuci\u00F3 fa refer\u00E8ncia a les despeses finals comparades amb el pressupost inicial actualitzat. Hi poden haver canvis, perqu\u00E8 \u00E9s impossible preveure totes les despeses amb precisi\u00F3 absoluta\",\"economic\":\"Econ\u00F2mica\",\"economic_button\":\"En qu\u00E8 es gasta\",\"euros\":\"En euros\",\"execution_disclaimer\":\"Es normal que hi haja desviacions ja que \u00E9s impossible preveure totes les despeses amb precisi\u00F3 absoluta.\",\"execution_help\":\"L\\'execuci\u00F3 es la quantitat que finalment s\\'ha gastat sobre el pressupost inicial actualitzat.\",\"expenses_executed\":\"Despeses executades\",\"expenses_planned\":\"Despeses pressupostades\",\"functional\":\"Funcional\",\"functional_button\":\"Per a qu\u00E8 es gasta\",\"higher_execution\":\"M\u00E9s execuci\u00F3\",\"income_executed\":\"Ingressos executats\",\"income_planned\":\"Ingressos pressupostats\",\"initial_estimate\":\"Pressupost inicial\",\"initial_estimate_per_inhabitant\":\"Pressupost inicial per habitant\",\"lower_execution\":\"Menys execuci\u00F3\",\"metric\":{\"execution\":{\"expenses_title\":\"Execuci\u00F3 de despeses\",\"income_title\":\"Execuci\u00F3 d\\'ingressos\",\"previous_execution_message\":\"El %{year} l\\'execuci\u00F3 va ser del %{percentage}\"}},\"percentage\":\"Percentatge\",\"sort\":\"Ordre\",\"title\":\"Execuci\u00F3 pressupost\u00E0ria\",\"tooltip_disclaimer\":\"\\\\u003cstrong\\\\u003eAquesta \u00E9s una aproximaci\u00F3\\\\u003c/strong\\\\u003e. \\\\u003cbr /\\\\u003e Al llarg de l\\'any sorgeixen imprevistos que canvien la quantitat o la finalitat de les despeses o ingressos.\",\"value\":\"Valor\",\"vis\":{\"absolute\":\"Execuci\u00F3 en \u20AC\",\"empty_lines\":\"No hi ha dades disponibles per aquesta classificaci\u00F3 en aquest any. Per favor, selecciona un altre filtrat.\",\"expenses\":{\"title\":\"L\\'estat de l\\'execuci\u00F3 de les despeses\"},\"income\":{\"title\":\"L\\'estat de l\\'execuci\u00F3 dels ingressos\"},\"lines_title\":\"Partides pressupost\u00E0ries\",\"percent\":\"% de progr\u00E9s\",\"percent_log\":\"% de progr\u00E9s (log)\",\"tooltip\":\"S\\'ha executat un\",\"tooltip_budgeted\":\"Pressupostat inicial\",\"tooltip_budgeted_updated\":\"Pressupostat actualitzat\",\"tooltip_executed_amount\":\"Import executat\"}},\"widget_template_deviation\":{\"expense\":\"Despeses\",\"income\":\"Ingressos\",\"planned\":\"pressupostat\",\"real\":\"reals\"}},\"common\":{\"budget_line_description_html\":\"Aquesta partida compr\u00E8n les %{kind_what} en %{description}. Si vols saber m\u00E9s sobre aquesta partida pots consultar la partida pare: %{link}\",\"expense\":\"despesa\",\"expenses\":\"despeses\",\"income\":\"ingr\u00E9s\",\"incomes\":\"ingressos\"},\"events\":{\"gobierto_budgets_budgets_updated\":\"Pressuposts actualitzats\"},\"exports\":{\"budget_lines_description\":\"Compara despeses i ingressos any per any\",\"budget_lines_title\":\"Partides del pressupost\",\"invoices_description\":\"Dades per any\",\"invoices_title\":\"Prove\u00EFdors i Factures\"},\"featured_budget_lines\":{\"gobierto_site_template\":{\"how_much_place_in\":\"Quant es gasta %{place} en...\",\"last_year\":\"L\\'any passat vam gastar\",\"per_person\":\"Per habitant\",\"show_me_another\":\"Mostra\\'m un altre exemple\",\"title\":\"Algunes despeses destacades\",\"total\":\"Despesa total\"}},\"feedback\":{\"ask_more_information\":{\"ask_for_feedback\":\"Escriu el teu email per a que %{your_organization_name} et puga contestar\",\"send\":\"Enviar\",\"your_email\":\"El teu correu\"},\"follow\":{\"follow\":\"Seguir\",\"your_email\":\"El teu correu\"},\"follow_success\":{\"error\":\"Pareix que el correu introduit no es v\u00E0lid. Per favor revisa-ho\",\"share\":\"Vols compartir aquestes dades en\",\"share_text\":\"Informat i opina sobre el pressupost de %{place_name}\",\"success\":\"Molt b\u00E9! Revisa el teu correu i fes click en el enlla\u00E7 que t\\'hem enviat\"},\"step1\":{\"answer1_0\":\"Si\",\"answer1_1\":\"No\",\"understand\":\"Entens de qu\u00E8 va aquesta partida?\"},\"step2_no\":{\"answer_html\":\"El \\\\u003cstrong\\\\u003e%{datum}\\\\u003c/strong\\\\u003e de persones han dit que \\\\u003cstrong\\\\u003eNo entenen de qu\u00E8 va aquesta partida\\\\u003c/strong\\\\u003e\",\"ask\":\"Pots demanar ampliar la informaci\u00F3 sobre aquesta i altres partides\"},\"step2_yes\":{\"option1_html\":\"Em sembla \\\\u003cspan\\\\u003ePOC\\\\u003c/span\\\\u003e\",\"option2_html\":\"Em sembla \\\\u003cspan\\\\u003eAPROPIAT\\\\u003c/span\\\\u003e\",\"option3_html\":\"Em sembla \\\\u003cspan\\\\u003eMOLT\\\\u003c/span\\\\u003e\",\"question\":\"Creus que la quantitat de despesa es apropiada?\"},\"step3\":{\"option1\":\"Poc\",\"option2\":\"Apropiat\",\"option3\":\"Molt\",\"thanks\":\"Gr\u00E0cies por la teva opini\u00F3. Aix\u00F2 es el que pensa la resta de la gent:\"}},\"feedback_mailer\":{\"new_feedback_request\":{\"body\":\"Has rebut una nova petici\u00F3 d\\'informaci\u00F3 per a la partida %{budget_line_name} (%{year}) d\\'una persona amb el email %{person_email}.\",\"body_budgets\":\"Has rebut una nova petici\u00F3 d\\'informaci\u00F3 per al pressupostos del teu municipi d\\'una persona amb el email %{person_email}.\",\"subject\":\"Has rebut una nova petici\u00F3 d\\'informaci\u00F3\"}},\"indicators\":\"Indicadors\",\"indicators_intro\":\"Coneix els pressupostos de %{place} a partir de les principals xifres: estalvi brut, inversi\u00F3 per habitant o finan\u00E7ament d\\'inversions.\",\"invoices\":{\"show\":{\"empty\":\"Cap filtre t\u00E9 dades.\",\"fromto\":\"De a N\u00BA Fact.\",\"invoiced\":\"Import facturat\",\"more\":\"M\u00E9s de\",\"table\":{\"fields\":{\"date\":\"Data\",\"paid\":\"Pagat\",\"payment_date\":\"Data de pagament\",\"payment_date_limit\":\"Data prevista de pagament\",\"provider_id\":\"NIF\",\"provider_name\":\"Prove\u00EFdor\",\"subject\":\"Concepte\",\"value\":\"Quantitat\"},\"pager\":{\"first\":\"Primer\",\"format\":\"P\u00E0gines %{tpl} de %{tpl2}\",\"last\":\"\u00DAltim\",\"next\":\"Seg\u00FCent\",\"prev\":\"Anterior\"}}}},\"layouts\":{\"application\":{\"budgets\":\"Pressupostos\"},\"menu_subsections\":{\"data\":\"Dades\",\"elaboration\":\"Elaboraci\u00F3\",\"execution\":\"Execuci\u00F3\",\"guide\":\"Guia\",\"indicators\":\"Indicadors\",\"providers\":\"Prove\u00EFdors i Factures\",\"receipt\":\"Rebut\"}},\"providers\":{\"index\":{\"all_invoices\":\"Totes les factures\",\"amount_distribution\":\"Distribuci\u00F3 per imports\",\"and_more_html\":\"i \\\\u003cspan id=\\\\\"providers-number\\\\\"\\\\u003e\\\\u003c/span\\\\u003e prove\u00EFdors m\u00E9s\",\"are_from\":\"s\u00F3n de\",\"check_detail\":\"Consulta el detall\",\"corporation_sa\":\"societats an\u00F2nimes\",\"corporation_sl\":\"societats limitades i altres\",\"description\":\"A quins prove\u00EFdors contracta %{the_organization_name}? Quines factures paga? Des d\\'aquesta secci\u00F3 podr\u00E0s consultar i revisar el detall de cadascun dels pagaments que realitza %{the_organization_name}.\",\"freelances\":\"aut\u00F2noms\",\"invoices\":\"Factures\",\"invoices_from_which\":\"De les quals\",\"invoices_sum\":\"factures sumen un total de\",\"largest_provider_html\":\"El major prove\u00EFdor suposa un \\\\u003cspan id=\\\\\"largestProvider\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de tota la facturaci\u00F3\",\"last_12_months\":\"\u00DAltims 12 mesos\",\"last_3_months\":\"\u00DAltims 3 mesos\",\"less_than_1000_html\":\"El \\\\u003cspan id=\\\\\"lessThan1000\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de les factures s\u00F3n menors de 1.000 \u20AC\",\"loading\":\"Carregant...\",\"main_providers\":\"Principals prove\u00EFdors\",\"mean_amount\":\"import mig\",\"mean_and_median\":\"Mitjana i mediana\",\"mean_and_median_summary\":\"\u00C9s a dir, la meitat de les factures s\u00F3n d\\'aquest import o inferior\",\"mean_summary\":\"Import resultant de sumar els imports de totes les factures dividit pel nombre de factures\",\"median_amount\":\"mediana dels imports\",\"months_distribution\":\"Distribuci\u00F3 per mesos\",\"percentile_10_html\":\"El \\\\u003cspan id=\\\\\"percentile10\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de les factures concentren el 10 % de la facturaci\u00F3\",\"percentile_50_html\":\"El \\\\u003cspan id=\\\\\"percentile50\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de les factures concentren el 50 % de la facturaci\u00F3\",\"previous\":\"Anteriors\",\"sum_amount\":\"IMPORT ACUMULAT\",\"this_year\":\"Aquest any\",\"view_data_from\":\"Veure les dades de\"}},\"receipts\":{\"show\":{\"description\":\"Part del pressupost del teu municipi es finan\u00E7a directament d\\'impostos i taxes locals. Calcula quant aportes tu al pressupost d\\'acord a la teva casa, vehicles...\",\"detail\":\"Detall de la teva contribuci\u00F3\",\"explanation\":\"Introdueix les quantitats que has pagat per a cadascun dels conceptes en\",\"pick_to_calculate\":\"Selecciona per calcular\",\"share\":\"Comparteix-ho\",\"share_text\":\"Comprova com \u00E9s la teva aportaci\u00F3 al pressupost de d\\'\",\"title\":\"Quina es la teva contribuci\u00F3 al pressupost de %{site_name}?\",\"your_contribution\":\"La teva contribuci\u00F3 als pressupostos de %{site_name}\"}},\"shared\":{\"data_updated_at\":{\"last_update\":\"\u00DAltima actualitzaci\u00F3\"},\"enough_information\":{\"enough_information\":\"Hi ha prou informaci\u00F3?\",\"enough_information_cta\":\"Demana m\u00E9s informaci\u00F3\",\"enough_information_desc\":\"Si trobes que cal incloure m\u00E9s informaci\u00F3 per tenir una visi\u00F3 m\u00E9s completa, comunica-ho i et respondrem\"}},\"visualizations\":{\"G_custom\":\"Despeses per \u00E0rea\",\"G_economic\":\"En qu\u00E8 es gasta\",\"G_functional\":\"Per a qu\u00E8 es gasta\",\"I_custom\":\"Ingressos per \u00E0rea\",\"I_economic\":\"En qu\u00E8 s\\'ingressa\",\"category_per_inhabitant\":\"%{category} per habitant\",\"expenses_per_inhabitant\":\"Despesa per habitant\",\"expenses_per_inhabitant_updated\":\"Despesa per habitant actual\",\"inhabitant_short\":\"hab\",\"mean_autonomy\":\"Mitjana auton\u00F2mica\",\"mean_national\":\"Mitjana estatal\",\"mean_province\":\"Mitjana provincial\",\"previous_year_diff\":\"Canvi any anterior\",\"total_expenses\":\"Despesa total\"}},\"gobierto_calendars\":{\"calendar_integration\":{\"auth_error\":{\"message\":\"Les credencials del calendari no s\u00F3n v\u00E0lides.\"},\"error\":{\"message\":\"Hi ha hagut un problema sincronitzant el calendari.\"},\"timeout_error\":{\"message\":\"El temps de connexi\u00F3 al servidor de calendaris ha expirat.\"}},\"events\":{\"gobierto_calendars_event_published\":\"%{subject_name}\",\"gobierto_calendars_event_updated\":\"%{subject_name}\"},\"fullcalendar\":{\"day\":\"Dia\",\"list\":\"Llista\",\"month\":\"Mes\",\"today\":\"Avui\",\"week\":\"Setmana\"}},\"gobierto_cms\":{\"events\":{\"gobierto_cms_page_created\":\"P\u00E0gina creada\",\"gobierto_cms_page_published\":\"P\u00E0gina publicada\",\"gobierto_cms_page_updated\":\"P\u00E0gina actualitzada\",\"gobierto_cms_section_created\":\"Secci\u00F3 creat\",\"gobierto_cms_section_item_created\":\"P\u00E0gina afegida a una secci\u00F3\",\"gobierto_cms_section_item_deleted\":\"P\u00E0gina esborrada de secci\u00F3\",\"gobierto_cms_section_updated\":\"Secci\u00F3 actualitzada\"},\"pages\":{\"templates\":{\"page\":{\"documents\":\"Documents\"}}}},\"gobierto_common\":{\"dynamic_content\":{\"table_component\":{\"attachment\":\"Adjunt\",\"download\":\"Descarregar\",\"download_attachment\":\"Descarregar adjunt\",\"view_content\":\"Veure contingut\"}},\"events\":{\"gobierto_common_collection_created\":\"Col\u00B7lecci\u00F3 creat\",\"gobierto_common_collection_updated\":\"Col\u00B7lecci\u00F3 actualizat\",\"gobierto_common_term_created\":\"Terme creat\",\"gobierto_common_term_updated\":\"Terme actualitzat\"},\"visualizations\":{\"absolute\":\"Execuci\u00F3 en \u20AC\",\"adults\":\"Poblaci\u00F3 activa\",\"age\":\"Edat\",\"axis\":\"anys\",\"between_25_44\":\"Entre 25 i 44\",\"cards\":{\"active_pop\":{\"figure_first\":\"del total\",\"figure_second\":\"persones\",\"title\":\"Poblaci\u00F3 activa\"},\"births\":{\"country\":\"Mitjana estatal\",\"place\":\"%{place}\",\"province\":\"Mitjana provincial\",\"title\":\"Taxa de naixements\"},\"budget_by_inhabitant\":{\"title\":\"Pressupost per habitant\"},\"cars\":{\"title\":\"Cotxes per habitant\"},\"cars_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"mitjana provincial\",\"title\":\"Impost a turismes\"},\"companies\":{\"title\":\"Empreses\"},\"construction_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"mitjana provincial\",\"title\":\"Impost a les contruccions\"},\"contracts_comparison\":{\"figure_first\":\"temporals\",\"figure_second\":\"indefinits\",\"title\":\"Contractes en el darrer mes\"},\"contracts_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3\",\"industry\":\"Ind\u00FAstria\",\"services\":\"Serveis\",\"title\":\"Contractes per sector\"},\"deaths\":{\"country\":\"Mitjana estatal\",\"place\":\"%{place}\",\"province\":\"Mitjana provincial\",\"title\":\"Taxa de defuncions\"},\"debt_by_inhabitant\":{\"title\":\"Deute per habitant\"},\"debt_level\":{\"title\":\"Nivell d\\'endeutament\"},\"economic_tax\":{\"title\":\"Impost a les activitats econ\u00F2miques\"},\"expenditure_rigidity\":{\"title\":\"Rigidesa de despesa\"},\"financial_charge\":{\"title\":\"C\u00E0rrega financera\"},\"financial_risk\":{\"title\":\"Risc financer\"},\"freelancers\":{\"title\":\"Aut\u00F3noms\"},\"frequency\":\"Actualitzaci\u00F3 %{type}\",\"gross_saving\":{\"title\":\"Estalvi brut\"},\"gross_savings_rate\":{\"title\":\"\u00CDndex d\\'estalvi brut\"},\"houses\":{\"figure_first\":\"familiars\",\"figure_second\":\"principals\",\"title\":\"Habitatge\"},\"ibi\":{\"first_column\":\"\",\"second_column\":\"Urb\u00E0ns\",\"third_column\":\"R\u00FAstics\",\"title\":\"Impost sobre els B\u00E9ns Immobles\"},\"income\":{\"first_column\":\"\",\"second_column\":\"Per habitant\",\"third_column\":\"Per llar\",\"title\":\"Renda municipal\"},\"income_overview\":{\"figure_first\":\"%{place}\",\"figure_second\":\"Espanya\",\"title\":\"Renda bruta\"},\"investment_by_inhabitant\":{\"title\":\"Inversi\u00F3 per habitant\"},\"investment_financing\":{\"title\":\"Finan\u00E7ament inversions\"},\"liability_cost\":{\"title\":\"Cost deute\"},\"meta\":{\"time\":\" al \",\"where\":\"A \"},\"net_saving\":{\"title\":\"Ahorro net\"},\"net_savings_rate\":{\"title\":\"\u00CDndex d\\'estalvi net\"},\"per_capita_investment\":{\"title\":\"Inversi\u00F3 per habitant\"},\"per_capita_tax_burden\":{\"title\":\"Pressi\u00F3 fiscal per habitant\"},\"population\":{\"title\":\"Habitants\"},\"self_financing_capacity\":{\"title\":\"Capacitat d\\'autofinan\u00E7ament\"},\"ss_members\":{\"title\":\"Afiliats a la Seguretat Social\"},\"tax_autonomy\":{\"title\":\"Autonomia fiscal\"},\"unemployed_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3\",\"industry\":\"Ind\u00FAstria\",\"services\":\"Serveis\",\"title\":\"Desempleats per sector\"},\"updated\":\"Darrera actualitzaci\u00F3\"},\"country\":\"Espanya\",\"elderly\":\"Majors\",\"elderly_info\":\"El %{percent} de la poblaci\u00F3 t\u00E9 m\u00E9s de %{limit} anys\",\"empty_lines\":\"No hi ha dades disponibles per aquesta classificaci\u00F3 en aquest any. Per favor, selecciona un altre filtrat.\",\"frequency\":\"Actualitzaci\u00F3 %{type}\",\"gross_income\":\"Renda bruta\",\"increase\":\"Augmentar\",\"inhabitant_short\":\"hab\",\"inhabitants\":\"Habitants\",\"keep\":\"Mantindre\",\"label\":\"habitants\",\"less_25\":\"Menors de 25\",\"lines_title\":\"Partides pressupost\u00E0ries\",\"main_budget_levels_legend_down\":\"Han baixat\",\"main_budget_levels_legend_one\":\"Canvi entre aquest any\",\"main_budget_levels_legend_two\":\"i el passat\",\"main_budget_levels_legend_up\":\"Han pujat\",\"main_budget_levels_per_inhabitant\":\"per habitant\",\"main_budget_levels_tooltip_article\":\"des de\",\"main_budget_levels_tooltip_article_last\":\"des de l\\'anterior\",\"main_budget_levels_tooltip_down\":\"Ha baixat un\",\"main_budget_levels_tooltip_up\":\"Ha pujat un\",\"mean\":\"Edat mitja: %{age} anys\",\"mean_autonomy\":\"Mitjana auton\u00F2mica\",\"mean_national\":\"Mitjana estatal\",\"mean_province\":\"Mitjana provincial\",\"median\":\"Edat mitjana: %{age} anys\",\"men\":\"Homes\",\"million\":\"mili\u00F3\",\"mode\":\"Edat m\u00E9s com\u00FA: %{age} anys\",\"more_44\":\"M\u00E9s de 44\",\"percent\":\"% de progr\u00E9s\",\"percent_log\":\"% de progr\u00E9s (log)\",\"previous_year_diff\":\"Canvi any anterior\",\"project\":\"Projecte\",\"questions\":\"Preguntes\",\"reduce\":\"Reduir\",\"thousand\":\"mil\",\"time\":\" al \",\"title\":\"Riquesa i poblaci\u00F3 a la prov\u00EDncia\",\"tooltip\":\"S\\'ha executat un\",\"tooltip_budgeted\":\"Pressupostat inicial\",\"tooltip_budgeted_updated\":\"Pressupostat actualitzat\",\"tooltip_executed_amount\":\"Import executat\",\"unemployed\":\"Aturada\",\"where\":\"A \",\"women\":\"Dones\",\"youth\":\"Menors\",\"youth_info\":\"El %{percent} de la poblaci\u00F3 t\u00E9 menys de %{limit} anys\"},\"vue_components\":{\"block_header\":{\"all\":\"Totes\",\"none\":\"Cap\"},\"calendar\":{\"date\":\"Escolliu data\"},\"filters\":{\"clear\":\"Netejeu filtres\"},\"pagination\":{\"next\":\"Seg\u00FCent\",\"previous\":\"Anterior\"},\"read_more\":{\"less\":\"Vegeu-ne menys\",\"more\":\"Vegeu-ne m\u00E8s\"},\"table\":{\"customize_columns\":\"Personalitzeu columnes\",\"no_data\":\"No hi ha dades per a aquest criteri\"}}},\"gobierto_dashboards\":{\"available_cards\":\"Targetes disponibles\",\"back\":\"enrere\",\"changes\":\"Dashboard modificat\",\"date\":\"Data: \",\"default_title\":\"T\u00EDtol del dashboard\",\"delete\":\"Esborrar\",\"delete_dialog\":\"Desitjeu esborrar el dashboard?\",\"discard\":\"tancar sense guardar\",\"indicators_amount\":\"\u279E %{amount} indicadors\",\"instructions\":\"\\\\\"\u21E7 Selecciona un tipus de targeta i inclou-la en l\\'\u00E0rea central \u279E\\\\n\\\\nDespr\u00E9s podr\u00E0s configurar-la.\\\\\"\\\\n\",\"objective\":\"Objectiu\",\"percentage\":\"Consecuci\u00F3\",\"percentage_alt\":\"% consecuci\u00F3\",\"placeholder\":\"Escriu el t\u00EDtol de l\\'indicador o projecte\",\"public\":\"P\u00FAblic\",\"save\":\"Guardar\",\"select\":\"Selecciona l\\'indicador\",\"type\":\"Tipus\",\"value\":\"Aconseguit\",\"view_item\":\"Veure \u00EDtem\",\"widgets\":{\"html\":\"Contingut HTML\",\"indicator\":\"Indicador\",\"individual\":\"Individual\",\"table\":\"Taula\"}},\"gobierto_data\":{\"accessibility\":{\"editor\":\"Editor SQL\"},\"data_type\":{\"boolean\":\"boolean\",\"date\":\"data\",\"datetime\":\"data i hora\",\"decimal\":\"decimal\",\"hstore\":\"hstore\",\"integer\":\"enter\",\"jsonb\":\"jsonb\",\"string\":\"cadena\",\"text\":\"text\",\"time\":\"temps\",\"timestamp\":\"data i hora\",\"timestampz\":\"data i hora\"},\"events\":{\"gobierto_data_dataset_dataset_created\":\"Conjunt de dades creat\",\"gobierto_data_dataset_dataset_data_updated\":\"Dades de conjunt de dades actualitzats\",\"gobierto_data_dataset_dataset_deleted\":\"Conjunt de dades eliminat\",\"gobierto_data_dataset_dataset_updated\":\"Conjunt de dades actualitzat\"},\"layouts\":{\"application\":{\"gobierto_data\":\"Dades\"}},\"projects\":{\"all\":\"Totes\",\"buttonFork\":\"Feu clic per crear una versi\u00F3 d\\'aquesta consulta\",\"buttonQueries\":\"Vegeu consultes (c)\",\"buttonRecentQueries\":\"Vegeu consultes recents (r)\",\"buttonRunQuery\":\"Executeu consulta (CMD/WIN + Enter)\",\"cancel\":\"Cancel\u00B7leu\",\"categories\":\"Categories\",\"createCopy\":\"Crear una c\u00F2pia\",\"dashboards\":\"Dashboards\",\"data\":\"Dades\",\"dataset\":\"Conjunts de dades\",\"datasetUpdated\":\"Darrers datasets actualitzats\",\"deleteQuery\":\"Esteu segur que voleu suprimir aquesta consulta?\",\"deleteViz\":\"Esteu segur que voleu suprimir aquesta visualitzaci\u00F3?\",\"description\":\"Descripci\u00F3\",\"download\":\"Desc\u00E0rrega\",\"downloadData\":\"Descarregueu dades\",\"edit\":\"Editeu\",\"emptyRecentQueries\":\"No hi ha consultes recents\",\"favs\":\"Favorites\",\"frequency\":\"Freq\u00FC\u00E8ncia\",\"guide\":\"Guia per utilitzar l\\'editor SQL\",\"license\":\"Llic\u00E8ncia\",\"link\":\"Enlla\u00E7\",\"map\":\"Mapa\",\"modifiedQuery\":\"Consulta modificada\",\"modifiedVisualization\":\"Visualitzaci\u00F3 modificada\",\"numberOfRows\":\"Nombre de registres\",\"preview\":\"Previsualitzeu\",\"private\":\"Privat\",\"queries\":\"Consultes\",\"query\":\"Consulta\",\"queryEmpty\":\"Cap consulte disponible\",\"queryExecuted\":\"Consulta executada en\",\"queryName\":\"Nom consulta\",\"recents\":\"Recents\",\"records\":\"Registres\",\"resetQuery\":\"Restablir la consulta\",\"resetViz\":\"Restablir la visualitzaci\u00F3\",\"resources\":\"Recursos\",\"revert\":\"Revertir\",\"runQuery\":\"Executeu consulta\",\"save\":\"Deseu\",\"savedQuery\":\"Consulta desada\",\"savedVisualization\":\"Visualitzaci\u00F3 desada\",\"sets\":\"Conjunts\",\"showAll\":\"Vegeu-ho tot\",\"showLess\":\"Vegeu-ne menys\",\"sourceDataset\":\"Font\",\"sourceDatasetUrl\":\"Font url\",\"subject\":\"Tema\",\"summary\":\"Resum\",\"updated\":\"Actualizat\",\"visEmpty\":\"Cap visualitzaci\u00F3 disponible\",\"visName\":\"Nom visualitzaci\u00F3\",\"visPrivate\":\"Les teves visualitzacions\",\"visPublic\":\"Totes\",\"visualizations\":\"Visualitzacions\",\"visualize\":\"Visualitzar\",\"yourQueries\":\"Les teves consultes\"}},\"gobierto_exports\":{\"exports\":{\"index\":{\"no_submodules\":\"No hi ha cap subm\u00F2dul actiu\",\"subtitle\":\"Des d\\'aquesta p\u00E0gina pots descarregar en format reutilitzable el contingut d\\'aquesta web\",\"title\":\"Descarrega dades\"}}},\"gobierto_indicators\":{\"events\":{\"gobierto_indicators_indicator_updated\":\"Indicator actualitzat\"},\"indicators\":{\"gci\":{\"gci_description\":\"Els indicadors GCI (Global City Indicators), que reflecteixen la qualitat de vida de la ciutat, els defineix el Banc Mundial , associaci\u00F3 amb el prop\u00F2sit de combatre la pobresa i recolzar el desenvolupament. Els indicadors poden variar segons l\u2019any seleccionat.\",\"gci_title\":\"Indicadors GCI\",\"title\":\"Indicadors %{year}\"},\"ip\":{\"ip_description\":\"Infoparticipa \u00E9s un projecte desenvolupat per el LPCCP, des de l\\'any 2012, l\\'objectiu \u00E9s avaluar la informaci\u00F3 que es publica als webs de les administracions p\u00FAbliques per promoure que millori la seva transpar\u00E8ncia i qualitat.\",\"ip_title\":\"Indicadors Infoparticipa\",\"title\":\"Indicadors %{year}\"},\"ita\":{\"ita_description\":\"Els indicadors ITA (\u00CDndex de Transpar\u00E8ncia dels Ajuntaments) s\u00F3n una eina que l\\'organitzaci\u00F3 no governamental Transpar\u00E8ncia Internacional posa a disposici\u00F3 dels ajuntaments espanyols per mesurar el seu nivell de transpar\u00E8ncia. Avaluen la gesti\u00F3 realitzada per l\u2019ajuntament d\u2019una ciutat a trav\u00E9s d\\'un conjunt integrat de 80 indicadors agrupat en diverses \u00E0rees.\",\"ita_title\":\"Indicadors ITA\",\"title\":\"Indicadors %{year}\"},\"shared\":{\"latest_update_html\":\"\\\\u003cstrong\\\\u003eDarrera actualitzaci\u00F3:\\\\u003c/strong\\\\u003e %{date}\"},\"template\":{\"calculation\":\"C\u00E0lcul\",\"false\":\"no es compleix\",\"methodology\":\"Metodologia\",\"more\":\"M\u00E9s informaci\u00F3\",\"source\":\"Font\",\"true\":\"es compleix\"}},\"layouts\":{\"application\":{\"indicators\":\"Indicadors\"},\"navigation\":{\"sub\":{\"gci\":\"Indicadors GCI\",\"ip\":\"Indicadors Infoparticipa\",\"ita\":\"Indicadors ITA\"}}}},\"gobierto_investments\":{\"events\":{\"gobierto_investments_project_project_created\":\"Projecte d\\'inversi\u00F3 creat\",\"gobierto_investments_project_project_updated\":\"Projecte d\\'inversi\u00F3 actualitzat\"},\"layouts\":{\"application\":{\"investments\":\"Inversions\",\"investments_paragraph\":\"Consulta els projectes que t\u00E9 en marxa l\\'Ajuntament, els que comen\u00E7aran properament, i els plans a mig termini. Detall sobre el pla anual d\\'inversions i mecanismes de seguiment de les obres en marxa.\"}},\"projects\":{\"back\":\"vegeu-ho tot\",\"description\":\"Descripci\u00F3\",\"detail_title\":\"Detall del projecte\",\"empty\":\"Sense resultats\",\"exit\":\"Sortir\",\"gallery\":\"Galeria\",\"list\":\"Llista\",\"loading\":\"Carregant dades...\",\"map\":\"Mapa\",\"project\":{\"one\":\"%{count} projecte\",\"other\":\"%{count} projectes\"},\"reset\":\"Netejeu filtres\",\"see\":\"Vegeu-ho de nou\",\"showall\":\"Vegeu-ho tot\",\"showless\":\"Vegeu-ne menys\",\"summary\":\"Resum per estats\",\"tech_sheet\":\"Fitxa t\u00E8cnica\",\"tour\":\"Tour virtual\"}},\"gobierto_observatory\":{\"cards\":{\"active_pop\":{\"figure_first\":\"del total\",\"figure_second\":\"persones\",\"title\":\"Poblaci\u00F3 activa\"},\"births\":{\"country\":\"Mitjana estatal\",\"place\":\"%{place}\",\"province\":\"Mitjana provincial\",\"title\":\"Taxa de naixements\"},\"budget_by_inhabitant\":{\"title\":\"Pressupost per habitant\"},\"cars\":{\"title\":\"Cotxes per habitant\"},\"cars_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"mitjana provincial\",\"title\":\"Impost a turismes\"},\"companies\":{\"title\":\"Empreses\"},\"construction_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"mitjana provincial\",\"title\":\"Impost a les contruccions\"},\"contracts_comparison\":{\"figure_first\":\"temporals\",\"figure_second\":\"indefinits\",\"title\":\"Contractes en el darrer mes\"},\"contracts_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3\",\"industry\":\"Ind\u00FAstria\",\"services\":\"Serveis\",\"title\":\"Contractes per sector\"},\"deaths\":{\"country\":\"Mitjana estatal\",\"place\":\"%{place}\",\"province\":\"Mitjana provincial\",\"title\":\"Taxa de defuncions\"},\"debt_by_inhabitant\":{\"title\":\"Deute per habitant\"},\"economic_tax\":{\"title\":\"Impost a les activitats econ\u00F2miques\"},\"freelancers\":{\"title\":\"Aut\u00F3noms\"},\"frequency\":\"Actualitzaci\u00F3 %{type}\",\"houses\":{\"figure_first\":\"familiars\",\"figure_second\":\"principals\",\"title\":\"Habitatge\"},\"ibi\":{\"first_column\":\"\",\"second_column\":\"Urb\u00E0ns\",\"third_column\":\"R\u00FAstics\",\"title\":\"Impost sobre els B\u00E9ns Immobles\"},\"income\":{\"first_column\":\"\",\"second_column\":\"Bruta\",\"third_column\":\"Disponible\",\"title\":\"Renda municipal\"},\"income_overview\":{\"figure_first\":\"%{place}\",\"figure_second\":\"Espanya\",\"title\":\"Renda bruta\"},\"investment_by_inhabitant\":{\"title\":\"Inversi\u00F3 per habitant\"},\"meta\":{\"time\":\" al \",\"where\":\"A \"},\"population\":{\"title\":\"Habitants\"},\"ss_members\":{\"title\":\"Afiliats a la Seguretat Social\"},\"unemployed_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3\",\"industry\":\"Ind\u00FAstria\",\"services\":\"Serveis\",\"title\":\"Desempleats per sector\"},\"updated\":\"Darrera actualitzaci\u00F3\"},\"graphics\":{\"age_distribution\":{\"axis\":\"anys\",\"label\":\"habitants\",\"title\":\"Descobreix la distribuci\u00F3 per edats del teu municipi\"},\"population_pyramid\":{\"adults\":\"Poblaci\u00F3 activa\",\"age\":\"Edat\",\"country\":\"Espanya\",\"elderly\":\"Majors\",\"elderly_info\":\"El %{percent} de la poblaci\u00F3 t\u00E9 m\u00E9s de %{limit} anys\",\"mean\":\"Edat mitja: %{age} anys\",\"median\":\"Edat mitjana: %{age} anys\",\"men\":\"Homes\",\"mode\":\"Edat m\u00E9s com\u00FA: %{age} anys\",\"unemployed\":\"Aturada\",\"women\":\"Dones\",\"youth\":\"Menors\",\"youth_info\":\"El %{percent} de la poblaci\u00F3 t\u00E9 menys de %{limit} anys\"},\"rent_distribution\":{\"gross_income\":\"Renda bruta\",\"inhabitants\":\"Habitants\",\"million\":\"mili\u00F3\",\"thousand\":\"mil\",\"title\":\"Riquesa i poblaci\u00F3 a la prov\u00EDncia\"},\"unemployment_age\":{\"between_25_44\":\"Entre 25 i 44\",\"less_25\":\"Menors de 25\",\"more_44\":\"M\u00E9s de 44\",\"title\":\"L\\'atur segons l\\'edat\"},\"unemployment_rate\":{\"country\":\"Espanya\",\"title\":\"Comparaci\u00F3 de la taxa d\\'atur\"},\"unemployment_sex\":{\"men\":\"Homes\",\"title\":\"L\\'atur segons el sexe\",\"women\":\"Dones\"}},\"inhabitants\":\"hab\",\"intro\":\"Coneix %{place} a partir de les principals xifres: la poblaci\u00F3, l\\'ocupaci\u00F3 i l\\'economia.\",\"layouts\":{\"application\":{\"observatory\":\"Observatori\"},\"menu_subsections\":{\"banner_map\":\"Un visor geogr\u00E0fic per explorar l\\'estructura demogr\u00E0fica de %{place}\",\"demographic_observatory\":\"Observatori demogr\u00E0fic\",\"economia\":\"Economia\",\"empleo\":\"Ocupaci\u00F3\",\"poblacion\":\"Poblaci\u00F3\"}}},\"gobierto_people\":{\"departments\":{\"index\":{\"description\":\"Qualsevol organitzaci\u00F3 que es reuneix amb un alt c\u00E0rrec ha de registrar-se com a grup d\\'inter\u00E8s, i es crea un registre de les trobades. \\\\u003ca href=\\\\\"https://web.gencat.cat/es/tramits/tramits-temes/registre-grups-interes\\\\\"\\\\u003eM\u00E9s informaci\u00F3 sobre la normativa de grups d\\'inter\u00E8s\\\\u003c/a\\\\u003e. Exploreu les organitzacions (empreses, fundacions, associacions...) que es reuneixen amb alts c\u00E0rrecs de la Generalitat.\",\"events\":\"Reunions registrades\",\"events_by_department\":\"Reunions per departaments\",\"explore_departments\":\"Exploreu els departaments i els seus alts c\u00E0rrecs\",\"explore_people\":\"Consulteu les agendes dels alts c\u00E0rrecs\",\"people_events\":\"Alts c\u00E0rrecs amb m\u00E9s reunions en departaments\",\"people_with_events\":\"Alts c\u00E0rrecs amb reunions registrades\",\"punchcard_title\":\"Reunions per departament i mes\"},\"show\":{\"interest_groups_box_subtitle\":\"amb reunions en el per\u00EDode\",\"interest_groups_box_title\":\"Grups d\\'inter\u00E8s\",\"interest_groups_box_title_single\":\"Grup d\\'inter\u00E8s\",\"interest_groups_rowchart_title\":\"Grups d\\'inter\u00E8s amb m\u00E9s reunions amb aquest departament\",\"interest_groups_with_events\":\"Grups d\\'inter\u00E8s que s\\'han reunit amb aquest departament\",\"map_title\":\"On viatgen els alts carr\u00E8cs?\",\"meetings_box_subtitle\":\"amb grups d\\'inter\u00E8s\",\"meetings_box_title\":\"Reunions registrades\",\"meetings_box_title_single\":\"Reuni\u00F3 registrada\",\"people_box_subtitle\":\"amb reunions registrades\",\"people_box_title\":\"Alts c\u00E0rrecs d\\'aquest departament\",\"people_box_title_single\":\"Alt c\u00E0rrec d\\'aquest departament\",\"people_rowchart_title\":\"Alts c\u00E0rrec d\\'aquest departament amb m\u00E9s reunions\",\"people_with_events\":\"Alts c\u00E0rrecs d\\'aquest departament amb reunions registrades\",\"punchcard_title\":\"Reunions per alt c\u00E0rrec i mes\"}},\"events\":{\"gobierto_people_person_post_published\":\"Actualitzaci\u00F3 del blog: %{subject_name}\",\"gobierto_people_person_post_updated\":\"Actualitzaci\u00F3 del post: %{subject_name}\",\"gobierto_people_person_published\":\"Creada nova persona: %{subject_name}\",\"gobierto_people_person_statement_published\":\"Publicada la declaraci\u00F3: %{subject_name}\",\"gobierto_people_person_statement_updated\":\"Actualitzada la declaraci\u00F3: %{subject_name}\",\"gobierto_people_person_updated\":\"Actualitzaci\u00F3 de la informaci\u00F3 personal\"},\"exports\":{\"index\":{\"events\":{\"description\":\"Llistat dels esdeveniments (passats i futurs) amb t\u00EDtol i descripci\u00F3, assistents, ubicaci\u00F3...\",\"title\":\"Agendes\"},\"people\":{\"description\":\"Llistat dels c\u00E0rrecs, amb les seves dades de contacte, biografia, titulacions, etc.\",\"title\":\"C\u00E0rrecs\"},\"posts\":{\"description\":\"\u00DAltimes entrades del conjunt dels blogs\",\"title\":\"Blogs\"},\"statements\":{\"description\":\"Llistat de les declaracions de b\u00E9ns i activitats i tots els seus elements\",\"title\":\"Declaracions de b\u00E9ns i activitats\"}}},\"gifts\":{\"coc\":\"El Codi de conducta regula quins obsequis es poden rebre.\",\"description\":\"Els alts c\u00E0rrecs han d\u2019abstenir-se d\\'acceptar regals i donacions de particulars i d\\'entitats p\u00FAbliques o privades a excepci\u00F3 feta de les mostres no venals de cortesia i objectes commemoratius, oficials o protocol\u00B7laris que li puguin ser lliurats per ra\u00F3 del seu c\u00E0rrec.\",\"last\":\"Darrers obsequis\",\"none\":\"No s\\'han registrat obsequis en aquest per\u00EDode\",\"title\":\"Obsequis\"},\"interest_groups\":{\"index\":{\"description\":\"Qualsevol organitzaci\u00F3 que es reuneix amb un alt c\u00E0rrec ha de registrar-se com a grup d\\'inter\u00E8s, i es crea un registre de les trobades. \\\\u003ca href=\\\\\"https://web.gencat.cat/es/tramits/tramits-temes/registre-grups-interes\\\\\"\\\\u003eM\u00E9s informaci\u00F3 sobre la normativa de grups d\\'inter\u00E8s\\\\u003c/a\\\\u003e. Exploreu les organitzacions (empreses, fundacions, associacions...) que es reuneixen amb alts c\u00E0rrecs de la Generalitat.\",\"interest_groups\":\"Grups d\\'inter\u00E8s inscrits\",\"no_data\":\"No hi ha dades per a les dates seleccionades\",\"rowchart_title\":\"Grups d\\'inter\u00E8s amb m\u00E9s reunions\",\"title\":\"Grups d\\'inter\u00E8s\"},\"show\":{\"event\":\"Reuni\u00F3 registrada\",\"events\":\"Reunions registrades\",\"events_by_department\":\"Amb quins departaments es reuneix aquest grup\",\"events_by_person\":\"Alts c\u00E0rrecs amb els quals s\\'ha reunit aquest grup\",\"explore_departments\":\"Exploreu els departaments i els seus alts c\u00E0rrecs\",\"explore_people\":\"Consulteu les agendes dels alts c\u00E0rrecs\",\"people_with_events\":\"El nombre d\\'alts c\u00E0rrecs amb els quals s\\'ha reunit aquest grup\",\"punchcard_title\":\"Reunions per alt c\u00E0rrec i mes\",\"status\":\"Situaci\u00F3 d\\'inscripci\u00F3 al registre de grups d\\'inter\u00E8s: %{status}\"}},\"invitations\":{\"coc\":\"El Codi de conducta regula quines invitacions es poden acceptar.\",\"description\":\"Els alts c\u00E0rrecs han d\u2019acceptar nom\u00E9s el pagament de viatges, despla\u00E7aments i allotjaments per part d\\'altres administracions p\u00FAbliques o d\\'entitats p\u00FAbliques dependents d\\'aquestes, universitats o entitats sense \u00E0nim de lucre, quan hagi d\\'assistir convidat oficialment per ra\u00F3 del c\u00E0rrec a una activitat relacionada amb les seves responsabilitats.\",\"last\":\"Darreres invitacions\",\"none\":\"No s\\'han registrat invitacions en aquest per\u00EDode\",\"title\":\"Invitacions\"},\"layouts\":{\"application\":{\"title\":\"Alts c\u00E0rrecs i agendes\"},\"departments\":{\"no_departments_within_dates\":\"No hi ha cap departament per aquestes dates\"},\"menu_subsections\":{\"agendas\":\"Agendes\",\"blogs\":\"Blogs\",\"departments\":\"Departaments\",\"gifts\":\"Obsequis\",\"interest_groups\":\"Grups d\\'inter\u00E8s\",\"invitations\":\"Invitacions\",\"people\":\"C\u00E0rrecs\",\"statements\":\"Declaracions\",\"trips\":\"Viatges\"}},\"people\":{\"contact_methods\":{\"send_email\":\"Envia un correu-e\"},\"gifts\":{\"index\":{\"gifts\":\"Obsequis\",\"no_gifts\":\"No hi ha obsequis en les dates seleccionades\",\"title\":\"Obsequis rebuts per %{person_name}\"}},\"google_calendar\":{\"authorization\":{\"new\":{\"success\":\"Configuraci\u00F3 guardada correctament. Una \u00FAltima cosa, tria quins calendirs vols publicar autom\u00E0ticament a la teva agenda\"}},\"calendars\":{\"edit\":{\"explain\":\"Tria quins calendaris vols publicar autom\u00E0ticament a la teva agenda\",\"save\":\"Guardar\",\"title\":\"Integraci\u00F3 amb Google Calendar\"},\"update\":{\"success\":\"Calendaris guardats correctament.\"}}},\"index\":{\"department_officials\":\"Alts c\u00E0rrecs en %{department_name}\",\"no_people_within_range\":\"No hi ha cap alt c\u00E0rrec per aquestes dates\",\"subscribable_box\":{\"title\":\"Rebeu una alerta al vostre correu-e\"},\"title\":\"Organigrama de %{site_name}\"},\"invitations\":{\"index\":{\"invitations\":\"Invitacions\",\"no_invitations\":\"No hi ha invitacions en les dates seleccionades\",\"title\":\"Invitacions rebudes per %{person_name}\"}},\"latest_activity\":{\"no_activity\":\"Aquest perfil encara no ha registrat cap activitat.\",\"title\":\"Darrera activitat\"},\"navigation\":{\"agenda\":\"Agenda\",\"bio\":\"Biografia i CV\",\"blog\":\"Blog\",\"gift_received\":\"obsequi rebut\",\"gifts\":\"Obsequis i regals\",\"gifts_received\":\"obsequis rebuts\",\"interest_group\":\"Grup d\\'inter\u00E8s\",\"interest_groups\":\"Grups d\\'inter\u00E8s\",\"invitation\":\"invitaci\u00F3\",\"invitations\":\"invitacions\",\"meeting_with\":\"reuni\u00F3 amb\",\"meetings_with\":\"reunions amb\",\"statements\":\"B\u00E9ns i activitats\",\"trip_made\":\"viatge realitzat\",\"trips\":\"Viatges\",\"trips_made\":\"viatges realitzats\"},\"people_filter\":{\"organigram\":\"Organigrama de %{name}\",\"political_groups\":\"Grups pol\u00EDtics de %{name}\"},\"person\":{\"picture\":\"Foto de %{name}\"},\"person_bio\":{\"show\":{\"download\":\"Descarregar CV\",\"subtitle\":\"Biografia i CV\",\"title\":\"Perfil de %{person_name}\"}},\"person_events\":{\"index\":{\"agenda\":\"Agenda\",\"no_events\":\"No hi ha reunions en les dates seleccionades\",\"past_events\":\"Esdeveniments passats\",\"title\":\"Agenda de %{person_name}\",\"upcoming_events\":\"Agenda\"},\"show\":{\"event_data\":{\"event_attachments\":\"Documents\",\"event_attendees\":\"Assistents\",\"event_locations\":\"Lloc\"},\"title\":\"Agenda de %{person_name}\"}},\"person_messages\":{\"create\":{\"error\":\"No s\\'ha pogut enviar el missatge\",\"success\":\"Missatge enviat correctamente\"},\"new\":{\"placeholders\":{\"body\":\"Escriu un missatge\",\"email\":\"El teu correu-e\",\"name\":\"El teu nom\"},\"submit\":\"Enviar\",\"title\":\"Envia un missatge a %{name}\"}},\"person_post_tags\":{\"show\":{\"filtering_by_tag\":\"Filtrant per \\\\\"%{tag}\\\\\"\",\"go_back\":\"Tornar al blog\"}},\"person_posts\":{\"index\":{\"no_posts\":\"Encara no hi ha posts publicats.\",\"title\":\"El blog de %{person_name}, %{person_charge}\"},\"show\":{\"title\":\"El blog de %{person_name}, %{person_charge}\"}},\"person_statements\":{\"index\":{\"no_statements\":\"Encara no hi ha declaracions publicades per a aquesta persona.\",\"title\":\"B\u00E9ns i activitats de %{person_name}\"},\"show\":{\"download\":\"Descarregar declaraci\u00F3 (%{file_size})\",\"title\":\"B\u00E9ns i activitats de %{person_name}\",\"view_previous\":\"Veure anteriors\"}},\"show\":{\"events_section_title\":\"Darreres reunions\",\"gifts_section_title\":\"Darrers obsequis\",\"invitations_section_title\":\"Darreres invitacions\",\"no_data\":\"No hi ha dades en les dates seleccionades\",\"party\":{\"government\":\"Equip de govern\",\"opposition\":\"Oposici\u00F3\"},\"trips_section_title\":\"Darrers viatges\"},\"subscription_button\":{\"cancel\":\"Cancel\u00B7lar\",\"follow\":\"Seguir\"},\"trips\":{\"index\":{\"no_trips\":\"No hi ha viatges en les dates seleccionades\",\"title\":\"Viatges realitzats per %{person_name}\",\"trips\":\"Viatges\"},\"trip\":{\"accomodation_expenses\":\"Hotels i allotjament\",\"by\":\"per\",\"company\":\"Comitiva\",\"expenses\":\"Despeses\",\"food_expenses\":\"Dietes i manutenci\u00F3\",\"in\":\"a\",\"meeting_name\":{\"one\":\"reuni\u00F3\",\"other\":\"reunions\",\"person_name\":{\"one\":\"persona\",\"other\":\"persones\"}},\"other_expenses\":\"Altres despeses\",\"person_name\":{\"one\":\"persona\",\"other\":\"persones\"},\"total_expenses\":\"Total despeses\",\"transport_expenses\":\"Transport\"}},\"upcoming_events\":{\"no_upcoming_events\":\"No hi ha esdeveniments programats en aquesta agenda.\",\"title\":\"Agenda\",\"view_all\":\"Veure\\'ls tots\"}},\"people_filter\":{\"all\":\"Tots\",\"categories\":{\"executive\":\"Directius\"},\"parties\":{\"government\":\"Equip de Govern\",\"opposition\":\"Oposici\u00F3\"},\"political_groups\":{\"title\":\"Grups pol\u00EDtics\"}},\"person_events\":{\"index\":{\"agenda_switcher\":{\"subtitle\":\"Filtrar per membres de la comunitat\",\"title\":\"Consulteu l\\'agenda de...\"},\"displaying_events_of\":\"Mostrant esdeveniments del %{date}\",\"go_back\":\"Tornar\",\"no_events\":\"No hi ha esdeveniments futurs ni passats.\",\"no_past_events\":\"Filtrar per membres de la comunitat\",\"no_upcoming_events\":\"Consulteu l\\'agenda de...\",\"past_events\":\"Esdeveniments passats\",\"subscribable_box\":{\"title\":\"Rebeu un resum de les agendes dels vostres representants\"},\"title\":\"Agendes dels membres de %{site_name}\",\"upcoming_events\":\"Agenda\"},\"person_events_filter\":{\"agenda\":\"Agenda dels membres del %{name}\"}},\"person_gifts\":{\"index\":{\"error\":\"No hem trobat la p\u00E0gina que busqueu\"}},\"person_mailer\":{\"new_message\":{\"hi\":\"Hola\",\"new_message\":\"Has rebut un nou missatge de %{name} (%{reply_to})\",\"subject\":\"Has rebut un nou missatge des de %{name}\"}},\"person_post_tags\":{\"show\":{\"filtering_by_tag\":\"Filtrant per \\\\\"%{tag}\\\\\"\",\"go_back\":\"Tornar\"}},\"person_posts\":{\"index\":{\"subscribable_box\":{\"title\":\"Rebeu una alerta al vostre correu-e\"},\"switcher\":{\"subtitle\":\"Filtrar per membres de la comunitat\",\"title\":\"Consulteu els blogs de...\"},\"title\":\"Blogs\"},\"person_post_excerpt\":{\"continue\":\"Seguir llegint\"}},\"person_statements\":{\"index\":{\"subscribable_box\":{\"title\":\"Rebeu una alerta al vostre correu-e\"},\"switcher\":{\"subtitle\":\"Filtrar per membres de la comunitat\",\"title\":\"Consulteu les declaracions de...\"},\"title\":\"Declaracions\"}},\"person_trips\":{\"index\":{\"error\":\"No hem trobat la p\u00E0gina que busqueu\"}},\"shared\":{\"app_breadcrumb_title\":\"Visor de l\u2019activitat directiva\",\"app_title\":\"Activitat directiva p\u00FAblica derivada del Codi de conducta\",\"check_it_out\":\"Consulteu el text del Codi de conducta\",\"datepicker\":{\"1m\":\"Darrer mes\",\"1y\":\"Darrer any\",\"3m\":\"Darrers tres mesos\",\"all\":\"Tot\",\"range\":\"Rang personalitzat\",\"today\":\"Avui\"},\"datepicker_fixed\":\"Data corresponent al per\u00EDode\",\"destination\":\"destinaci\u00F3\",\"destinations\":\"destinacions\",\"displacement\":\"despla\u00E7ament\",\"displacements\":\"despla\u00E7aments\",\"from\":\"de\",\"locales\":{\"locale\":\"Idioma\",\"page_locale\":\"Idioma de la p\u00E0gina\",\"select_locale\":\"Selecciona idioma\"},\"meetings_punchcard\":{\"tooltip\":\"reunions\",\"tooltip_single\":\"reuni\u00F3\"},\"meetings_rowchart\":{\"tooltip\":\"reunions\",\"tooltip_single\":\"reuni\u00F3\"},\"noresults\":\"Sense resultats\",\"open_data_footer\":{\"gifts\":\"Obsequis\",\"invitations\":\"Invitacions\",\"meetings\":\"Reunions\",\"title\":\"Accediu a les dades al Portal de dades obertes\",\"trips\":\"Viatges\"},\"table_item\":{\"view_details\":\"Veure detalls\"},\"to\":\"per a\",\"view_all\":\"Vegeu-ne m\u00E9s\",\"view_all_f\":\"Vegeu-ne m\u00E9s\",\"view_charges\":\"Vegeu tots els c\u00E0rrecs\",\"view_details\":\"Veure detalls\",\"view_gifts\":\"Veure tots els obsequis al Portal de dades oberts\",\"view_invitations\":\"Veure totes les invitacions al Portal de dades oberts\",\"view_officials\":\"Veure alts c\u00E0rrecs\"},\"welcome\":{\"index\":{\"departments\":\"Departaments\",\"departments_extra\":\"es mostren els departaments que existeixen o han existit en funci\u00F3 del per\u00EDode seleccionat\",\"departments_rowchart_title\":\"Departaments amb m\u00E9s reunions\",\"description_1\":\"El visor mostra les reunions dels alts c\u00E0rrecs de l\u2019administraci\u00F3 de la Generalitat amb els grups d\u2019inter\u00E8s en el per\u00EDode temporal que seleccioneu. Tamb\u00E9 hi trobareu els regals i invitacions permesos pel Codi de conducta, que obliga els alts c\u00E0rrecs a fer p\u00FAblica aquesta informaci\u00F3. Aix\u00ED mateix, el visor permet consultar els viatges a l\u2019estranger del president, consellers, assessors i alts c\u00E0rrecs en l\u2019exercici de les seves funcions.\",\"description_2_html\":\"Respecte de l\\'informaci\u00F3 dels alts c\u00E0rrecs, es mostren els c\u00E0rrecs que ocupen o han ocupat en el per\u00EDode temporal seleccionat.\",\"events_summary\":{\"no_events\":\"No hi ha esdeveniments\",\"no_upcoming_events\":\"No hi ha esdeveniments futurs. Mireu els esdeveniments passats.\",\"past_events\":\"Esdeveniments passats\",\"upcoming_events\":\"Propers esdeveniments\",\"view_all\":\"Veure\\'ls tots\"},\"gifts\":\"Obsequis i regals\",\"interest_groups_box_subtitle\":\"amb reunions en el per\u00EDode\",\"interest_groups_box_title\":\"Grups d\\'inter\u00E8s\",\"interest_groups_box_title_single\":\"Grup d\\'inter\u00E8s\",\"interest_groups_rowchart_title\":\"Grups d\\'inter\u00E8s amb m\u00E9s reunions\",\"map_title\":\"On viatgen els alts carr\u00E8cs?\",\"meetings_box_subtitle\":\"amb grups d\\'inter\u00E8s\",\"meetings_box_title\":\"Reunions registrades\",\"meetings_box_title_single\":\"Reuni\u00F3 registrada\",\"people_box_subtitle\":\"amb activitat registrada\",\"people_box_title\":\"Alts c\u00E0rrecs\",\"people_box_title_single\":\"Alt c\u00E0rrec\",\"people_rowchart_title\":\"Alts c\u00E0rrecs amb m\u00E9s reunions\",\"people_summary\":{\"no_people\":\"No hi ha persones\",\"title\":\"Organigrama de %{site_name}\",\"view_all\":\"Veure\\'ls tots\"},\"posts_summary\":{\"title\":\"Blogs\",\"view_all\":\"Veure\\'ls tots\"},\"punchcard_title\":\"Reunions per alt c\u00E0rrec i mes\",\"search\":\"Cercar\",\"search_placeholder\":\"Cerca un c\u00E0rrec\",\"statements\":\"Declaracions de b\u00E9ns i activitats\",\"subscribable_box\":{\"title\":\"Rebeu un resum setmanal de l\\'agenda dels vostres representants\"},\"title\":\"Agendes\",\"trips\":\"Viatges i despla\u00E7aments\"}}},\"gobierto_plans\":{\"custom_fields_plugins\":{\"budgets\":{\"detail_text\":\"veure detall en Pressupostos\",\"title\":\"Pressupost\"}},\"events\":{\"gobierto_plans_plan_created\":\"Pla creat\",\"gobierto_plans_plan_data_csv_imported\":\"Dades de pla importats des de fitxer CSV\",\"gobierto_plans_plan_type_created\":\"Tipus de pla creat\",\"gobierto_plans_plan_type_updated\":\"Tipus de pla actualitzat\",\"gobierto_plans_plan_updated\":\"Pla actualitzat\",\"gobierto_plans_progresses_updated\":\"Progressos de projectes actualitzats\",\"gobierto_plans_project_created\":\"Projecte creat\",\"gobierto_plans_project_destroyed\":\"Projecte eliminat del pla\",\"gobierto_plans_project_updated\":\"Projecte actualitzat\"},\"layouts\":{\"application\":{\"plans\":\"Plans\"}},\"plan_types\":{\"sdg\":{\"header\":{\"sdgs_description\":\"Els Objectius de Desenvolupament Sostenible s\u00F3n un conjunt d\\'objectius mundials relacionats amb els desafiaments ambientals, pol\u00EDtics i econ\u00F2mics amb qu\u00E8 s\\'enfronta el nostre m\u00F3n. Aqu\u00ED pots veure com el Pla d\\'Actuaci\u00F3 Municipal connecta amb els ODS.\",\"sdgs_title\":\"Objectius de Desenvolupament Sostenible\"},\"projects\":{\"sdg_projects_empty\":\"No hi ha %{projects_term} de el pla relacionats amb aquest ODS\",\"sdg_projects_title\":\"%{projects_term} del pla relacionades amb aquest ODS\"}},\"show\":{\"category\":\"Categoria\",\"customize_columns\":\"Personalitzeu columnes\",\"dashboards\":\"Dashboards\",\"desc\":\"Descripci\u00F3\",\"ends\":\"Fi\",\"global_execution\":\"Estat d\\'execuci\u00F3 global\",\"latest_update_html\":\"\\\\u003cstrong\\\\u003eDarrera actualitzaci\u00F3:\\\\u003c/strong\\\\u003e %{date}\",\"loading\":\"Carregant...\",\"percent_out_of_total\":\"% sobre total\",\"plan\":\"Plan\",\"progress\":\"Progr\u00E9s\",\"read_less\":\"Llegiu menys\",\"read_more\":\"Llegiu m\u00E9s\",\"starts\":\"Inici\",\"status\":\"Estat\",\"view_by\":\"Veure per\"}}},\"gobierto_visualizations\":{\"layouts\":{\"application\":{\"gobierto_visualizations\":{\"contracts\":\"Contractes i licitacions\",\"costs\":\"Costos\",\"debts\":\"Deute\",\"odss\":\"ODS\",\"subsidies\":\"Subvencions\"}}},\"shared\":{\"download_data\":\"Descarregueu les dades en format reutilitzable\",\"loading\":\"Carregant dades...\"},\"visualizations\":{\"categories\":{\"agriculture\":\"Serveis agr\u00EDcoles i forestals\",\"architecture\":\"Arquitectura i enginyeria\",\"audiovisual\":\"Audiovisual\",\"catering\":\"Hostaleria i restauraci\u00F3\",\"construction\":\"Construcci\u00F3 i manteniment\",\"culture\":\"Cultura i esport\",\"education\":\"Ensenyament i formaci\u00F3\",\"electrical\":\"Equips el\u00E8ctrics i d\\'il\u00B7luminaci\u00F3\",\"energy\":\"Energia\",\"environment\":\"Medi ambient\",\"finance\":\"Serveis financers i assegurances\",\"furniture\":\"Mobiliari\",\"health\":\"Salut\",\"industry\":\"Ind\u00FAstria i maquin\u00E0ria\",\"it\":\"Tecnologia de la informaci\u00F3\",\"legal\":\"Jur\u00EDdic, comptabilitat, m\u00E0rqueting ...\",\"maintenance\":\"Reparaci\u00F3 i manteniment\",\"other\":\"Altres\",\"print\":\"Impressi\u00F3 i material d\\'oficina\",\"public_services\":\"Serveis p\u00FAblics\",\"real_estate\":\"Immobiliari\",\"security\":\"Seguretat\",\"social_services\":\"Serveis socials\",\"software\":\"Consultoria i desenvolupament de programari, equips i llic\u00E8ncies\",\"telecom\":\"Telecomunicacions i correus\",\"textile\":\"T\u00E8xtil\",\"transportation\":\"Transport\"},\"contract_statuses\":{\"abandoned\":\"Desistiment\",\"awarded\":\"Adjudicat\",\"finally_awarded\":\"Finalment adjudicat\",\"finally_void\":\"Desert\",\"formalized\":\"Formalitzat\",\"highest_rated\":\"Millor valorat\",\"provisionally_awarded\":\"Provisionalment adjudicat\",\"provisionally_void\":\"Provisionalment desert\",\"revoked\":\"Revocat\",\"void\":\"Desert\"},\"contract_types\":{\"construction\":\"Obres\",\"other\":\"Altres\",\"patrimonial\":\"Patrimonial\",\"private_contract\":\"Privat\",\"public_private_collaboration\":\"Col\u00B7laboraci\u00F3 entre el sector p\u00FAblic i sector privat\",\"public_services_management\":\"Gesti\u00F3 de Serveis P\u00FAblics\",\"public_works\":\"Concessi\u00F3 d\\'Obres p\u00FAbliques\",\"services\":\"Serveis\",\"special_administrative\":\"Administratiu especial\",\"supplies\":\"Subministraments\"},\"contracts\":{\"amount_by_type_of_process\":\"Import per tipus de procediment\",\"amount_distribution\":\"Distribuci\u00F3 per imports\",\"assignee\":\"Adjudicatari\",\"categories\":\"Categories\",\"contract\":\"Contracte\",\"contract_amount\":\"Imp. adjudicaci\u00F3\",\"contract_type\":\"Tipus de contracte\",\"contractor\":\"Contractor\",\"contracts\":\"Contractes\",\"contracts_assigned_to\":\"Contractes adjudicats a\",\"contracts_show\":{\"assignee_description\":\"Empresa que ha guanyat el contracte (Adjudicatari)\",\"assignees_description\":\"Empreses que han guanyat el contracte (Adjudicataris)\",\"awarding_entity\":\"Entitat adjudicadora\",\"batch\":\"Lot\",\"bid_description\":\"Pressupost base de licitaci\u00F3 sense impostos\",\"bidders_description\":\"Numero d\\'empreses que s\\'han presentat al proc\u00E9s (Licitadors)\",\"contract_amount\":\"Import d\\'adjudicaci\u00F3\",\"entity\":\"Entitat\",\"estimated_value\":\"Valor estimat\",\"external_source\":\"Font\",\"formalization\":\"Formalitzaci\u00F3\",\"process\":\"Procediment\",\"question_description\":\"Quin % del pressupost suposa aquest contracte?\",\"tender\":\"Licitaci\u00F3\",\"type\":\"Tipus\"},\"date\":\"Data\",\"dates\":\"Dates\",\"description\":\"Visualitzaci\u00F3 i an\u00E0lisi dels contractes adjudicats i les licitacions del %{entity_name}\",\"entities\":\"Entitats\",\"final_amount_no_taxes\":\"Import\",\"formalization_date\":\"Data de formalitzaci\u00F3\",\"fromto\":\"De a N\u00BA Contr.\",\"main_assignees\":\"Principals adjudicataris\",\"more\":\"M\u00E9s de\",\"nav\":{\"contracts\":\"Contractes\",\"summary\":\"Resum\",\"tenders\":\"Licitacions\"},\"process_type\":\"Tipus de procediment\",\"search_placeholder\":\"Cerqueu per adjudicatari o per t\u00EDtol del contracte\",\"status\":\"Estat\",\"submission_date\":\"Data\",\"summary\":{\"contracts\":\"Contractes adjudicats\",\"contracts_for\":\"contractes per import de\",\"mean_amount\":\"Import mig\",\"median_amount\":\"Mediana dels imports\",\"tenders\":\"Licitacions\",\"tenders_for\":\"licitacions per un import de\",\"tip_1\":\"El %{strong1} dels contractes s\u00F3n menors de %{strong2}\",\"tip_2\":\"El major contracte suposa un %{strong} de tota la despesa en contractes\",\"tip_3\":\"El %{strong} de contractes concentren el 50% de tota la despesa\"},\"tender_amount\":\"Imp. licitaci\u00F3\",\"tender_date\":\"Data de licitaci\u00F3\",\"title\":\"Contractes i licitacions\"},\"costs\":{\"activities\":\"activitats\",\"cost_direct\":\"Cost directe\",\"cost_indirect\":\"Cost indirecte\",\"cost_inhabitant\":\"Cost / habitant\",\"cost_per_inhabitant\":\"Cost per habitant\",\"coverage\":\"Cobertura\",\"description\":\"L\\'%{entity_name} presta serveis als seus ciutadans a partir de les seves compet\u00E8ncies. Aquesta prestaci\u00F3 de serveis suposa un cost que es cobreix amb els ingressos que disposa l\u2019Ajuntament, que s\u00F3n els derivats del propi servei a prestar o b\u00E9 de recursos generals dels impostos o subvencions rebudes.\",\"description_2\":\"En aquest apartat es mostren les dades sobre els costos dels serveis i els ingressos necessaris per prestar-los.\",\"description_3\":\"El punt de partida \u00E9s el pressupost municipal, per\u00F2 amb aquesta an\u00E0lisi s\u2019amplia i es concreta el cost real d\u2019un servei ja que podem trobar relacionat el cost indirecte (de suport) necessari per a la prestaci\u00F3 d\u2019un servei.\",\"detail\":\"Detall\",\"distribution\":\"Distribuci\u00F3 de costos per \u00E0rea\",\"home\":\"Inici\",\"income\":\"Ingressos\",\"inhabitants\":\"Habitants\",\"item\":{\"competence\":\"Compet\u00E8ncia\",\"description\":\"Descripci\u00F3\",\"equipments\":\"Equipaments\",\"external_services\":\"Serveis exteriors\",\"goods_and_services\":\"B\u00E9ns i serveis\",\"income_cost\":\"Ingressos - Cost\",\"legal_framework\":\"Marc legal\",\"observation\":\"Observacions\",\"personal_cost\":\"Cost personal\",\"public_tax\":\"Taxa o preus p\u00FAblics\",\"subsidies\":\"Subvencions\",\"total\":\"Total\",\"transference\":\"Transfer\u00E8ncies\",\"types\":\"Tipus\"},\"per_inhabitant\":\"per habitant\",\"see_all\":\"Vegeu-ho tot\",\"title\":\"Costos\",\"tooltips\":{\"cost_direct\":\"Recursos necessaris per la prestaci\u00F3 d\u2019un servei o activitat finalista i que es relacionen directament.\",\"cost_indirect\":\"Recursos per la prestaci\u00F3 de serveis no finalistes i que s\u00F3n de suport necessari per a la realitzaci\u00F3 de serveis i activitats finalistes.\",\"cost_per_habitant\":\"Cost total dividit pel nombre d \u0301habitants.\",\"cost_total\":\"Suma del cost directe i cost indirecte.\",\"coverage\":\"Grau de cobertura dels ingressos directament relacionats amb el cost total de l\u2019activitat o servei.\",\"income\":\"Ingressos directament relacionats amb la prestaci\u00F3 del servei, ja siguin derivats de l\u2019aplicaci\u00F3 d\u2019una taxa o preu p\u00FAblic o b\u00E9 d\u2019una subvenci\u00F3.\"},\"tooltips_items\":{\"cost_indirect\":\"Part proporcional del cost de les activitats no finalistes (recursos humans, serveis econ\u00F2mics).\",\"coverage\":\"Mesura (en %) en qu\u00E8 els ingressos directament relacionats amb l\u2019activitat s\u00F3n suficients per cobrir el seu cost.\",\"equipments\":\"Cost proporcional de l\u2019\u00FAs de la infrastuctura necess\u00E0ria per a la prestaci\u00F3 de l\u2019activitat o servei (consums i manteniments dels edificis, vehicles) en funci\u00F3 del seu grau d\u2019utilitzaci\u00F3.\",\"externalServices\":\"Serveis diversos adquirits per l\u2019Ajuntament i prestacions de persones jur\u00EDdiques o f\u00EDsiques no integrades a la plantilla.\",\"goodsServices\":\"Valoraci\u00F3 monet\u00E0ria del consum de material fungible necessari i no emmagatzemable necessari per a la prestaci\u00F3 de l\u2019activitat o servei (subministrament, material d\u2019oficina)\",\"income_cost\":\"Difer\u00E8ncia entre conjunt d\u2019ingressos directament relacionats amb l\u2019activitat i el cost necessari per a la seva prestaci\u00F3. Un saldo negatiu indica la insufici\u00E8ncia de recursos espec\u00EDfics i la necessitat de finan\u00E7ament amb recursos generals de l\u2019Ajuntament.\",\"staff_cost\":\"C\u00F2mput anual de la part dels sous i salaris de les treballadores i treballadors proporcional a la seva dedicaci\u00F3 a l\u2019activitat.\",\"subsidies\":\"Ingressos sense contraprestaci\u00F3 directa per part del beneficiari, destinats a una activitat o a un projecte espec\u00EDfic.\",\"taxes\":\"Contraprestacions econ\u00F2miques rebudes per la prestaci\u00F3 d\u2019un servei o per la utilitzaci\u00F3 privativa o aprofitament especial del domini p\u00FAblic.\",\"transferences\":\"Aportacions de recursos financers per part de l\u2019Ajuntament en concepte de subvenci\u00F3 pr\u00E8viament concedida.\"},\"total\":\"Total\",\"total_cost\":\"Cost total\"},\"debts\":{\"breakdown_debt\":\"Desglossament del deute\",\"creditor\":\"Per creditor\",\"date_debt\":\"Dades de deute a 31 de desembre de 2024.\",\"debtor\":\"Per deutor\",\"description\":\"EL deute financer i d\u2019altre a llarg termini del Grup Ajuntament englova  el deute de tots els seus ens dependents (Societats Mercantils, EPE\u2019s, Fundacio\u00F3ns, Consorcis).\",\"evolution_debt\":\"Evoluci\u00F3 del deute\",\"millions\":\"La unitat de les xifres d\\'aquest gr\u00E0fic \u00E9s milions d\\'euros.\",\"title\":\"Deute\",\"total_debt\":\"Deute total\"},\"odss\":{\"amount\":\"Import\",\"assigned\":\"Alineat\",\"description_html\":\"\\\\u003cp\\\\u003eDes que l\u2019any 2015, l\u2019ONU) va aprovar l\u2019Agenda 2030, integrant els 17 Objectius de Desenvolupament Sostenible (ODS), i va establir una visi\u00F3 transformadora cap a la sostenibilitat econ\u00F2mica, social i ambiental, aquest Ajuntament ha coadjuvat en obrir un nou cam\u00ED per millorar la vida de totes i tots, sense deixar ning\u00FA enrere.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003e\u00C9s per aix\u00F2, que despr\u00E9s de presentar el Pla Estrat\u00E8gic Municipal 2023-2027 alineat amb els ODS, competeix l\u2019alineaci\u00F3 del pressupost municipal amb l\u2019Agenda 2030.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eEl visor del pressupost  permet una millor avaluaci\u00F3 de l\\'adequaci\u00F3 dels recursos utilitzats i les prioritats pol\u00EDtiques, i contribueix a dirigir els esfor\u00E7os cap a les \u00E0rees on es necessita un major enfocament.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eAquesta eina es planteja amb l\\'objectiu d\\'oferir a la ciutadania una visi\u00F3 integral del grau d\u2019alineament de les despeses municipals d\u2019enguany amb la consecuci\u00F3 dels ODS.\\\\u003c/p\\\\u003e\",\"functional_code\":\"C\u00F3digo programa\",\"label_title_budgets_ods\":\"Distribuci\u00F3 de partides per ODS\",\"label_title_ods\":\"Distribuci\u00F3 de despesa per Objectius de Desenvolupament Sostenible\",\"name\":\"Nom\",\"ods_distribution\":\"Distribuci\u00F3 ODS\",\"title\":\"Pressupost vigent alineat amb els Objectius de Desenvolupament Sostenible (ODS)\",\"unassigned\":\"Sense alinear\",\"updated_date\":\"Dades actualitzades el 18 de mar\u00E7 de 2025\"},\"process_types\":{\"based_on_agreement\":\"Basat en Acord Marc\",\"competitive_dialogue\":\"Di\u00E0leg competitiu\",\"dynamic_acquisition\":\"Basat en sistema din\u00E0mic d\\'adquisici\u00F3\",\"innovation\":\"Associaci\u00F3 per a la innovaci\u00F3\",\"innovation_derived\":\"Derivat d\\'associaci\u00F3 per a la innovaci\u00F3\",\"internal_rules\":\"Normes Internes\",\"minor_contract\":\"Contracte menor\",\"negotiated\":\"Licitaci\u00F3 amb negociaci\u00F3\",\"negotiated_with_publicity\":\"Negociat amb publicitat\",\"negotiated_without_publicity\":\"Negociat sense publicitat\",\"open\":\"Obert\",\"open_simplified\":\"Obert simplificat\",\"others\":\"Altres\",\"project_competition\":\"Concurs de projectes\",\"restricted\":\"Restringit\"},\"subsidies\":{\"amount\":\"Import\",\"amount_distribution\":\"Distribuci\u00F3 per imports\",\"beneficiary\":\"beneficiari\",\"call\":\"Convocat\u00F2ria\",\"category\":\"Categoria\",\"date\":\"Data\",\"dates\":\"Dates\",\"description\":\"Visualitzaci\u00F3 i an\u00E0lisi de les subvencions concedides per %{entity_name}\",\"details\":\"D\\'acord amb el que preveu l\\'article 7.8 del Reial Decret 130/2019, la informaci\u00F3 sobre concessions romandr\u00E0 publicada durant els quatre anys naturals seg\u00FCents a l\\'any en qu\u00E8 es va concedir la subvenci\u00F3 en el cas de persones jur\u00EDdiques, i en el cas de persones f\u00EDsiques la publicitat es redueix a l\\'any de concessi\u00F3 i l\\'any seg\u00FCent.\",\"fromto\":\"De a N\u00BA Subv.\",\"main_beneficiaries\":\"Principals beneficiaris\",\"more\":\"M\u00E9s de\",\"nav\":{\"subsidies\":\"Subvencions\",\"summary\":\"Resum\"},\"person\":\"Persona individual\",\"subsidies\":\"Subvencions\",\"subsidies_amount\":\"Imp. Subvencion\",\"subsidies_total\":\"Total Subvencions\",\"summary\":{\"collective_subsidies_for\":\"a col\u00B7lectius per import de\",\"individual_subsidies_for\":\"a particulars per import de\",\"mean_amount\":\"Import mig\",\"median_amount\":\"Mediana dels imports\",\"subsidies\":\"Subvencions\",\"subsidies_for\":\"subvencions per import de\",\"tip_1\":\"El %{strong1} de les subvencions s\u00F3n menors de %{strong2}\",\"tip_2\":\"La major subvenci\u00F3 suposa %{strong} de tota la despesa en subvencions\",\"tip_3\":\"El %{strong} de subvencions concentren el 50% de tota la despesa\"},\"title\":\"Subvencions\"},\"tender_statuses\":{\"awarded\":\"Adjudicat\",\"cancelled\":\"Desistida\",\"evaluation\":\"Avaluaci\u00F3\",\"modified\":\"Anul\u00B7lada\",\"partially_awarded\":\"Parcialment adjudicada\",\"partially_resolved\":\"Parcialment resolta\",\"prior_announcement\":\"Anunci previ\",\"prior_evaluation\":\"Avaluaci\u00F3 pr\u00E8via\",\"provisionally_resolved\":\"Adjudicaci\u00F3 provisional\",\"published\":\"Publicada\",\"resolved\":\"Resolta\"},\"visualizations\":{\"title_beeswarm\":\"Contractes per tipus, volum, mida i data\",\"tooltip_beeswarm\":\"Import d\\'adjudicaci\u00F3\",\"tooltip_treemap\":\"Total contractes\"}}},\"grammatical_particles\":{\"from\":\"de\",\"of\":\"de\",\"of_the\":{\"apostrophized\":\"de l\\'\",\"f\":\"de la\",\"m\":\"del\",\"n\":\"del\"},\"our\":{\"f\":\"nostra\",\"m\":\"nostre\",\"n\":\"nostre\"},\"the\":{\"apostrophized\":\"l\\'\",\"f\":\"la\",\"m\":\"el\",\"n\":\"el\"},\"to\":\"a\",\"to_your\":{\"f\":\"a la teva\",\"m\":\"al teu\",\"n\":\"al teu\"},\"your\":{\"f\":\"teva\",\"m\":\"teu\",\"n\":\"teu\"}},\"helpers\":{\"page_entries_info\":{\"more_pages\":{\"display_entries\":\"Mostrant %{entry_name} \\\\u003cb\\\\u003e%{first}\\\\u0026nbsp;-\\\\u0026nbsp;%{last}\\\\u003c/b\\\\u003e de \\\\u003cb\\\\u003e%{total}\\\\u003c/b\\\\u003e en total\"},\"one_page\":{\"display_entries\":{\"one\":\"Mostrant \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{entry_name}\",\"other\":\"Mostrant \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e %{entry_name}\",\"zero\":\"No hi ha %{entry_name}\"}}},\"select\":{\"prompt\":\"Si us plau tria\"},\"submit\":{\"create\":\"Crear\",\"submit\":\"Desar\",\"update\":\"Actualitzar\"}},\"invisible_captcha\":{\"sentence_for_humans\":\"Si sou hum\u00E0, si us plau, ignoreu aquest camp.\",\"timestamp_error_message\":\"Disculpeu, aix\u00F2 ha anat molt r\u00E0pid. Si us plau, torneu a enviar el formulari.\"},\"issue\":{\"events\":{\"issue_description_translations_changed\":\"Nou tema creat\"}},\"issues\":{\"events\":{\"issues_issue_created\":\"Tema creat\",\"issues_issue_updated\":\"Tema actualitzat\"}},\"layouts\":{\"accept_privacy_policy_signup\":\"En registrar-vos, accepteu la pol\u00EDtica de privacitat.\",\"application\":{\"disclaimer\":\"Aquest web es una demostraci\u00F3 de Gobierto, un programari de transpar\u00E8ncia i participaci\u00F3.\",\"more_information\":\"M\u00E9s informaci\u00F3 a gobierto.es\",\"search\":\"Cerca...\",\"session\":{\"alerts\":\"Les vostres alertes\",\"login\":\"Feu login o registreu-vos\",\"notifications\":\"Notificacions\",\"sign_in\":\"Iniciar sessi\u00F3\",\"sign_out\":\"Tancar sessi\u00F3\",\"title\":\"El vostre compte\"},\"start\":\"Inici\"},\"gobierto_budgets\":{\"application\":{\"about_the_data\":\"Sobre les dades\",\"disclaimer\":\"Aquesta web es una demostraci\u00F3 de Gobierto, software de transpar\u00E8ncia i participaci\u00F3\",\"is_open_source\":\"es software lliure creat per\",\"more_information\":\"M\u00E9s informaci\u00F3 en gobierto.es\",\"session\":{\"admin\":\"Administraci\u00F3\",\"alerts\":\"Les teves alertes\",\"notifications\":\"Notificacions\",\"sign_in\":\"Iniciar sessi\u00F3\",\"sign_out\":\"Tancar sessi\u00F3\",\"title\":\"El teu compte\"}}},\"mailcheck\":{\"suggestion_message\":\"Vols dir\"},\"sandbox\":{\"application\":{\"about_the_data\":\"Sobre les dades\",\"disclaimer\":\"Aquesta web es una demostraci\u00F3 de Gobierto, un programari de transpar\u00E8ncia i participaci\u00F3\",\"is_open_source\":\"es programari lliure creat per\",\"more_information\":\"M\u00E9s informaci\u00F3 en gobierto.es\",\"session\":{\"admin\":\"Administraci\u00F3\",\"alerts\":\"Les teves alertes\",\"notifications\":\"Notificacions\",\"sign_in\":\"Iniciar sessi\u00F3\",\"sign_out\":\"Tancar sessi\u00F3\",\"title\":\"El teu compte\"}}},\"search\":{\"budget_line_item_expense\":\"Partida pressupost\u00E0ria - Despesa\",\"budget_line_item_income\":\"Partida pressupost\u00E0ria - Ingr\u00E9s\",\"dataset_item\":\"Dades\",\"drag_drop_instructions\":\"Arrossegueu i deixeu anar al costat esquerre per a col\u00B7locar aquesta p\u00E0gina al men\u00FA\",\"event_item\":\"Esdeveniment \",\"no_results\":\"La cerca no ha coincidit amb cap p\u00E0gina. Intenteu fer servir termes m\u00E9s generals o comproveu l\\'ortografia.\",\"page_item\":\"P\u00E0gina\",\"person_item\":\"Biografia\",\"person_post_item\":\"Post\",\"person_statement_item\":\"Declaraci\u00F3\",\"plan_project_item\":\"Plan - Actuaci\u00F3\",\"updated\":\"Actualitzat\"}},\"locales\":{\"ca\":\"Catal\u00E0\",\"ca_short\":\"CA\",\"en\":\"Angl\u00E8s\",\"en_short\":\"EN\",\"es\":\"Castell\u00E0\",\"es_short\":\"ES\"},\"number\":{\"currency\":{\"format\":{\"delimiter\":\".\",\"format\":\"%n %u\",\"precision\":2,\"separator\":\",\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"\u20AC\"}},\"format\":{\"delimiter\":\".\",\"precision\":3,\"separator\":\",\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"mil milions\",\"million\":\"mili\u00F3\",\"quadrillion\":\"quadrili\u00F3\",\"thousand\":\"mil\",\"trillion\":\"trili\u00F3\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":1,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"tb\":\"TB\"}}},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"routes\":{\"bio\":\"biografia\",\"department_people\":\"carrecs/departments/:department_slug\",\"departments\":\"departments\",\"events\":\"agendes\",\"executive_category_events\":\"agendes/directius\",\"executive_category_past_events\":\"agendes/directius/reunions-passades\",\"gifts\":\"regals-i-obsequis\",\"government\":\"govern\",\"government_party_events\":\"agendes/govern\",\"government_party_past_events\":\"agendes/govern/reunions-passades\",\"interest_groups\":\"grups-d-interes\",\"invitations\":\"invitacions\",\"managers\":\"directius\",\"messages\":\"contacte\",\"opposition\":\"oposicio\",\"opposition_party_events\":\"agendes/oposicio\",\"opposition_party_past_events\":\"agendes/oposicio/reunions-passades\",\"past_events\":\"agendes/reunions-passades\",\"people\":\"carrecs\",\"people_and_agendas\":\"carrecs-i-agendes\",\"people_government\":\"carrecs/govern\",\"people_managers\":\"carrecs/directius\",\"people_opposition\":\"carrecs/oposicio\",\"person_events\":\"agendes/:container_slug\",\"person_past_events\":\"agendes/:container_slug/reunions-passades\",\"person_post_tags\":\"blogs/:person_slug/tags\",\"person_posts\":\"blogs/:person_slug\",\"person_statements\":\"declaracions/:person_slug\",\"political_groups\":\"carrecs/grups-politics\",\"post_tags\":\"blogs/tags\",\"posts\":\"blogs/posts\",\"statements\":\"declaracions\",\"trips\":\"viatges-i-desplacaments\"},\"scopes\":{\"events\":{\"scopes_scope_created\":\"\u00C0mbit creat\",\"scopes_scope_updated\":\"\u00C0mbit actualitzat\"}},\"shared\":{\"currently\":\"actualment\",\"download_open_data\":{\"exports\":\"Descarregueu les dades en format reutilitzable\"},\"poll_question\":{\"multiple_choice_msg\":\"Podeu triar diverses opcions\"},\"polls\":{\"no_unanswered_polls\":\"No hi ha enquestes pendents de contestar.\",\"opinion\":\"Opineu\"},\"previous\":\"anterior\"},\"sites\":{\"events\":{\"sites_site_created\":\"Site creat\",\"sites_site_destroyed\":\"Site eliminat\",\"sites_site_modules_updated\":\"M\u00F3duls del site actualitzats\",\"sites_site_updated\":\"Site actualitzat\",\"sites_site_visibility_updated\":\"Site publicat\"}},\"support\":{\"array\":{\"last_word_connector\":\" i \",\"two_words_connector\":\" i \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%A, %d %B de %Y %H:%M:%S %z\",\"from_to\":\"De %{starts} a %{ends}\",\"long\":\"%d %B de %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"user\":{\"census_verifications\":{\"create\":{\"error\":\"No s\\'ha pogut verificar la teva identitat. Per favor, revisa les teves dades i prova de nou. Si el problema continua, comunica\\'t amb la teva administraci\u00F3\",\"notice\":\"La teva identitat ha estat verificada correctament\"},\"form\":{\"verify\":\"Verificar\"},\"messages\":{\"already_verified\":\"El teu compte ja est\u00E0 verificat\",\"comments\":{\"not_verified\":\"La contribuci\u00F3 en que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\"},\"consultation_responses\":{\"not_verified\":\"El proc\u00E9s en el que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\"},\"contributions\":{\"not_verified\":\"La contribuci\u00F3 en que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\"},\"flags\":{\"not_verified\":\"La contribuci\u00F3 en que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\"},\"not_verified\":\"El proc\u00E9s en el que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\",\"poll_answers\":{\"not_verified\":\"El proc\u00E9s en el que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\"},\"process_contributions\":{\"not_verified\":\"La contribuci\u00F3 en que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\"},\"votes\":{\"not_verified\":\"La contribuci\u00F3 en que vols participar exigeix que verifiquis que est\u00E0s empadronat/ada a %{site_name}. Confirma les teves dades per continuar (seran verificades amb el padr\u00F3, si no est\u00E0s empadronat/ada, no et podrem verificar)\"}},\"new\":{\"title\":\"Verifica la teva identitat\"}},\"confirmations\":{\"create\":{\"error\":\"Les dades que has introduit no semblen ser correctes. Per favor, intenta-ho de nou.\",\"success\":\"Sessi\u00F3 iniciada correctament\"},\"form\":{\"document_number_notice\":\"N\u00FAmero de document (si et falla prova sense lletra)\",\"gender\":{\"female\":\"Dona\",\"male\":\"Home\"},\"hints\":{\"census_locked\":\"Aquesta informaci\u00F3 prov\u00E9 del cens, de manera que no \u00E9s editable.\",\"date_of_birth\":\"Aquesta informaci\u00F3 ser\u00E0 privada, i mai se t\\'identificar\u00E0 amb el teu perfil. La dada ser\u00E0 anonimitzada, i te la demanem nom\u00E9s per poder obtindre informaci\u00F3 segmentada i entendre millor les opinions i prefer\u00E8ncies dels ciutadans.\",\"email\":\"La teva adre\u00E7a de correu-e ser\u00E0 privada en tot moment. Nom\u00E9s la utilitzarem per enviar-te comunicacions.\",\"gender\":\"Aquesta informaci\u00F3 ser\u00E0 privada, i mai se t\\'identificarem amb el teu perfil. La dada ser\u00E0 anonimitzada, i te la demanem nom\u00E9s per poder obtindre informaci\u00F3 segmentada i entendre millor les opinions i prefer\u00E8ncies dels ciutadans.\"},\"submit\":\"Desa\",\"your_gender_is\":\"Ets...\"},\"new\":{\"error\":\"La URL no sembla correcta\",\"title\":\"Ja casi estem: completa les dades per personalitzar les alertes i participar a la web. Pots completar el teu perfil m\u00E9s endavant.\"}},\"custom_sessions\":{\"create\":{\"invalid_data\":\"Les dades rebudes no s\u00F3n v\u00E0lids. No s\\'ha pogut crear la sessi\u00F3\",\"not_confirmed\":\"Revisa el teu correu-e i fes click en l\\'enlla\u00E7 de confirmaci\u00F3 per poder accedir al servei\",\"success\":\"Sessi\u00F3 iniciada correctament\"},\"destroy\":{\"success\":\"Sessi\u00F3 terminada correctament\"},\"null_strategy\":{\"edit_form\":{\"edit\":\"Afegiu algun camp a aquest formulari\",\"session_title\":\"Si us plau, completeu els camps que falten (Null strategy)\",\"submit\":\"Enviar\"},\"new_form\":{\"session_title\":\"Iniciar sessi\u00F3 (Null strategy)\",\"submit\":\"Enviar\"}}},\"layouts\":{\"menu_subsections\":{\"admin\":\"Configuraci\u00F3\",\"alerts\":\"Las teves alertes\",\"notifications\":\"Notificacions\"}},\"notification_mailer\":{\"notification_digest\":{\"bye\":\"Salutacions\",\"hi\":\"Hola\",\"manage_notifications\":\"Recorda que pots administrar les teves notificacions a %{url}\",\"manage_notifications_html\":\"Recorda que pots administrar les teves notificacions a \\\\u003ca href=\\'%{url}\\'\\\\u003ela teva p\u00E0gina de configuraci\u00F3\\\\u003c/a\\\\u003e\",\"new_activity\":\"Hi ha nova activitat en %{site_name}\",\"subject\":\"Resum d\\'activitat en %{site_name}\"},\"single_notification\":{\"bye\":\"Salutacions\",\"hi\":\"Hola\",\"manage_notifications\":\"Recorda que pots administrar les teves notificacions a %{url}\",\"manage_notifications_html\":\"Recorda que pots administrar les teves notificacions a \\\\u003ca href=\\'%{url}\\'\\\\u003ela teva p\u00E0gina de configuraci\u00F3\\\\u003c/a\\\\u003e\",\"new_activity\":\"Hi ha una nova activitat a %{site_name}\",\"subject\":\"Nova activitat a %{site_name}: %{action_name}\"}},\"notifications\":{\"index\":{\"no_new_notifications\":\"No hi ha notificacions noves\",\"title\":\"Activitat recent\"}},\"passwords\":{\"create\":{\"error\":\"La direcci\u00F3 d\\'email que has indicat no sembla ser v\u00E0lida\",\"success\":\"Per favor, comprova el teu email per rebre les instruccions\"},\"edit\":{\"error\":\"Aquesta URL no sembla ser v\u00E0lida\",\"title\":\"Estableix la teva nova contrasenya:\"},\"edit_form\":{\"submit\":\"Canviar\"},\"update\":{\"error\":\"Hi ha hagut un problema al canviar la teva contrasenya\",\"success\":\"Sessi\u00F3 iniciada correctament\"}},\"registrations\":{\"create\":{\"email_taken\":\"El e-mail ja est\u00E0 en \u00FAs. Prova a fer login o a recuperar la contrasenya\",\"error\":\"Les dades que has introduit no semblen ser v\u00E0lides. Per favor, intenta-ho de nou.\",\"success\":\"Genial. Revisa el teu correu-e i fes click en l\\'enlla\u00E7 de confirmaci\u00F3 per continuar amb el proc\u00E9s de registre.\"}},\"sessions\":{\"create\":{\"error\":\"Les dades que has introduit no semblen ser v\u00E0lides. Per favor, intenta-ho de nou.\",\"success\":\"Sessi\u00F3 iniciada correctament\"},\"destroy\":{\"success\":\"Sessi\u00F3 terminada correctament\"},\"new\":{\"password_title\":\"No recordes la teva contrasenya? T\\'ajudem:\",\"registration_title\":\"Nou per ac\u00ED? Crea un compte:\",\"session_title\":\"Ja tens compte? Fes login\"},\"new_password_form\":{\"session_section\":\"Te\\'n recordes de la contrasenya? Fes login\",\"submit\":\"Recuperar\"},\"registration_form\":{\"submit\":\"Anem\"},\"session_form\":{\"password_section\":\"Contrasenya?\",\"submit\":\"Connectar-se\"},\"user_already_authenticated\":\"Ja est\u00E0s autenticat\",\"user_not_authorized\":\"No est\u00E0s autoritzat.\",\"user_not_signed_in\":\"Registra\\'t o fes login per poder continuar.\"},\"settings\":{\"form\":{\"gender\":{\"female\":\"Dona\",\"male\":\"Home\"},\"hints\":{\"census_locked\":\"Aquesta informaci\u00F3 prov\u00E9 del cens, de manera que no \u00E9s editable.\",\"date_of_birth\":\"Aquesta informaci\u00F3 ser\u00E0 privada, i nunca s\\'identificar\u00E0 amb el teu perfil. La dada ser\u00E0 anonimitzada, i te la demanem nom\u00E9s per a poder obtindre informaci\u00F3 segmentada i entendre millor les opinions i prefer\u00E8ncies dels ciutadans.\",\"email\":\"La teva adre\u00E7a de correu-e ser\u00E0 privada en tot moment. Nom\u00E9s l\\'utilitzarem per enviar-te comunicacions.\",\"gender\":\"Aquesta informaci\u00F3 ser\u00E0 privada, i nunca s\\'identificar\u00E0 amb el teu perfil. La dada ser\u00E0 anonimitzada, i te la demanem nom\u00E9s per a poder obtindre informaci\u00F3 segmentada i entendre millor les opinions i prefer\u00E8ncies dels ciutadans.\"},\"submit\":\"Guardar\",\"your_gender_is\":\"Eres...\"},\"show\":{\"title\":\"El teu compte\"},\"update\":{\"error\":\"Hi ha hagut un error al desar la teva configuraci\u00F3\",\"success\":\"Configuraci\u00F3 desada amb \u00E9xit\"}},\"subscription_preferences\":{\"update\":{\"error\":\"Ha ocorregut un problema al actualitzar: %{details}\",\"update_success\":\"S\\'han actualitzat les dades correctament\"}},\"subscriptions\":{\"create\":{\"create_success\":\"S\\'ha realitzat la suscripci\u00F3\",\"delete_success\":\"S\\'ha cancel\u00B7lat aquesta suscripci\u00F3\",\"error\":\"Ha ocorregut un problema en subscriure\\'t: %{details}. Si ja est\u00E0s registrat, identifica\\'t \\\\u003ca href=\\\\\"%{sign_in_path}\\\\\"\\\\u003eac\u00ED\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"S\\'ha cancel\u00B7lat aquesta suscripci\u00F3\"},\"index\":{\"areas\":\"\u00C0rees\",\"frequency\":\"Freq\u00FC\u00E8ncia\",\"modules\":{\"gobierto_budgets\":\"Pressupostos\",\"gobierto_observatory\":\"Observatori\",\"gobierto_people\":\"Persones\"},\"notification_frequency\":{\"daily\":\"Resum diari\",\"disabled\":\"Deshabilitades\",\"hourly\":\"Resum cada hora\",\"immediate\":\"Inmediates\",\"submit\":\"Desa\",\"weekly\":\"Resum setmanal\"},\"people\":\"Persones\",\"submit\":\"Desa\",\"title\":\"Les teves alertes\",\"whole_site\":\"Tot el site\"},\"subscribable_box\":{\"cancel\":\"Ja est\u00E0s subscrit, cancel\u00B7lar?\",\"form\":{\"placeholders\":{\"user_email\":\"El teu correu-e\"},\"submit\":\"Subscriu-me\"},\"subscribe\":\"Subscriu-me\"},\"subscribable_button\":{\"event_followed\":\"Esdeveniment seguit!\",\"follow_event\":\"Segueix l\\'esdeveniment\",\"follow_group_process\":\"Segueix el grup\",\"follow_issue\":\"Segueix el tema\",\"follow_person\":\"Segueix la persona\",\"follow_process\":\"Segueix el proc\u00E9s\",\"follow_scope\":\"Segueix l\u00B4\u00E0mbit\",\"group_process_followed\":\"Grup seguit!\",\"issue_followed\":\"Tema seguit!\",\"manage_subscriptions\":\"Gestionar les teves alertes\",\"person_followed\":\"Persona seguida!\",\"process_followed\":\"Proc\u00E9s seguit!\",\"scope_followed\":\"\u00C0mbit seguit!\"}},\"user_mailer\":{\"confirmation_instructions\":{\"bye\":\"Salutacions\",\"click_link\":\"Per confirmar el teu registre fes click en el seg\u00FCent enlla\u00E7:\",\"hi\":\"Hola\",\"ignore_link\":\"si no t\\'estaves subscrivint a %{site_name}, pots ignorar este missatge\",\"subject\":\"Completa el teu registre en %{site_name}\"},\"reset_password_instructions\":{\"bye\":\"Salutacions\",\"click_link\":\"Has solicitat restaurar la teva contrasenya. Pulsa en el seg\u00FCent enlla\u00E7 i segueix les instruccions:\",\"hi\":\"Hola\",\"subject\":\"Restaura la teva contrasenya\"},\"welcome\":{\"alerts\":\"Pots gestionar les teves alertes des del teu compte: %{subscriptions_url}\",\"bye\":\"Salutacions\",\"hi\":\"Hola\",\"subject\":\"Benvingut\",\"success\":\"El registre s\\'ha completat amb \u00E8xit. Ara pots interactuar a %{site_url} com usuari registrat.\"}}},\"users\":{\"events\":{\"users_user_updated\":\"Usuari actualitzat\"}},\"views\":{\"delete\":\"Eliminar\",\"delete_confirm\":\"Est\u00E0s segur? Aquesta operaci\u00F3 no \u00E9s reversible\",\"edit\":\"Edita\",\"forms\":{\"max_characters\":\"M\u00E0x. %{length} car\u00E0cters\",\"required\":\"Obligatori\",\"required_and_max_characters\":\"Obligatori i m\u00E0x. %{length} car\u00E0cters\"},\"of\":\"de\",\"pagination\":{\"next\":\"Seg\u00FCent\",\"previous\":\"Anterior\",\"truncate\":\"\\\\u0026hellip;\"},\"see\":{\"less\":\"veure menys\",\"more\":\"veure m\u00E9s\"}}}'));\nI18n.translations[\"en\"] = I18n.extend((I18n.translations[\"en\"] || {}), JSON.parse('{\"activemodel\":{\"attributes\":{\"gobierto_admin/admin_confirmation_form\":{\"email\":\"Email\"},\"gobierto_admin/admin_edit_password_form\":{\"password\":\"Password\",\"password_confirmation\":\"Password confirmation\"},\"gobierto_admin/admin_form\":{\"email\":\"Email\",\"name\":\"Name\",\"password\":\"Password\",\"password_confirmation\":\"Password confirmation\",\"site_ids\":\"Sites\",\"site_modules\":\"Modules\"},\"gobierto_admin/admin_group_form\":{\"name\":\"Group name\"},\"gobierto_admin/admin_invitation_form\":{\"emails\":\"Emails\",\"site_ids\":\"Sites\"},\"gobierto_admin/admin_new_password_form\":{\"email\":\"Email\"},\"gobierto_admin/file_attachment_form\":{\"description\":\"Description\",\"file_digest\":\"This file\",\"name\":\"Name\"},\"gobierto_admin/gobierto_budgets/options_form\":{\"budgets_guide_page\":\"Budgets guide page\",\"comparison_compare_municipalities\":\"Show specific municipalities\",\"comparison_context_table_enabled\":\"Show context table\",\"comparison_show_widget\":\"Show comparison widget\",\"comparison_tool_enabled\":\"Comparison\",\"feedback_emails\":\"Email to receive particpations\",\"receipt_configuration\":\"Receipt configuration\"},\"gobierto_admin/gobierto_calendars/calendar_configuration_form\":{\"ibm_notes_pwd\":\"Password\",\"ibm_notes_url\":\"URL\",\"ibm_notes_usr\":\"Username\",\"microsoft_exchange_pwd\":\"Password\",\"microsoft_exchange_url\":\"URL\",\"microsoft_exchange_usr\":\"Username\"},\"gobierto_admin/gobierto_calendars/event_form\":{\"attachment_file\":\"Attached file\",\"description\":\"Description\",\"ends_at\":\"End date\",\"starts_at\":\"Start date\",\"title\":\"Title\",\"title_translations\":\"Title\"},\"gobierto_admin/gobierto_cms/page_form\":{\"body\":\"Body\",\"published_on\":\"Publication date\",\"slug\":\"URL\",\"title\":\"Title\"},\"gobierto_admin/gobierto_cms/section_form\":{\"slug\":\"URL\",\"title\":\"Title\"},\"gobierto_admin/gobierto_common/collection_form\":{\"container_global_id\":\"Container\",\"container_id\":\"Container\",\"item_type\":\"Type\",\"slug\":\"URL\",\"title\":\"Title\"},\"gobierto_admin/gobierto_common/custom_field_form\":{\"date\":\"Date\",\"field_type\":\"Type of field\",\"image\":\"Image\",\"indicators\":\"Indicators\",\"localized_paragraph\":\"Long text\",\"localized_string\":\"Text (line)\",\"multiple_options\":\"Multiple selections\",\"name\":\"Name\",\"numeric\":\"Number\",\"options\":\"Options\",\"paragraph\":\"Long text without translations\",\"single_option\":\"One selection\",\"string\":\"Text without translations (line)\",\"uid\":\"Identifier\",\"vocabulary_options\":\"Vocabulary\"},\"gobierto_admin/gobierto_common/term_form\":{\"description\":\"Description\",\"external_id\":\"External ID\",\"name\":\"Name\",\"slug\":\"Slug\",\"term_id\":\"Parent Term\"},\"gobierto_admin/gobierto_common/vocabulary_form\":{\"name\":\"Name\"},\"gobierto_admin/gobierto_data/dataset_form\":{\"name\":\"Name\",\"slug\":\"Slug\",\"table_name\":\"Table name\"},\"gobierto_admin/gobierto_data/settings_form\":{\"api_settings_max_dataset_size_for_queries\":\"Datasets maximum size without limiting the preview (MB)\",\"db_config\":\"Database connection configuration\",\"frontend_enabled\":\"Front-end visible\"},\"gobierto_admin/gobierto_investments/project_form\":{\"external_id\":\"External ID\",\"title\":\"Title\"},\"gobierto_admin/gobierto_observatory/settings_form\":{\"observatory_config\":\"Observatory configuration\"},\"gobierto_admin/gobierto_people/person_form\":{\"avatar_file\":\"Avatar\",\"avatar_url\":\"Avatar\",\"bio\":\"Bio\",\"bio_file\":\"Attached file\",\"bio_url\":\"Attached file\",\"category\":\"Category\",\"charge\":\"Position\",\"email\":\"Email\",\"name\":\"Name\",\"party\":\"Party\",\"political_group_id\":\"Political group\"},\"gobierto_admin/gobierto_people/person_post_form\":{\"body\":\"Body\",\"tags\":\"Tags\",\"title\":\"Title\"},\"gobierto_admin/gobierto_people/person_statement_form\":{\"attachment_file\":\"Attached file\",\"published_on\":\"Publishing date\",\"title\":\"Title\",\"title_translations\":\"Title\"},\"gobierto_admin/gobierto_people/political_group_form\":{\"name\":\"Group name\"},\"gobierto_admin/gobierto_plans/node_form\":{\"category_id\":\"Category\",\"ends_at\":\"End date\",\"name\":\"Project\",\"progress\":\"Progress\",\"starts_at\":\"Start date\",\"status_id\":\"Status\"},\"gobierto_admin/gobierto_plans/plan_form\":{\"configuration_data\":\"Configuration\",\"css\":\"CSS\",\"csv_file\":\"CSV file\",\"footer\":\"Footer\",\"introduction\":\"Introduction\",\"plan_type_id\":\"Type\",\"slug\":\"url\",\"statuses_vocabulary_id\":\"Statuses vocabulary\",\"title\":\"Title\",\"vocabulary_id\":\"Categories vocabulary\",\"year\":\"Year\"},\"gobierto_admin/gobierto_plans/plan_type_form\":{\"name\":\"Name\",\"slug\":\"url\"},\"gobierto_admin/gobierto_visualizations/settings_form\":{\"visualizations_config\":\"Visualizations configuration\"},\"gobierto_admin/issue_form\":{\"name\":\"Name\",\"slug\":\"URL\"},\"gobierto_admin/scope_form\":{\"name\":\"Name\"},\"gobierto_admin/site_form\":{\"admin_custom_code\":\"Admin custom code\",\"available_locales\":\"Available locales\",\"default_locale\":\"Default locale\",\"domain\":\"Domain\",\"foot_markup\":\"Foot HTML\",\"google_analytics_id\":\"Google Analytics code\",\"head_markup\":\"Head HTML\",\"home_page\":\"Home module\",\"home_page_item_id\":\"Home page\",\"links_markup\":\"Links HTML\",\"logo_file\":\"Logo\",\"name\":\"Entity ame\",\"organization_id\":\"Organization identifier (INE code)\",\"organization_name\":\"Organization\",\"populate_data_api_token\":\"API token Populate Data\",\"privacy_page_id\":\"Privacy page\",\"raw_configuration_variables\":\"Other configuration variables\",\"registration_disabled\":\"Disable registration (only hides links to registration/login)\",\"reply_to_email\":\"Email address for answers\",\"title\":\"Site name\"},\"gobierto_admin/user_form\":{\"email\":\"Email\",\"name\":\"Name\"},\"gobierto_admin/user_password_form\":{\"password\":\"Password\",\"password_confirmation\":\"Password confirmation\"},\"gobierto_dashboards/dashboard_form\":{\"title\":\"Title\"},\"gobierto_people/person_message\":{\"body\":\"Message\",\"email\":\"Your email\",\"name\":\"Your name\"},\"user/census_verification_form\":{\"date_of_birth\":\"Date of birth\",\"document_number\":\"Document number\",\"site\":\"Site\"},\"user/confirmation_form\":{\"date_of_birth\":\"Date of birth\",\"document_number\":\"Document number\",\"email\":\"Your e-mail\",\"gender\":\"Gender\",\"name\":\"Your name\",\"password\":\"Your password\",\"password_confirmation\":\"Your password, one more time\"},\"user/confirmation_request_form\":{\"email\":\"Your e-mail\"},\"user/edit_password_form\":{\"password\":\"Your password\",\"password_confirmation\":\"Your password, one more time\"},\"user/new_password_form\":{\"email\":\"Your e-mail\"},\"user/registration_form\":{\"email\":\"Your e-mail\"},\"user/session_form\":{\"email\":\"Your e-mail\",\"password\":\"Password\"},\"user/settings_form\":{\"date_of_birth\":\"Date of birth\",\"email\":\"Your e-mail\",\"gender\":\"Gender\",\"name\":\"Your name\",\"password\":\"Your password\",\"password_confirmation\":\"Your password, one more time\"},\"user/subscription_form\":{\"subscribable\":\"Resource\",\"user\":\"User\",\"user_email\":\"E-mail\"}},\"errors\":{\"models\":{\"gobierto_admin/gobierto_common/vocabulary_terms_import_form\":{\"attributes\":{\"base\":{\"invalid_row\":\"There is an invalid row: %{row_data}\"}}},\"gobierto_admin/gobierto_data/dataset_form\":{\"attributes\":{\"table_name\":{\"invalid_table\":\"Unable to access the table. Error message: \\\\\"%{error_message}\\\\\"\"}}},\"gobierto_admin/gobierto_data/settings_form\":{\"attributes\":{\"db_config\":{\"invalid_connection\":\"Unable to connect using configuration data. Error message: \\\\\"%{error_message}\\\\\"\",\"invalid_format\":\"The configuration does not have a valid JSON format\"}}},\"gobierto_admin/gobierto_observatory/settings_form\":{\"attributes\":{\"observatory_config\":{\"invalid_format\":\"The configuration does not have a valid JSON format\",\"invalid_values\":\"The configuration does not have valid values\"}}},\"gobierto_admin/gobierto_plans/plan_data_form\":{\"attributes\":{\"base\":{\"category_not_found\":\"One of the categories couldn\\'t be found. Row content: %{row_data}\",\"external_id_taken\":\"The external_id field is already in use, either because another row has the same external_id or because it was empty and this value was automatically assigned. Row content: %{row_data}\",\"file_not_found\":\"File not found\",\"invalid_columns\":\"Required columns are missing\",\"invalid_format\":\"Invalid file format\",\"invalid_row\":\"There is an invalid row: %{row_data}\",\"status_missing\":\"The state on the row has not been found in the corresponding statuses vocabulary or there is a status in the row but none statuses vocabulary has been configured in the plan. Row content: %{row_data}\",\"term_not_found\":\"The term \\'%{term}\\' couldn\\'t be found in the vocabulary \\'%{vocabulary}\\' used by the column \\'Node.%{uid}\\'\",\"used_resource\":\"The vocabulary contains terms used in other parts of the application\"}}},\"gobierto_admin/gobierto_plans/plan_table_custom_fields_form\":{\"attributes\":{\"base\":{\"file_not_found\":\"File not found\",\"invalid_columns\":\"Required columns are missing\",\"invalid_format\":\"Invalid file format\"}}},\"gobierto_admin/gobierto_plans/projects_form\":{\"attributes\":{\"base\":{\"category_missing\":\"Category not found in project data. Please, provide a valid category_id or category_external_id. Project data: %{json_data}\",\"failed_import\":\"The project with the following data could not be imported: %{json_data}\",\"status_missing\":\"Status not found in project data. Please, provide a valid status_id or status_external_id. Project data: %{json_data}\"}}},\"gobierto_admin/gobierto_visualizations/settings_form\":{\"attributes\":{\"visualizations_config\":{\"invalid_format\":\"The configuration does not have a valid JSON format\",\"invalid_values\":\"The configuration does not have valid values\"}}},\"gobierto_data/dataset_form\":{\"attributes\":{\"data_file\":{\"no_file_included\":\"The file hasn\\'t been uploaded. Please, review the request and ensure the file content has been sent in the request\"}}}}},\"models\":{\"gobierto_admin/admin_confirmation_form\":\"Confirmation\",\"gobierto_admin/admin_edit_password_form\":\"Password change\",\"gobierto_admin/admin_form\":\"Admin\",\"gobierto_admin/admin_group_form\":\"Group\",\"gobierto_admin/admin_invitation_form\":\"Invitation\",\"gobierto_admin/admin_new_password_form\":\"Password recovery\",\"gobierto_admin/file_attachment_form\":\"Document change\",\"gobierto_admin/gobierto_budgets/options_form\":\"Options\",\"gobierto_admin/gobierto_calendars/event_form\":\"Event\",\"gobierto_admin/gobierto_cms/page_form\":\"Page\",\"gobierto_admin/gobierto_cms/section_form\":\"Section\",\"gobierto_admin/gobierto_common/collection_form\":\"Collection\",\"gobierto_admin/gobierto_common/content_block_form\":\"Content block\",\"gobierto_admin/gobierto_common/term_form\":\"Term\",\"gobierto_admin/gobierto_common/vocabulary_form\":\"Vocabulary\",\"gobierto_admin/gobierto_people/person_form\":\"Person\",\"gobierto_admin/gobierto_people/person_post_form\":\"Post\",\"gobierto_admin/gobierto_people/person_statement_form\":\"Statement\",\"gobierto_admin/gobierto_people/political_group_form\":\"Political group\",\"gobierto_admin/issue_form\":\"Issue\",\"gobierto_admin/scope_form\":\"Scope\",\"gobierto_admin/site_form\":\"Site\",\"gobierto_admin/user_form\":\"User\",\"gobierto_admin/user_password_form\":\"Password change\",\"gobierto_admin/user_welcome_message_form\":\"Welcome message\",\"gobierto_people/person_message\":\"Message\",\"user/census_verification_form\":\"Census verification\",\"user/confirmation_form\":\"Confirmation\",\"user/confirmation_request_form\":\"Confirmation request\",\"user/edit_password_form\":\"Change password\",\"user/new_password_form\":\"Recover password\",\"user/registration_form\":\"Registration\",\"user/session_form\":\"Session\",\"user/settings_form\":\"Settings\",\"user/subscription_form\":\"Subscription\"}},\"activerecord\":{\"attributes\":{\"gobierto_admin/api_token\":{\"domain\":\"Domain\",\"name\":\"Name\"},\"gobierto_admin/permission/site_option\":{\"resource_types\":{\"calendars\":\"Calendars\",\"custom_fields\":\"Custom fields\",\"customize\":\"Customize site\",\"documents\":\"Documents\",\"templates\":\"Templates\",\"vocabularies\":\"Vocabularies\"}},\"gobierto_attachments/attachment\":{\"current_version\":\"Current version\",\"description\":\"Description\",\"file_digest\":\"File\",\"file_name\":\"File name\",\"file_size\":\"File size\",\"name\":\"Name\",\"url\":\"URL\"},\"gobierto_calendars/event_attendee\":{\"charge\":\"Position\",\"name\":\"Name\",\"person\":\"Person\"},\"gobierto_calendars/event_location\":{\"address\":\"Address\",\"name\":\"Name\"},\"gobierto_calendars/filtering_rule\":{\"remove_filtering_text\":\"Remove filtering text\"},\"gobierto_cms/page\":{\"body\":\"Body\",\"slug\":\"URL\",\"title\":\"Title\"},\"gobierto_common/api_token_form\":{\"domain\":\"Domain\",\"name\":\"Name\"},\"gobierto_common/content_block_field\":{\"field_type\":\"Field type\",\"field_types\":{\"currency\":\"Currency\",\"date\":\"Date\",\"text\":\"Text\",\"url\":\"URL\"}},\"gobierto_people/trip\":{\"accomodation_expenses\":\"Accomodation expenses\",\"food_expenses\":\"Food expenses\",\"other_expenses\":\"Other expenses\",\"total_expenses\":\"Total expenses\",\"transport_expenses\":\"Transport\"},\"user/api_token\":{\"domain\":\"Domain\",\"name\":\"Name\"}},\"enums\":{\"gobierto_calendars/filtering_rule\":{\"action\":{\"ignore\":\"Ignore\",\"import\":\"Import\",\"import_as_draft\":\"Import as draft\"},\"condition\":{\"contains\":\"Contains\",\"ends_with\":\"Ends with\",\"not_contains\":\"Not contains\",\"not_starts_with\":\"Not starts with\",\"starts_with\":\"Starts with\"},\"field\":{\"description\":\"Description\",\"title\":\"Title\"}}},\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}},\"models\":{\"gobierto_admin/api_token\":{\"attributes\":{\"domain\":{\"not_valid_format\":\"Invalid format\"}}},\"gobierto_common/custom_field_record\":{\"attributes\":{\"item\":{\"wrong_item_class\":\"not associated with an item of the appropriate class\"}}},\"gobierto_common/term\":{\"attributes\":{\"base\":{\"has_dependent_resources_html\":\"Is being used by the following resources:\\\\u003c/br\\\\u003e %{dependencies_list}\"}}},\"gobierto_data/connection\":{\"missing_configuration\":\"Database configuration missing\"},\"user/api_token\":{\"attributes\":{\"domain\":{\"not_valid_format\":\"Invalid format\"}}}}},\"messages\":{\"gobierto_attachments/attachment\":{\"file_too_big\":\"File exceeds max size\"}},\"models\":{\"gobierto_attachments/attachment\":\"Document\",\"gobierto_calendars/event\":\"Event\",\"gobierto_calendars/event_attendee\":\"Attendee\",\"gobierto_calendars/event_location\":\"Location\",\"gobierto_cms/news\":\"News\",\"gobierto_cms/news_plural\":\"News\",\"gobierto_cms/page\":\"Page\",\"gobierto_cms/pages_collection\":\"Pages Collection\",\"gobierto_common/content_block_field\":\"Field\",\"gobierto_data/dataset\":{\"one\":\"Dataset\",\"other\":\"Datasets\"},\"gobierto_investments/project\":{\"one\":\"Project\",\"other\":\"Projects\"},\"gobierto_people/person\":\"Officer\",\"gobierto_people/person_post\":\"Post\",\"gobierto_people/person_statement\":\"Statement\",\"gobierto_plans/node\":{\"one\":\"Project\",\"other\":\"Projects\"},\"gobierto_plans/plan\":{\"one\":\"Plan\",\"other\":\"Plans\"},\"user\":\"User\"}},\"admin_gobierto_calendars\":{\"events\":{\"admin_gobierto_calendars_calendars_synchronized\":\"Synchronized calendars\"}},\"admin_groups\":{\"events\":{\"admin_groups_admin_group_created\":\"Admin group created\",\"admin_groups_admin_group_updated\":\"Admin group updated\"}},\"admins\":{\"events\":{\"admins_admin_authorization_level_updated\":\"Admin authorization level updated\",\"admins_admin_created\":\"Admin created\",\"admins_admin_group_member_created\":\"Admin added to permissions group\",\"admins_admin_group_member_deleted\":\"Admin removed from permissions group\",\"admins_admin_updated\":\"Admin updated\",\"admins_invitation_accepted\":\"Admin invitation accepted\",\"admins_invitation_created\":\"Admin invited\"}},\"based_on\":\"Web based on\",\"census\":{\"events\":{\"census_census_imported\":\"Census imported\"}},\"concerns\":{\"gobierto_common\":{\"api_tokens_concern\":{\"create\":{\"success\":\"API Token was successfully created\"},\"destroy\":{\"failed\":\"API Token couldn\\'t be deleted\",\"success\":\"API Token deleted successfully\"},\"update\":{\"success\":\"API Token was successfully updated\"}}}},\"controllers\":{\"gobierto_budgets\":{\"api\":{\"data\":{\"expense\":\"Expense\",\"income\":\"Income\"}},\"budgets_execution\":{\"index\":{\"alert\":\"There\\'s no data for %{year} so we are showing you the first year with data\"}}}},\"cookies_eu\":{\"cookies_text\":\"Cookies help us deliver our services. By using our services, you agree to our use of cookies.\",\"learn_more\":\"Learn more\",\"ok\":\"OK\"},\"countries\":{\"AC\":\"Ascension Island\",\"AD\":\"Andorra\",\"AE\":\"United Arab Emirates\",\"AF\":\"Afghanistan\",\"AG\":\"Antigua \\\\u0026 Barbuda\",\"AI\":\"Anguilla\",\"AL\":\"Albania\",\"AM\":\"Armenia\",\"AN\":\"Netherlands Antilles\",\"AO\":\"Angola\",\"AQ\":\"Antarctica\",\"AR\":\"Argentina\",\"AS\":\"American Samoa\",\"AT\":\"Austria\",\"AU\":\"Australia\",\"AW\":\"Aruba\",\"AX\":\"\u00C5land Islands\",\"AZ\":\"Azerbaijan\",\"BA\":\"Bosnia \\\\u0026 Herzegovina\",\"BB\":\"Barbados\",\"BD\":\"Bangladesh\",\"BE\":\"Belgium\",\"BF\":\"Burkina Faso\",\"BG\":\"Bulgaria\",\"BH\":\"Bahrain\",\"BI\":\"Burundi\",\"BJ\":\"Benin\",\"BL\":\"St. Barth\u00E9lemy\",\"BM\":\"Bermuda\",\"BN\":\"Brunei\",\"BO\":\"Bolivia\",\"BQ\":\"Caribbean Netherlands\",\"BR\":\"Brazil\",\"BS\":\"Bahamas\",\"BT\":\"Bhutan\",\"BV\":\"Bouvet Island\",\"BW\":\"Botswana\",\"BY\":\"Belarus\",\"BZ\":\"Belize\",\"CA\":\"Canada\",\"CC\":\"Cocos (Keeling) Islands\",\"CD\":\"Congo - Kinshasa\",\"CF\":\"Central African Republic\",\"CG\":\"Congo - Brazzaville\",\"CH\":\"Switzerland\",\"CI\":\"C\u00F4te d\u2019Ivoire\",\"CK\":\"Cook Islands\",\"CL\":\"Chile\",\"CM\":\"Cameroon\",\"CN\":\"China\",\"CO\":\"Colombia\",\"CP\":\"Clipperton Island\",\"CR\":\"Costa Rica\",\"CU\":\"Cuba\",\"CV\":\"Cape Verde\",\"CW\":\"Cura\u00E7ao\",\"CX\":\"Christmas Island\",\"CY\":\"Cyprus\",\"CZ\":\"Czech Republic\",\"DE\":\"Germany\",\"DG\":\"Diego Garcia\",\"DJ\":\"Djibouti\",\"DK\":\"Denmark\",\"DM\":\"Dominica\",\"DO\":\"Dominican Republic\",\"DZ\":\"Algeria\",\"EA\":\"Ceuta \\\\u0026 Melilla\",\"EC\":\"Ecuador\",\"EE\":\"Estonia\",\"EG\":\"Egypt\",\"EH\":\"Western Sahara\",\"ER\":\"Eritrea\",\"ES\":\"Spain\",\"ET\":\"Ethiopia\",\"EU\":\"European Union\",\"FI\":\"Finland\",\"FJ\":\"Fiji\",\"FK\":\"Falkland Islands\",\"FM\":\"Micronesia\",\"FO\":\"Faroe Islands\",\"FR\":\"France\",\"GA\":\"Gabon\",\"GB\":\"United Kingdom\",\"GD\":\"Grenada\",\"GE\":\"Georgia\",\"GF\":\"French Guiana\",\"GG\":\"Guernsey\",\"GH\":\"Ghana\",\"GI\":\"Gibraltar\",\"GL\":\"Greenland\",\"GM\":\"Gambia\",\"GN\":\"Guinea\",\"GP\":\"Guadeloupe\",\"GQ\":\"Equatorial Guinea\",\"GR\":\"Greece\",\"GS\":\"South Georgia \\\\u0026 South Sandwich Islands\",\"GT\":\"Guatemala\",\"GU\":\"Guam\",\"GW\":\"Guinea-Bissau\",\"GY\":\"Guyana\",\"HK\":\"Hong Kong SAR China\",\"HM\":\"Heard \\\\u0026 McDonald Islands\",\"HN\":\"Honduras\",\"HR\":\"Croatia\",\"HT\":\"Haiti\",\"HU\":\"Hungary\",\"IC\":\"Canary Islands\",\"ID\":\"Indonesia\",\"IE\":\"Ireland\",\"IL\":\"Israel\",\"IM\":\"Isle of Man\",\"IN\":\"India\",\"IO\":\"British Indian Ocean Territory\",\"IQ\":\"Iraq\",\"IR\":\"Iran\",\"IS\":\"Iceland\",\"IT\":\"Italy\",\"JE\":\"Jersey\",\"JM\":\"Jamaica\",\"JO\":\"Jordan\",\"JP\":\"Japan\",\"KE\":\"Kenya\",\"KG\":\"Kyrgyzstan\",\"KH\":\"Cambodia\",\"KI\":\"Kiribati\",\"KM\":\"Comoros\",\"KN\":\"St. Kitts \\\\u0026 Nevis\",\"KP\":\"North Korea\",\"KR\":\"South Korea\",\"KW\":\"Kuwait\",\"KY\":\"Cayman Islands\",\"KZ\":\"Kazakhstan\",\"LA\":\"Laos\",\"LB\":\"Lebanon\",\"LC\":\"St. Lucia\",\"LI\":\"Liechtenstein\",\"LK\":\"Sri Lanka\",\"LR\":\"Liberia\",\"LS\":\"Lesotho\",\"LT\":\"Lithuania\",\"LU\":\"Luxembourg\",\"LV\":\"Latvia\",\"LY\":\"Libya\",\"MA\":\"Morocco\",\"MC\":\"Monaco\",\"MD\":\"Moldova\",\"ME\":\"Montenegro\",\"MF\":\"St. Martin\",\"MG\":\"Madagascar\",\"MH\":\"Marshall Islands\",\"MK\":\"Macedonia\",\"ML\":\"Mali\",\"MM\":\"Myanmar (Burma)\",\"MN\":\"Mongolia\",\"MO\":\"Macau SAR China\",\"MP\":\"Northern Mariana Islands\",\"MQ\":\"Martinique\",\"MR\":\"Mauritania\",\"MS\":\"Montserrat\",\"MT\":\"Malta\",\"MU\":\"Mauritius\",\"MV\":\"Maldives\",\"MW\":\"Malawi\",\"MX\":\"Mexico\",\"MY\":\"Malaysia\",\"MZ\":\"Mozambique\",\"NA\":\"Namibia\",\"NC\":\"New Caledonia\",\"NE\":\"Niger\",\"NF\":\"Norfolk Island\",\"NG\":\"Nigeria\",\"NI\":\"Nicaragua\",\"NL\":\"Netherlands\",\"NO\":\"Norway\",\"NP\":\"Nepal\",\"NR\":\"Nauru\",\"NU\":\"Niue\",\"NZ\":\"New Zealand\",\"OM\":\"Oman\",\"PA\":\"Panama\",\"PE\":\"Peru\",\"PF\":\"French Polynesia\",\"PG\":\"Papua New Guinea\",\"PH\":\"Philippines\",\"PK\":\"Pakistan\",\"PL\":\"Poland\",\"PM\":\"St. Pierre \\\\u0026 Miquelon\",\"PN\":\"Pitcairn Islands\",\"PR\":\"Puerto Rico\",\"PS\":\"Palestinian Territories\",\"PT\":\"Portugal\",\"PW\":\"Palau\",\"PY\":\"Paraguay\",\"QA\":\"Qatar\",\"QO\":\"Outlying Oceania\",\"RE\":\"R\u00E9union\",\"RO\":\"Romania\",\"RS\":\"Serbia\",\"RU\":\"Russia\",\"RW\":\"Rwanda\",\"SA\":\"Saudi Arabia\",\"SB\":\"Solomon Islands\",\"SC\":\"Seychelles\",\"SD\":\"Sudan\",\"SE\":\"Sweden\",\"SG\":\"Singapore\",\"SH\":\"St. Helena\",\"SI\":\"Slovenia\",\"SJ\":\"Svalbard \\\\u0026 Jan Mayen\",\"SK\":\"Slovakia\",\"SL\":\"Sierra Leone\",\"SM\":\"San Marino\",\"SN\":\"Senegal\",\"SO\":\"Somalia\",\"SR\":\"Suriname\",\"SS\":\"South Sudan\",\"ST\":\"S\u00E3o Tom\u00E9 \\\\u0026 Pr\u00EDncipe\",\"SV\":\"El Salvador\",\"SX\":\"Saint Martin\",\"SY\":\"Syria\",\"SZ\":\"Swaziland\",\"TA\":\"Tristan da Cunha\",\"TC\":\"Turks \\\\u0026 Caicos Islands\",\"TD\":\"Chad\",\"TF\":\"French Southern Territories\",\"TG\":\"Togo\",\"TH\":\"Thailand\",\"TJ\":\"Tajikistan\",\"TK\":\"Tokelau\",\"TL\":\"Timor-Leste\",\"TM\":\"Turkmenistan\",\"TN\":\"Tunisia\",\"TO\":\"Tonga\",\"TR\":\"Turkey\",\"TT\":\"Trinidad \\\\u0026 Tobago\",\"TV\":\"Tuvalu\",\"TW\":\"Taiwan\",\"TZ\":\"Tanzania\",\"UA\":\"Ukraine\",\"UG\":\"Uganda\",\"UM\":\"U.S. Outlying Islands\",\"US\":\"United States\",\"UY\":\"Uruguay\",\"UZ\":\"Uzbekistan\",\"VA\":\"Vatican City\",\"VC\":\"St. Vincent \\\\u0026 Grenadines\",\"VE\":\"Venezuela\",\"VG\":\"British Virgin Islands\",\"VI\":\"U.S. Virgin Islands\",\"VN\":\"Vietnam\",\"VU\":\"Vanuatu\",\"WF\":\"Wallis \\\\u0026 Futuna\",\"WS\":\"Samoa\",\"XK\":\"Kosovo\",\"YE\":\"Yemen\",\"YT\":\"Mayotte\",\"ZA\":\"South Africa\",\"ZM\":\"Zambia\",\"ZW\":\"Zimbabwe\"},\"country\":\"Spain\",\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"day_month\":\"%d/%m\",\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d %Y\",\"shortest\":\"%d %b %y\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour ago\",\"other\":\"about %{count} hours ago\"},\"about_x_months\":{\"one\":\"about 1 month ago\",\"other\":\"about %{count} months ago\"},\"about_x_years\":{\"one\":\"about 1 year ago\",\"other\":\"about %{count} years ago\"},\"almost_x_years\":{\"one\":\"almost 1 year ago\",\"other\":\"almost %{count} years ago\"},\"half_a_minute\":\"half a minute ago\",\"less_than_x_minutes\":{\"one\":\"less than a minute ago\",\"other\":\"less than %{count} minutes ago\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second ago\",\"other\":\"less than %{count} seconds ago\"},\"over_x_years\":{\"one\":\"over 1 year ago\",\"other\":\"over %{count} years ago\"},\"x_days\":{\"one\":\"1 day ago\",\"other\":\"%{count} days ago\"},\"x_minutes\":{\"one\":\"1 minute ago\",\"other\":\"%{count} minutes ago\"},\"x_months\":{\"one\":\"1 month ago\",\"other\":\"%{count} months ago\"},\"x_seconds\":{\"one\":\"1 second ago\",\"other\":\"%{count} seconds ago\"},\"x_years\":{\"one\":\"1 year ago\",\"other\":\"%{count} years ago\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"array_too_short\":{\"one\":\"is too short (minimum at least 1 element)\",\"other\":\"is too short (minimum at least %{count} elements)\"},\"blank\":\"can\\'t be blank\",\"blank_for_modules\":\"Organization is miss-configured. The identifier is mandatory for the modules you have configured.\",\"collection_taken\":\"can\\'t have another collection of this type.\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"custom_fields\":{\"options\":{\"missing_vocabulary\":\"Some column of type \\\\\"vocabulary\\\\\" has no value in \\\\\"dataSource\\\\\"\",\"wrong_column_type\":\"Some column does not belong to a recognized type. Types recognized: \\\\\"text\\\\\", \\\\\"integer\\\\\", \\\\\"float\\\\\", \\\\\"date\\\\\" y \\\\\"vocabulary\\\\\"\",\"wrong_custom_field_uids\":\"The configuration uids doesn\\'t existe or belongs to custom fields which doesn\\'t have a definition for progress\"}},\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"invalid_consultation_response\":\"Consultation couldn\\'t be saved. Please, review the responses and try again\",\"invalid_table_name\":\"Must start with a letter or an underscore; the rest can only contain letters, digits or underscores\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"page_as_homepage\":\"The changes to the page could not be saved because You can\\'t change the vibility of a page that is used as a homepage.\",\"present\":\"must be blank\",\"record_invalid\":\"Validation failed: %{errors}\",\"required\":\"must exist\",\"restrict_dependent_destroy\":{\"one\":\"Cannot delete record because a dependent %{record} exists\",\"other\":\"Cannot delete record because dependent %{record} exist\"},\"taken\":\"has already been taken\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}},\"template\":{\"body\":\"There were problems with the following fields:\",\"header\":{\"one\":\"1 error prohibited this %{model} from being saved\",\"other\":\"%{count} errors prohibited this %{model} from being saved\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"gobierto_admin\":{\"activities\":{\"activities_list\":{\"header\":{\"action\":\"Action\",\"date\":\"Date\",\"ip\":\"IP\",\"recipient\":\"Recipient\",\"subject\":\"Subject\",\"user\":\"User\"}},\"index\":{\"title\":\"Activity log\"}},\"admin\":{\"invitation_acceptances\":{\"show\":{\"error\":\"This URL doesn\\'t seem to be valid\",\"success\":\"Signed in successfully\"}},\"invitations\":{\"create\":{\"error\":\"There was a problem sending the invitations\",\"success\":\"The invitations have been successfully sent\",\"success_with_errors\":\"Some invitations could not be delivered: %{email_addresses}.\"},\"form\":{\"placeholders\":{\"emails\":\"maria@hotmail.com, felipe@gmail.com\"},\"sites\":\"Allowed sites\",\"submit\":\"Send invitations\"},\"new\":{\"title\":\"Send invitations\"}},\"passwords\":{\"create\":{\"error\":\"The email address specified doesn\\'t seem to be valid\",\"success\":\"Please, check your inbox to get instructions\"},\"edit\":{\"error\":\"This URL doesn\\'t seem to be valid\",\"title\":\"Set your new password\"},\"edit_form\":{\"submit\":\"Change password\"},\"new\":{\"title\":\"Recover your password\"},\"new_form\":{\"placeholders\":{\"email\":\"fsanchez@gmail.com\"},\"submit\":\"Request recovery\"},\"update\":{\"error\":\"There was a problem changing your password\",\"success\":\"Signed in successfully\"}},\"settings\":{\"edit\":{\"password_block\":\"Password\",\"placeholders\":{\"email\":\"Email\",\"name\":\"Name\"},\"title\":\"Edit your data\"},\"update\":{\"error\":\"There was an error updating your data\",\"success\":\"Data updated successfully\"}}},\"admin_groups\":{\"admins\":{\"modal_index\":{\"add\":\"Add\",\"add_title\":\"Add user\",\"created_at\":\"Access granted\",\"delete\":\"Delete access\",\"email\":\"email\",\"user\":\"User\",\"users_with_access\":\"Users with access\"}},\"breadcrumb\":{\"admin_groups\":\"Groups\"},\"create\":{\"success\":\"Admins Group was successfully created\"},\"edit\":{\"title\":\"Permissions of group: %{name}\"},\"form\":{\"action_names\":{\"create_projects\":\"Create projects\",\"delete_projects_all\":\"Delete projects (all)\",\"delete_projects_assigned\":\"Delete projects (assigned)\",\"edit\":\"Edit\",\"edit_projects_all\":\"Edit projects (all)\",\"edit_projects_assigned\":\"Edit projects (assigned)\",\"edit_projects_permissions_all\":\"Edit project permissions (all)\",\"edit_projects_permissions_assigned\":\"Edit project permissions (assigned)\",\"manage_dashboards\":\"Manage dashboards\",\"manage_plans\":\"Manage plans\",\"moderate_projects_all\":\"Moderate projects (all)\",\"moderate_projects_assigned\":\"Moderate projects (assigned)\",\"publish_projects_all\":\"Publish projects (all)\",\"publish_projects_assigned\":\"Publish projects (assigned)\",\"update_projects_as_minor_change_all\":\"Save minor changes in projects (all)\",\"update_projects_as_minor_change_assigned\":\"Save minor changes in projects (assigned)\",\"view_dashboards\":\"View dashboards\",\"view_projects_all\":\"View projects (all)\",\"view_projects_assigned\":\"View projects (assigned)\"},\"actions\":\"Actions\",\"all\":\"All\",\"members\":{\"one\":\"There is an admin with this group.\",\"other\":\"There are %{count} admins with this group.\",\"zero\":\"This group doesn\\'t have admins.\"},\"modules_permissions\":\"Modules\",\"people\":\"People\",\"placeholders\":{\"name\":\"Global admins group\"},\"site_options_permissions\":\"Site\"},\"index\":{\"header\":{\"admin_group\":\"Group\"},\"new\":\"New\",\"title\":\"Groups\"},\"new\":{\"title\":\"New group\"},\"update\":{\"success\":\"Admins Group was successfully updated\"}},\"admin_mailer\":{\"invitation_instructions\":{\"bye\":\"Cheers\",\"click_link\":\"You have been invited to collaborate in Gobierto. Click the following link to create your account\",\"hi\":\"Hi\",\"subject\":\"You have been invitited to collaborate in Gobierto\"},\"reset_password_instructions\":{\"bye\":\"Cheers\",\"click_link\":\"Click in the following link to reset your password\",\"hi\":\"Hi\",\"subject\":\"Reset password instructions\"}},\"admin_unauthorized\":\"You do not have enough permissions to perform this action\",\"admins\":{\"create\":{\"success\":\"Admin was successfully created\"},\"edit\":{\"title\":\"Edit Admin\"},\"form\":{\"activity_block\":\"Activity log\",\"admin_groups_block\":\"Group\",\"authorization_level\":{\"disabled\":\"Disabled\",\"manager\":\"Manager\",\"regular\":\"Regular\"},\"password_block\":\"Password\",\"placeholders\":{\"email\":\"fgonzalez@gmail.com\",\"name\":\"Fernando Gonz\u00E1lez\"},\"sites_block\":\"Allowed sites\",\"sites_block_description\":\"This Admin has administration access to:\"},\"index\":{\"groups_and_permissions\":\"Groups and permissions\",\"header\":{\"admin\":\"Admin\",\"created_at\":\"Created\",\"email\":\"Email\",\"groups\":\"Groups\",\"last_sign_in_at\":\"Last sign in\",\"primary_api_token\":\"Primary API token\",\"role\":\"Role\"},\"new\":\"New Admin\",\"send_invitations\":\"Send invitations\",\"title\":\"Administrators\",\"users_section\":\"Users\",\"view_admin\":\"View Admin\"},\"new\":{\"title\":\"New Admin\"},\"show\":{\"admin_tokens\":\"Authorization tokens\",\"copy_to_clipboard\":\"Copy\",\"primary_api_token\":\"Primary token\"},\"update\":{\"success\":\"Admin was successfully updated\"}},\"api_tokens\":{\"api_token\":{\"primary\":\"Primary\"},\"edit\":{\"api_token\":\"API Token %{name}\"},\"form\":{\"placeholders\":{\"domain\":\"www.example.org\",\"name\":\"External apps Token\"},\"update_token\":\"Update Token\"},\"list\":{\"header\":{\"created_at\":\"Created at\",\"domain\":\"Domain\",\"name\":\"Name\",\"token\":\"Token\"},\"new\":\"New\",\"title\":\"API Tokens\"},\"new\":{\"api_token\":\"New API Token\"}},\"census\":{\"imports\":{\"create\":{\"error\":\"There was an error when importing your file. Please try again.\",\"success\":\"%{record_count} records have been imported\"},\"file_format_notes\":{\"instructions\":\"El archivo a cargar debe ser un CSV, sin fila de cabecera, con las columnas de datos que queramos que el usuario deba verficiar. Por ejemplo, si queremos que valide DNI, fecha de nacimiento y c\u00F3digo postal, deberemos preparar un fichero como este:\"},\"form\":{\"disable_with\":\"Loading...\",\"submit\":\"Load census file\"},\"new\":{\"final_notes\":\"se sustituir\u00E1n todos los registros, y si alg\u00FAn DNI de usuario verificado deja de estar presente, el usuario dejar\u00E1 de tener acceso\",\"import_status\":\"La verificaci\u00F3n de los usuarios se realiza contra el archivo de censo actualizado por \u00FAltima vez el %{created_at} por %{admin_name} (%{admin_email}). El archivo tiene %{imported_records} registros.\",\"title\":\"Census configuration\"}}},\"custom_fields_plugins\":{\"budgets\":{\"area\":\"Area\",\"assigned_amount\":\"Assigned\",\"budget_line\":\"Budget line\",\"custom\":\"Custom\",\"economic\":\"Economic\",\"full_amount\":\"Total\",\"functional\":\"Functional\",\"not_available\":\"Not avail.\",\"weight\":\"Weight\",\"year\":\"Year\"},\"common\":{\"custom\":\"Custom\",\"economic\":\"Economic\",\"functional\":\"Functional\"},\"data_grid\":{\"remove_rows\":\"Remove selected rows\",\"select_deselect_all\":\"Select / Deselect All\"},\"progress\":{\"progress\":\"Progress\"},\"table\":{\"remove_rows\":\"Remove selected rows\",\"select_deselect_all\":\"Select / Deselect All\"}},\"custom_sessions\":{\"ldap_strategy\":{\"form\":{\"identifier\":\"Identifier\",\"password\":\"Password\",\"submit\":\"Submit\"}}},\"gobierto_attachments\":{\"file_attachments\":{\"create\":{\"success_html\":\"Attachment created successfully. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eView the document\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"Attachment archived successfully\"},\"edit\":{\"title\":\"Edit document\"},\"form\":{\"file_constraints\":\"Attach document\",\"placeholders\":{\"description\":\"Document description\",\"name\":\"File name\",\"slug\":\"file-name\"}},\"index\":{\"add_new_attachment\":\"Add new document\",\"collections\":\"Collections\",\"created_at\":\"Created at\",\"header\":{\"collection\":\"Collection\",\"file_attachments\":\"Documents\"},\"latest_editions\":\"Latests editions\",\"new\":\"New\",\"title\":\"Documents\",\"updated_at\":\"Updated at\",\"view_collection\":\"View collection\"},\"new\":{\"title\":\"New document\"},\"recover\":{\"success\":\"Attachment recovered successfully\"},\"update\":{\"success_html\":\"Attachment updated successfully. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eView the document\\\\u003c/a\\\\u003e.\"}}},\"gobierto_budgets\":{\"feedback\":{\"index\":{\"answer1_0\":\"Yes\",\"answer1_1\":\"No\",\"answer2_0\":\"Few\",\"answer2_1\":\"Good\",\"answer2_2\":\"Too much\",\"budget\":\"Planned\",\"last\":\"Last\",\"total_feedback\":\"Total opinions\",\"understand\":\"Do you understand it?\",\"you_think\":\"You think\"}},\"options\":{\"index\":{\"comparison_compare_municipalities_desc\":\"Shows a table with specific municpalities (with data from presupuestos.gobierto.es - compare them there before including them)\",\"comparison_context_table_enabled_desc\":\"Show a table with context information with province, atuonomies and the state\",\"comparison_show_widget_desc\":\"Enable the acces to the Gobierto budgets comparison tool: presupuestos.gobierto.es\",\"comparison_tool_enabled_desc\":\"Enable comparison tools\",\"confirm_update_annual_data\":\"A background process will start to update files. Continue?\",\"elaboration\":\"Elaboration\",\"elaboration_desc1\":\"Enable budgets elaboration section\",\"elaboration_desc2_html\":\"\\\\u003cstrong\\\\u003eImportant:\\\\u003c/strong\\\\u003e it\\'s necessary to load elaboration data previously. Contact your administrator if necessary.\",\"feedback\":\"Micro-feedback\",\"feedback_desc\":\"Enable the option to allow visitios to give their feedback on budget lines\",\"feedback_emails_desc\":\"The feedback (opinions about budget lines) will be sent to this email\",\"indicators\":\"Indicators\",\"indicators_desc1\":\"Enable the section Indicators\",\"options\":\"Options\",\"providers\":\"Providers and Invoices\",\"providers_desc1\":\"Enable the section Providers and Invoices\",\"receipt\":\"Taxes receipt\",\"receipt_desc1\":\"Enable budgets taxes receipt section\",\"receipt_desc2_html\":\"\\\\u003cstrong\\\\u003eImportant:\\\\u003c/strong\\\\u003e it\\'s necessary to fill the JSON with the data.\",\"update_annual_data\":\"Generate budget lines by year files\"},\"update\":{\"error\":\"Settings couldn\\'t be saved: %{validation_errors}\",\"success\":\"Settings saved successfully\"},\"update_annual_data\":{\"success\":\"Process to generate files of budget lines by year launched\"}},\"shared\":{\"tabs\":{\"budgets\":\"Budgets\",\"feedback\":\"Opinions\",\"options\":\"Options\"}}},\"gobierto_calendars\":{\"calendar_configuration\":{\"edit\":{\"add_rule\":\"Create rule\",\"calendar_integration\":\"Calendar integration\",\"confirm_sync\":\"Are you sure?\",\"filter_events\":\"Filter events\",\"filter_events_desc\":\"When an event is imported...\",\"filter_events_label\":\"If the\",\"google_calendar\":\"Google Calendar\",\"ibm_notes\":\"IBM Notes\",\"labels\":{\"ibm_notes_pwd\":\"Password\",\"ibm_notes_url\":\"Calendar URL\",\"ibm_notes_usr\":\"IBM Notes account\",\"microsoft_exchange_pwd\":\"Password\",\"microsoft_exchange_url\":\"Calendar URL\",\"microsoft_exchange_usr\":\"Microsoft Exchange account\"},\"last_sync\":\"Last sync\",\"manage\":\"Manage calendar configuration\",\"microsoft_exchange\":\"Microsoft Exchange\",\"placeholders\":{\"filter_text\":\"Text to be filtered\",\"ibm_notes_url\":\"ex. https://example.com/mail/abc.nsf/api/calendar/events\",\"microsoft_exchange_url\":\"ex. https://example.com/ews/exchange.asmx\",\"username\":\"ex. someone85\"},\"remove_configuration\":\"Remove calendar configuration\",\"sync\":\"Sync now\",\"without_description\":\"Don\\'t import event description\"},\"gobierto_people_person_navigation\":{\"calendar_configuration\":\"Calendar configuration\"},\"google_calendar_fields\":{\"calendar_configured\":\"Currently this person has the following calendars integrated\",\"share_link\":\"Share this link with the person to allow Gobierto to read her public events from Google Calendar:\"},\"sync_calendars\":{\"success\":\"Synchronization done\"},\"update\":{\"success\":\"Settings updated successfully\"}},\"collections\":{\"index\":{\"add_new_event\":\"Add new event\",\"collections\":\"Calendars\",\"header\":{\"collection\":\"Calendar\",\"events\":\"Events\"},\"latest_editions\":\"Latest updated events\",\"new\":\"New\",\"title\":\"Calendars\",\"view_collection\":\"View collection\"}},\"events\":{\"attendees_form\":{\"header\":{\"charge\":\"Position\",\"name\":\"Name\",\"person\":\"Person\"},\"title\":\"Attendees\",\"view_person\":\"View person\"},\"create\":{\"success_html\":\"Event was successfully created. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the event\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"Event was successfully archived\"},\"edit\":{\"title\":\"Edit event\"},\"form\":{\"placeholders\":{\"slug\":\"event\",\"title\":\"Event title\"},\"state\":{\"pending\":\"Pending\",\"published\":\"Published\"}},\"index\":{\"configuration\":\"Configuration\",\"header\":{\"date\":\"Date\",\"event\":\"Event\",\"location\":\"Location\",\"status\":\"Status\"},\"new\":\"New event\",\"past_events\":\"Past events\",\"pending_events\":\"Moderation pending\",\"published_events\":\"Published events\",\"upcoming_events\":\"Upcoming\",\"view_event\":\"View event\",\"visibility_level\":{\"archived\":\"Archived\",\"pending\":\"Draft\",\"published\":\"Published\"}},\"locations_form\":{\"header\":{\"address\":\"Address\",\"place\":\"Place\"},\"title\":\"Place\"},\"new\":{\"title\":\"New event\"},\"person_breadcrumb\":{\"back_to_collections\":\"\\\\u003c Back to agendas\"},\"recover\":{\"success\":\"Event was successfully recovered\"},\"update\":{\"success_html\":\"Event was successfully updated. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the event\\\\u003c/a\\\\u003e.\"}}},\"gobierto_cms\":{\"file_attachments\":{\"index\":{\"title\":\"Attachments\"}},\"pages\":{\"create\":{\"success_html\":\"Page created successfully. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eView the page\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"Page archived successfully\"},\"edit\":{\"title\":\"Edit page\"},\"form\":{\"include_in_section\":\"Include in section\",\"new_section\":\"(New section)\",\"placeholders\":{\"slug\":\"about-this-web\",\"title\":\"Page title\"},\"section\":\"Section\",\"visibility_level\":{\"active\":\"Published\",\"draft\":\"Draft\"},\"without_parent\":\"(without parent)\"},\"index\":{\"add_new\":\"Add new\",\"collections\":\"Collections\",\"header\":{\"collection\":\"Collection\",\"pages\":\"Pages\",\"section\":\"Section\"},\"latest_editions\":\"Latests editions\",\"new\":\"New\",\"sections\":\"Sections\",\"title\":\"CMS\",\"view_collection\":\"View collection\",\"view_section\":\"View section\"},\"new\":{\"title\":\"New page\"},\"recover\":{\"success\":\"The page has been successfully recovered\"},\"update\":{\"success_html\":\"Page updated successfully. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eView the page\\\\u003c/a\\\\u003e.\"}},\"sections\":{\"create\":{\"success\":\"Section created successfully.\"},\"edit_modal\":{\"title\":\"Edit section\"},\"form\":{\"placeholders\":{\"slug\":\"about-this-section\",\"title\":\"Section title\"}},\"index\":{\"header\":{\"pages\":\"Sections\",\"title\":\"Section\"},\"new\":\"New\",\"title\":\"Sections\",\"view\":\"View section\"},\"new_modal\":{\"title\":\"New section\"},\"pages_filter\":{\"page_help\":\"Drag and drop on the left side to place this page in the menu\"},\"show\":{\"collapse\":\"Collapse everything\",\"configuration\":\"Configuration\",\"delete_element\":\"Remove item from menu\",\"expand\":\"Expand all\",\"help\":\"Configure the elements in your menu. Drag from the right panel to the menu on the left\",\"last_edited_pages\":\"Last edited pages\",\"placeholders\":{\"search\":\"Enter the title of the page to search\"},\"sections\":\"Sections\",\"select_page\":\"Select page to include in the section\",\"view\":\"View section\"},\"update\":{\"success\":\"Section updated successfully.\"}}},\"gobierto_common\":{\"collections\":{\"check_container_presence\":{\"container_not_found\":\"The resource the collection belongs to couldn\\'t be found\"},\"create\":{\"success\":\"Collection was successfully created.\"},\"edit_modal\":{\"title\":\"Edit collection\"},\"form\":{\"placeholders\":{\"slug\":\"about-this-collection\",\"title\":\"Collection name\"}},\"index\":{\"collections\":\"Collections\",\"header\":{\"collection\":\"Title\",\"pages\":\"Pages\"},\"latest_editions\":\"Latests editions\",\"new\":\"New\",\"title\":\"CMS\",\"view_collection\":\"See collection\"},\"new_modal\":{\"title\":\"New collection\"},\"show\":{\"configuration\":\"Configuration\",\"file_attachments\":{\"created_at\":\"Created at\",\"file_name\":\"Filename\",\"view\":\"View document\"},\"new_attachment\":\"New\",\"new_page\":\"New\",\"pages\":{\"created_at\":\"Created at\",\"public\":\"Public\",\"published_on\":\"Published on\",\"updated_at\":\"Updated at\",\"view\":\"View page\",\"visibility_level\":{\"active\":\"Published\",\"archived\":\"Archived\",\"draft\":\"Draft\"}}},\"update\":{\"success\":\"Collection was successfully updated.\"}},\"content_blocks\":{\"create\":{\"success\":\"Content block was successfully created\"},\"destroy\":{\"success\":\"Content block was successfully deleted\"},\"edit\":{\"title\":\"Edit block\"},\"form\":{\"add_child\":\"Add column\",\"fields\":\"Columns\",\"title\":\"Block name\"},\"new\":{\"title\":\"Add block\"},\"update\":{\"success\":\"Content block was successfully updated\"}},\"custom_fields\":{\"custom_fields\":{\"create\":{\"success\":\"Custom field created correctly\"},\"date_options\":{\"date\":\"Date\",\"datetime\":\"Date and time\",\"type\":\"Type\"},\"destroy\":{\"failed\":\"There was an error that prevented the deletion of the custom field\",\"success\":\"Custom field successfully deleted\"},\"edit\":{\"instance_title\":\"Edit %{field_name} of %{instance_name}\",\"title\":\"Edit %{name}\"},\"form\":{\"confirm\":\"Are you sure?\",\"crop\":\"Crop\",\"multiple\":\"Multiple\",\"type\":\"Content options\"},\"index\":{\"instance_title\":\"Custom fields of %{instance_name}\",\"localized_custom_fields\":\"Translatable fields\",\"new\":\"Add new field\",\"not_localized_custom_fields\":\"Non-translatable fields\",\"title\":\"Custom fields\"},\"new\":{\"instance_title\":\"New field of %{instance_name}\",\"title\":\"New field\"},\"new_option\":{\"cancel_new_option\":\"Cancel\",\"create\":\"Create option\",\"new\":\"New option\"},\"numeric_options\":{\"currency\":\"Currency\",\"generic\":\"Generic\",\"unit_type\":\"Unit type\"},\"options_form\":{\"add_option\":\"Add option\"},\"plugin\":{\"budgets\":\"Budgets\",\"progress\":\"Progress\",\"table\":\"Table\",\"type\":\"Type\"},\"plugin_configuration_form\":{\"configuration\":\"Configuration\"},\"update\":{\"success\":\"Custom field updated correctly\"},\"vocabulary_select\":{\"vocabulary\":\"Options vocabulary\"},\"vocabulary_type_select\":{\"multiple_select\":\"Multiple select\",\"single_select\":\"Single select\",\"tags\":\"Tags\",\"type\":\"Type\"}},\"forms\":{\"new_gallery_image\":{\"add_item\":\"Add image\",\"cancel_new_item\":\"Cancel\"}},\"module_resources\":{\"index\":{\"custom_fields_for_instances_of\":\"Custom fields for instances of %{name}\",\"empty\":\"Currently there is no model with custom fields enabled\"}}},\"dynamic_content\":{\"form\":{\"add_child\":\"Add new record\",\"add_content_block\":\"Add new block\",\"add_record\":\"Add\",\"attachment\":\"Attachment\",\"attachment_file\":\"Attachment file\",\"cancel_record\":\"Cancel\",\"delete_content_block\":\"Delete block\",\"delete_content_block_confirm\":\"Are you sure you want to delete this block?\",\"download_attachment\":\"Download attachment\",\"edit_content_block\":\"Edit\",\"remove_attachment\":\"Remove attachment\",\"save_record\":\"Save\"}},\"ordered_terms\":{\"create\":{\"success\":\"Term created successfully.\"},\"destroy\":{\"destroy_failed\":\"The term couldn\\'t be deleted: %{validation_errors}\",\"success\":\"Term deleted successfully.\"},\"edit_modal\":{\"title\":\"Edit %{term}\"},\"form\":{\"placeholders\":{\"description\":\"Term description\",\"external_id\":\"ID001\",\"name\":\"Term name\",\"slug\":\"term\"}},\"index\":{\"collapse_all\":\"Collapse all\",\"explore\":\"Explora\",\"new\":\"New\",\"open_all\":\"Open all\",\"title\":\"Terms of %{vocabulary}\"},\"new_modal\":{\"title\":\"New term\"},\"terms_tree\":{\"delete_confirm\":\"Are you sure? This operation can not be undone\"},\"update\":{\"success\":\"Term updated successfully.\"}},\"terms\":{\"create\":{\"success\":\"Term created successfully.\"},\"destroy\":{\"destroy_failed\":\"Term couldn\\'t be deleted.\",\"success\":\"Term deleted successfully.\"},\"edit\":{\"edit\":\"Edit %{term}\"},\"form\":{\"placeholders\":{\"description\":\"The horse is a herbivorous mammal\",\"name\":\"Horse\",\"slug\":\"reino-animal-caballo\"}},\"index\":{\"delete_confirm\":\"Are you sure? This operation can not be undone\",\"header\":{\"description\":\"Description\",\"level\":\"Level\",\"name\":\"Name\",\"parent\":\"Parent\"},\"new\":\"New\",\"title\":\"Terms of %{vocabulary}\"},\"new\":{\"new\":\"New term\"},\"update\":{\"success\":\"Term updated successfully.\"}},\"vocabularies\":{\"create\":{\"success\":\"Vocabulary created successfully.\"},\"destroy\":{\"destroy_failed\":\"Vocabulary couldn\\'t be deleted because it\\'s being used\",\"success\":\"Vocabulary deleted successfully.\"},\"edit\":{\"edit\":\"Edit %{vocabulary}\"},\"edit_modal\":{\"title\":\"Edit %{vocabulary}\"},\"form\":{\"placeholders\":{\"name\":\"Animal kingdom\",\"slug\":\"animal_kingdom\"}},\"index\":{\"delete_confirm\":\"Are you sure? This operation can not be undone\",\"header\":{\"name\":\"Subject\",\"terms\":\"Terms\"},\"new\":\"New\",\"title\":\"Vocabularies\",\"view_vocabulary\":\"See terms\"},\"new\":{\"new\":\"New Vocabulary\"},\"new_modal\":{\"title\":\"New Vocabulary\"},\"show\":{\"created_at\":\"Created at\",\"terms\":\"Terms\",\"terms_count\":\"%{count} terms\"},\"update\":{\"success\":\"Vocabulary updated successfully.\"}}},\"gobierto_core\":{\"site_templates\":{\"create\":{\"success\":\"Template was successfully created.\"},\"destroy\":{\"success\":\"Template was successfully deleted.\"},\"update\":{\"success\":\"Template was successfully updated.\"}},\"templates\":{\"edit\":{\"preview\":\"Preview\",\"reset\":\"Reset\",\"reset_title\":\"Discard saved changes, and return to the original template (be careful, you will not be able to recover the template that you have customized)\",\"save\":\"Save\"},\"index\":{\"edit_templates\":\"Edit templates\"}}},\"gobierto_dashboards\":{\"dashboards\":{\"destroy\":{\"success\":\"Dashboard deleted correctly.\"},\"list_modal\":{\"add\":\"Add\",\"new\":\"Do you need to create a new dashboard?\",\"no_dashboards\":\"No dashboards\",\"title\":\"Select the dashboard to include this indicator\"}}},\"gobierto_data\":{\"configuration\":{\"settings\":{\"edit\":{\"api_settings\":\"API settings\",\"db_config_placeholder\":\"{\\\\\"pool\\\\\":5, \\\\\"adapter\\\\\":\\\\\"postgresql\\\\\", \\\\\"database\\\\\":\\\\\"gobierto_test\\\\\", \\\\\"encoding\\\\\":\\\\\"unicode\\\\\", \\\\\"password\\\\\":\\\\\"gobierto\\\\\", \\\\\"username\\\\\":\\\\\"gobierto\\\\\"}\",\"frontend\":\"Front-end\",\"frontend_enabled\":\"Visible\",\"title\":\"Configuration\",\"update\":\"Update\"},\"title\":\"Preferences\",\"update\":{\"success\":\"Configuration stored successfully\"}}},\"datasets\":{\"create\":{\"success\":\"Dataset created correctly.\"},\"destroy\":{\"success\":\"Dataset deleted correctly.\"},\"form\":{\"placeholders\":{\"name\":\"Population\",\"slug\":\"population\"}},\"index\":{\"header\":{\"name\":\"Name\",\"status\":\"Status\",\"table_name\":\"Table name\"},\"new\":\"New\",\"title\":\"Datasets\",\"view_dataset\":\"See dataset\"},\"new\":{\"title\":\"New dataset\"},\"update\":{\"success\":\"Dataset updated correctly.\"}}},\"gobierto_investments\":{\"projects\":{\"create\":{\"success\":\"Project created correctly.\"},\"destroy\":{\"success\":\"Project deleted correctly.\"},\"form\":{\"placeholders\":{\"external_id\":\"ID001\",\"title\":\"Sports center\"}},\"index\":{\"header\":{\"external_id\":\"External ID\",\"title\":\"Title\"},\"new\":\"New\",\"title\":\"Projects\",\"view_project\":\"See project\"},\"new\":{\"title\":\"New project\"},\"update\":{\"success\":\"Project updated correctly.\"}}},\"gobierto_observatory\":{\"configuration\":{\"settings\":{\"edit\":{\"title\":\"Observatory configuration\",\"update\":\"Update\"},\"title\":\"Preferences\",\"update\":{\"error\":\"There was a problem when saving configuration: %{validation_errors}\",\"success\":\"Configuration stored successfully\"}}}},\"gobierto_people\":{\"configuration\":{\"settings\":{\"edit\":{\"agendas\":\"Agendas\",\"blogs\":\"Blogs\",\"departments\":\"Departments\",\"gifts\":\"Gifts\",\"interest_groups\":\"Interest groups\",\"invitations\":\"Invitations\",\"officials\":\"Officials\",\"placeholders\":{\"home_text_ca\":\"Home text Catalan\",\"home_text_en\":\"Home text English\",\"home_text_es\":\"Home text Spanish\"},\"political_groups_vocabulary\":\"Political groups vocabulary\",\"statements\":\"Statements\",\"submodules_enabled\":\"Enabled submodules\",\"trips\":\"Trips\",\"update\":\"Update\"},\"update\":{\"error\":\"An error occured while saving these settings\",\"success\":\"Settings updated successfully\"}},\"title\":\"Configuration\"},\"people\":{\"create\":{\"success_html\":\"Person was successfully created. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the person\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Edit person\"},\"form\":{\"avatar_file_constraints\":\"User avatar (500x500 file)\",\"bio_file_constraints\":\"Attach file (PDF)\",\"category\":{\"executive\":\"Executive\",\"politician\":\"Politician\"},\"crop\":\"Crop\",\"party\":{\"government\":\"Government Team\",\"opposition\":\"Opposition\"},\"placeholders\":{\"charge\":\"Alcalde\",\"email\":\"Email\",\"name\":\"Rafael Garc\u00EDa\"}},\"index\":{\"configuration\":\"Configuration\",\"drag_to_sort\":\"Drag to sort\",\"header\":{\"charge\":\"Position\",\"events\":\"Events\",\"person\":\"Person\",\"posts\":\"Posts\",\"statements\":\"Statements\",\"status\":\"Status\"},\"new\":\"New person\",\"no_permissions\":\"You don\\'t have permissions to edit this person. If you need to edit, ask your administrator\",\"title\":\"People\",\"view_person\":\"View person\",\"visibility_level\":{\"active\":\"Published\",\"draft\":\"Draft\"}},\"navigation\":{\"agenda\":\"Agenda\",\"person\":\"Person\",\"posts\":\"Blog\",\"statements\":\"Statements\"},\"new\":{\"title\":\"New person\"},\"person_events\":{\"index\":{\"title\":\"Agenda\"}},\"person_posts\":{\"create\":{\"success_html\":\"Post was successfully created. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the post\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Edit post\"},\"form\":{\"placeholders\":{\"tags\":\"personal, about me, my career\",\"title\":\"About me\"}},\"index\":{\"header\":{\"date\":\"Date\",\"status\":\"Status\",\"tags\":\"Tags\",\"title\":\"Title\"},\"new\":\"New post\",\"title\":\"Blog\",\"view_post\":\"View post\",\"visibility_level\":{\"active\":\"Published\",\"draft\":\"Draft\"}},\"new\":{\"title\":\"New post\"},\"update\":{\"success_html\":\"Post was successfully updated. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the post\\\\u003c/a\\\\u003e.\"}},\"person_statements\":{\"create\":{\"success_html\":\"Statement was successfully created. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the statement\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Edit statement\"},\"form\":{\"placeholders\":{\"title\":\"Statement of assets and activities\"}},\"index\":{\"header\":{\"date\":\"Date\",\"statement\":\"Statement\",\"status\":\"Estat\"},\"new\":\"New statement\",\"title\":\"Statements\",\"view_statement\":\"View statement\",\"visibility_level\":{\"active\":\"Published\",\"draft\":\"Draft\"}},\"new\":{\"title\":\"New statement\"},\"update\":{\"success_html\":\"Statement was successfully updated. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the statement\\\\u003c/a\\\\u003e.\"}},\"update\":{\"success_html\":\"Person was successfully updated. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eSee the person\\\\u003c/a\\\\u003e.\"}},\"settings\":{\"title\":\"Settings\"}},\"gobierto_plans\":{\"admin_mailer\":{\"project_attributes_changed\":{\"bye\":\"Best regards\",\"edition_change\":\"content\",\"hi\":\"Hello\",\"intro_html\":\"%{author_name} updated %{updates_list} in the project %{project_link} in plan %{plan_title}.\",\"minor_change_notice\":\"The change has been saved as minor so no new version has been created.\",\"moderation_stage_change\":\"moderation status to %{value}\",\"subject\":\"A project in plan %{plan_title} of %{site_name} has been modified\",\"subject_with_changes\":\"A project in plan %{plan_title} of %{site_name} has been modified to %{changes}\",\"visibility_level_change\":\"publication status to %{value}\",\"visibility_levels\":{\"draft\":\"Not published\",\"published\":\"Published\"}},\"project_created\":{\"bye\":\"Best regards\",\"hi\":\"Hello\",\"intro_html\":\"%{author_name} has created a new project %{project_link} in the plan %{plan_title}\",\"subject\":\"A project has been created in the plan %{plan_title} of %{site_name}\"},\"project_deleted\":{\"bye\":\"Best regards\",\"hi\":\"Hello\",\"intro_html\":\"%{author_name} has deleted the project %{project_name} from the plan %{plan_link}\",\"subject\":\"A project has been deleted from the plan %{plan_title} of %{site_name}\"}},\"categories\":{\"calculated_headers\":{\"items\":\"Items\",\"progress\":\"Progress\"},\"create\":{\"success\":\"Category created successfully.\"},\"destroy\":{\"destroy_failed\":\"You can\\'t delete a category while it has associated projects or other elements.\",\"success\":\"Category deleted successfully.\"},\"plan_summary\":{\"global_progress\":\"Global progress\",\"projects\":\"Projects\"},\"update\":{\"success\":\"Category updated successfully.\"}},\"dashboards\":{\"index\":{\"headers\":{\"status\":\"Visibility\",\"title\":\"Title\",\"updated\":\"Updated\"},\"new\":\"New\",\"visibility_level\":{\"active\":\"Public\",\"draft\":\"Private\"}}},\"plan_types\":{\"create\":{\"success\":\"Plan type created successfully.\"},\"destroy\":{\"has_items\":\"You can\\'t archive a type of plan while having associated elements.\",\"success\":\"Plan type archived successfully\"},\"edit\":{\"title\":\"Edit plan type\"},\"form\":{\"placeholders\":{\"name\":\"Plan type name\",\"slug\":\"about-this-type-of-plan\"}},\"index\":{\"delete\":\"Delete\",\"header\":{\"type\":\"Type\"},\"new\":\"New\",\"title\":\"Plan types\"},\"new\":{\"title\":\"New plan type\"},\"update\":{\"success\":\"Plan type updated successfully.\"}},\"plans\":{\"create\":{\"success_html\":\"Plan created successfully. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eView the plan\\\\u003c/a\\\\u003e.\"},\"delete_contents\":{\"success\":\"Plan projects has been successfully deleted\",\"term_deletion_failed_html\":\"The term \\\\\"%{term}\\\\\" of \\\\\"%{vocabulary}\\\\\" vocabulary can\\'t be deleted: %{message}\"},\"destroy\":{\"success\":\"Plan archived successfully.\"},\"edit\":{\"title\":\"Configuration\"},\"form\":{\"delete_contents\":\"Delete projects of this plan\",\"delete_contents_confirm\":\"Confirm you want to delete projects from this plan\",\"export_csv\":\"Export to CSV\",\"import_csv\":\"Import from CSV\",\"indicators\":\"Indicators\",\"placeholders\":{\"configuration_data\":\"{ \\\\\"open_node\\\\\": true }\",\"css\":\".gobierto_planification section.level_0 .cat_1 { background-color: rgba(0, 191, 255, 0.95); }\",\"footer\":\"Plan footer\",\"introduction\":\"Plan introduction\",\"slug\":\"about-this-plan\",\"title\":\"Plan title\",\"year\":2018},\"projects\":\"Projects\",\"publish_last_version_automatically\":\"Publish new versions of projects automatically\"},\"import_csv\":{\"defaults\":{\"category\":{\"one\":\"item of level %{level}\",\"other\":\"items of level %{level}\"},\"project\":{\"one\":\"project\",\"other\":\"projects\"}},\"latest_update\":\"Last updated: %{datetime}\",\"no_data\":\"No data loaded yet\",\"there_are\":\"There are %{info}\",\"title\":\"Import CSV\"},\"import_csv_form\":{\"confirm_import\":\"Are you sure?\",\"custom_fields_table_plugin\":\"Custom fields (table plugin)\",\"disable_with\":\"Loading...\",\"more_info_html\":\"For more information, visit the documentation \\\\u003ca href=\\\\\"%{url}\\\\\" target=\\\\\"_blank\\\\\"\\\\u003eImportar datos de un plan\\\\u003c/a\\\\u003e.\",\"plan_content\":\"Plan content\",\"submit\":\"Import from CSV file\",\"vocabulary_used_by_other_plans\":\"The vocabulary configured for this plan is already configured for someone else. Please create a new vocabulary for this plan or remove it from the configuration of the other plans using it, since their data would be deleted with the import.\",\"warning\":\"\\\\u003cstrong\\\\u003eWarning\\\\u003c/strong\\\\u003e When importing from a CSV file, if the plan is empty, terms will be added to the vocabularies associated with categories and custom fields as they are found, but if the plan already contains data, since it\\'s an update, errors will be produced for the terms not found in the respective vocabularies.\"},\"import_data\":{\"missing_file\":\"Please, choose a file for the import.\",\"success_html\":\"Data imported successfully. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eView the plan\\\\u003c/a\\\\u003e.\"},\"index\":{\"header\":{\"elements\":\"Elements\",\"status\":\"Status\",\"title\":\"Title\",\"type\":\"Type\",\"year\":\"Year\"},\"new\":\"New\",\"title\":\"Plans\",\"types\":\"Types\",\"view_plan\":\"View plan\",\"visibility_level\":{\"draft\":\"Draft\",\"published\":\"Published\"}},\"new\":{\"title\":\"New plan\"},\"recover\":{\"success\":\"Plan has been successfully recovered.\"},\"update\":{\"success_html\":\"Plan updated successfully. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eView the plan\\\\u003c/a\\\\u003e.\"}},\"projects\":{\"create\":{\"success\":\"Project created correctly.\"},\"destroy\":{\"success\":\"Project deleted correctly.\"},\"filter_form\":{\"author\":\"Author\",\"category\":\"Category\",\"clear_filters\":\"Clear filters\",\"filter\":\"Filter\",\"interval\":\"Date interval\",\"progress\":\"Progress\",\"search\":\"Search...\",\"status\":\"Status\",\"submit\":\"Filter\"},\"filters_row\":{\"all\":\"All\",\"moderation_stage\":\"Moderation\",\"moderation_stage_value\":{\"approved\":\"Approved\",\"blank\":\"Without moderation\",\"in_review\":\"Under review\",\"rejected\":\"Rejected\",\"sent\":\"Sent\",\"unsent\":\"Not sent\"},\"total\":\"Total\",\"versions_visibility_level\":\"Publication\",\"versions_visibility_level_value\":{\"draft\":\"Draft\",\"published_up_to_date\":\"Published up to date\",\"published_with_unpublished_changes\":\"Published with unpublished changes\"}},\"find_versioned_project\":{\"unavailable_version\":\"Unavailable version.\"},\"form\":{\"button\":{\"add_dashboard\":\"Add to dashboard\"},\"placeholders\":{\"name\":\"Project title\"}},\"index\":{\"headers\":{\"progress\":\"Progress\",\"project\":\"Project\",\"status\":\"Status\",\"updated\":\"Updated\",\"visibility_level\":\"Publication\"},\"new\":\"New\",\"title\":\"Projecs of %{name}\",\"view\":\"View item\"},\"new\":{\"title\":\"New project\"},\"publish\":{\"confirm\":\"You are going to publish this project, so any user will be able to see it in the front-end.\",\"error\":\"Project couldn\\'t be published.\",\"success\":\"Project published correctly.\"},\"send\":{\"confirm\":\"You are going to send this project to be validated by a moderator.\"},\"unpublish\":{\"error\":\"Project couldn\\'t be unpublished.\",\"success\":\"Project unpublished correctly.\"},\"update\":{\"moderation_reset\":\"Because you have modified the project and do not have moderation permissions, its status has been moved to Not sent.\",\"no_changes\":\"No changes have been made to the project. The current version has been maintained.\",\"success\":\"Project updated correctly.\",\"suggest_unpublish_html\":\"The project is not approved but still published. \\\\u003ca rel=\\\\\"nofollow\\\\\" data-method=\\\\\"post\\\\\" href=\\\\\"%{url}\\\\\"\\\\u003eUnpublish\\\\u003c/a\\\\u003e.\"}},\"shared\":{\"navigation\":{\"configuration_tab\":\"Configuration\",\"dashboards_tab\":\"Dashboards\",\"plan_terms_tab\":\"Plan\",\"projects_tab\":\"Projects\"}}},\"gobierto_visualizations\":{\"configuration\":{\"settings\":{\"edit\":{\"title\":\"Visualizations configuration\",\"update\":\"Update\"},\"title\":\"Preferences\",\"update\":{\"error\":\"There was a problem when saving configuration: %{validation_errors}\",\"success\":\"Configuration stored successfully\"}}}},\"layouts\":{\"application\":{\"admin_dropdown\":{\"account\":\"Account\",\"sign_out\":\"Sign out\"},\"calendars\":\"Calendars\",\"cms\":\"CMS\",\"collapse_menu\":\"Collapse menu\",\"custom_fields\":\"Custom fields\",\"dirty_forms\":{\"message\":\"You have unsaved changes. Are you sure you want to leave this page?\"},\"edit_site\":\"Customize site\",\"file_attachments\":\"Documents\",\"global\":\"General\",\"hey_admin\":\"Hey, %{admin_name}\",\"manage_sites\":\"Manage sites\",\"modules\":{\"budgets\":\"Budgets\",\"data\":\"Data\",\"investments\":\"Investments\",\"observatory\":\"Observatory\",\"people\":\"Officers and Agendas\",\"plans\":\"Plans\",\"visualizations\":\"Visualizations\"},\"notifications\":\"Notifications\",\"site_network\":\"Network\",\"templates\":\"Templates\",\"users\":\"Users\",\"view_documentation\":\"View documentation\",\"view_item\":\"View item\",\"view_site\":\"View site\",\"vocabularies\":\"Vocabularies\"}},\"module_helper\":{\"not_enabled\":\"You are not authorized to perform this action\"},\"session_helper\":{\"already_signed_in\":\"You are already signed in\",\"not_authorized\":\"You are not authorized to perform this action\",\"not_signed_in\":\"We need you to sign in to continue\"},\"sessions\":{\"create\":{\"error\":\"The data you entered doesn\\'t seem to be valid. Please try again.\",\"success\":\"Signed in successfully\"},\"destroy\":{\"success\":\"Signed out successfully\"},\"form\":{\"email\":\"Email\",\"password\":\"Password\",\"submit\":\"Send\"},\"new\":{\"forgot_your_password\":\"Forgot your password?\",\"title\":\"Log in\"}},\"shared\":{\"admin_widget_attachment\":{\"add_new_document\":\"Add new document\",\"attachments\":\"Attachments\",\"copy_to_clipboard\":\"Copy URL\",\"description\":\"Description\",\"document\":\"Document\",\"document_title\":\"Document title\",\"drag_document_here\":\"Drag and drop the document here\",\"edit_document\":\"Edit document\",\"include_file\":\"Include file\",\"include_in_text\":\"Include file in the text\",\"latest_documents\":\"Recent documents\",\"no_docs\":\"There are no files\",\"or\":\"or\",\"save\":\"Save\",\"search\":\"Search\",\"select_file\":\"Chose a file\"},\"archive\":{\"confirm\":\"Are you sure you want to archive this element? It won\\'t show on the front end neither on lists like this. You will be able to recover it\",\"element\":\"Archive this element\",\"elements\":\"Archived elements\"},\"draft\":\"Draft\",\"form_locale_switchers\":{\"define_content_in_locale\":\"Define the content in %{locale_name} version\",\"translate\":\"Translate\"},\"moderation_save_widget\":{\"change_moderation_status\":\"Change moderation status\",\"confirm\":\"Are you sure?\",\"confirm_moderation_blocked_update\":\"Are you sure? If you save changes to this project, the status will be updated to Unsent.\",\"edit_version\":\"Editing version\",\"last_versions\":\"Last versions\",\"minor_change\":\"Minor change (does not save version)\",\"moderation\":\"Moderation\",\"moderation_info\":{\"new\":\"After saving your content, it can be sent to moderation.\",\"publicable\":\"Click on Publish to make this version publicly visible.\",\"publicable_html\":\"Click on Publish to make this version publicly visible.\",\"published\":\"Current version is the published one.\",\"published_html\":\"Current version is the published one. \\\\u003ca rel=\\\\\"nofollow\\\\\" data-method=\\\\\"post\\\\\" href=\\\\\"%{url}\\\\\"\\\\u003eUnpublish\\\\u003c/a\\\\u003e.\",\"rejected\":\"Version rejected.\",\"sent\":\"Your content has been sent for review. You will receive a notification if it is approved or you are asked for changes.\",\"unsent\":\"When your content is ready to be reviewed by a moderator, click on Send.\"},\"moderation_status\":{\"approved\":\"Approved\",\"in_review\":\"Under review\",\"rejected\":\"Rejected\",\"sent\":\"Sent\",\"unsent\":\"Not sent\"},\"new_version\":\"New (not saved)\",\"preview\":\"Preview\",\"previous_versions\":\"Previous versions\",\"publication_status\":{\"approved\":\"Published\",\"not_published\":\"Not published\"},\"publish\":\"Publish\",\"publish_last_version_automatically\":\"Publish this version automatically\",\"publish_status\":\"Status\",\"published_version\":\"Published version\",\"published_version_blank\":\"not published yet\",\"save\":\"Save\",\"see_all\":\"see all\",\"send\":\"Send\",\"unpublish\":\"Unpublish\"},\"module\":\"Module\",\"recover\":{\"confirm\":\"If you recover an element, it will be listed again\",\"element\":\"Recover element\"},\"resource_admin_permissions_button\":{\"permissions\":\"Permissions\"},\"save_widget\":{\"save\":\"Save\",\"visibility_level\":{\"active\":\"Published\",\"draft\":\"Draft\",\"published\":\"Published\"}}},\"sites\":{\"create\":{\"success\":\"Site was successfully created\"},\"destroy\":{\"success\":\"Site was successfully deleted\"},\"edit\":{\"title\":\"Customize site\"},\"form\":{\"admin_authentication_modules\":\"Authentication strategies for admins\",\"authentication_modules\":\"Authentication strategies for users\",\"hints\":{\"domain\":{\"a_record\":\"A record to %{target}\",\"cname_record\":\"CNAME record to %{target}\",\"if_domain\":\"If it is a domain\",\"if_subdomain\":\"If it is a subdomain\",\"instructions\":\"Important: this domain must be created to ensure the site works perfectly.\"},\"organization_id_html\":\"You can search for the code \\\\u003ca href=\\\\\"https://populatetools.github.io/ine-places/places.html\\\\\" target=\\\\\"_blank\\\\\"\\\\u003ein this table\\\\u003c/a\\\\u003e.\"},\"modules_enabled\":\"Modules enabled for this site\",\"password\":\"Password\",\"placeholders\":{\"domain\":\"gobierto.burjassot.es\",\"google_analytics_id\":\"UA-000000-01\",\"name\":\"Ayuntamiento de Burjassot\",\"organization_name\":\"Burjassot\",\"populate_data_api_token\":\"API Token Populate Data\",\"reply_to_email\":\"contact@email.com\",\"title\":\"Transparencia y Participaci\u00F3n\"},\"registration\":\"Users registration\",\"registration_disabled\":\"Disable registration (only hides links to registration/login)\",\"username\":\"Username\",\"visibility_level\":{\"active\":\"Published\",\"draft\":\"Draft\"}},\"index\":{\"configuration\":\"Configuration\",\"header\":{\"created_at\":\"Created\",\"domain\":\"Domain\",\"site\":\"Site\",\"status\":\"Status\"},\"new\":\"New site\",\"title\":\"Sites\",\"view_site\":\"View site\"},\"new\":{\"title\":\"New site\"},\"pages\":\"Pages\",\"sections\":\"Sections\",\"update\":{\"success\":\"Site was successfully updated\"}},\"users\":{\"edit\":{\"title\":\"Edit User\"},\"form\":{\"change_password\":\"Change password\",\"password_block\":\"Password\",\"placeholders\":{\"email\":\"fgonzalez@gmail.com\",\"name\":\"Fernando Gonz\u00E1lez\"},\"resend_welcome_email\":\"Resend welcome email\",\"resend_welcome_email_notes\":\"including a link to set a new password\"},\"index\":{\"admins_section\":\"Administrators\",\"census_configuration\":\"Census configuration\",\"header\":{\"created_at\":\"Created\",\"email\":\"Email\",\"last_sign_in_at\":\"Last sign in\",\"user\":\"User\",\"verified\":\"Verified\"},\"title\":\"Users\",\"users\":{\"one\":\"%{count} user\",\"other\":\"%{count} users\"},\"users_confirmed\":{\"one\":\"%{count}% confirmed\",\"other\":\"%{count}% confirmed\"},\"users_verified\":{\"one\":\"%{count}% verified\",\"other\":\"%{count}% verified\"},\"view_user\":\"View User\"},\"passwords\":{\"create\":{\"error\":\"There was a problem changing your password\",\"success\":\"User password was successfully updated\"},\"form\":{\"submit\":\"Send\"},\"new\":{\"title\":\"Change user password\"}},\"session_information\":{\"created_at\":\"Created\",\"last_sign_in\":\"Last sign in\",\"site\":\"Site\"},\"update\":{\"success\":\"User was successfully updated\"},\"welcome_messages\":{\"create\":{\"error\":\"The welcome message could not be sent. Please try again.\",\"success\":\"The welcome message has been sent\"}}},\"welcome\":{\"index\":{\"title\":\"Home\"}}},\"gobierto_attachments\":{\"events\":{\"gobierto_attachments_attachment_created\":\"Attachment created\",\"gobierto_attachments_attachment_updated\":\"Attachment updated\"}},\"gobierto_budgets\":{\"budget_lines\":{\"explorer\":{\"examples\":\"Examples\",\"expenses\":\"Expenses\",\"explore_the_detail\":\"Explore the detail\",\"income\":\"Income\",\"search\":\"Search\",\"search_budget_line\":\"Search for a specific budget line\"},\"index\":{\"amount\":\"Amount\",\"budget_guide_pitch\":\"Check the Budget Guide\",\"budget_line\":\"Budget line\",\"categories\":\"Categories\",\"custom\":\"Custom\",\"expense_in_what\":\"In what is spent\",\"expense_to_do_what\":\"For what is spent\",\"help\":\"We explain how a municipal budget works\",\"income_from_what\":\"Where does the income come from\",\"per_inhabitant\":\"Per inhabitant\",\"title\":\"Local municipality budgets in %{year}\"},\"show\":{\"about_this_line\":\"About this budget line\",\"avg_province\":\"Avg. %{kind} in the province\",\"avg_province_tooltip\":\"Mean value in the other municipalities of the province\",\"back_to_parent\":\"Back to parent budget line\",\"budget_line_category\":\"Category\",\"budget_line_percentage\":\"Percentage\",\"budget_line_value\":\"Amount\",\"budget_lines_distribution\":\"Expense budget lines distribution\",\"current_amount\":\"Current amount\",\"current_amount_per_inhabitant\":\"Current amount / hab.\",\"evolution\":\"Evolution\",\"give_your_opinion\":\"Give your opinion about this budget line\",\"give_your_opinion_cta\":\"Do you understand this budget line? Do you think it\\'s enough, too much? Give your opinion\",\"initial_estimate\":\"Initial budget\",\"last_year\":\"Last year %{value}\",\"no_description\":\"There\\'s no description for this budget line.\",\"no_distribution\":\"There aren\\'t any related budget lines.\",\"no_more_descendants\":\"There are no more descendants\",\"not_available\":\"Not avail.\",\"percentage\":\"% over the total\",\"percentage_tooltip\":\"Percentage of the total budget this budget line implies\",\"planned\":\"planned\",\"planned_female\":\"planned\",\"planned_per_inhabitant\":\"Initial budget / inh.\",\"planned_per_inhabitant_tooltip\":\"Budgeted amount divided by the inhabitants\",\"planned_tooltip\":\"Budgeted amount\",\"raise_hand\":\"Raise your hand\",\"real_value\":\"Real %{kind} is %{value}\",\"real_vs_planned\":\"% execution\",\"real_vs_planned_tooltip\":\"Percentage executed\",\"sub_budget_lines\":\"In this budget line\",\"twitter_text_expense\":\"In @gobierto: Municipal expense on %{name} in %{budget_line_name} for year %{year}\",\"twitter_text_income\":\"In @gobierto: Municipal income on %{name} in %{budget_line_name} for year %{year}\",\"updated\":\"updated\",\"updated_female\":\"updated\",\"vs_previous_year\":\"vs. previous year\",\"vs_previous_year_tooltip\":\"Comparision with the data of the previous year\"}},\"budgets\":{\"guide\":{\"budget_execution\":\"Budget execution\",\"budget_execution_p1_html\":\"Approving a budget does not mean that it is written in stone. Throughout the year there are unforeseen events that change the amount or purpose of the expenses. These changes are noted in another document: \\\\u003ca href=/presupuestos/ejecucion/%{year}\\\\\"\\\\u003ebudget execution\\\\u003c/a\\\\u003e .\",\"budget_execution_p2\":\"In order to know if our city council has planned the accounts well, we only have to compare the budget and the execution: Have you spent more than budgeted, have you left money or adjusted to what is expected ?.\",\"capital_income\":\"Income from capital\",\"capital_income_p1\":\"They come from the sale of municipal properties such as plots or estates. They can also come from European funds.\",\"classification\":\"Budget classification\",\"classification_p1\":\"Every budget has income and expenses. Income is classified in an economic way, which establishes its origin. Expenses, on the other hand, are functional and economical.\",\"debt\":\"Living Debt: How Much Should Your Township\",\"description\":\"The municipal budget is the document that explains how the public money is managed during a year. Here we explain the most important concepts so that you do not lose in your reading.\",\"economic\":\"Economic spending\",\"economic_p1\":\"Indicates the nature of the expense. For example, \\\\\"Staff costs\\\\\", which includes the salaries of all staff members according to their category. It is similar to the economic classification of income.\",\"economic_p2\":\"In an official budget, the main sections are called chapters. And in turn, each chapter is divided into articles, concepts and subconceptions.\",\"execution\":\"Budget Execution\",\"expense_economic_1_desc\":\"Salaries of civil servants, indemnities, contributions and pension plans for all contracted personnel.\",\"expense_economic_2_desc\":\"Supplies, materials and expenses of services or work done by contracted outsiders.\",\"expense_economic_3_desc\":\"Payment of interest arising from financial operations.\",\"expense_economic_4_desc\":\"Contributions to other entities or administrations (state, autonomous or private companies) to finance current operations.\",\"expense_economic_5_desc\":\"These are funds that cover emergency situations and unforeseen expenses.\",\"expense_economic_6_desc\":\"Creation of new equipment or infrastructures and acquisition of inventories.\",\"expense_economic_7_desc\":\"Payment of credits to finance capital operations, which have financed real investments.\",\"expense_economic_8_desc\":\"Acquisition of financial assets for the construction of deposits and sureties required.\",\"expense_economic_9_desc\":\"Payment of amortization of financial liabilities (such as debt).\",\"expense_functional_0_desc\":\"This item is intended to pay the debt accumulated by the municipality.\",\"expense_functional_1_desc\":\"This item covers the minimum and compulsory needs of a municipality.\",\"expense_functional_2_desc\":\"It is the money that goes to prevention and assistance. For example, the promotion of employment.\",\"expense_functional_3_desc\":\"It affects services that improve the quality of life: health, education, culture and leisure.\",\"expense_functional_4_desc\":\"Herein lies what helps to develop the potential of different economic sectors.\",\"expense_functional_9_desc\":\"Here the expenses of the city council and other public bodies are grouped together.\",\"expenses\":\"Expenses\",\"expenses_how\":\"How does the municipality use the money of all the neighbors? Expenses can be classified in two ways: from the functional point of view (what is spent) and economic (how it is spent).\",\"expenses_per_inhabitant\":\"The spending per capita was ...\",\"expenses_types\":\"Types of expense\",\"expenses_types_p1\":\"How does the municipality use the money of all the neighbors? Everything is detailed here. Expenses can be classified in two ways: from the functional point of view (what is spent) and economic (how it is spent). The amount of money is the same, but we see it from two angles.\",\"financial_income\":\"Financial income\",\"financial_income_p1\":\"They can be frozen bank deposits or loans granted by private entities, such as banks or insurers.\",\"functional\":\"Functional expenditure\",\"functional_p1\":\"It is the most explanatory: it tells us, for example, how much is spent on garbage collection or sports facilities. It is also known as expenditure item classification.\",\"functional_p2\":\"In an official budget is divided into areas, and these in turn in policies, groups and programs. This level of depth allows you to know in detail where the money goes.\",\"how_much_debt\":\"How much does your municipality owe?\",\"how_much_debt_p1\":\"The living debt of a municipality indicates what the council owes to banks and other financial institutions. It should not be confused with the total deficit of the municipality (the difference between income and expenditure).\",\"how_much_debt_p2\":\"Living debt only includes what is owed to financial institutions.\",\"how_much_debt_p3\":\"Some municipalities have greater indebtedness capacity than others. It is possible that one municipality has more debt than another, but if its economy is stronger, it will have more capacity to support and reduce it.\",\"how_to_read\":\"And how do you read?\",\"how_to_read_p1_html\":\"All municipal budgets have the same structure, legally defined in \\\\u003ca href=\\\\\"https://www.boe.es/buscar/doc.php?id=BOE-A-2008-19916\\\\\"\\\\u003eOrder EHA / 3565/2008\\\\u003c/a\\\\u003e . The basic structure is simple: it is divided into income and expenses. That is, answers the questions Where does the money come from? (Income) and what is it spent on? (expenses).\",\"income\":\"Income\",\"income_1_desc\":\"They tax the source of income, the fruits of heritage or an economic activity.\",\"income_2_desc\":\"Some municipalities collect a part of the VAT and other special taxes.\",\"income_3_desc\":\"Public prices and contributions for municipal benefits.\",\"income_4_desc\":\"Money that the city council receives from the State and the Autonomous Community.\",\"income_5_desc\":\"Property income of the municipality. They are the profits on goods that are not destined to public service.\",\"income_6_desc\":\"Sale of plots and rustic farms.\",\"income_7_desc\":\"Income of a non-tax nature intended to finance capital expenditures.\",\"income_8_desc\":\"Return of immobilized deposits or deposits.\",\"income_9_desc\":\"Credits requested from private entities.\",\"income_p1\":\"To begin with, income is divided according to its economic nature, ie where the money comes from and what \\\\\"form\\\\\" it has: If it is a bank credit, a municipal property that has been sold or a tax.\",\"income_p2\":\"In %{year} were entered...\",\"intro_p1\":\"The municipal council - formed by the mayor and those responsible for each area of \u200B\u200Bgovernment - designs the budget, drafts it through the Department of Finance and presents it in plenary, which is the organ of maximum representation municipal politics.\",\"intro_p2\":\"Once there, all councilors study it and suggest modifications. Finally it is put to a vote and approved.\",\"intro_p3\":\"The budget must be approved before December 31 of the previous year. That is, the 2016 budget has to be approved in December 2015, if not, it is automatically extended.\",\"regular_income\":\"Current income\",\"regular_income_p1\":\"Taxes and fees collected by the municipality, or money that the state transfers to each municipality. They are the most common.\",\"sources\":\"Sources\",\"sources_p1_html\":\"To prepare this guide we have taken as reference the official structure of a municipal budget, defined in \\\\u003ca href=\\\\\"https://www.boe.es/buscar/doc.php?id=BOE-A-2008-19916\\\\\"\\\\u003eOrder EHA / 3565/2008\\\\u003c/a\\\\u003e and we have been inspired by other documents such as \\\\u003ca href=\\\\\"http://www.ocmcartagena.org/files/archive/Entendiendo-un-presupuesto-municipal.pdf\\\\\"\\\\u003eUnderstanding a municipal budget\\\\u003c/a\\\\u003e and an \\\\u003ca href=\\\\\"https://docs.google.com/presentation/d/1oysDrJvlFxP0sKlzBalxvrV3lzSE5OCSKY7qd5yYpcA/pub?start=false\\\\u0026loop=false\\\\u0026delayms=3000\\\\u0026slide=id.p\\\\\"\\\\u003eintroduction guide to municipal budgets\\\\u003c/a\\\\u003e .\",\"title\":\"How a municipal budget works\",\"types_income\":\"Types of income\",\"types_income_p1\":\"The income is divided into nine sections and each of them in several subsections. These divisions allow to deepen to know the exact origin of each income.\",\"types_income_p2\":\"For example: within Indirect Taxes are the specific Consumptions. And within the latter, are the taxes of alcohol or tobacco. In an official budget, the main sections are called chapters. And in turn, each chapter is divided into articles, concepts and subconceptions.\",\"types_income_p3\":\"In Gobierto we have simplified it so that you only have to look for the name of each section.\"},\"index\":{\"at_a_glance\":\"At a glance\",\"at_years_end\":\"* at the end of %{year}\",\"budget_guide\":\"Read our Budget Guide\",\"budget_lines_block\":{\"intro\":\"These are your town\\'s most important budget lines.\",\"title\":\"Budget lines\"},\"budget_receipt\":{\"intro\":\"Learn how your contribution is spent\",\"title\":\"Your taxes receipt\"},\"budget_slides\":{\"slide_1\":\"Gasto en asistencia social por habitante\",\"title\":\"A peek into the budget\"},\"budgets_comparision\":{\"button\":\"Compare\",\"text\":\"Compare the %{site} budget with some others councils from\"},\"category_percentage\":\"Percentage\",\"category_value\":\"Amount\",\"context\":\"Context\",\"data_of_year\":\"* as of %{year}\",\"debt\":\"Debt\",\"debt_tooltip\":\"Debt of the local administration %{of_the_organization_name}\",\"description\":\"In this site you can learn about the budget\\'s income and expenses, the status of the execution, the different providers we work with and the evolution of the expense per inhabitant.\",\"executed\":\"Executed\",\"executed_percent\":\"%{percentage}% of the current budget\",\"executed_percent_other_year_html\":\"In %{year} it was a %{link}\",\"executed_tooltip\":\"The execution is the quantity that has been spent from the initial budget.\",\"execution_block\":{\"button\":\"Complete execution data\",\"expense\":\"Expense\",\"income\":\"Income\",\"intro\":\"This is how the budget is being spent.\",\"last_update\":\"Last update: %{date}.\",\"title\":\"Budget execution\"},\"expenses\":\"Expenses\",\"expenses_per_inhabitant\":\"Expenses per inhabitant\",\"expenses_per_inhabitant_tooltip\":\"Starting budget divided by the inhabitants\",\"expenses_per_inhabitant_updated\":\"Budget per inhabitant updated\",\"header\":\"Budgets\",\"in_total\":\"Total\",\"income\":\"Income\",\"income_per_inhabitant\":\"Income per inhabitant\",\"income_per_inhabitant_tooltip\":\"Starting budget divided by the inhabitants\",\"inhabitants\":\"Inhabitants\",\"inhabitants_tooltip\":\"Number of inhabitants\",\"initial_estimate\":\"Initial budget\",\"initial_estimate_per_inhabitant\":\"Initial budget per inhabitant\",\"less\":\"less\",\"level_1_category\":\"Level 1 category\",\"level_2_category\":\"Level 2 category\",\"main_budget_levels_legend_down\":\"Has decreased\",\"main_budget_levels_legend_one\":\"Change since last year\",\"main_budget_levels_legend_two\":\"\",\"main_budget_levels_legend_up\":\"Has increased\",\"main_budget_levels_per_inhabitant\":\"per inhabitant\",\"main_budget_levels_timeline\":\"Compare income and expenses year by year\",\"main_budget_levels_tooltip_article\":\"since\",\"main_budget_levels_tooltip_down\":\"Has gone down\",\"main_budget_levels_tooltip_up\":\"Has risen\",\"main_budget_lines\":\"Main income and expenses %{from_your_organization_name}\",\"main_budget_lines_expense\":\"Expense\",\"main_budget_lines_income\":\"Income\",\"more\":\"more\",\"most_interesting_budget_lines\":\"Most interesting budget lines\",\"most_interesting_budget_lines_description\":\"Some of the budget lines you are most affected in a daily basis as a citizien. You can also check the complete explorer.\",\"not_available_short\":\"Not avail.\",\"note_about_the_data\":\"Note about the data\",\"note_about_the_data_title\":\"The database we use doesn\\'t include 100% of the municipalities, and the avegages are calculated only with the data that exists (which is most of it). More information in our FAQ\",\"per_person\":\"Per person\",\"planned_vs_executed_other_year_html\":\"In %{year} it was %{link}\",\"search_for_a_budget_line\":\"Search a budget line\",\"see_all\":\"view all\",\"stories_header\":\"Explaining the budget\",\"story_1\":{\"lede\":\"Explaining the budget priorities for 2017, and how we built the budget around them.\",\"title\":\"General activities\"},\"story_2\":{\"lede\":\"Explaining the budget priorities for 2017, and how we built the budget around them.\",\"title\":\"Budgets and the environment\"},\"story_3\":{\"lede\":\"Explaining the budget priorities for 2017, and how we built the budget around them.\",\"title\":\"Promoting sports\"},\"title\":\"Local municipality budgets OF %{place} - %{year}\",\"top_expense_category\":\"Category\",\"top_expense_value\":\"Amount\",\"top_income_category\":\"Category\",\"top_income_value\":\"Amount\",\"total_expenses\":\"Total expenses\",\"total_expenses_tooltip\":\"Starting budget\",\"total_expenses_updated\":\"Current budget\",\"visualize\":\"Visualize expenses per inhabitant or the total\"}},\"budgets_elaboration\":{\"index\":{\"at_a_glance\":\"At a glance\",\"auto_funding\":\"Autofunding capability\",\"auto_funding_tooltip\":\"Percentage of fiscal income versus regular income\",\"by_custom_category\":\"per area\",\"by_economic_expense\":\"in what\",\"by_economic_income\":\"in what\",\"by_functional_expense\":\"for what\",\"category_percentage\":\"% of Total\",\"category_value\":\"Amount\",\"context\":\"Context\",\"debt_level\":\"Debt level\",\"debt_level_tooltip\":\"External funding need to pay expenses once used local resources\",\"description\":\"Government team publishes a draft of next year budget to discuss with the opposition and the citiziens. All together we can create the best budget for %{place_name}.\",\"diff_previous\":\"vs. previous\",\"expenses_per_inhabitant\":\"Expense per person\",\"expenses_per_inhabitant_tooltip\":\"Starting budget divided by the amount of inhabitants\",\"explore_the_detail\":\"Explore the details\",\"header\":\"Budgets elaboration\",\"in_total\":\"Total\",\"income_per_inhabitant\":\"Income per inhabitant\",\"income_per_inhabitant_tooltip\":\"Starting budget divided by the inhabitants\",\"main_budget_levels_timeline\":\"Compare income and expenses year by year\",\"main_budget_lines\":\"Main income and expenses %{from_your_organization_name}\",\"main_budget_lines_expense\":\"Expense\",\"main_budget_lines_income\":\"Income\",\"metric_boxes_data\":\"Data\",\"metric_boxes_data_description\":\"This is how it will be the next year\",\"net_savings\":\"Net savings\",\"net_savings_tooltip\":\"Regular income minus regular expenses and fiscal expenses\",\"next_year_proposal\":\"Proposal next %{year}\",\"no_data\":\"There\\'s no data for this classification\",\"note_about_the_data\":\"Note about the data\",\"note_about_the_data_title\":\"The database we use doesn\\'t include 100% of the municipalities, and the avegages are calculated only with the data that exists (which is most of it). More information in our FAQ\",\"per_person\":\"Per inhabitant\",\"proposal\":\"Proposal\",\"total_expenses\":\"Total expenses\",\"total_expenses_tooltip\":\"Starting budget\",\"total_income\":\"Total income\",\"total_income_tooltip\":\"Starting budget\",\"visualize\":\"Visualize expenses per inhabitant\"}},\"budgets_execution\":{\"execution_table\":{\"deviation\":\"Diff\",\"executed\":\"Execution\",\"planned\":\"Plann.\",\"view_less\":\"View less\",\"view_more\":\"View more\"},\"index\":{\"budget_guide\":\"Read our Budget Guide\",\"budget_lines_expense_higher\":\"Expense budget lines higher than planned\",\"budget_lines_expense_lower\":\"Expense budget lines lower than planned\",\"budget_lines_income_higher\":\"Income budget lines higher than planned\",\"budget_lines_income_lower\":\"Income budget lines lower than planned\",\"category\":\"Category\",\"custom_button\":\"Custom\",\"description\":\"The budget execution is the expense over the initial budget. It\\'s normal to find deviations from the budget, as its impossible to predict the expenses with a great precision\",\"economic\":\"economic\",\"economic_button\":\"In what is spent\",\"euros\":\"In euros\",\"execution_disclaimer\":\"It\\'s very common to have deviatiatons, due to the difficulty of foreseeing the expenses.\",\"execution_help\":\"The execution is the amount spent based on the planned budget.\",\"expenses_executed\":\"Executed expenses\",\"expenses_planned\":\"Planned expenses\",\"functional\":\"functional\",\"functional_button\":\"For what is spent\",\"higher_execution\":\"Higher execution\",\"income_executed\":\"Executed income\",\"income_planned\":\"Planned income\",\"initial_estimate\":\"Initial budget\",\"initial_estimate_per_inhabitant\":\"Initial budget per inhabitant\",\"lower_execution\":\"Lower execution\",\"metric\":{\"execution\":{\"expenses_title\":\"Execution of expenses\",\"income_title\":\"Execution of income\",\"previous_execution_message\":\"In %{year} execution reached %{percentage}\"}},\"percentage\":\"Percentage\",\"sort\":\"Sort\",\"title\":\"Budget execution\",\"tooltip_disclaimer\":\"\\\\u003cstrong\\\\u003eThis is approximate\\\\u003c/strong\\\\u003e. \\\\u003cbr /\\\\u003e Throughout the year there are unforeseen events that change the amount or purpose of the expenses or income.\",\"value\":\"Value\",\"vis\":{\"absolute\":\"Execution in \u20AC\",\"empty_lines\":\"There aren\\'t data for this classification and this year. Please, choose another filter.\",\"expenses\":{\"title\":\"Explore the execution of the expenses\"},\"income\":{\"title\":\"Explore the execution of the income\"},\"lines_title\":\"Budget lines\",\"percent\":\"% of progress\",\"percent_log\":\"% of progress (log)\",\"tooltip\":\"It has been executed by a\",\"tooltip_budgeted\":\"Initial budget\",\"tooltip_budgeted_updated\":\"Updated budget\",\"tooltip_executed_amount\":\"Executed amount\"}},\"widget_template_deviation\":{\"expense\":\"Expense\",\"income\":\"Income\",\"planned\":\"planned\",\"real\":\"real\"}},\"common\":{\"budget_line_description_html\":\"This budget line is composed of %{kind_what} in %{description}. If you want to understand more about it, check its parent budget line: %{link}\",\"expense\":\"expense\",\"expenses\":\"expenses\",\"income\":\"income\",\"incomes\":\"incomes\"},\"events\":{\"gobierto_budgets_budgets_updated\":\"Budgets updated\"},\"exports\":{\"budget_lines_description\":\"Compare income and expenses year by year\",\"budget_lines_title\":\"Budget lines\",\"invoices_description\":\"Data per year\",\"invoices_title\":\"Providers and Invoices\"},\"featured_budget_lines\":{\"gobierto_site_template\":{\"how_much_place_in\":\"How much does %{place} expend on...\",\"last_year\":\"Last year we spent\",\"per_person\":\"Per inhabitant\",\"show_me_another\":\"Show me another\",\"title\":\"Some important budget lines\",\"total\":\"Total expenses\"}},\"feedback\":{\"ask_more_information\":{\"ask_for_feedback\":\"Write your email to %{your_organization_name}\",\"send\":\"Send\",\"your_email\":\"Your email\"},\"follow\":{\"follow\":\"Follow\",\"your_email\":\"Your email\"},\"follow_success\":{\"error\":\"Looks like your email is invalid\",\"share\":\"Do you want to share this statistics in\",\"share_text\":\"Check and opinate about the budget in %{place_name}\",\"success\":\"Good! Check your email and click the link\"},\"step1\":{\"answer1_0\":\"Yes\",\"answer1_1\":\"No\",\"understand\":\"Do you understand this budget line?\"},\"step2_no\":{\"answer_html\":\"\\\\u003cstrong\\\\u003e%{datum}\\\\u003c/strong\\\\u003e of the people who voted said that \\\\u003cstrong\\\\u003edon\\'t understand this budget line\\\\u003c/strong\\\\u003e\",\"ask\":\"You can ask for more information\"},\"step2_yes\":{\"option1_html\":\"I think it\\'s \\\\u003cspan\\\\u003eFEW\\\\u003c/span\\\\u003e\",\"option2_html\":\"I think it\\'s \\\\u003cspan\\\\u003eGOOD\\\\u003c/span\\\\u003e\",\"option3_html\":\"I think it\\'s \\\\u003cspan\\\\u003eTOO MUCH\\\\u003c/span\\\\u003e\",\"question\":\"Do you think the amount is appropiate?\"},\"step3\":{\"option1\":\"Few\",\"option2\":\"Good\",\"option3\":\"Too much\",\"thanks\":\"Thanks for your opinion. This is what the rest of the people think:\"}},\"feedback_mailer\":{\"new_feedback_request\":{\"body\":\"You\\'ve received a new information request about the budget line %{budget_line_name} (%{year}) from a person with the email %{person_email}.\",\"body_budgets\":\"You\\'ve received a new information request about your municipality budgets from a person with the email %{person_email}.\",\"subject\":\"You\\'ve received a new information request\"}},\"indicators\":\"Indicators\",\"indicators_intro\":\"Understand the budgets of %{place} through its main figures: gross savings, per capita investment or investment financing.\",\"invoices\":{\"show\":{\"empty\":\"Any filter has data\",\"fromto\":\"From To No. Inv.\",\"invoiced\":\"Budget invoiced\",\"more\":\"More than\",\"table\":{\"fields\":{\"date\":\"Date\",\"paid\":\"Payed\",\"payment_date\":\"Payment date\",\"payment_date_limit\":\"Payment date limit\",\"provider_id\":\"NIF (SSN)\",\"provider_name\":\"Supplier\",\"subject\":\"Reason\",\"value\":\"Charge\"},\"pager\":{\"first\":\"First\",\"format\":\"Pages %{tpl} of %{tpl2}\",\"last\":\"Last\",\"next\":\"Next\",\"prev\":\"Prev\"}}}},\"layouts\":{\"application\":{\"budgets\":\"Budgets\"},\"menu_subsections\":{\"data\":\"Data\",\"elaboration\":\"Elaboration\",\"execution\":\"Execution\",\"guide\":\"Guide\",\"indicators\":\"Indicators\",\"providers\":\"Providers and Invoices\",\"receipt\":\"Receipt\"}},\"providers\":{\"index\":{\"all_invoices\":\"All the invoices\",\"amount_distribution\":\"Amount distribution\",\"and_more_html\":\"and \\\\u003cspan id=\\\\\"providers-number\\\\\"\\\\u003e\\\\u003c/span\\\\u003e providers\",\"are_from\":\"are from\",\"check_detail\":\"Check the detail\",\"corporation_sa\":\"public limited companies\",\"corporation_sl\":\"private limited companies \\\\u0026 others\",\"description\":\"Which providers hires %{the_organization_name}? Which invoices are paid? From this section you\\'ll be able to check a summary and have a context of all the information aggregated, and also check the detail of each payment %{the_organization_name} does.\",\"freelances\":\"freelances\",\"invoices\":\"Invoices\",\"invoices_from_which\":\"From which\",\"invoices_sum\":\"invoices sum a total of\",\"largest_provider_html\":\"The largest provider means \\\\u003cspan id=\\\\\"largestProvider\\\\\"\\\\u003e\\\\u003c/span\\\\u003e of the whole invoicing\",\"last_12_months\":\"Last 12 months\",\"last_3_months\":\"Last 3 months\",\"less_than_1000_html\":\"The \\\\u003cspan id=\\\\\"lessThan1000\\\\\"\\\\u003e\\\\u003c/span\\\\u003e of the invoices are smaller than 1,000 \u20AC\",\"loading\":\"Loading...\",\"main_providers\":\"Main providers\",\"mean_amount\":\"mean amount\",\"mean_and_median\":\"Mean and median\",\"mean_and_median_summary\":\"That is, half of the invoices are from this amount or less\",\"mean_summary\":\"Amount resulting from adding the amounts of all the invoices and dividing it by the number of invoices\",\"median_amount\":\"median amount\",\"months_distribution\":\"Months distribution\",\"percentile_10_html\":\"The \\\\u003cspan id=\\\\\"percentile10\\\\\"\\\\u003e\\\\u003c/span\\\\u003e of the invoices mean the 10 % of the invoicing\",\"percentile_50_html\":\"The \\\\u003cspan id=\\\\\"percentile50\\\\\"\\\\u003e\\\\u003c/span\\\\u003e of the invoices mean the 50 % of the invoicing\",\"previous\":\"Previous\",\"sum_amount\":\"SUMMED AMOUNT\",\"this_year\":\"This year\",\"view_data_from\":\"View data from\"}},\"receipts\":{\"show\":{\"description\":\"Part of your municipality budget is obtained via taxes. Calculate the amount depending on your house, car...\",\"detail\":\"Your contribution detail\",\"explanation\":\"Enter the amounts you have paid for each of the concepts in\",\"pick_to_calculate\":\"Pick to calculate\",\"share\":\"Share it\",\"share_text\":\"Check how much do you contribute to the budget of\",\"title\":\"Which is your contribution to %{site_name} budget?\",\"your_contribution\":\"Your contribution to %{site_name}\"}},\"shared\":{\"data_updated_at\":{\"last_update\":\"Last update\"},\"enough_information\":{\"enough_information\":\"Enough information?\",\"enough_information_cta\":\"Ask %{to_your_organization_name}\",\"enough_information_desc\":\"If you think it\\'s necessary to include more information about this data or about the usage of your taxes ask your municipality\"}},\"visualizations\":{\"G_custom\":\"Expenses per area\",\"G_economic\":\"In what\",\"G_functional\":\"How\",\"I_custom\":\"Income per area\",\"I_economic\":\"How\",\"category_per_inhabitant\":\"%{category} per inhabitant\",\"expenses_per_inhabitant\":\"Expenses per inhabitant\",\"expenses_per_inhabitant_updated\":\"Expenses per inhabitant updated\",\"inhabitant_short\":\"inh\",\"mean_autonomy\":\"Autonomy mean\",\"mean_national\":\"National mean\",\"mean_province\":\"Province mean\",\"previous_year_diff\":\"Previous year diff\",\"total_expenses\":\"Total expenses\"}},\"gobierto_calendars\":{\"calendar_integration\":{\"auth_error\":{\"message\":\"Calendar credentials are not valid\"},\"error\":{\"message\":\"There has been a problem synchronizing the calendar\"},\"timeout_error\":{\"message\":\"The connection time to the calendar server has expired\"}},\"events\":{\"gobierto_calendars_event_published\":\"%{subject_name}\",\"gobierto_calendars_event_updated\":\"%{subject_name}\"},\"fullcalendar\":{\"day\":\"Day\",\"list\":\"List\",\"month\":\"Month\",\"today\":\"Today\",\"week\":\"Week\"}},\"gobierto_cms\":{\"events\":{\"gobierto_cms_page_created\":\"Page created\",\"gobierto_cms_page_published\":\"Page published\",\"gobierto_cms_page_updated\":\"Page updated\",\"gobierto_cms_section_created\":\"Section created\",\"gobierto_cms_section_item_created\":\"Page added to section\",\"gobierto_cms_section_item_deleted\":\"Page deleted from section\",\"gobierto_cms_section_updated\":\"Section updated\"},\"pages\":{\"templates\":{\"page\":{\"documents\":\"Documents\"}}}},\"gobierto_common\":{\"dynamic_content\":{\"table_component\":{\"attachment\":\"Attachment\",\"download\":\"Download\",\"download_attachment\":\"Download attachment\",\"view_content\":\"View content\"}},\"events\":{\"gobierto_common_collection_created\":\"Collection created\",\"gobierto_common_collection_updated\":\"Collection updated\",\"gobierto_common_term_created\":\"Term created\",\"gobierto_common_term_updated\":\"Term updated\"},\"visualizations\":{\"absolute\":\"Execution in \u20AC\",\"adults\":\"Employed population\",\"age\":\"Age\",\"axis\":\"years\",\"between_25_44\":\"Between 25 and 44\",\"cards\":{\"active_pop\":{\"figure_first\":\"of total\",\"figure_second\":\"people\",\"title\":\"Active population\"},\"births\":{\"country\":\"Country average\",\"place\":\"%{place}\",\"province\":\"Province average\",\"title\":\"Birth rate\"},\"budget_by_inhabitant\":{\"title\":\"Budget per inhabitant\"},\"cars\":{\"title\":\"Cars per inhabitant\"},\"cars_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"province average\",\"title\":\"Passenger cars tax\"},\"companies\":{\"title\":\"Companies\"},\"construction_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"province average\",\"title\":\"Construction tax\"},\"contracts_comparison\":{\"figure_first\":\"short term\",\"figure_second\":\"long term\",\"title\":\"Contracts in the last month\"},\"contracts_sector\":{\"agriculture\":\"Agriculture\",\"construction\":\"Construction\",\"industry\":\"Industry\",\"services\":\"Services\",\"title\":\"Contracts by sector\"},\"deaths\":{\"country\":\"Country average\",\"place\":\"%{place}\",\"province\":\"Province average\",\"title\":\"Death rate\"},\"debt_by_inhabitant\":{\"title\":\"Debt by inhabitant\"},\"debt_level\":{\"title\":\"Debt level\"},\"economic_tax\":{\"title\":\"Economic activity tax\"},\"expenditure_rigidity\":{\"title\":\"Expenditure rigidity\"},\"financial_charge\":{\"title\":\"Financial charge\"},\"financial_risk\":{\"title\":\"Financial risk\"},\"freelancers\":{\"title\":\"Freelancers\"},\"frequency\":\"Updated %{type}\",\"gross_saving\":{\"title\":\"Gross saving\"},\"gross_savings_rate\":{\"title\":\"Gross savings rate\"},\"houses\":{\"figure_first\":\"family houses\",\"figure_second\":\"main houses\",\"title\":\"Houses\"},\"ibi\":{\"first_column\":\"\",\"second_column\":\"City\",\"third_column\":\"Rustic\",\"title\":\"Land value tax\"},\"income\":{\"first_column\":\"\",\"second_column\":\"By inhabitant\",\"third_column\":\"By household\",\"title\":\"Municipality income\"},\"income_overview\":{\"figure_first\":\"%{place}\",\"figure_second\":\"Spain\",\"title\":\"Gross income\"},\"investment_by_inhabitant\":{\"title\":\"Investment by inhabitant\"},\"investment_financing\":{\"title\":\"Investment financing\"},\"liability_cost\":{\"title\":\"Liability cost\"},\"meta\":{\"time\":\" in \",\"where\":\"At \"},\"net_saving\":{\"title\":\"Net saving\"},\"net_savings_rate\":{\"title\":\"Net savings rate\"},\"per_capita_investment\":{\"title\":\"Per capita investment\"},\"per_capita_tax_burden\":{\"title\":\"Per capita tax burden\"},\"population\":{\"title\":\"Inhabitants\"},\"self_financing_capacity\":{\"title\":\"Self financing capacity\"},\"ss_members\":{\"title\":\"Social Security affiliates\"},\"tax_autonomy\":{\"title\":\"Tax autonomy\"},\"unemployed_sector\":{\"agriculture\":\"Agriculture\",\"construction\":\"Construction\",\"industry\":\"Industry\",\"services\":\"Services\",\"title\":\"Unemployed by sector\"},\"updated\":\"Last update\"},\"country\":\"Spain\",\"elderly\":\"Elderly\",\"elderly_info\":\"The %{percent} of the population is elder than %{limit} years\",\"empty_lines\":\"There aren\\'t data for this classification and this year. Please, choose another filter.\",\"frequency\":\"Updated %{type}\",\"gross_income\":\"Gross income\",\"increase\":\"Increase\",\"inhabitant_short\":\"inh\",\"inhabitants\":\"Inhabitants\",\"keep\":\"Keep\",\"label\":\"inhabitants\",\"less_25\":\"Younger than 25\",\"lines_title\":\"Budget lines\",\"main_budget_levels_legend_down\":\"Has decreased\",\"main_budget_levels_legend_one\":\"Change since last year\",\"main_budget_levels_legend_two\":\"\",\"main_budget_levels_legend_up\":\"Has increased\",\"main_budget_levels_per_inhabitant\":\"per inhabitant\",\"main_budget_levels_tooltip_article\":\"since\",\"main_budget_levels_tooltip_article_last\":\"from the previous\",\"main_budget_levels_tooltip_down\":\"Has gone down\",\"main_budget_levels_tooltip_up\":\"Has risen\",\"mean\":\"Average age: %{age} years\",\"mean_autonomy\":\"Autonomy mean\",\"mean_national\":\"National mean\",\"mean_province\":\"Province mean\",\"median\":\"Median age: %{age} years\",\"men\":\"Men\",\"million\":\"million\",\"mode\":\"Most common age: %{age} years\",\"more_44\":\"Older than 44\",\"percent\":\"% of progress\",\"percent_log\":\"% of progress (log)\",\"previous_year_diff\":\"Previous year diff\",\"project\":\"Project\",\"questions\":\"Questions\",\"reduce\":\"Reduce\",\"thousand\":\"thousand\",\"time\":\" in \",\"title\":\"Wealth and population in the province\",\"tooltip\":\"It has been executed by a\",\"tooltip_budgeted\":\"Initial budget\",\"tooltip_budgeted_updated\":\"Updated budget\",\"tooltip_executed_amount\":\"Executed amount\",\"unemployed\":\"Unemployed\",\"where\":\"At \",\"women\":\"Women\",\"youth\":\"Minors\",\"youth_info\":\"The %{percent} of the population is younger than %{limit} years\"},\"vue_components\":{\"block_header\":{\"all\":\"All\",\"none\":\"None\"},\"calendar\":{\"date\":\"Choose date\"},\"filters\":{\"clear\":\"Clear filters\"},\"pagination\":{\"next\":\"Next\",\"previous\":\"Previous\"},\"read_more\":{\"less\":\"See less\",\"more\":\"See more\"},\"table\":{\"customize_columns\":\"Customize columns\",\"no_data\":\"There is no data for this criteria\"}}},\"gobierto_dashboards\":{\"available_cards\":\"Available cards\",\"back\":\"back\",\"changes\":\"Dashboard changed\",\"date\":\"Date: \",\"default_title\":\"Dashboard title\",\"delete\":\"Delete\",\"delete_dialog\":\"Do you wish to delete dashboard?\",\"discard\":\"discard changes\",\"indicators_amount\":\"\u279E %{amount} indicators\",\"instructions\":\"\\\\\"\u21E7 Select a card type and include it in the central area \u279E\\\\n\\\\nThen you can configure it.\\\\\"\\\\n\",\"objective\":\"Goal\",\"percentage\":\"Attainment\",\"percentage_alt\":\"% Attainment\",\"placeholder\":\"Write the title of the indicator or project\",\"public\":\"Public\",\"save\":\"Save\",\"select\":\"Select indicator\",\"type\":\"Type\",\"value\":\"Reached\",\"view_item\":\"See item\",\"widgets\":{\"html\":\"HTML Content\",\"indicator\":\"Indicator\",\"individual\":\"Individual\",\"table\":\"Table\"}},\"gobierto_data\":{\"accessibility\":{\"editor\":\"SQL Editor\"},\"data_type\":{\"boolean\":\"boolean\",\"date\":\"date\",\"datetime\":\"datetime\",\"decimal\":\"decimal\",\"hstore\":\"hstore\",\"integer\":\"integer\",\"jsonb\":\"jsonb\",\"string\":\"string\",\"text\":\"text\",\"time\":\"time\",\"timestamp\":\"time\",\"timestampz\":\"time\"},\"events\":{\"gobierto_data_dataset_dataset_created\":\"Dataset created\",\"gobierto_data_dataset_dataset_data_updated\":\"Dataset data updated\",\"gobierto_data_dataset_dataset_deleted\":\"Dataset deleted\",\"gobierto_data_dataset_dataset_updated\":\"Dataset updated\"},\"layouts\":{\"application\":{\"gobierto_data\":\"Data\"}},\"projects\":{\"all\":\"All\",\"buttonFork\":\"Click to create your own version of this query\",\"buttonQueries\":\"See queries (r)\",\"buttonRecentQueries\":\"See recent queries (r)\",\"buttonRunQuery\":\"Run query (CMD/WIN + Enter)\",\"cancel\":\"Cancel\",\"categories\":\"Categories\",\"createCopy\":\"Create a copy\",\"dashboards\":\"Dashboards\",\"data\":\"Data\",\"dataset\":\"Datasets\",\"datasetUpdated\":\"Last updated datasets\",\"deleteQuery\":\"Are you sure you want to delete this query?\",\"deleteViz\":\"Are you sure you want to delete this visualization?\",\"description\":\"Description\",\"download\":\"Download\",\"downloadData\":\"Download data\",\"edit\":\"Edit\",\"emptyRecentQueries\":\"There\\'s no recent queries\",\"favs\":\"Favorites\",\"frequency\":\"Frequency\",\"guide\":\"Guide to using the SQL editor\",\"license\":\"License\",\"link\":\"Link\",\"map\":\"Map\",\"modifiedQuery\":\"Modified Query\",\"modifiedVisualization\":\"Modified visualization\",\"numberOfRows\":\"Number of rows\",\"preview\":\"Preview\",\"private\":\"Private\",\"queries\":\"Queries\",\"query\":\"Query\",\"queryEmpty\":\"No available queries\",\"queryExecuted\":\"Query executed in\",\"queryName\":\"Query name\",\"recents\":\"Recents\",\"records\":\"Records\",\"resetQuery\":\"Reset query\",\"resetViz\":\"Reset visualization\",\"resources\":\"Resources\",\"revert\":\"Revert\",\"runQuery\":\"Run query\",\"save\":\"Save\",\"savedQuery\":\"Saved query\",\"savedVisualization\":\"Saved visualization\",\"sets\":\"Sets\",\"showAll\":\"Show all\",\"showLess\":\"Show less\",\"sourceDataset\":\"Source\",\"sourceDatasetUrl\":\"Source url\",\"subject\":\"Subject\",\"summary\":\"Summary\",\"updated\":\"Updated\",\"visEmpty\":\"No available visualizations\",\"visName\":\"Visualization name\",\"visPrivate\":\"Your visualizations\",\"visPublic\":\"All\",\"visualizations\":\"Visualizations\",\"visualize\":\"Visualize\",\"yourQueries\":\"Your queries\"}},\"gobierto_exports\":{\"exports\":{\"index\":{\"no_submodules\":\"There aren\\'t any active submodules\",\"subtitle\":\"In this page you can download the site data in a reusable format.\",\"title\":\"Download data\"}}},\"gobierto_indicators\":{\"events\":{\"gobierto_indicators_indicator_updated\":\"Indicator updated\"},\"indicators\":{\"gci\":{\"gci_description\":\"The GCI indicators (Global City Indicators), which reflect The quality of life of the city is defined by the World Bank, association with the purpose of fighting poverty and supporting development. The indicators may vary according to the selected year.\",\"gci_title\":\"GCI Indicators\",\"title\":\"Indicators %{year}\"},\"ip\":{\"ip_description\":\"Infoparticipa \u00E9s un projecte desenvolupat per el LPCCP, des de l\\'any 2012, l\\'objectiu \u00E9s avaluar la informaci\u00F3 que es publica als webs de les administracions p\u00FAbliques per promoure que millori la seva transpar\u00E8ncia i qualitat.\",\"ip_title\":\"Infoparticipa Indicators\",\"title\":\"Indicators %{year}\"},\"ita\":{\"ita_description\":\"The indicators ITA (Index of Transparency of the City councils) They are a tool that the non-governmental organization Transparency The International puts at the disposal of the Spanish councils to measure your level of transparency. They evaluate the management carried out by the town hall of a city through an integrated set of 80 clustered indicators in various areas.\",\"ita_title\":\"ITA indicators\",\"title\":\"Indicators %{year}\"},\"shared\":{\"latest_update_html\":\"\\\\u003cstrong\\\\u003eLatest update:\\\\u003c/strong\\\\u003e %{date}\"},\"template\":{\"calculation\":\"Calculation\",\"false\":\"it\\'s not true\",\"methodology\":\"Methodology\",\"more\":\"More information\",\"source\":\"Source\",\"true\":\"is fulfilled\"}},\"layouts\":{\"application\":{\"indicators\":\"Indicators\"},\"navigation\":{\"sub\":{\"gci\":\"GCI Indicators\",\"ip\":\"Infoparticipa Indicators\",\"ita\":\"ITA Indicators\"}}}},\"gobierto_investments\":{\"events\":{\"gobierto_investments_project_project_created\":\"Investment project created\",\"gobierto_investments_project_project_updated\":\"Investment project updated\"},\"layouts\":{\"application\":{\"investments\":\"Investments\",\"investments_paragraph\":\"Check the projects that the City Council has underway, those that will start soon, and the medium-term plans. Detail on the annual investment plan and mechanisms for monitoring the works in progress.\"}},\"projects\":{\"back\":\"see all\",\"description\":\"Description\",\"detail_title\":\"Project detail\",\"empty\":\"No results\",\"exit\":\"Exit\",\"gallery\":\"Gallery\",\"list\":\"List\",\"loading\":\"Loading data...\",\"map\":\"Map\",\"project\":{\"one\":\"%{count} project\",\"other\":\"%{count} projects\"},\"reset\":\"Clean filters\",\"see\":\"See again\",\"showall\":\"Show all\",\"showless\":\"Show less\",\"summary\":\"Summary by stats\",\"tech_sheet\":\"Technical datasheet\",\"tour\":\"Tour virtual\"}},\"gobierto_observatory\":{\"cards\":{\"active_pop\":{\"figure_first\":\"of total\",\"figure_second\":\"people\",\"title\":\"Active population\"},\"births\":{\"country\":\"Country average\",\"place\":\"%{place}\",\"province\":\"Province average\",\"title\":\"Birth rate\"},\"budget_by_inhabitant\":{\"title\":\"Budget per inhabitant\"},\"cars\":{\"title\":\"Cars per inhabitant\"},\"cars_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"province average\",\"title\":\"Passenger cars tax\"},\"companies\":{\"title\":\"Companies\"},\"construction_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"province average\",\"title\":\"Construction tax\"},\"contracts_comparison\":{\"figure_first\":\"short term\",\"figure_second\":\"long term\",\"title\":\"Contracts in the last month\"},\"contracts_sector\":{\"agriculture\":\"Agriculture\",\"construction\":\"Construction\",\"industry\":\"Industry\",\"services\":\"Services\",\"title\":\"Contracts by sector\"},\"deaths\":{\"country\":\"Country average\",\"place\":\"%{place}\",\"province\":\"Province average\",\"title\":\"Death rate\"},\"debt_by_inhabitant\":{\"title\":\"Debt by inhabitant\"},\"economic_tax\":{\"title\":\"Economic activity tax\"},\"freelancers\":{\"title\":\"Freelancers\"},\"frequency\":\"Updated %{type}\",\"houses\":{\"figure_first\":\"family houses\",\"figure_second\":\"main houses\",\"title\":\"Houses\"},\"ibi\":{\"first_column\":\"\",\"second_column\":\"City\",\"third_column\":\"Rustic\",\"title\":\"Land value tax\"},\"income\":{\"first_column\":\"\",\"second_column\":\"Gross\",\"third_column\":\"Net\",\"title\":\"Municipality income\"},\"income_overview\":{\"figure_first\":\"%{place}\",\"figure_second\":\"Spain\",\"title\":\"Gross income\"},\"investment_by_inhabitant\":{\"title\":\"Investment by inhabitant\"},\"meta\":{\"time\":\" in \",\"where\":\"At \"},\"population\":{\"title\":\"Inhabitants\"},\"ss_members\":{\"title\":\"Social Security affiliates\"},\"unemployed_sector\":{\"agriculture\":\"Agriculture\",\"construction\":\"Construction\",\"industry\":\"Industry\",\"services\":\"Services\",\"title\":\"Unemployed by sector\"},\"updated\":\"Last update\"},\"graphics\":{\"age_distribution\":{\"axis\":\"years\",\"label\":\"inhabitants\",\"title\":\"Discover the age distribution of your municipality\"},\"population_pyramid\":{\"adults\":\"Employed population\",\"age\":\"Age\",\"country\":\"Spain\",\"elderly\":\"Elderly\",\"elderly_info\":\"The %{percent} of the population is elder than %{limit} years\",\"mean\":\"Average age: %{age} years\",\"median\":\"Median age: %{age} years\",\"men\":\"Men\",\"mode\":\"Most common age: %{age} years\",\"unemployed\":\"Unemployed\",\"women\":\"Women\",\"youth\":\"Minors\",\"youth_info\":\"The %{percent} of the population is younger than %{limit} years\"},\"rent_distribution\":{\"gross_income\":\"Gross income\",\"inhabitants\":\"Inhabitants\",\"million\":\"million\",\"thousand\":\"thousand\",\"title\":\"Wealth and population in the province\"},\"unemployment_age\":{\"between_25_44\":\"Between 25 and 44\",\"less_25\":\"Younger than 25\",\"more_44\":\"Older than 44\",\"title\":\"Unemployment by age\"},\"unemployment_rate\":{\"country\":\"Spain\",\"title\":\"Unemployment rate comparison\"},\"unemployment_sex\":{\"men\":\"Men\",\"title\":\"Unemployment by sex\",\"women\":\"Women\"}},\"inhabitants\":\"inh\",\"intro\":\"Understand %{place} through its main figures: the population, the employment market and the economy.\",\"layouts\":{\"application\":{\"observatory\":\"Observatory\"},\"menu_subsections\":{\"banner_map\":\"A geographic viewer to explore the demographic structure of %{place}\",\"demographic_observatory\":\"Demographic observatory\",\"economia\":\"Employment\",\"empleo\":\"Economy\",\"poblacion\":\"Population\"}}},\"gobierto_people\":{\"departments\":{\"index\":{\"description\":\"Any organization that meets with an official must register as an interest group, and a record of the meetings is created. \\\\u003ca href=\\\\\"https://web.gencat.cat/en/tramits/tramits-temes/registre-grups-interes\\\\\"\\\\u003eLearn more about Interest Groups Policies\\\\u003c/a\\\\u003e. Explore organizations (companies, foundations, associations ...) that meet with officials of Generalitat.\",\"events\":\"registered events\",\"events_by_department\":\"Events by departments\",\"explore_departments\":\"Explore Departments and Officials\",\"explore_people\":\"Explore the agendas of Officials\",\"people_events\":\"Officials with more events\",\"people_with_events\":\"officials with registered events\",\"punchcard_title\":\"Meetings per departments and month\"},\"show\":{\"interest_groups_box_subtitle\":\"with meetings in the period\",\"interest_groups_box_title\":\"Interest groups\",\"interest_groups_box_title_single\":\"Interest group\",\"interest_groups_rowchart_title\":\"Interest groups with most meetings with this department\",\"interest_groups_with_events\":\"interest groups have met with this department\",\"map_title\":\"Where do officials travel?\",\"meetings_box_subtitle\":\"with interest groups\",\"meetings_box_title\":\"Meetings registered\",\"meetings_box_title_single\":\"Meeting registered\",\"people_box_subtitle\":\"with meetings registered\",\"people_box_title\":\"officials in this department\",\"people_box_title_single\":\"official in this department\",\"people_rowchart_title\":\"Officials of this department with most meetings\",\"people_with_events\":\"officials of this department with registered events\",\"punchcard_title\":\"Meetings per official and month\"}},\"events\":{\"gobierto_people_person_post_published\":\"Blog updated: %{subject_name}\",\"gobierto_people_person_post_updated\":\"Post updated: %{subject_name}\",\"gobierto_people_person_published\":\"New person published: %{subject_name}\",\"gobierto_people_person_statement_published\":\"New statement published: %{subject_name}\",\"gobierto_people_person_statement_updated\":\"Statement updated: %{subject_name}\",\"gobierto_people_person_updated\":\"Personal information updated\"},\"exports\":{\"index\":{\"events\":{\"description\":\"Listing of all events (past and future) with title, description, participants, location, etc.\",\"title\":\"Agendas\"},\"people\":{\"description\":\"Listing of officiald with their contact information, biography, CV, etc.\",\"title\":\"Officials\"},\"posts\":{\"description\":\"Latest posts in all blogs.\",\"title\":\"Blogs\"},\"statements\":{\"description\":\"Listing of all statements and it elements.\",\"title\":\"Statements\"}}},\"gifts\":{\"coc\":\"The Code of Conduct regulates what gifts can be received.\",\"description\":\"Officials receive gifts as a courtesy from organizations with which they meet. Here is the inventory of what has been received\",\"last\":\"Last gifts\",\"none\":\"No gifts have been registered in this period\",\"title\":\"Gifts\"},\"interest_groups\":{\"index\":{\"description\":\"Any organization that meets with an official must register as an interest group and a record of the meetings is created. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eLearn more about the Interest Groups Regulations\\\\u003c/a\\\\u003e. Explore organizations (companies, foundations, associations ...) that meet with officials of the Generalitat\",\"interest_groups\":\"registered interest groups\",\"no_data\":\"There is no data for the selected dates\",\"rowchart_title\":\"Interest groups with most meetings\",\"title\":\"Interest Groups\"},\"show\":{\"event\":\"registered event\",\"events\":\"registered events\",\"events_by_department\":\"With which departments does this group meet?\",\"events_by_person\":\"Officials with which this group has met\",\"explore_departments\":\"Explore Departments and Officials\",\"explore_people\":\"Explore the agendas of Officials\",\"people_with_events\":\"the number of Officials with which this group has met\",\"punchcard_title\":\"Meetings per official and month\",\"status\":\"Inscription status in interest groups registry: %{status}\"}},\"invitations\":{\"coc\":\"The Code of Conduct regulates which invitations can be accepted.\",\"description\":\"Officials receive invitations to events, to make visits, give lectures... Here is a list of accepted invitations.\",\"last\":\"Last invitations\",\"none\":\"No invitations have been registered in this period\",\"title\":\"Invitations\"},\"layouts\":{\"application\":{\"title\":\"Officials and Agendas\"},\"departments\":{\"no_departments_within_dates\":\"There are no departments for this date range\"},\"menu_subsections\":{\"agendas\":\"Agendas\",\"blogs\":\"Blogs\",\"departments\":\"Departments\",\"gifts\":\"Gifts\",\"interest_groups\":\"Interest Groups\",\"invitations\":\"Invitations\",\"people\":\"Officials\",\"statements\":\"Statements\",\"trips\":\"Trips\"}},\"people\":{\"contact_methods\":{\"send_email\":\"Send an email\"},\"gifts\":{\"index\":{\"gifts\":\"Gifts\",\"no_gifts\":\"There are no gifts in the given dates\",\"title\":\"Gifts received by %{person_name}\"}},\"google_calendar\":{\"authorization\":{\"new\":{\"success\":\"Configuration stored successfully. One last step, pick which calendas you want to automatically publish in your agenda.\"}},\"calendars\":{\"edit\":{\"explain\":\"Select which calendars you want to automatically publish in your agenda\",\"save\":\"Save\",\"title\":\"Google Calendar integration\"},\"update\":{\"success\":\"Calendars saved successfully.\"}}},\"index\":{\"department_officials\":\"Officials in %{department_name}\",\"no_people_within_range\":\"There are no officials for this date range\",\"subscribable_box\":{\"title\":\"Receive alerts in your inbox\"},\"title\":\"%{site_name}\\'s organization chart\"},\"invitations\":{\"index\":{\"invitations\":\"Invitations\",\"no_invitations\":\"There are no invitations in the given dates\",\"title\":\"Invitations received by %{person_name}\"}},\"latest_activity\":{\"no_activity\":\"This profile has not registered any activity yet.\",\"title\":\"Latest activity\"},\"navigation\":{\"agenda\":\"Agenda\",\"bio\":\"Biography and CV\",\"blog\":\"Blog\",\"gift_received\":\"gift received\",\"gifts\":\"Gifts\",\"gifts_received\":\"gifts received\",\"interest_group\":\"interest group\",\"interest_groups\":\"interest groups\",\"invitation\":\"invitation\",\"invitations\":\"invitations\",\"meeting_with\":\"meeting with\",\"meetings_with\":\"meetings with\",\"statements\":\"Goods and Activities\",\"trip_made\":\"trip made\",\"trips\":\"Trips\",\"trips_made\":\"trips made\"},\"people_filter\":{\"organigram\":\"%{name} organigram\",\"political_groups\":\"%{name} political groups\"},\"person\":{\"picture\":\"Picture of %{name}\"},\"person_bio\":{\"show\":{\"download\":\"Download CV\",\"subtitle\":\"Biography and CV\",\"title\":\"%{person_name}\\'s profile\"}},\"person_events\":{\"index\":{\"agenda\":\"Agenda\",\"no_events\":\"There are no meetings in the given dates\",\"past_events\":\"Past events\",\"title\":\"%{person_name}\\'s agenda\",\"upcoming_events\":\"Agenda\"},\"show\":{\"event_data\":{\"event_attachments\":\"Documents\",\"event_attendees\":\"Attendees\",\"event_locations\":\"Location\"},\"title\":\"%{person_name}\\'s agenda\"}},\"person_messages\":{\"create\":{\"error\":\"Message couldn\\'t be sent\",\"success\":\"Message sent successfully\"},\"new\":{\"placeholders\":{\"body\":\"Write a message\",\"email\":\"Your email\",\"name\":\"Your name\"},\"submit\":\"Send\",\"title\":\"Send a message %{name}\"}},\"person_post_tags\":{\"show\":{\"filtering_by_tag\":\"Filtering by \\\\\"%{tag}\\\\\"\",\"go_back\":\"Back to blog\"}},\"person_posts\":{\"index\":{\"no_posts\":\"There aren\\'t posts published.\",\"title\":\"%{person_name}, %{person_charge}\\'s blog\"},\"show\":{\"title\":\"%{person_name}, %{person_charge}\\'s blog\"}},\"person_statements\":{\"index\":{\"no_statements\":\"There aren\\'t yet statems for this person.\",\"title\":\"%{person_name}\\'s goods and Activities\"},\"show\":{\"download\":\"Download statement (%{file_size})\",\"title\":\"%{person_name}\\'s goods and Activities\",\"view_previous\":\"View previous\"}},\"show\":{\"events_section_title\":\"Last meetings\",\"gifts_section_title\":\"Last gifts\",\"invitations_section_title\":\"Last invitations\",\"no_data\":\"There is no data in the given dates\",\"party\":{\"government\":\"Government\",\"opposition\":\"Oposition\"},\"trips_section_title\":\"Last trips\"},\"subscription_button\":{\"cancel\":\"Cancel\",\"follow\":\"Folloe\"},\"trips\":{\"index\":{\"no_trips\":\"There are no trips in the given dates\",\"title\":\"Trips made by %{person_name}\",\"trips\":\"Trips\"},\"trip\":{\"accomodation_expenses\":\"Accomodation\",\"by\":\"by\",\"company\":\"Trip party\",\"expenses\":\"Expenses\",\"food_expenses\":\"Food\",\"in\":\"in\",\"meeting_name\":{\"one\":\"meeting\",\"other\":\"meetings\"},\"other_expenses\":\"Other expenses\",\"person_name\":{\"one\":\"person\",\"other\":\"people\"},\"total_expenses\":\"Total expenses\",\"transport_expenses\":\"Transport\"}},\"upcoming_events\":{\"no_upcoming_events\":\"Ther eare no upcoming events\",\"title\":\"Agenda\",\"view_all\":\"View all\"}},\"people_filter\":{\"all\":\"All\",\"categories\":{\"executive\":\"Executive\"},\"parties\":{\"government\":\"Government Team\",\"opposition\":\"Opposition\"},\"political_groups\":{\"title\":\"Political groups\"}},\"person_events\":{\"index\":{\"agenda_switcher\":{\"subtitle\":\"Filter by community members\",\"title\":\"Check the agenda of...\"},\"displaying_events_of\":\"Displaying events of %{date}\",\"go_back\":\"Go back\",\"no_events\":\"There are no future or past events.\",\"no_past_events\":\"There are no past events.\",\"no_upcoming_events\":\"There are no future events. Take a look at past ones\",\"past_events\":\"Past events\",\"subscribable_box\":{\"title\":\"Receive a summary of the agendas of your representatives\"},\"title\":\"%{site_name}\\'s member agendas\",\"upcoming_events\":\"Agenda\"},\"person_events_filter\":{\"agenda\":\"%{name} members agenda\"}},\"person_gifts\":{\"index\":{\"error\":\"We have not found the page you were looking for\"}},\"person_mailer\":{\"new_message\":{\"hi\":\"Hi\",\"new_message\":\"You have a new message from %{name} (%{reply_to})\",\"subject\":\"You have received a new message from %{name}\"}},\"person_post_tags\":{\"show\":{\"filtering_by_tag\":\"Filtering by \\\\\"%{tag}\\\\\"\",\"go_back\":\"Go back\"}},\"person_posts\":{\"index\":{\"subscribable_box\":{\"title\":\"Receive alerts in your inbox\"},\"switcher\":{\"subtitle\":\"Filter by community members\",\"title\":\"Check posts from...\"},\"title\":\"Blogs\"},\"person_post_excerpt\":{\"continue\":\"Continue reading\"}},\"person_statements\":{\"index\":{\"subscribable_box\":{\"title\":\"Receive alerts in your inbox\"},\"switcher\":{\"subtitle\":\"Filter by community members\",\"title\":\"Check statements from...\"},\"title\":\"Statements\"}},\"person_trips\":{\"index\":{\"error\":\"We have not found the page you were looking for\"}},\"shared\":{\"app_breadcrumb_title\":\"Public management activity viewer\",\"app_title\":\"Public management activity derived from the Code of Conduct\",\"check_it_out\":\"Check the text of the Code of Conduct\",\"datepicker\":{\"1m\":\"Last month\",\"1y\":\"Last year\",\"3m\":\"Last three months\",\"all\":\"Everything\",\"range\":\"Custom range\",\"today\":\"Today\"},\"datepicker_fixed\":\"Data corresponding to the period\",\"destination\":\"destination\",\"destinations\":\"destinations\",\"displacement\":\"displacement\",\"displacements\":\"displacements\",\"from\":\"from\",\"locales\":{\"locale\":\"Language\",\"page_locale\":\"Page locale\",\"select_locale\":\"Select language\"},\"meetings_punchcard\":{\"tooltip\":\"meetings\",\"tooltip_single\":\"meeting\"},\"meetings_rowchart\":{\"tooltip\":\"meetings\",\"tooltip_single\":\"meeting\"},\"noresults\":\"No results\",\"open_data_footer\":{\"gifts\":\"Gifts\",\"invitations\":\"Invitations\",\"meetings\":\"Meetings\",\"title\":\"Access the data in the Open Data portal\",\"trips\":\"Trips\"},\"table_item\":{\"view_details\":\"View details\"},\"to\":\"to\",\"view_all\":\"View all\",\"view_all_f\":\"View all\",\"view_charges\":\"View all positions\",\"view_details\":\"View details\",\"view_gifts\":\"View all the gifts on the Open Data portal\",\"view_invitations\":\"View all the invitations on the Open Data portal\",\"view_officials\":\"View Officials\"},\"welcome\":{\"index\":{\"departments\":\"Departments\",\"departments_extra\":\"Departments that exist or have existed based on the selected period\",\"departments_rowchart_title\":\"Departments with most meetings\",\"description_1\":\"The viewer shows the meetings of the senior management of the Generalitat administration with the people who have the status of interest group in the time period you select. You will also find the gifts and invitations allowed by the Code of Conduct, which forces senior management to make this information public. Likewise, the viewer allows to consult the trips abroad of the President, advisors and senior positions in the exercise of their functions.\",\"description_2_html\":\"Regarding the information of the senior management, the positions that they occupy or have occupied in the selected period are shown.\",\"events_summary\":{\"no_events\":\"There are no events\",\"no_upcoming_events\":\"There are no future events. Take a look at past ones\",\"past_events\":\"Past events\",\"upcoming_events\":\"Agenda\",\"view_all\":\"View all\"},\"gifts\":\"Gifts\",\"interest_groups_box_subtitle\":\"with meetings in the period\",\"interest_groups_box_title\":\"Interest groups\",\"interest_groups_box_title_single\":\"Interest group\",\"interest_groups_rowchart_title\":\"Interest groups with most meetings\",\"map_title\":\"Where do officials travel?\",\"meetings_box_subtitle\":\"with interest groups\",\"meetings_box_title\":\"Meetings registered\",\"meetings_box_title_single\":\"Meeting registered\",\"people_box_subtitle\":\"with registered activity\",\"people_box_title\":\"Officials\",\"people_box_title_single\":\"Official\",\"people_rowchart_title\":\"Officials with most meetings\",\"people_summary\":{\"no_people\":\"There is no people\",\"title\":\"%{site_name}\\'s organization chart\",\"view_all\":\"View all\"},\"posts_summary\":{\"title\":\"Blogs\",\"view_all\":\"View all\"},\"punchcard_title\":\"Meetings per official and month\",\"search\":\"Search\",\"search_placeholder\":\"Search an official\",\"statements\":\"Salaries and retributions\",\"subscribable_box\":{\"title\":\"Receive updates in your inbox\"},\"title\":\"Agendas\",\"trips\":\"Trips\"}}},\"gobierto_plans\":{\"custom_fields_plugins\":{\"budgets\":{\"detail_text\":\"see detail in Budgets\",\"title\":\"Budget\"}},\"events\":{\"gobierto_plans_plan_created\":\"Plan created\",\"gobierto_plans_plan_data_csv_imported\":\"Plan data imported from CSV file\",\"gobierto_plans_plan_type_created\":\"Plan type created\",\"gobierto_plans_plan_type_updated\":\"Plan type updated\",\"gobierto_plans_plan_updated\":\"Plan updated\",\"gobierto_plans_progresses_updated\":\"Projects progresses updated\",\"gobierto_plans_project_created\":\"Project created\",\"gobierto_plans_project_destroyed\":\"Project deleted from plan\",\"gobierto_plans_project_updated\":\"Project updated\"},\"layouts\":{\"application\":{\"plans\":\"Plans\"}},\"plan_types\":{\"sdg\":{\"header\":{\"sdgs_description\":\"The Sustainable Development Goals are a set of global goals related to the environmental, political, and economic challenges facing our world. Here you can see how the Municipal Action Plan connects with the SDGs.\",\"sdgs_title\":\"Sustainable Development Goals\"},\"projects\":{\"sdg_projects_empty\":\"There are no plan %{projects_term} related to this Goal\",\"sdg_projects_title\":\"Plan %{projects_term} related to this Goal\"}},\"show\":{\"category\":\"Category\",\"customize_columns\":\"Customize columns\",\"dashboards\":\"Dashboards\",\"desc\":\"Description\",\"ends\":\"End\",\"global_execution\":\"State of global execution\",\"latest_update_html\":\"\\\\u003cstrong\\\\u003eLatest update:\\\\u003c/strong\\\\u003e %{date}\",\"loading\":\"Loading...\",\"percent_out_of_total\":\"% out of total\",\"plan\":\"Plan\",\"progress\":\"Progress\",\"read_less\":\"Read more\",\"read_more\":\"Read less\",\"starts\":\"Start\",\"status\":\"Status\",\"view_by\":\"View by\"}}},\"gobierto_visualizations\":{\"layouts\":{\"application\":{\"gobierto_visualizations\":{\"contracts\":\"Contracts and tenders\",\"costs\":\"Costs\",\"debts\":\"Debt\",\"odss\":\"ODS\",\"subsidies\":\"Subsidies\"}}},\"shared\":{\"download_data\":\"Download the full dataset in a reusable format\",\"loading\":\"Loading data...\"},\"visualizations\":{\"categories\":{\"agriculture\":\"Agriculture\",\"architecture\":\"Architecture\",\"audiovisual\":\"Audiovisual\",\"catering\":\"Catering\",\"construction\":\"Construction\",\"culture\":\"Culture\",\"education\":\"Education\",\"electrical\":\"Electrical\",\"energy\":\"Energy\",\"environment\":\"Environment\",\"finance\":\"Finance\",\"furniture\":\"Furniture\",\"health\":\"Health\",\"industry\":\"Industry\",\"it\":\"Information technology\",\"legal\":\"Legal\",\"maintenance\":\"Maintenance\",\"other\":\"Other\",\"print\":\"Print\",\"public_services\":\"Public services\",\"real_estate\":\"Real estate\",\"security\":\"Security\",\"social_services\":\"Social services\",\"software\":\"Software\",\"telecom\":\"Telecom\",\"textile\":\"Textile\",\"transportation\":\"Transportation\"},\"contract_statuses\":{\"abandoned\":\"Abandoned\",\"awarded\":\"Awarded\",\"finally_awarded\":\"Finally awarded\",\"finally_void\":\"Void\",\"formalized\":\"Formalized\",\"highest_rated\":\"Highest rated\",\"provisionally_awarded\":\"Provisionally awarded\",\"provisionally_void\":\"Provisionally void\",\"revoked\":\"Revoked\",\"void\":\"Void\"},\"contract_types\":{\"construction\":\"Construction\",\"other\":\"Others\",\"patrimonial\":\"Patrimonial\",\"private_contract\":\"Private\",\"public_private_collaboration\":\"Collaboration between the public and private sectors\",\"public_services_management\":\"Management of public services\",\"public_works\":\"Concession of public services\",\"services\":\"Services\",\"special_administrative\":\"Special administrative\",\"supplies\":\"Supplies\"},\"contracts\":{\"amount_by_type_of_process\":\"Amount by type of process\",\"amount_distribution\":\"Amount distribution\",\"assignee\":\"Assignee\",\"categories\":\"Categories\",\"contract\":\"Contract\",\"contract_amount\":\"Contract Amount\",\"contract_type\":\"Type of contract\",\"contractor\":\"Contractor\",\"contracts\":\"Contracts\",\"contracts_assigned_to\":\"Contracts assigned to\",\"contracts_show\":{\"assignee_description\":\"Company that has won the contract (Assignee)\",\"assignees_description\":\"Companies that have won the contract (Assignees)\",\"awarding_entity\":\"Awarding entity\",\"batch\":\"Batch\",\"bid_description\":\"Bid base budget without taxes\",\"bidders_description\":\"Number of companies that have submitted to the process (Bidders)\",\"contract_amount\":\"Contract amount\",\"entity\":\"Entity\",\"estimated_value\":\"Estimated value\",\"external_source\":\"Source\",\"formalization\":\"Formalization\",\"process\":\"Procedure\",\"question_description\":\"What % of the budget is this contract?\",\"tender\":\"Tender\",\"type\":\"Type\"},\"date\":\"Date\",\"dates\":\"Dates\",\"description\":\"Visualizations and analisys for the awarded contracts and tenders to %{entity_name}\",\"entities\":\"Entities\",\"final_amount_no_taxes\":\"Amount\",\"formalization_date\":\"Date of formalization\",\"fromto\":\"From To No Contr.\",\"main_assignees\":\"Main assignees\",\"more\":\"More than\",\"nav\":{\"contracts\":\"Contracts\",\"summary\":\"Summary\",\"tenders\":\"Tenders\"},\"process_type\":\"Type of procedure\",\"search_placeholder\":\"Search by assignee or by contract title\",\"status\":\"Status\",\"submission_date\":\"Date\",\"summary\":{\"contracts\":\"Assigned contracts\",\"contracts_for\":\"contracts for a total amount of\",\"mean_amount\":\"Average amount\",\"median_amount\":\"Median amount\",\"tenders\":\"Tenders\",\"tenders_for\":\"tenders for a total amount of\",\"tip_1\":\"The %{strong1} of contracts are less than %{strong2}\",\"tip_2\":\"The largest contract means a %{strong} of all the spending\",\"tip_3\":\"The %{strong} of contracts accumulate the 50% of all the spending\"},\"tender_amount\":\"Tender Amount\",\"tender_date\":\"Date of tender\",\"title\":\"Contracts and tenders\"},\"costs\":{\"activities\":\"Activities\",\"cost_direct\":\"Direct cost\",\"cost_indirect\":\"Indirect cost\",\"cost_inhabitant\":\"Cost / inhabitant\",\"cost_per_inhabitant\":\"Cost per inhabitant\",\"coverage\":\"Cobertura\",\"description\":\"The %{entity_name} provides services to its citizens based on their competencies. This provision of services involves a cost that is covered by the income available to the City Council, which are derived from the service itself to be provided or from general resources of the taxes or subsidies received.\",\"description_2\":\"This section shows the data on the costs of the services and the income needed to provide them.\",\"description_3\":\"The starting point is the municipal budget, but with this analysis the real cost of a service is expanded and specified as we can find related the indirect (support) cost required to provide a service.\",\"detail\":\"Detail\",\"distribution\":\"Distribution of costs by area\",\"home\":\"Home\",\"income\":\"Income\",\"inhabitants\":\"Habitants\",\"item\":{\"competence\":\"Competence\",\"description\":\"Description\",\"equipments\":\"Equipments\",\"external_services\":\"External services\",\"goods_and_services\":\"Goods and services\",\"income_cost\":\"Income - Cost\",\"legal_framework\":\"Legal framework\",\"observation\":\"Observations\",\"personal_cost\":\"Personal cost\",\"public_tax\":\"Public tax or prices\",\"subsidies\":\"Subsidies\",\"total\":\"Total\",\"transference\":\"Transference\",\"types\":\"Types\"},\"per_inhabitant\":\"per inhabitant\",\"see_all\":\"See all\",\"title\":\"Costs\",\"tooltips\":{\"cost_direct\":\"Resources needed to provide a finalist service or activity that is directly related.\",\"cost_indirect\":\"Resources for the provision of non-finalist services and which are necessary support for the performance of finalist services and activities.\",\"cost_per_habitant\":\"Total cost divided by the number of inhabitants.\",\"cost_total\":\"Sum of direct cost and indirect cost.\",\"coverage\":\"State of coverage of income directly related to the total cost of the activity or service.\",\"income\":\"Revenue directly related to the provision of the service, whether derived from the application of a public fee or price or a subsidy.\"},\"tooltips_items\":{\"cost_indirect\":\"An equal part of the cost of non-finalist activities (human resources, financial services).\",\"coverage\":\"Measure (in%) to which the income directly related to the activity is sufficient to cover its cost.\",\"equipments\":\"Proportional cost of using the infrastructure necessary for the provision of the activity or service (consumption and maintenance of buildings, vehicles) depending on the degree of use.\",\"externalServices\":\"Miscellaneous services acquired by the City Council and benefits for legal or natural persons not included in the staff.\",\"goodsServices\":\"Monetary assessment of the consumption of necessary and non-storable consumable material essential for the provision of the business or service (supply, office supplies).\",\"income_cost\":\"Difference between the set of income directly related to the activity and the cost required to provide it. A negative balance indicates the insufficiency of specific resources and the need for financing with general funds from the City Council.\",\"staff_cost\":\"Annual calculation of the part of the salaries and wages of the workers proportional to their dedication to the activity.\",\"subsidies\":\"Income without direct compensation by the beneficiary, intended for a specific activity or project.\",\"taxes\":\"Financial consideration received for the provision of a service or the private use or exclusive use of the public domain.\",\"transferences\":\"Contributions of financial resources from the City Council as a previously granted subsidy.\"},\"total\":\"Total cost\",\"total_cost\":\"Total cost\"},\"debts\":{\"breakdown_debt\":\"Debt breakdown\",\"creditor\":\"Per creditor\",\"date_debt\":\"Debt data as of December 31, 2023.\",\"debtor\":\"Per debtor\",\"description\":\"La deuda financiera y a largo plazo del Ayuntamiento englova la deuda de todos sus entes dependientes (Sociedades Mercantiles, EPE\u2019s, Fundacio\u00F3ns, Consorcios).\",\"evolution_debt\":\"Debt evolution\",\"millions\":\"The unit of the numbers in this chart is millions of euros.\",\"title\":\"Debt\",\"total_debt\":\"Total debt\"},\"odss\":{\"amount\":\"Amount\",\"assigned\":\"Aligned\",\"description_html\":\"\\\\u003cp\\\\u003eSince 2015, the UN has approved the Agenda 2030, incorporating the 17 Sustainable Development Goals (SDGs), and establishing a transformative vision towards economic, social and environmental sustainability, this City Council has collaborated in opening a new path to improve the life of all and everyone, without leaving anyone behind.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eIt is for this reason that after presenting the Municipal Strategic Plan 2023-2027 aligned with the SDGs, the alignment of the municipal budget with the Agenda 2030 is being competed.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eThe budget viewer allows a better evaluation of the appropriateness of the resources used and the political priorities, and contributes to directing efforts towards the areas where greater focus is needed.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eThis tool is designed to offer the public a comprehensive view of the degree of alignment of the municipal expenses of this year with the achievement of the SDGs.\\\\u003c/p\\\\u003e\",\"functional_code\":\"Functional code\",\"label_title_budgets_ods\":\"Distribution of budget lines by ODS\",\"label_title_ods\":\"Distribution of expense by Sustainable Development Goals\",\"name\":\"Name\",\"ods_distribution\":\"ODS distribution\",\"title\":\"Budget aligned with the Sustainable Development Goals (ODS)\",\"unassigned\":\"Unaligned\",\"updated_date\":\"Data updated on March 18, 2025\"},\"process_types\":{\"based_on_agreement\":\"Based on Marco agreement\",\"competitive_dialogue\":\"Competitive dialogue\",\"dynamic_acquisition\":\"Based on dynamic acquisition system\",\"innovation\":\"Association for innovation\",\"innovation_derived\":\"Derived from association for innovation\",\"internal_rules\":\"Internal rules\",\"minor_contract\":\"Minor contract\",\"negotiated\":\"Negotiated\",\"negotiated_with_publicity\":\"Negotiated with publicity\",\"negotiated_without_publicity\":\"Negotiated without publicity\",\"open\":\"Open\",\"open_simplified\":\"Open simplified\",\"others\":\"Others\",\"project_competition\":\"Project competition\",\"restricted\":\"Restricted\"},\"subsidies\":{\"amount\":\"Amount\",\"amount_distribution\":\"Amount distribution\",\"beneficiary\":\"Beneficiary\",\"call\":\"Call\",\"category\":\"Category\",\"date\":\"Date\",\"dates\":\"Dates\",\"description\":\"Visualizations and analisys for the granted subsidies from %{entity_name}\",\"details\":\"In agreement with article 7.8 Real Decreto 130/2019, the information on awards to legal persons will remain published during the four calendar years following the year in which the aid was granted, and in the case of natural persons, publicity is limited to the awarding plus one years.\",\"fromto\":\"From To No Subs.\",\"main_beneficiaries\":\"Main beneficiaries\",\"more\":\"More than\",\"nav\":{\"subsidies\":\"Subsidies\",\"summary\":\"Summary\"},\"person\":\"Individual person\",\"subsidies\":\"Subsidies\",\"subsidies_amount\":\"Imp. Subsidie\",\"subsidies_total\":\"Total Subsidies\",\"summary\":{\"collective_subsidies_for\":\"to collectives for a total amount of\",\"individual_subsidies_for\":\"to individuals for a total amount of\",\"mean_amount\":\"Average amount\",\"median_amount\":\"Median amount\",\"subsidies\":\"Subsidies\",\"subsidies_for\":\"subsidies for a total amount of\",\"tip_1\":\"The %{strong1} of subsidies are less than %{strong2}\",\"tip_2\":\"The largest subsidy means a %{strong} of all the spending\",\"tip_3\":\"The %{strong} of subsidies accumulate the 50% of all the spending\"},\"title\":\"Subsidies\"},\"tender_statuses\":{\"awarded\":\"Awarded\",\"cancelled\":\"Cancelled\",\"evaluation\":\"Evaluation\",\"modified\":\"Modified\",\"partially_awarded\":\"Partially awarded\",\"partially_resolved\":\"Partially resolved\",\"prior_announcement\":\"Prior announcement\",\"prior_evaluation\":\"Prior evaluation\",\"provisionally_resolved\":\"Provisionally resolved\",\"published\":\"Oublished\",\"resolved\":\"Resolved\"},\"visualizations\":{\"title_beeswarm\":\"Contracts by type, volume, size and date\",\"tooltip_beeswarm\":\"Contract Amount\",\"tooltip_treemap\":\"total contracts\"}}},\"grammatical_particles\":{\"from\":\"from\",\"of\":\"of\",\"of_the\":{\"f\":\"de la\",\"m\":\"del\",\"n\":\"of the\"},\"our\":{\"f\":\"nuestra\",\"m\":\"nuestro\",\"n\":\"our\"},\"the\":{\"f\":\"la\",\"m\":\"el\",\"n\":\"the\"},\"to\":\"to\",\"your\":{\"f\":\"tu\",\"m\":\"tu\",\"n\":\"your\"}},\"helpers\":{\"page_entries_info\":{\"entry\":{\"one\":\"entry\",\"other\":\"entries\",\"zero\":\"entries\"},\"more_pages\":{\"display_entries\":\"Displaying %{entry_name} \\\\u003cb\\\\u003e%{first}\\\\u0026nbsp;-\\\\u0026nbsp;%{last}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{total}\\\\u003c/b\\\\u003e in total\"},\"one_page\":{\"display_entries\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{entry_name}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall %{count}\\\\u003c/b\\\\u003e %{entry_name}\",\"zero\":\"No %{entry_name} found\"}}},\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create\",\"submit\":\"Save\",\"update\":\"Update\"}},\"invisible_captcha\":{\"sentence_for_humans\":\"If you are human, ignore this field\",\"timestamp_error_message\":\"Sorry, that was too quick! Please resubmit.\"},\"issue\":{\"events\":{\"issue_description_translations_changed\":\"New theme created\"}},\"issues\":{\"events\":{\"issues_issue_created\":\"Theme created\",\"issues_issue_updated\":\"Theme updated\"}},\"layouts\":{\"accept_privacy_policy_signup\":\"By signing up you agree to the Privacy Policy\",\"application\":{\"disclaimer\":\"This is a demo of Gobierto, transparency and participation software\",\"more_information\":\"More info in gobierto.es\",\"search\":\"Search...\",\"session\":{\"alerts\":\"Your alerts\",\"login\":\"Login or sign up\",\"notifications\":\"Notifications\",\"sign_in\":\"Sign in\",\"sign_out\":\"Sign out\",\"title\":\"Your account\"},\"start\":\"Home\"},\"gobierto_budgets\":{\"application\":{\"about_the_data\":\"About the data\",\"disclaimer\":\"This is a demo of Gobierto, transparency and participation software\",\"is_open_source\":\"is open source created by\",\"more_information\":\"More info in gobierto.es\",\"session\":{\"admin\":\"Administration\",\"alerts\":\"Your alerts\",\"notifications\":\"Notifications\",\"sign_in\":\"Sign in\",\"sign_out\":\"Sign out\",\"title\":\"Your account\"}}},\"mailcheck\":{\"suggestion_message\":\"Did you mean\"},\"sandbox\":{\"application\":{\"about_the_data\":\"About the data\",\"disclaimer\":\"This is a demo of Gobierto, transparency and participation software\",\"is_open_source\":\"is open source created by\",\"more_information\":\"More info in gobierto.es\",\"session\":{\"admin\":\"Administration\",\"alerts\":\"Your alerts\",\"notifications\":\"Notifications\",\"sign_in\":\"Sign in\",\"sign_out\":\"Sign out\",\"title\":\"Your account\"}}},\"search\":{\"budget_line_item_expense\":\"Budget line - Expense\",\"budget_line_item_income\":\"Budget line - Income\",\"dataset_item\":\"Dataset\",\"drag_drop_instructions\":\"Drag and drop on the left side to place this page in the menu\",\"event_item\":\"Event\",\"no_results\":\"The search did not match any page. Try something like using more general terms or checking spelling.\",\"page_item\":\"Page\",\"person_item\":\"Biography\",\"person_post_item\":\"Post\",\"person_statement_item\":\"Statement\",\"plan_project_item\":\"Plan - Project/Action\",\"updated\":\"Updated\"}},\"locales\":{\"ca\":\"Catalan\",\"ca_short\":\"CA\",\"en\":\"English\",\"en_short\":\"EN\",\"es\":\"Spanish\",\"es_short\":\"ES\"},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%n%u\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"\u20AC\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\"}}},\"nth\":{\"ordinalized\":{},\"ordinals\":{}},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"routes\":{\"bio\":\"bio\",\"department_people\":\"people/departments/:department_slug\",\"departments\":\"departments\",\"events\":\"agendas\",\"executive_category_events\":\"agendas/managers\",\"executive_category_past_events\":\"agendas/managers/past-events\",\"gifts\":\"gifts\",\"government\":\"government\",\"government_party_events\":\"agendas/government\",\"government_party_past_events\":\"agendas/government/past-events\",\"interest_groups\":\"interest-groups\",\"invitations\":\"invitations\",\"managers\":\"managers\",\"messages\":\"contact\",\"opposition\":\"opposition\",\"opposition_party_events\":\"agendas/opposition\",\"opposition_party_past_events\":\"agendas/opposition/past-events\",\"past_events\":\"agendas/past-events\",\"people\":\"people\",\"people_and_agendas\":\"people-and-agendas\",\"people_government\":\"people/government\",\"people_managers\":\"people/managers\",\"people_opposition\":\"people/opposition\",\"person_events\":\"agendas/:container_slug\",\"person_past_events\":\"agendas/:container_slug/past-events\",\"person_post_tags\":\"blogs/:person_slug/tags\",\"person_posts\":\"blogs/:person_slug\",\"person_statements\":\"statements/:person_slug\",\"political_groups\":\"people/political-groups\",\"post_tags\":\"blogs/tags\",\"posts\":\"blogs/posts\",\"statements\":\"statements\",\"trips\":\"trips\"},\"scopes\":{\"events\":{\"scopes_scope_created\":\"Scope created\",\"scopes_scope_updated\":\"Scope updated\"}},\"shared\":{\"currently\":\"currently\",\"download_open_data\":{\"exports\":\"Download data in a reusable format\"},\"poll_question\":{\"multiple_choice_msg\":\"You can choose several options\"},\"polls\":{\"no_unanswered_polls\":\"There are no polls to answer.\",\"opinion\":\"Opinion\"},\"previous\":\"previous\"},\"sites\":{\"events\":{\"sites_site_created\":\"Site created\",\"sites_site_destroyed\":\"Site deleted\",\"sites_site_modules_updated\":\"Site modules updated\",\"sites_site_updated\":\"Site updated\",\"sites_site_visibility_updated\":\"Site published\"}},\"support\":{\"array\":{\"last_word_connector\":\" and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"from_to\":\"From %{starts} to %{ends}\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"user\":{\"census_verifications\":{\"create\":{\"error\":\"We couldn\\'t verify your identity. Please check your information and try again. If the problem persists, ask to your local adminsitration\",\"notice\":\"Your identity has been verified successfully\"},\"form\":{\"verify\":\"Verify\"},\"messages\":{\"already_verified\":\"Your account is already verified\",\"comments\":{\"not_verified\":\"The contribution in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\"},\"consultation_responses\":{\"not_verified\":\"The process in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\"},\"contributions\":{\"not_verified\":\"The contribution in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\"},\"flags\":{\"not_verified\":\"The contribution in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\"},\"not_verified\":\"The process in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\",\"poll_answers\":{\"not_verified\":\"The process in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\"},\"process_contributions\":{\"not_verified\":\"The contribution in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\"},\"votes\":{\"not_verified\":\"The contribution in which you want to participate requires to verify your register in %{site_name}. Please, confirm your data to continue (they\\'ll be verified against the register, if you are not registered we won\\'t be abile to verify yourself)\"}},\"new\":{\"title\":\"Confirm your identity\"}},\"confirmations\":{\"create\":{\"error\":\"The data you entered doesn\\'t seem to be valid. Please try again.\",\"success\":\"Signed in successfully\"},\"form\":{\"document_number_notice\":\"Document number\",\"gender\":{\"female\":\"Female\",\"male\":\"Male\"},\"hints\":{\"census_locked\":\"This information has been provided by the census, so it is not editable.\",\"date_of_birth\":\"This information will be considered private at all times.\",\"email\":\"Your email address will be considered private at all times.\",\"gender\":\"This information will be considered private at all times.\"},\"submit\":\"Save\",\"your_gender_is\":\"You are...\"},\"new\":{\"error\":\"This URL doesn\\'t seem to be valid\",\"title\":\"Let\\'s confirm your data:\"}},\"custom_sessions\":{\"create\":{\"invalid_data\":\"Invalid data received. The session could not be created\",\"not_confirmed\":\"Please check your inbox and follow the confirmation link to access the service\",\"success\":\"Signed in successfully\"},\"destroy\":{\"success\":\"Signed out successfully\"},\"null_strategy\":{\"edit_form\":{\"edit\":\"Add some fields to this form\",\"session_title\":\"Please, fill in the missing fields (Null strategy)\",\"submit\":\"Submit\"},\"new_form\":{\"session_title\":\"Sign in (Null strategy)\",\"submit\":\"Submit\"}}},\"layouts\":{\"menu_subsections\":{\"admin\":\"Settings\",\"alerts\":\"Alerts\",\"notifications\":\"Notifications\"}},\"notification_mailer\":{\"notification_digest\":{\"bye\":\"Cheers\",\"hi\":\"Hi\",\"manage_notifications\":\"Remember you can manage your notifications in %{url}\",\"manage_notifications_html\":\"Remember you can manager your notifications in \\\\u003ca href=\\'%{url}\\'\\\\u003eyour notifications page\\\\u003c/a\\\\u003e\",\"new_activity\":\"There\\'s new activity in %{site_name}\",\"subject\":\"Activity summary from %{site_name}\"},\"single_notification\":{\"bye\":\"Cheers\",\"hi\":\"Hi\",\"manage_notifications\":\"Remember you can manage your notifications in %{url}\",\"manage_notifications_html\":\"Remember you can manager your notifications in \\\\u003ca href=\\'%{url}\\'\\\\u003eyour notifications page\\\\u003c/a\\\\u003e\",\"new_activity\":\"There\\'s new activity in %{site_name}\",\"subject\":\"New activity in %{site_name}: %{action_name}\"}},\"notifications\":{\"index\":{\"no_new_notifications\":\"There are no new notifications\",\"title\":\"Recent activity\"}},\"passwords\":{\"create\":{\"error\":\"The email address specified doesn\\'t seem to be valid\",\"success\":\"Please check your inbox to get instructions\"},\"edit\":{\"error\":\"This URL doesn\\'t seem to be valid\",\"title\":\"Set your new password:\"},\"edit_form\":{\"submit\":\"Change\"},\"update\":{\"error\":\"There was a problem changing your password\",\"success\":\"Signed in successfully\"}},\"registrations\":{\"create\":{\"email_taken\":\"That email is already registered. Try login in or recovering your password\",\"error\":\"The data you entered doesn\\'t seem to be valid. Please try again.\",\"success\":\"Please check your inbox to confirm your email address\"}},\"sessions\":{\"create\":{\"error\":\"The data you entered doesn\\'t seem to be valid. Please try again.\",\"success\":\"Signed in successfully\"},\"destroy\":{\"success\":\"Signed out successfully\"},\"new\":{\"password_title\":\"Can\\'t remember your password? We help you out:\",\"registration_title\":\"New here? Create your account:\",\"session_title\":\"Are you already registered? Log in\"},\"new_password_form\":{\"session_section\":\"Just remembered your password? Log in here\",\"submit\":\"Recover\"},\"registration_form\":{\"submit\":\"Let\\'s go\"},\"session_form\":{\"password_section\":\"Password?\",\"submit\":\"Log in\"},\"user_already_authenticated\":\"You are already signed in.\",\"user_not_authorized\":\"You are not authorized.\",\"user_not_signed_in\":\"Register or sign in if you have an account to continue.\"},\"settings\":{\"form\":{\"gender\":{\"female\":\"Female\",\"male\":\"Male\"},\"hints\":{\"census_locked\":\"This information has been provided by the census, so it is not editable.\",\"date_of_birth\":\"This information will be considered private at all times.\",\"email\":\"Your email address will be considered private at all times.\",\"gender\":\"This information will be considered private at all times.\"},\"submit\":\"Save\",\"your_gender_is\":\"You are...\"},\"show\":{\"title\":\"Your account\"},\"update\":{\"error\":\"There was a problem when saving your settings\",\"success\":\"Settings saved successfully\"}},\"subscription_preferences\":{\"update\":{\"error\":\"Preferences couldn\\'t be updated: %{details}\",\"update_success\":\"Preferences updated successfully\"}},\"subscriptions\":{\"create\":{\"create_success\":\"Subscription was successfully created\",\"delete_success\":\"Subscription was successfully canceled\",\"error\":\"There was a problem when subscribing to this resource: %{details}. If you are already registered, sign in \\\\u003ca href=\\\\\"%{sign_in_path}\\\\\"\\\\u003ehere\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"Subscription was successfully canceled\"},\"index\":{\"areas\":\"Areas\",\"frequency\":\"Frequency\",\"modules\":{\"gobierto_budgets\":\"Budgets\",\"gobierto_observatory\":\"Observatory\",\"gobierto_people\":\"People\"},\"notification_frequency\":{\"daily\":\"Daily digest\",\"disabled\":\"Disabled\",\"hourly\":\"Hourly digest\",\"immediate\":\"Inmediate\",\"submit\":\"Save\",\"weekly\":\"Weekly digest\"},\"people\":\"People\",\"submit\":\"Save\",\"title\":\"Your alerts\",\"whole_site\":\"Whole site\"},\"subscribable_box\":{\"cancel\":\"Already subscribed. Cancel?\",\"form\":{\"placeholders\":{\"user_email\":\"Your e-mail\"},\"submit\":\"Subscribe\"},\"subscribe\":\"Subscribe\"},\"subscribable_button\":{\"event_followed\":\"Event followed!\",\"follow_event\":\"Follow event\",\"follow_group_process\":\"Follow group\",\"follow_issue\":\"Follow theme\",\"follow_person\":\"Follow person\",\"follow_process\":\"Follow process\",\"follow_scope\":\"Follow scope\",\"group_process_followed\":\"Group followed!\",\"issue_followed\":\"Theme followed!\",\"manage_subscriptions\":\"Manage your alerts\",\"person_followed\":\"Person followed!\",\"process_followed\":\"Process followed!\",\"scope_followed\":\"Scope followed!\"}},\"user_mailer\":{\"confirmation_instructions\":{\"bye\":\"Cheers\",\"click_link\":\"To complete your signup click the following link:\",\"hi\":\"Hi\",\"ignore_link\":\"if you didn\\'t register in %{site_name} you can ignore this message\",\"subject\":\"Complete your registration in %{site_name}\"},\"reset_password_instructions\":{\"bye\":\"Cheers\",\"click_link\":\"You have request to reset your password. Click the following link and follow the instructions:\",\"hi\":\"Hi\",\"subject\":\"Reset your password\"},\"welcome\":{\"alerts\":\"You can manage your notification preferences in this url: %{subscriptions_url}\",\"bye\":\"Cheers\",\"hi\":\"Hi\",\"subject\":\"Welcome\",\"success\":\"Your registration was successfully completed. Now you can interact in %{site_url} as registered user.\"}}},\"users\":{\"events\":{\"users_user_updated\":\"User updated\"}},\"views\":{\"delete\":\"Delete\",\"delete_confirm\":\"Are you sure? This operation can not be undone\",\"edit\":\"Edit\",\"forms\":{\"max_characters\":\"Max. %{length} characters\",\"required\":\"Required\",\"required_and_max_characters\":\"Required and M\u00E0x. %{length} car\u00E0cters\"},\"of\":\"of\",\"pagination\":{\"first\":\"\\\\u0026laquo; First\",\"last\":\"Last \\\\u0026raquo;\",\"next\":\"Next\",\"previous\":\"Prev\",\"truncate\":\"\\\\u0026hellip;\"},\"see\":{\"less\":\"see less\",\"more\":\"see more\"}}}'));\nI18n.translations[\"es\"] = I18n.extend((I18n.translations[\"es\"] || {}), JSON.parse('{\"activemodel\":{\"attributes\":{\"gobierto_admin/admin_confirmation_form\":{\"email\":\"Email\"},\"gobierto_admin/admin_edit_password_form\":{\"password\":\"Contrase\u00F1a\",\"password_confirmation\":\"Confirmaci\u00F3n de contrase\u00F1a\"},\"gobierto_admin/admin_form\":{\"email\":\"Email\",\"name\":\"Nombre\",\"password\":\"Contrase\u00F1a\",\"password_confirmation\":\"Confirmaci\u00F3n de contrase\u00F1a\",\"site_ids\":\"Sitios\",\"site_modules\":\"M\u00F3dulos\"},\"gobierto_admin/admin_group_form\":{\"name\":\"Nombre del grupo\"},\"gobierto_admin/admin_invitation_form\":{\"emails\":\"Emails\",\"site_ids\":\"Sitios\"},\"gobierto_admin/admin_new_password_form\":{\"email\":\"Email\"},\"gobierto_admin/file_attachment_form\":{\"description\":\"Descripci\u00F3n\",\"file_digest\":\"Este archivo\",\"name\":\"Nombre\"},\"gobierto_admin/gobierto_budgets/options_form\":{\"budgets_guide_page\":\"P\u00E1gina gu\u00EDa de presupuestos (si no se selecciona ninguna se mostrar\u00E1 el texto por defecto)\",\"comparison_compare_municipalities\":\"Mostrar municipios espec\u00EDficos\",\"comparison_context_table_enabled\":\"Mostrar tabla de contexto\",\"comparison_show_widget\":\"Mostrar widget comparaci\u00F3n\",\"comparison_tool_enabled\":\"Comparaci\u00F3n\",\"feedback_emails\":\"Correo-e para recibir participaciones\",\"receipt_configuration\":\"Configuraci\u00F3n del recibo\"},\"gobierto_admin/gobierto_calendars/calendar_configuration_form\":{\"ibm_notes_pwd\":\"La constrase\u00F1a\",\"ibm_notes_url\":\"La URL\",\"ibm_notes_usr\":\"Usuario\",\"microsoft_exchange_pwd\":\"La constrase\u00F1a\",\"microsoft_exchange_url\":\"La URL\",\"microsoft_exchange_usr\":\"Usuario\"},\"gobierto_admin/gobierto_calendars/event_form\":{\"attachment_file\":\"Fichero adjunto\",\"description\":\"Descripci\u00F3n\",\"ends_at\":\"Fecha de finalizaci\u00F3n\",\"starts_at\":\"Fecha de comienzo\",\"title\":\"T\u00EDtulo\",\"title_translations\":\"T\u00EDtulo\"},\"gobierto_admin/gobierto_cms/page_form\":{\"body\":\"Contenido\",\"published_on\":\"Fecha de publicaci\u00F3n\",\"slug\":\"URL\",\"title\":\"T\u00EDtulo\"},\"gobierto_admin/gobierto_cms/section_form\":{\"slug\":\"URL\",\"title\":\"T\u00EDtulo\"},\"gobierto_admin/gobierto_common/collection_form\":{\"container_global_id\":\"Contenedor\",\"container_id\":\"Contenedor\",\"item_type\":\"Tipo\",\"slug\":\"URL\",\"title\":\"T\u00EDtulo\"},\"gobierto_admin/gobierto_common/custom_field_form\":{\"date\":\"Fecha\",\"field_type\":\"Tipo de campo\",\"image\":\"Imagen\",\"indicators\":\"Indicadores\",\"localized_paragraph\":\"Texto largo\",\"localized_string\":\"Texto (l\u00EDnea)\",\"multiple_options\":\"Selecci\u00F3n m\u00FAltiple\",\"name\":\"Nombre\",\"numeric\":\"N\u00FAmero\",\"options\":\"Opciones\",\"paragraph\":\"Texto largo sin traducciones\",\"single_option\":\"Selecci\u00F3n \u00FAnica\",\"string\":\"Texto sin traducciones (l\u00EDnea)\",\"uid\":\"Identificador\",\"vocabulary_options\":\"Vocabulario\"},\"gobierto_admin/gobierto_common/term_form\":{\"description\":\"Descripci\u00F3n\",\"external_id\":\"ID externo\",\"name\":\"Nombre\",\"slug\":\"Slug\",\"term_id\":\"T\u00E9rmino Padre\"},\"gobierto_admin/gobierto_common/vocabulary_form\":{\"name\":\"Nombre\"},\"gobierto_admin/gobierto_data/dataset_form\":{\"name\":\"Nombre\",\"slug\":\"Slug\",\"table_name\":\"Nombre de la tabla\"},\"gobierto_admin/gobierto_data/settings_form\":{\"api_settings_max_dataset_size_for_queries\":\"M\u00E1ximo tama\u00F1o de datasets sin limitar la vista previa (MB)\",\"db_config\":\"Configuraci\u00F3n de la conexi\u00F3n a la base de datos\",\"frontend_enabled\":\"Interfaz p\u00FAblica visible\"},\"gobierto_admin/gobierto_investments/project_form\":{\"external_id\":\"ID externo\",\"title\":\"T\u00EDtulo\"},\"gobierto_admin/gobierto_observatory/settings_form\":{\"observatory_config\":\"Configuraci\u00F3n del observatorio\"},\"gobierto_admin/gobierto_people/person_form\":{\"avatar_file\":\"Avatar\",\"avatar_url\":\"Avatar\",\"bio\":\"Biograf\u00EDa\",\"bio_file\":\"Fichero adjunto\",\"bio_url\":\"Fichero adjunto\",\"category\":\"Categor\u00EDa\",\"charge\":\"Cargo\",\"email\":\"Correo-e\",\"name\":\"Nombre\",\"party\":\"Posici\u00F3n\",\"political_group_id\":\"Grupo pol\u00EDtico\"},\"gobierto_admin/gobierto_people/person_post_form\":{\"body\":\"Contenido\",\"tags\":\"Tags\",\"title\":\"T\u00EDtulo\"},\"gobierto_admin/gobierto_people/person_statement_form\":{\"attachment_file\":\"Fichero adjunto\",\"published_on\":\"Fecha de publicaci\u00F3n\",\"title\":\"T\u00EDtulo\",\"title_translations\":\"T\u00EDtulo\"},\"gobierto_admin/gobierto_people/political_group_form\":{\"name\":\"Nombre de la agrupaci\u00F3n\"},\"gobierto_admin/gobierto_plans/node_form\":{\"category_id\":\"Categor\u00EDa\",\"ends_at\":\"Fecha de fin\",\"name\":\"Proyecto\",\"progress\":\"Progreso\",\"starts_at\":\"Fecha de inicio\",\"status_id\":\"Estado\"},\"gobierto_admin/gobierto_plans/plan_form\":{\"configuration_data\":\"Configuraci\u00F3n\",\"css\":\"CSS\",\"csv_file\":\"Fichero CSV\",\"footer\":\"Pie de p\u00E1gina\",\"introduction\":\"Introducci\u00F3n\",\"plan_type_id\":\"Tipo\",\"slug\":\"url\",\"statuses_vocabulary_id\":\"Vocabulario de estados\",\"title\":\"T\u00EDtulo\",\"vocabulary_id\":\"Vocabulario de categor\u00EDas\",\"year\":\"A\u00F1o\"},\"gobierto_admin/gobierto_plans/plan_type_form\":{\"name\":\"Nombre\",\"slug\":\"url\"},\"gobierto_admin/gobierto_visualizations/settings_form\":{\"visualizations_config\":\"Configuraci\u00F3n de las visualizaciones\"},\"gobierto_admin/issue_form\":{\"name\":\"Nombre\",\"slug\":\"URL\"},\"gobierto_admin/scope_form\":{\"name\":\"Nombre\"},\"gobierto_admin/site_form\":{\"admin_custom_code\":\"C\u00F3digo personalizado de admin\",\"available_locales\":\"Idiomas disponibles\",\"default_locale\":\"Idioma por defecto\",\"domain\":\"Dominio\",\"foot_markup\":\"HTML de Pie\",\"google_analytics_id\":\"C\u00F3digo de Google Analytics\",\"head_markup\":\"HTML de Cabecera\",\"home_page\":\"M\u00F3dulo de inicio\",\"home_page_item_id\":\"P\u00E1gina de inicio\",\"links_markup\":\"HTML de Enlaces\",\"logo_file\":\"Logotipo\",\"name\":\"Nombre de la entidad\",\"organization_id\":\"Identificador de la organizaci\u00F3n (c\u00F3digo INE)\",\"organization_name\":\"Organizaci\u00F3n\",\"populate_data_api_token\":\"API token Populate Data\",\"privacy_page_id\":\"P\u00E1gina de privacidad\",\"raw_configuration_variables\":\"Otras variables de configuraci\u00F3n\",\"registration_disabled\":\"Deshabilitar el registro (solo oculta los enlaces al registro/login)\",\"reply_to_email\":\"Direcci\u00F3n de respuesta en correos-e\",\"title\":\"Nombre del sitio\"},\"gobierto_admin/user_form\":{\"email\":\"Email\",\"name\":\"Nombre\"},\"gobierto_admin/user_password_form\":{\"password\":\"Contrase\u00F1a\",\"password_confirmation\":\"Confirmaci\u00F3n de contrase\u00F1a\"},\"gobierto_dashboards/dashboard_form\":{\"title\":\"T\u00EDtulo\"},\"gobierto_people/person_message\":{\"body\":\"Mensaje\",\"email\":\"Tu e-mail\",\"name\":\"Tu nombre\"},\"user/census_verification_form\":{\"date_of_birth\":\"Fecha de nacimiento\",\"document_number\":\"N\u00FAmero de documento\",\"site\":\"Lugar\"},\"user/confirmation_form\":{\"date_of_birth\":\"Fecha de nacimiento\",\"document_number\":\"N\u00FAmero de documento\",\"email\":\"Tu Correo-e\",\"gender\":\"G\u00E9nero\",\"name\":\"Tu nombre\",\"password\":\"Tu contrase\u00F1a\",\"password_confirmation\":\"Tu contrase\u00F1a, otra vez\"},\"user/confirmation_request_form\":{\"email\":\"Tu Correo-e\"},\"user/edit_password_form\":{\"password\":\"Tu contrase\u00F1a\",\"password_confirmation\":\"Tu contrase\u00F1a, otra vez\"},\"user/new_password_form\":{\"email\":\"Tu Correo-e\"},\"user/registration_form\":{\"email\":\"Tu Correo-e\"},\"user/session_form\":{\"email\":\"Tu Correo-e\",\"password\":\"Tu contrase\u00F1a\"},\"user/settings_form\":{\"date_of_birth\":\"Fecha de nacimiento\",\"email\":\"Tu Correo-e\",\"gender\":\"G\u00E9nero\",\"name\":\"Tu nombre\",\"password\":\"Tu contrase\u00F1a\",\"password_confirmation\":\"Tu contrase\u00F1a, otra vez\"},\"user/subscription_form\":{\"subscribable\":\"Recurso\",\"user\":\"Usuario\",\"user_email\":\"Correo-e\"}},\"errors\":{\"models\":{\"gobierto_admin/gobierto_common/vocabulary_terms_import_form\":{\"attributes\":{\"base\":{\"invalid_row\":\"Se ha encontrado una fila inv\u00E1lida: %{row_data}\"}}},\"gobierto_admin/gobierto_data/dataset_form\":{\"attributes\":{\"table_name\":{\"invalid_table\":\"No se puede acceder a la tabla. Mensaje de error: \\\\\"%{error_message}\\\\\"\"}}},\"gobierto_admin/gobierto_data/settings_form\":{\"attributes\":{\"db_config\":{\"invalid_connection\":\"No se puede conectar con los datos de configuraci\u00F3n. Mensaje de error: \\\\\"%{error_message}\\\\\"\",\"invalid_format\":\"La configuraci\u00F3n no tiene un formato JSON v\u00E1lido\"}}},\"gobierto_admin/gobierto_observatory/settings_form\":{\"attributes\":{\"observatory_config\":{\"invalid_format\":\"La configuraci\u00F3n no tiene un formato JSON v\u00E1lido\",\"invalid_values\":\"La configuraci\u00F3n no tiene valores v\u00E1lidos\"}}},\"gobierto_admin/gobierto_plans/plan_data_form\":{\"attributes\":{\"base\":{\"category_not_found\":\"Alguna de las categor\u00EDas no se ha podido encontrar. Contenido de la fila: %{row_data}\",\"external_id_taken\":\"El campo external_id ya est\u00E1 en uso, bien porque otra fila tiene el mismo external_id o porque estaba vac\u00EDa y autom\u00E1ticamente se asign\u00F3 el mismo valor. Contenido de la fila: %{row_data}\",\"file_not_found\":\"Fichero no encontrado\",\"invalid_columns\":\"No est\u00E1n todas las columnas necesarias\",\"invalid_format\":\"Formato de fichero inv\u00E1lido\",\"invalid_row\":\"Se ha encontrado una fila inv\u00E1lida: %{row_data}\",\"status_missing\":\"El estado de la fila no se ha encontrado en el vocabulario de estados correspondiente o existe un estado en la fila pero no hay un vocabulario de estados configurado en el plan. Contenido de la fila: %{row_data}\",\"term_not_found\":\"No ha sido posible encontrar el t\u00E9rmino \\'%{term}\\' en el vocabulario \\'%{vocabulary}\\' usado por la columna \\'Node.%{uid}\\'\",\"used_resource\":\"El vocabulario emplea t\u00E9rminos que se usan en otras partes de la aplicaci\u00F3n\"}}},\"gobierto_admin/gobierto_plans/plan_table_custom_fields_form\":{\"attributes\":{\"base\":{\"file_not_found\":\"Fichero no encontrado\",\"invalid_columns\":\"No est\u00E1n todas las columnas necesarias\",\"invalid_format\":\"Formato de fichero inv\u00E1lido\"}}},\"gobierto_admin/gobierto_plans/projects_form\":{\"attributes\":{\"base\":{\"category_missing\":\"Categor\u00EDa no encontrada en datos del proyecto. Por favor, proporciona un category_id o category_external_id v\u00E1lido. Datos del proyecto: %{json_data}\",\"failed_import\":\"El proyecto con los siguientes datos no ha podido ser importado: %{json_data}\",\"status_missing\":\"Estado no encontrado en datos del proyecto. Por favor, proporciona un status_id o status_external_id v\u00E1lido. Datos del proyecto: %{json_data}\"}}},\"gobierto_admin/gobierto_visualizations/settings_form\":{\"attributes\":{\"visualizations_config\":{\"invalid_format\":\"La configuraci\u00F3n no tiene un formato JSON v\u00E1lido\",\"invalid_values\":\"La configuraci\u00F3n no tiene valores v\u00E1lidos\"}}},\"gobierto_data/dataset_form\":{\"attributes\":{\"data_file\":{\"no_file_included\":\"El archivo no se ha podido cargar. Por favor, revisa la petici\u00F3n y aseg\u00FArate de que el contenido del archivo se haya incluido en ella\"}}}}},\"models\":{\"gobierto_admin/admin_confirmation_form\":\"Confirmaci\u00F3n\",\"gobierto_admin/admin_edit_password_form\":\"Cambio de contrase\u00F1a\",\"gobierto_admin/admin_form\":\"Administrador\",\"gobierto_admin/admin_group_form\":\"Grupo\",\"gobierto_admin/admin_invitation_form\":\"Invitaci\u00F3n\",\"gobierto_admin/admin_new_password_form\":\"Recuperaci\u00F3n de contrase\u00F1a\",\"gobierto_admin/file_attachment_form\":\"Cambio en el documento\",\"gobierto_admin/gobierto_budgets/options_form\":\"Opciones\",\"gobierto_admin/gobierto_calendars/event_form\":\"Evento\",\"gobierto_admin/gobierto_cms/page_form\":\"P\u00E1gina\",\"gobierto_admin/gobierto_cms/section_form\":\"Secci\u00F3n\",\"gobierto_admin/gobierto_common/collection_form\":\"Colecci\u00F3n\",\"gobierto_admin/gobierto_common/content_block_form\":\"Bloque de contenido\",\"gobierto_admin/gobierto_common/term_form\":\"T\u00E9rmino\",\"gobierto_admin/gobierto_common/vocabulary_form\":\"Vocabulario\",\"gobierto_admin/gobierto_people/person_form\":\"Perfil\",\"gobierto_admin/gobierto_people/person_post_form\":\"Post\",\"gobierto_admin/gobierto_people/person_statement_form\":\"Declaraci\u00F3n\",\"gobierto_admin/gobierto_people/political_group_form\":\"Agrupaci\u00F3n pol\u00EDtica\",\"gobierto_admin/issue_form\":\"Tema\",\"gobierto_admin/scope_form\":\"\u00C1mbito\",\"gobierto_admin/site_form\":\"Sitio\",\"gobierto_admin/user_form\":\"Usuario\",\"gobierto_admin/user_password_form\":\"Cambio de contrase\u00F1a\",\"gobierto_admin/user_welcome_message_form\":\"Email de bienvenida\",\"gobierto_people/person_message\":\"Mensaje\",\"user/census_verification_form\":\"Verificaci\u00F3n de la identidad\",\"user/confirmation_form\":\"Confirmaci\u00F3n\",\"user/confirmation_request_form\":\"Solicitud de confirmaci\u00F3n\",\"user/edit_password_form\":\"Cambiar contrase\u00F1a\",\"user/new_password_form\":\"Recuperar contrase\u00F1a\",\"user/registration_form\":\"Registro\",\"user/session_form\":\"Sesi\u00F3n\",\"user/settings_form\":\"Ajustes\",\"user/subscription_form\":\"Suscripci\u00F3n\"}},\"activerecord\":{\"attributes\":{\"gobierto_admin/api_token\":{\"domain\":\"Dominio\",\"name\":\"Nombre\"},\"gobierto_admin/permission/site_option\":{\"resource_types\":{\"calendars\":\"Agendas\",\"custom_fields\":\"Campos personalizados\",\"customize\":\"Personalizar sitio\",\"documents\":\"Documentos\",\"templates\":\"Plantillas\",\"vocabularies\":\"Vocabularios\"}},\"gobierto_attachments/attachment\":{\"current_version\":\"Versi\u00F3n actual\",\"description\":\"Descripci\u00F3n\",\"file_digest\":\"Archivo\",\"file_name\":\"Nombre del archivo\",\"file_size\":\"Tama\u00F1o del archivo\",\"name\":\"Nombre\",\"url\":\"URL\"},\"gobierto_calendars/event_attendee\":{\"charge\":\"Cargo\",\"name\":\"Nombre\",\"person\":\"Persona\"},\"gobierto_calendars/event_location\":{\"address\":\"Direcci\u00F3n\",\"name\":\"Nombre\"},\"gobierto_calendars/filtering_rule\":{\"remove_filtering_text\":\"Eliminar texto filtrado\"},\"gobierto_cms/page\":{\"body\":\"Contenido\",\"slug\":\"URL\",\"title\":\"T\u00EDtulo\"},\"gobierto_common/api_token_form\":{\"domain\":\"Dominio\",\"name\":\"Nombre\"},\"gobierto_common/content_block_field\":{\"field_type\":\"Tipo de campo\",\"field_types\":{\"currency\":\"Moneda\",\"date\":\"Fecha\",\"text\":\"Texto\",\"url\":\"URL\"}},\"gobierto_people/trip\":{\"accomodation_expenses\":\"Hoteles y alojamiento\",\"food_expenses\":\"Dietas y manutenci\u00F3n\",\"other_expenses\":\"Otros gastos\",\"total_expenses\":\"Gastos totales\",\"transport_expenses\":\"Transporte\"},\"user/api_token\":{\"domain\":\"Dominio\",\"name\":\"Nombre\"}},\"enums\":{\"gobierto_calendars/filtering_rule\":{\"action\":{\"ignore\":\"Ignorar\",\"import\":\"Importar\",\"import_as_draft\":\"Importar como borrador\"},\"condition\":{\"contains\":\"Contiene\",\"ends_with\":\"Termina por\",\"not_contains\":\"No contiene\",\"not_starts_with\":\"No empieza por\",\"starts_with\":\"Empieza por\"},\"field\":{\"description\":\"Cuerpo\",\"title\":\"T\u00EDtulo\"}}},\"errors\":{\"messages\":{\"record_invalid\":\"La validaci\u00F3n fall\u00F3: %{errors}\"},\"models\":{\"gobierto_admin/api_token\":{\"attributes\":{\"domain\":{\"not_valid_format\":\"Formato inv\u00E1lido\"}}},\"gobierto_common/custom_field_record\":{\"attributes\":{\"item\":{\"wrong_item_class\":\"no est\u00E1 asociado a un item de la clase adecuada\"}}},\"gobierto_common/term\":{\"attributes\":{\"base\":{\"has_dependent_resources_html\":\"Est\u00E1 siendo usado por los siguientes recursos:\\\\u003c/br\\\\u003e %{dependencies_list}\"}}},\"gobierto_data/connection\":{\"missing_configuration\":\"La base de datos no est\u00E1 configurada\"},\"user/api_token\":{\"attributes\":{\"domain\":{\"not_valid_format\":\"Formato inv\u00E1lido\"}}}}},\"messages\":{\"gobierto_attachments/attachment\":{\"file_too_big\":\"El fichero excede el tama\u00F1o m\u00E1ximo\"}},\"models\":{\"gobierto_attachments/attachment\":\"Documento\",\"gobierto_calendars/event\":\"Evento\",\"gobierto_calendars/event_attendee\":\"Asistente\",\"gobierto_calendars/event_location\":\"Localizacion\",\"gobierto_cms/news\":\"Noticia\",\"gobierto_cms/news_plural\":\"Noticias\",\"gobierto_cms/page\":\"P\u00E1gina\",\"gobierto_cms/pages_collection\":\"Colecci\u00F3n de P\u00E1ginas\",\"gobierto_common/content_block_field\":\"Campo\",\"gobierto_data/dataset\":{\"one\":\"Conjunto de datos\",\"other\":\"Conjuntos de datos\"},\"gobierto_investments/project\":{\"one\":\"Proyecto\",\"other\":\"Proyectos\"},\"gobierto_people/person\":\"Cargo\",\"gobierto_people/person_post\":\"Post\",\"gobierto_people/person_statement\":\"Declaracion\",\"gobierto_plans/node\":{\"one\":\"Proyecto\",\"other\":\"Proyectos\"},\"gobierto_plans/plan\":{\"one\":\"Plan\",\"other\":\"Planes\"},\"user\":\"Usuario\"}},\"admin_gobierto_calendars\":{\"events\":{\"admin_gobierto_calendars_calendars_synchronized\":\"Calendarios sincronizados\"}},\"admin_groups\":{\"events\":{\"admin_groups_admin_group_created\":\"Grupo de admin creado\",\"admin_groups_admin_group_updated\":\"Grupo de admin actualizado\"}},\"admins\":{\"events\":{\"admins_admin_authorization_level_updated\":\"Nivel autorizaci\u00F3n admin actualizado\",\"admins_admin_created\":\"Admin creado\",\"admins_admin_group_member_created\":\"Admin a\u00F1adido a grupo de permisos\",\"admins_admin_group_member_deleted\":\"Admin eliminado de grupo de permisos\",\"admins_admin_updated\":\"Admin actualizado\",\"admins_invitation_accepted\":\"Invitaci\u00F3n admin aceptada\",\"admins_invitation_created\":\"Admin invitado\"}},\"based_on\":\"Web basada en\",\"census\":{\"events\":{\"census_census_imported\":\"Censo importado\"}},\"concerns\":{\"gobierto_common\":{\"api_tokens_concern\":{\"create\":{\"success\":\"El Token de la API se ha creado correctamente\"},\"destroy\":{\"failed\":\"El Token de la API no ha podido ser eliminado\",\"success\":\"El Token de la API ha sido eliminado correctamente\"},\"update\":{\"success\":\"El Token de la API se ha actualizado correctamente\"}}}},\"controllers\":{\"gobierto_budgets\":{\"api\":{\"data\":{\"expense\":\"Gasto\",\"income\":\"Ingreso\"}},\"budgets_execution\":{\"index\":{\"alert\":\"No hay datos disponibles en %{year} as\u00ED que te mostramos el primer a\u00F1o con datos\"}}}},\"cookies_eu\":{\"cookies_text\":\"Las cookies nos ayudan a ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso de cookies.\",\"learn_more\":\"M\u00E1s informaci\u00F3n\",\"ok\":\"OK\"},\"countries\":{\"AC\":\"Isla de la Ascensi\u00F3n\",\"AD\":\"Andorra\",\"AE\":\"Emiratos \u00C1rabes Unidos\",\"AF\":\"Afganist\u00E1n\",\"AG\":\"Antigua y Barbuda\",\"AI\":\"Anguila\",\"AL\":\"Albania\",\"AM\":\"Armenia\",\"AN\":\"Antillas Neerlandesas\",\"AO\":\"Angola\",\"AQ\":\"Ant\u00E1rtida\",\"AR\":\"Argentina\",\"AS\":\"Samoa Americana\",\"AT\":\"Austria\",\"AU\":\"Australia\",\"AW\":\"Aruba\",\"AX\":\"Islas \u00C5land\",\"AZ\":\"Azerbaiy\u00E1n\",\"BA\":\"Bosnia-Herzegovina\",\"BB\":\"Barbados\",\"BD\":\"Banglad\u00E9s\",\"BE\":\"B\u00E9lgica\",\"BF\":\"Burkina Faso\",\"BG\":\"Bulgaria\",\"BH\":\"Bar\u00E9in\",\"BI\":\"Burundi\",\"BJ\":\"Ben\u00EDn\",\"BL\":\"San Bartolom\u00E9\",\"BM\":\"Bermudas\",\"BN\":\"Brun\u00E9i\",\"BO\":\"Bolivia\",\"BQ\":\"Caribe neerland\u00E9s\",\"BR\":\"Brasil\",\"BS\":\"Bahamas\",\"BT\":\"But\u00E1n\",\"BV\":\"Isla Bouvet\",\"BW\":\"Botsuana\",\"BY\":\"Bielorrusia\",\"BZ\":\"Belice\",\"CA\":\"Canad\u00E1\",\"CC\":\"Islas Cocos\",\"CD\":\"Rep\u00FAblica Democr\u00E1tica del Congo\",\"CF\":\"Rep\u00FAblica Centroafricana\",\"CG\":\"Rep\u00FAblica del Congo\",\"CH\":\"Suiza\",\"CI\":\"Costa de Marfil\",\"CK\":\"Islas Cook\",\"CL\":\"Chile\",\"CM\":\"Camer\u00FAn\",\"CN\":\"China\",\"CO\":\"Colombia\",\"CP\":\"Isla Clipperton\",\"CR\":\"Costa Rica\",\"CU\":\"Cuba\",\"CV\":\"Cabo Verde\",\"CW\":\"Curazao\",\"CX\":\"Isla Christmas\",\"CY\":\"Chipre\",\"CZ\":\"Rep\u00FAblica Checa\",\"DE\":\"Alemania\",\"DG\":\"Diego Garc\u00EDa\",\"DJ\":\"Yibuti\",\"DK\":\"Dinamarca\",\"DM\":\"Dominica\",\"DO\":\"Rep\u00FAblica Dominicana\",\"DZ\":\"Argelia\",\"EA\":\"Ceuta y Melilla\",\"EC\":\"Ecuador\",\"EE\":\"Estonia\",\"EG\":\"Egipto\",\"EH\":\"S\u00E1hara Occidental\",\"ER\":\"Eritrea\",\"ES\":\"Espa\u00F1a\",\"ET\":\"Etiop\u00EDa\",\"EU\":\"Uni\u00F3n Europea\",\"FI\":\"Finlandia\",\"FJ\":\"Fiyi\",\"FK\":\"Islas Malvinas\",\"FM\":\"Micronesia\",\"FO\":\"Islas Feroe\",\"FR\":\"Francia\",\"GA\":\"Gab\u00F3n\",\"GB\":\"Reino Unido\",\"GD\":\"Granada\",\"GE\":\"Georgia\",\"GF\":\"Guayana Francesa\",\"GG\":\"Guernesey\",\"GH\":\"Ghana\",\"GI\":\"Gibraltar\",\"GL\":\"Groenlandia\",\"GM\":\"Gambia\",\"GN\":\"Guinea\",\"GP\":\"Guadalupe\",\"GQ\":\"Guinea Ecuatorial\",\"GR\":\"Grecia\",\"GS\":\"Islas Georgia del Sur y Sandwich del Sur\",\"GT\":\"Guatemala\",\"GU\":\"Guam\",\"GW\":\"Guinea-Bis\u00E1u\",\"GY\":\"Guyana\",\"HK\":\"RAE de Hong Kong (China)\",\"HM\":\"Islas Heard y McDonald\",\"HN\":\"Honduras\",\"HR\":\"Croacia\",\"HT\":\"Hait\u00ED\",\"HU\":\"Hungr\u00EDa\",\"IC\":\"Islas Canarias\",\"ID\":\"Indonesia\",\"IE\":\"Irlanda\",\"IL\":\"Israel\",\"IM\":\"Isla de Man\",\"IN\":\"India\",\"IO\":\"Territorio Brit\u00E1nico del Oc\u00E9ano \u00CDndico\",\"IQ\":\"Iraq\",\"IR\":\"Ir\u00E1n\",\"IS\":\"Islandia\",\"IT\":\"Italia\",\"JE\":\"Jersey\",\"JM\":\"Jamaica\",\"JO\":\"Jordania\",\"JP\":\"Jap\u00F3n\",\"KE\":\"Kenia\",\"KG\":\"Kirguist\u00E1n\",\"KH\":\"Camboya\",\"KI\":\"Kiribati\",\"KM\":\"Comoras\",\"KN\":\"San Crist\u00F3bal y Nieves\",\"KP\":\"Corea del Norte\",\"KR\":\"Corea del Sur\",\"KW\":\"Kuwait\",\"KY\":\"Islas Caim\u00E1n\",\"KZ\":\"Kazajist\u00E1n\",\"LA\":\"Laos\",\"LB\":\"L\u00EDbano\",\"LC\":\"Santa Luc\u00EDa\",\"LI\":\"Liechtenstein\",\"LK\":\"Sri Lanka\",\"LR\":\"Liberia\",\"LS\":\"Lesoto\",\"LT\":\"Lituania\",\"LU\":\"Luxemburgo\",\"LV\":\"Letonia\",\"LY\":\"Libia\",\"MA\":\"Marruecos\",\"MC\":\"M\u00F3naco\",\"MD\":\"Moldavia\",\"ME\":\"Montenegro\",\"MF\":\"San Mart\u00EDn\",\"MG\":\"Madagascar\",\"MH\":\"Islas Marshall\",\"MK\":\"Macedonia\",\"ML\":\"Mali\",\"MM\":\"Myanmar (Birmania)\",\"MN\":\"Mongolia\",\"MO\":\"RAE de Macao (China)\",\"MP\":\"Islas Marianas del Norte\",\"MQ\":\"Martinica\",\"MR\":\"Mauritania\",\"MS\":\"Montserrat\",\"MT\":\"Malta\",\"MU\":\"Mauricio\",\"MV\":\"Maldivas\",\"MW\":\"Malaui\",\"MX\":\"M\u00E9xico\",\"MY\":\"Malasia\",\"MZ\":\"Mozambique\",\"NA\":\"Namibia\",\"NC\":\"Nueva Caledonia\",\"NE\":\"N\u00EDger\",\"NF\":\"Isla Norfolk\",\"NG\":\"Nigeria\",\"NI\":\"Nicaragua\",\"NL\":\"Pa\u00EDses Bajos\",\"NO\":\"Noruega\",\"NP\":\"Nepal\",\"NR\":\"Nauru\",\"NU\":\"Isla Niue\",\"NZ\":\"Nueva Zelanda\",\"OM\":\"Om\u00E1n\",\"PA\":\"Panam\u00E1\",\"PE\":\"Per\u00FA\",\"PF\":\"Polinesia Francesa\",\"PG\":\"Pap\u00FAa Nueva Guinea\",\"PH\":\"Filipinas\",\"PK\":\"Pakist\u00E1n\",\"PL\":\"Polonia\",\"PM\":\"San Pedro y Miquel\u00F3n\",\"PN\":\"Islas Pitcairn\",\"PR\":\"Puerto Rico\",\"PS\":\"Territorios Palestinos\",\"PT\":\"Portugal\",\"PW\":\"Palau\",\"PY\":\"Paraguay\",\"QA\":\"Catar\",\"QO\":\"Territorios alejados de Ocean\u00EDa\",\"RE\":\"Reuni\u00F3n\",\"RO\":\"Ruman\u00EDa\",\"RS\":\"Serbia\",\"RU\":\"Rusia\",\"RW\":\"Ruanda\",\"SA\":\"Arabia Saud\u00ED\",\"SB\":\"Islas Salom\u00F3n\",\"SC\":\"Seychelles\",\"SD\":\"Sud\u00E1n\",\"SE\":\"Suecia\",\"SG\":\"Singapur\",\"SH\":\"Santa Elena\",\"SI\":\"Eslovenia\",\"SJ\":\"Svalbard y Jan Mayen\",\"SK\":\"Eslovaquia\",\"SL\":\"Sierra Leona\",\"SM\":\"San Marino\",\"SN\":\"Senegal\",\"SO\":\"Somalia\",\"SR\":\"Surinam\",\"SS\":\"Sud\u00E1n del Sur\",\"ST\":\"Santo Tom\u00E9 y Pr\u00EDncipe\",\"SV\":\"El Salvador\",\"SX\":\"Sint Maarten\",\"SY\":\"Siria\",\"SZ\":\"Suazilandia\",\"TA\":\"Trist\u00E1n da Cunha\",\"TC\":\"Islas Turcas y Caicos\",\"TD\":\"Chad\",\"TF\":\"Territorios Australes Franceses\",\"TG\":\"Togo\",\"TH\":\"Tailandia\",\"TJ\":\"Tayikist\u00E1n\",\"TK\":\"Tokelau\",\"TL\":\"Timor Oriental\",\"TM\":\"Turkmenist\u00E1n\",\"TN\":\"T\u00FAnez\",\"TO\":\"Tonga\",\"TR\":\"Turqu\u00EDa\",\"TT\":\"Trinidad y Tobago\",\"TV\":\"Tuvalu\",\"TW\":\"Taiw\u00E1n\",\"TZ\":\"Tanzania\",\"UA\":\"Ucrania\",\"UG\":\"Uganda\",\"UM\":\"Islas menores alejadas de EE. UU.\",\"US\":\"Estados Unidos\",\"UY\":\"Uruguay\",\"UZ\":\"Uzbekist\u00E1n\",\"VA\":\"Ciudad del Vaticano\",\"VC\":\"San Vicente y las Granadinas\",\"VE\":\"Venezuela\",\"VG\":\"Islas V\u00EDrgenes Brit\u00E1nicas\",\"VI\":\"Islas V\u00EDrgenes de EE. UU.\",\"VN\":\"Vietnam\",\"VU\":\"Vanuatu\",\"WF\":\"Wallis y Futuna\",\"WS\":\"Samoa\",\"XK\":\"Kosovo\",\"YE\":\"Yemen\",\"YT\":\"Mayotte\",\"ZA\":\"Sud\u00E1frica\",\"ZM\":\"Zambia\",\"ZW\":\"Zimbabue\"},\"country\":\"Espa\u00F1a\",\"date\":{\"abbr_day_names\":[\"dom\",\"lun\",\"mar\",\"mi\u00E9\",\"jue\",\"vie\",\"s\u00E1b\"],\"abbr_month_names\":[null,\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],\"day_names\":[\"domingo\",\"lunes\",\"martes\",\"mi\u00E9rcoles\",\"jueves\",\"viernes\",\"s\u00E1bado\"],\"formats\":{\"day_month\":\"%d/%m\",\"default\":\"%d/%m/%Y\",\"long\":\"%d de %B de %Y\",\"short\":\"%d %b %Y\",\"shortest\":\"%d %b %y\"},\"month_names\":[null,\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],\"order\":[\"day\",\"month\",\"year\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"hace alrededor de 1 hora\",\"other\":\"hace alrededor de %{count} horas\"},\"about_x_months\":{\"one\":\"hace alrededor de 1 mes\",\"other\":\"hace alrededor de %{count} meses\"},\"about_x_years\":{\"one\":\"hace alrededor de 1 a\u00F1o\",\"other\":\"hace alrededor de %{count} a\u00F1os\"},\"almost_x_years\":{\"one\":\"hace casi 1 a\u00F1o\",\"other\":\"hace casi %{count} a\u00F1os\"},\"half_a_minute\":\"hace medio minuto\",\"less_than_x_minutes\":{\"one\":\"hace menos de 1 minuto\",\"other\":\"hace menos de %{count} minutos\"},\"less_than_x_seconds\":{\"one\":\"hace menos de 1 segundo\",\"other\":\"hace menos de %{count} segundos\"},\"over_x_years\":{\"one\":\"hace m\u00E1s de 1 a\u00F1o\",\"other\":\"hace m\u00E1s de %{count} a\u00F1os\"},\"x_days\":{\"one\":\"hace 1 d\u00EDa\",\"other\":\"hace %{count} d\u00EDas\"},\"x_minutes\":{\"one\":\"hace 1 minuto\",\"other\":\"hace %{count} minutos\"},\"x_months\":{\"one\":\"hace 1 mes\",\"other\":\"hace %{count} meses\"},\"x_seconds\":{\"one\":\"hace 1 segundo\",\"other\":\"hace %{count} segundos\"},\"x_years\":{\"one\":\"hace 1 a\u00F1o\",\"other\":\"hace %{count} a\u00F1os\"}},\"prompts\":{\"day\":\"D\u00EDa\",\"hour\":\"Hora\",\"minute\":\"Minutos\",\"month\":\"Mes\",\"second\":\"Segundos\",\"year\":\"A\u00F1o\"}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"debe ser aceptado\",\"array_too_short\":{\"one\":\"es demasiado corto (al menos 1 elemento)\",\"other\":\"es demasiado corto (al menos %{count} elementos)\"},\"blank\":\"no puede estar en blanco\",\"blank_for_modules\":\"La organizaci\u00F3n no est\u00E1 bien configurada. El identificador es obligatorio para los m\u00F3dulos que tienes activados.\",\"collection_taken\":\"no puede tener otra colecci\u00F3n de este tipo.\",\"confirmation\":\"no coincide con %{attribute}\",\"custom_fields\":{\"options\":{\"missing_vocabulary\":\"Alguna columna de tipo \\\\\"vocabulary\\\\\" no tiene valor en \\\\\"dataSource\\\\\"\",\"wrong_column_type\":\"Alguna columna no pertenece a un tipo reconocido. Tipos reconocidos: \\\\\"text\\\\\", \\\\\"integer\\\\\", \\\\\"float\\\\\", \\\\\"date\\\\\" y \\\\\"vocabulary\\\\\"\",\"wrong_custom_field_uids\":\"Los uids configurados no existen o pertenecen a campos personalizados que no tienen definido un valor de progreso\"}},\"empty\":\"no puede estar vac\u00EDo\",\"equal_to\":\"debe ser igual a %{count}\",\"even\":\"debe ser par\",\"exclusion\":\"est\u00E1 reservado\",\"greater_than\":\"debe ser mayor que %{count}\",\"greater_than_or_equal_to\":\"debe ser mayor que o igual a %{count}\",\"inclusion\":\"no est\u00E1 incluido en la lista\",\"invalid\":\"no es v\u00E1lido\",\"invalid_consultation_response\":\"No se ha podido guardar la consulta. Por favor, revisa los valores e int\u00E9ntalo de nuevo.\",\"invalid_table_name\":\"Debe comenzar con una letra o un gui\u00F3n bajo; el resto solo puede contener letras, d\u00EDgitos o guiones bajos\",\"less_than\":\"debe ser menor que %{count}\",\"less_than_or_equal_to\":\"debe ser menor que o igual a %{count}\",\"not_a_number\":\"no es un n\u00FAmero\",\"not_an_integer\":\"debe ser un entero\",\"not_found\":\"no se encuentra\",\"odd\":\"debe ser impar\",\"other_than\":\"debe ser distinto de %{count}\",\"page_as_homepage\":\"No se ha podido guardar los cambios en la p\u00E1gina porque no se puede cambiar la visibilidad de una p\u00E1gina que se utiliza como homepage.\",\"present\":\"debe estar en blanco\",\"record_invalid\":\"La validaci\u00F3n fall\u00F3: %{errors}\",\"restrict_dependent_destroy\":{\"one\":\"No se puede eliminar el registro porque existe un %{record} dependiente\",\"other\":\"No se puede eliminar el registro porque existen %{record} dependientes\"},\"taken\":\"ya est\u00E1 en uso\",\"too_long\":{\"one\":\"es demasiado largo (1 car\u00E1cter m\u00E1ximo)\",\"other\":\"es demasiado largo (%{count} caracteres m\u00E1ximo)\"},\"too_short\":{\"one\":\"es demasiado corto (1 car\u00E1cter m\u00EDnimo)\",\"other\":\"es demasiado corto (%{count} caracteres m\u00EDnimo)\"},\"wrong_length\":{\"one\":\"no tiene la longitud correcta (1 car\u00E1cter exacto)\",\"other\":\"no tiene la longitud correcta (%{count} caracteres exactos)\"}},\"template\":{\"body\":\"Se encontraron problemas con los siguientes campos:\",\"header\":{\"one\":\"No se pudo guardar este/a %{model} porque se encontr\u00F3 1 error\",\"other\":\"No se pudo guardar este/a %{model} porque se encontraron %{count} errores\"}}},\"gobierto_admin\":{\"activities\":{\"activities_list\":{\"header\":{\"action\":\"Acci\u00F3n\",\"date\":\"Fecha\",\"ip\":\"IP\",\"recipient\":\"Receptor\",\"subject\":\"Sujeto\",\"user\":\"Usuario\"}},\"index\":{\"title\":\"Log de actividades\"}},\"admin\":{\"invitation_acceptances\":{\"show\":{\"error\":\"Esta URL no parece ser v\u00E1lida\",\"success\":\"Sesi\u00F3n iniciada correctamente\"}},\"invitations\":{\"create\":{\"error\":\"Hubo un problema al enviar las invitaciones\",\"success\":\"Las invitaciones se han enviado correctamente\",\"success_with_errors\":\"Algunas invitaciones no han podido ser enviadas: %{email_addresses}.\"},\"form\":{\"placeholders\":{\"emails\":\"maria@hotmail.com, felipe@gmail.com\"},\"sites\":\"Sites con acceso\",\"submit\":\"Enviar invitaciones\"},\"new\":{\"title\":\"Enviar invitaciones\"}},\"passwords\":{\"create\":{\"error\":\"La direcci\u00F3n de e-mail que has indicado no parece ser v\u00E1lida\",\"success\":\"Por favor, revisa tu email para recibir instrucciones\"},\"edit\":{\"error\":\"Esta URL no parece ser v\u00E1lida\",\"title\":\"Establecer tu nueva contrase\u00F1a\"},\"edit_form\":{\"submit\":\"Cambiar contrase\u00F1a\"},\"new\":{\"title\":\"Recuperar tu contrase\u00F1a\"},\"new_form\":{\"placeholders\":{\"email\":\"fsanchez@gmail.com\"},\"submit\":\"Solicitar recuperaci\u00F3n\"},\"update\":{\"error\":\"Hubo un problema al cambiar tu contrase\u00F1a\",\"success\":\"Sesi\u00F3n iniciada correctamente\"}},\"settings\":{\"edit\":{\"password_block\":\"Contrase\u00F1a\",\"placeholders\":{\"email\":\"Email\",\"name\":\"Nombre\"},\"title\":\"Edita tus datos personales\"},\"update\":{\"error\":\"No se han podido guardar tus datos\",\"success\":\"Datos guardados correctamente\"}}},\"admin_groups\":{\"admins\":{\"modal_index\":{\"add\":\"A\u00F1adir\",\"add_title\":\"A\u00F1adir usuario\",\"created_at\":\"Acceso concedido\",\"delete\":\"Eliminar acceso\",\"email\":\"correo-e\",\"user\":\"Usuario\",\"users_with_access\":\"Usuarios con acceso\"}},\"breadcrumb\":{\"admin_groups\":\"Grupos\"},\"create\":{\"success\":\"El Grupo de Admins se ha creado correctamente\"},\"edit\":{\"title\":\"Permisos del grupo: %{name}\"},\"form\":{\"action_names\":{\"create_projects\":\"Crear proyectos\",\"delete_projects_all\":\"Eliminar proyectos (todos)\",\"delete_projects_assigned\":\"Eliminar proyectos (asignados)\",\"edit\":\"Editar\",\"edit_projects_all\":\"Editar proyectos (todos)\",\"edit_projects_assigned\":\"Editar proyectos (asignados)\",\"edit_projects_permissions_all\":\"Editar permisos de proyectos (todos)\",\"edit_projects_permissions_assigned\":\"Editar permisos de proyectos (asignados)\",\"manage_dashboards\":\"Administrar dashboards\",\"manage_plans\":\"Administrar planes\",\"moderate_projects_all\":\"Moderar proyectos (todos)\",\"moderate_projects_assigned\":\"Moderar proyectos (asignados)\",\"publish_projects_all\":\"Publicar proyectos (todos)\",\"publish_projects_assigned\":\"Publicar proyectos (asignados)\",\"update_projects_as_minor_change_all\":\"Guardar cambios menores en proyectos (todos)\",\"update_projects_as_minor_change_assigned\":\"Guardar cambios menores en proyectos (asignados)\",\"view_dashboards\":\"Ver dashboards\",\"view_projects_all\":\"Ver proyectos (todos)\",\"view_projects_assigned\":\"Ver proyectos (asignados)\"},\"actions\":\"Acciones\",\"all\":\"Todos\",\"members\":{\"one\":\"Hay un administrador con este grupo.\",\"other\":\"Hay %{count} administradores con este grupo.\",\"zero\":\"Este grupo no tiene administradores.\"},\"modules_permissions\":\"M\u00F3dulos\",\"people\":\"Personas\",\"placeholders\":{\"name\":\"Grupo global de administradores\"},\"site_options_permissions\":\"Sitio\"},\"index\":{\"header\":{\"admin_group\":\"Grupo\"},\"new\":\"Nuevo\",\"title\":\"Grupos\"},\"new\":{\"title\":\"Nuevo grupo\"},\"update\":{\"success\":\"El Grupo de Admins se ha actualizado correctamente\"}},\"admin_mailer\":{\"invitation_instructions\":{\"bye\":\"Saludos\",\"click_link\":\"Has sido invitado para colaborar en Gobierto. Pincha en el siguiente enlace para crear tu cuenta\",\"hi\":\"Hola\",\"subject\":\"Has sido invitado a colaborar en Gobierto\"},\"reset_password_instructions\":{\"bye\":\"Saludos\",\"click_link\":\"Pincha en el siguiente enlace para restaurar tu contrase\u00F1a\",\"hi\":\"Hola\",\"subject\":\"Instrucciones para restaurar tu contrase\u00F1a\"}},\"admin_unauthorized\":\"No tienes suficientes permisos para realizar esta acci\u00F3n\",\"admins\":{\"create\":{\"success\":\"El Admin se ha creado correctamente\"},\"edit\":{\"title\":\"Editar Administrador\"},\"form\":{\"activity_block\":\"Log de actividad\",\"admin_groups_block\":\"Grupo\",\"authorization_level\":{\"disabled\":\"Deshabilitado\",\"manager\":\"Manager\",\"regular\":\"Regular\"},\"password_block\":\"Contrase\u00F1a\",\"placeholders\":{\"email\":\"fgonzalez@gmail.com\",\"name\":\"Fernando Gonz\u00E1lez\"},\"sites_block\":\"Sites con acceso\",\"sites_block_description\":\"Este usuario puede acceder a administrar:\"},\"index\":{\"groups_and_permissions\":\"Grupos y permisos\",\"header\":{\"admin\":\"Administrador\",\"created_at\":\"Creado\",\"email\":\"Email\",\"groups\":\"Grupos\",\"last_sign_in_at\":\"\u00DAltimo login\",\"primary_api_token\":\"Token de la API primario\",\"role\":\"Rol\"},\"new\":\"Nuevo Administrador\",\"send_invitations\":\"Enviar invitaciones\",\"title\":\"Administradores\",\"users_section\":\"Usuarios\",\"view_admin\":\"Ver Administrador\"},\"new\":{\"title\":\"Nuevo Administrador\"},\"show\":{\"admin_tokens\":\"Tokens de autorizaci\u00F3n\",\"copy_to_clipboard\":\"Copiar\",\"primary_api_token\":\"Token primario\"},\"update\":{\"success\":\"El Admin se ha actualizado correctamente\"}},\"api_tokens\":{\"api_token\":{\"primary\":\"Primario\"},\"edit\":{\"api_token\":\"Token de la API %{name}\"},\"form\":{\"placeholders\":{\"domain\":\"www.example.org\",\"name\":\"Token para aplicaciones externas\"},\"update_token\":\"Actualizar Token\"},\"list\":{\"header\":{\"created_at\":\"Creado\",\"domain\":\"Dominio\",\"name\":\"Nombre\",\"token\":\"Token\"},\"new\":\"Nuevo\",\"title\":\"Tokens de la API\"},\"new\":{\"api_token\":\"Nuevo Token de la API\"}},\"census\":{\"imports\":{\"create\":{\"error\":\"Hubo un error al importar tu archivo. Por favor, int\u00E9ntalo de nuevo.\",\"success\":\"Se han importado %{record_count} registros\"},\"file_format_notes\":{\"instructions\":\"El archivo a cargar debe ser un CSV, sin fila de cabecera, con las columnas de datos que queramos que el usuario deba verficiar. Por ejemplo, si queremos que valide DNI, fecha de nacimiento y c\u00F3digo postal, deberemos preparar un fichero como este:\"},\"form\":{\"disable_with\":\"Cargando...\",\"submit\":\"Cargar archivo de censo\"},\"new\":{\"final_notes\":\"se sustituir\u00E1n todos los registros, y si alg\u00FAn DNI de usuario verificado deja de estar presente, el usuario dejar\u00E1 de tener acceso\",\"import_status\":\"El censo ha sido cargado por \u00FAltima vez el %{created_at} por %{admin_name} (%{admin_email}). El archivo tiene %{imported_records} registros.\",\"title\":\"Configuraci\u00F3n de censo\"}}},\"custom_fields_plugins\":{\"budgets\":{\"area\":\"\u00C1rea\",\"assigned_amount\":\"Asignado\",\"budget_line\":\"Partida presupuestaria\",\"custom\":\"Personalizada\",\"economic\":\"Econ\u00F3mica\",\"full_amount\":\"Total\",\"functional\":\"Funcional\",\"not_available\":\"No disp.\",\"weight\":\"Peso\",\"year\":\"A\u00F1o\"},\"common\":{\"custom\":\"Personalizada\",\"economic\":\"Econ\u00F3mica\",\"functional\":\"Funcional\"},\"data_grid\":{\"remove_rows\":\"Eliminar filas seleccionadas\",\"select_deselect_all\":\"Seleccionar / Deseleccionar todas\"},\"progress\":{\"progress\":\"Progreso\"},\"table\":{\"remove_rows\":\"Eliminar filas seleccionadas\",\"select_deselect_all\":\"Seleccionar / Deseleccionar todas\"}},\"custom_sessions\":{\"ldap_strategy\":{\"form\":{\"identifier\":\"Identificador\",\"password\":\"Contrase\u00F1a\",\"submit\":\"Enviar\"}}},\"gobierto_attachments\":{\"file_attachments\":{\"create\":{\"success_html\":\"El documento ha sido creado correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el documento\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"El documento se ha archivado correctamente\"},\"edit\":{\"title\":\"Editar documento\"},\"form\":{\"file_constraints\":\"Adjuntar documento\",\"placeholders\":{\"description\":\"Descripci\u00F3n del documento\",\"name\":\"Nombre del documento\",\"slug\":\"nombre-del-documento\"}},\"index\":{\"add_new_attachment\":\"A\u00F1adir nuevo documento\",\"collections\":\"Colecciones\",\"created_at\":\"Creado\",\"header\":{\"collection\":\"Colecci\u00F3n\",\"file_attachments\":\"Documentos\"},\"latest_editions\":\"\u00DAltimas ediciones\",\"new\":\"Nueva\",\"title\":\"Documentos\",\"updated_at\":\"Actualizado\",\"view_collection\":\"Ver colecci\u00F3n\"},\"new\":{\"title\":\"Nuevo documento\"},\"recover\":{\"success\":\"El documento se ha recuperado correctamente\"},\"update\":{\"success_html\":\"El documento ha sido actualizado correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el documento\\\\u003c/a\\\\u003e.\"}}},\"gobierto_budgets\":{\"feedback\":{\"index\":{\"answer1_0\":\"S\u00ED\",\"answer1_1\":\"No\",\"answer2_0\":\"Poco\",\"answer2_1\":\"Apropiado\",\"answer2_2\":\"Mucho\",\"budget\":\"Presupuesto\",\"last\":\"\u00DAltima\",\"total_feedback\":\"Total opiniones\",\"understand\":\"\u00BFLo entiendes?\",\"you_think\":\"Te parece...\"}},\"options\":{\"index\":{\"comparison_compare_municipalities_desc\":\"Muestra una tabla con municipios espec\u00EDficos (y cuyos datos est\u00E9n disponibles en presupuestos.gobierto.es - haz la comprobaci\u00F3n all\u00ED antes de incluirlos)\",\"comparison_context_table_enabled_desc\":\"Muestra la tabla que ofrece contexto con medias provinciales, auton\u00F3micas o estatales\",\"comparison_show_widget_desc\":\"Facilita el acceso a la herramienta de comparaci\u00F3n de presupuestos de Gobierto: presupuestos.gobierto.es\",\"comparison_tool_enabled_desc\":\"Habilita herramientas de comparaci\u00F3n\",\"confirm_update_annual_data\":\"Comenzar\u00E1 un proceso en segundo plano para actualizar los ficheros. \u00BFContinuar?\",\"elaboration\":\"Elaboraci\u00F3n\",\"elaboration_desc1\":\"Habilita la secci\u00F3n de Elaboraci\u00F3n del presupuesto.\",\"elaboration_desc2_html\":\"\\\\u003cstrong\\\\u003eImportante:\\\\u003c/strong\\\\u003e es necesario que se hayan cargado datos de elaboraci\u00F3n. Contacta con tu administrador si tienes dudas.\",\"feedback\":\"Micro-participaciones\",\"feedback_desc\":\"Habilita la opci\u00F3n para que los visitantes opinen sobre las partidas del presupuesto\",\"feedback_emails_desc\":\"Las participaciones (opini\u00F3n sobre partidas y petici\u00F3n de m\u00E1s informaci\u00F3n) se enviar\u00E1n a esta direcci\u00F3n\",\"indicators\":\"Indicadores\",\"indicators_desc1\":\"Habilita la secci\u00F3n Indicadores\",\"options\":\"Opciones\",\"providers\":\"Proveedores y Facturas\",\"providers_desc1\":\"Habilita la secci\u00F3n Proveedores y Facturas\",\"receipt\":\"Recibo de tus impuestos\",\"receipt_desc1\":\"Habilita la secci\u00F3n El recibo de tus impuestos\",\"receipt_desc2_html\":\"\\\\u003cstrong\\\\u003eImportante:\\\\u003c/strong\\\\u003e debes de rellenar el JSON con los datos.\",\"update_annual_data\":\"Generar ficheros de partidas presupuestarias por a\u00F1o\"},\"update\":{\"error\":\"No se han podido guardar las opciones: %{validation_errors}\",\"success\":\"Opciones guardadas correctamente\"},\"update_annual_data\":{\"success\":\"Se ha lanzado un proceso para generar los ficheros de partidas presupuestarias por a\u00F1o\"}},\"shared\":{\"tabs\":{\"budgets\":\"Presupuestos\",\"feedback\":\"Opiniones\",\"options\":\"Opciones\"}}},\"gobierto_calendars\":{\"calendar_configuration\":{\"edit\":{\"add_rule\":\"Crear regla\",\"calendar_integration\":\"Integraci\u00F3n de calendario\",\"confirm_sync\":\"\u00BFEst\u00E1s seguro?\",\"filter_events\":\"Filtrado de eventos\",\"filter_events_desc\":\"Cuando se importa un evento...\",\"filter_events_label\":\"Si el\",\"google_calendar\":\"Google Calendar\",\"ibm_notes\":\"IBM Notes\",\"labels\":{\"ibm_notes_pwd\":\"Contrase\u00F1a\",\"ibm_notes_url\":\"URL del calendario de IBM Notes\",\"ibm_notes_usr\":\"Cuenta de IBM Notes\",\"microsoft_exchange_pwd\":\"Contrase\u00F1a\",\"microsoft_exchange_url\":\"URL del calendario\",\"microsoft_exchange_usr\":\"Cuenta de Microsoft Exchange\"},\"last_sync\":\"\u00DAltima sincronizaci\u00F3n\",\"manage\":\"Administrar la configuraci\u00F3n del calendario\",\"microsoft_exchange\":\"Microsoft Exchange\",\"placeholders\":{\"filter_text\":\"Texto por el que filtrar\",\"ibm_notes_url\":\"ej. https://ejemplo.com/mail/abc.nsf/api/calendar/events\",\"microsoft_exchange_url\":\"ej. https://ejemplo.com/ews/exchange.asmx\",\"username\":\"ej. perico85\"},\"remove_configuration\":\"Eliminar configuraci\u00F3n de calendario\",\"sync\":\"Sincronizar ahora\",\"without_description\":\"No importar la descripci\u00F3n del evento\"},\"gobierto_people_person_navigation\":{\"calendar_configuration\":\"Configuraci\u00F3n de calendario\"},\"google_calendar_fields\":{\"calendar_configured\":\"Actualmente esta persona tiene configurados estos calendarios\",\"share_link\":\"Comparte este enlace con el Alto Cargo para que permita a Gobierto leer sus eventos de Google Calendar:\"},\"sync_calendars\":{\"success\":\"Sincronizaci\u00F3n realizada\"},\"update\":{\"success\":\"Preferencias actualizadas correctamente\"}},\"collections\":{\"index\":{\"add_new_event\":\"A\u00F1adir nuevo evento\",\"collections\":\"Calendarios\",\"header\":{\"collection\":\"Calendario\",\"events\":\"Eventos\"},\"latest_editions\":\"\u00DAltimos eventos editados\",\"new\":\"Nuevo\",\"title\":\"Agendas\",\"view_collection\":\"Ver colecci\u00F3n\"}},\"events\":{\"attendees_form\":{\"header\":{\"charge\":\"Cargo\",\"name\":\"Nombre\",\"person\":\"Persona\"},\"title\":\"Asistentes\",\"view_person\":\"Ver persona\"},\"create\":{\"success_html\":\"El evento ha sido creado correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el evento\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"El evento se ha archivado correctamente\"},\"edit\":{\"title\":\"Editar evento\"},\"form\":{\"placeholders\":{\"slug\":\"acerca-de-esta-web\",\"title\":\"T\u00EDtulo del evento\"},\"state\":{\"pending\":\"Pendiente\",\"published\":\"Publicado\"}},\"index\":{\"configuration\":\"Configuraci\u00F3n\",\"header\":{\"date\":\"Fecha\",\"event\":\"Evento\",\"location\":\"Localizaci\u00F3n\",\"status\":\"Estado\"},\"new\":\"Nuevo evento\",\"past_events\":\"Eventos pasados\",\"pending_events\":\"Pendientes de moderar\",\"published_events\":\"Eventos publicados\",\"upcoming_events\":\"Pr\u00F3ximos\",\"view_event\":\"Ver evento\",\"visibility_level\":{\"archived\":\"Archivado\",\"pending\":\"Borrador\",\"published\":\"Publicado\"}},\"locations_form\":{\"header\":{\"address\":\"Direcci\u00F3n\",\"place\":\"Lugar\"},\"title\":\"Lugar\"},\"new\":{\"title\":\"Nuevo evento\"},\"person_breadcrumb\":{\"back_to_collections\":\"\\\\u003c Volver a agendas\"},\"recover\":{\"success\":\"El evento se ha recuperado correctamente\"},\"update\":{\"success_html\":\"El evento ha sido actualizado. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el evento\\\\u003c/a\\\\u003e.\"}}},\"gobierto_cms\":{\"file_attachments\":{\"index\":{\"title\":\"Documentos\"}},\"pages\":{\"create\":{\"success_html\":\"La p\u00E1gina ha sido creada correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer la p\u00E1gina\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"La p\u00E1gina ha sido eliminada correctamente\"},\"edit\":{\"title\":\"Editar p\u00E1gina\"},\"form\":{\"include_in_section\":\"Incluir en secci\u00F3n\",\"new_section\":\"(Nueva secci\u00F3n)\",\"placeholders\":{\"slug\":\"acerca-de-esta-web\",\"title\":\"T\u00EDtulo de la p\u00E1gina\"},\"section\":\"Secci\u00F3n\",\"visibility_level\":{\"active\":\"Publicada\",\"draft\":\"Borrador\"},\"without_parent\":\"(sin padre)\"},\"index\":{\"add_new\":\"A\u00F1adir nueva\",\"collections\":\"Colecciones\",\"header\":{\"collection\":\"Colecci\u00F3n\",\"pages\":\"P\u00E1ginas\",\"section\":\"Secci\u00F3n\"},\"latest_editions\":\"\u00DAltimas ediciones\",\"new\":\"Nueva\",\"sections\":\"Secciones\",\"title\":\"CMS\",\"view_collection\":\"Ver colecci\u00F3n\",\"view_section\":\"Ver secci\u00F3n\"},\"new\":{\"title\":\"Nueva p\u00E1gina\"},\"recover\":{\"success\":\"La p\u00E1gina ha sido recuperada correctamente\"},\"update\":{\"success_html\":\"La p\u00E1gina ha sido actualizada correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer la p\u00E1gina\\\\u003c/a\\\\u003e.\"}},\"sections\":{\"create\":{\"success\":\"La secci\u00F3n ha sido creada correctamente.\"},\"edit_modal\":{\"title\":\"Editar secci\u00F3n\"},\"form\":{\"placeholders\":{\"slug\":\"acerca-de-esta-seccion\",\"title\":\"T\u00EDtulo de la secci\u00F3n\"}},\"index\":{\"header\":{\"pages\":\"P\u00E1ginas\",\"title\":\"Secci\u00F3n\"},\"new\":\"Nueva\",\"title\":\"Secciones\",\"view\":\"Ver secci\u00F3n\"},\"new_modal\":{\"title\":\"Nueva secci\u00F3n\"},\"pages_filter\":{\"page_help\":\"Arrastra y suelta en la parte izquierda para colocar esta p\u00E1gina en el men\u00FA\"},\"show\":{\"collapse\":\"Colapsar todo\",\"configuration\":\"Configuraci\u00F3n\",\"delete_element\":\"Eliminar elemento del men\u00FA\",\"expand\":\"Expandir todo\",\"help\":\"Configura los elementos de tu men\u00FA. Arrastra del panel derecho al men\u00FA en la izquierda\",\"last_edited_pages\":\"\u00DAltimas p\u00E1ginas editadas\",\"placeholders\":{\"search\":\"Escribe el t\u00EDtulo de la p\u00E1gina para buscar\"},\"sections\":\"Secciones\",\"select_page\":\"Selecciona p\u00E1gina para incluir en la secci\u00F3n\",\"view\":\"Ver secci\u00F3n\"},\"update\":{\"success\":\"La secci\u00F3n ha sido actualizada correctamente.\"}}},\"gobierto_common\":{\"collections\":{\"check_container_presence\":{\"container_not_found\":\"El recurso al que pertenece la colecci\u00F3n no se encuentra\"},\"create\":{\"success\":\"La colecci\u00F3n se ha creado correctamente.\"},\"edit_modal\":{\"title\":\"Editar colecci\u00F3n\"},\"form\":{\"placeholders\":{\"slug\":\"acerca-de-esta-coleccion\",\"title\":\"Nombre de la colecci\u00F3n\"}},\"index\":{\"collections\":\"Colecciones\",\"header\":{\"collection\":\"T\u00EDtulo\",\"pages\":\"P\u00E1ginas\"},\"latest_editions\":\"\u00DAltimas ediciones\",\"new\":\"Nueva\",\"title\":\"CMS\",\"view_collection\":\"Ver colecci\u00F3n\"},\"new_modal\":{\"title\":\"Nueva colecci\u00F3n\"},\"show\":{\"configuration\":\"Configuraci\u00F3n\",\"file_attachments\":{\"created_at\":\"Creado\",\"file_name\":\"Nombre del documento\",\"view\":\"Ver documento\"},\"new_attachment\":\"Nuevo\",\"new_page\":\"Nueva\",\"pages\":{\"created_at\":\"Creada\",\"public\":\"Estado\",\"published_on\":\"Publicada\",\"updated_at\":\"Actualizada\",\"view\":\"Ver p\u00E1gina\",\"visibility_level\":{\"active\":\"Publicada\",\"archived\":\"Archivada\",\"draft\":\"Borrador\"}}},\"update\":{\"success\":\"La colecci\u00F3n se ha actualizado correctamente.\"}},\"content_blocks\":{\"create\":{\"success\":\"El bloque de contenido se ha creado correctamente\"},\"destroy\":{\"success\":\"El bloque de contenido se ha eliminado correctamente\"},\"edit\":{\"title\":\"Editar bloque\"},\"form\":{\"add_child\":\"A\u00F1adir columna\",\"fields\":\"Columnas\",\"title\":\"Nombre del bloque\"},\"new\":{\"title\":\"Agregar bloque\"},\"update\":{\"success\":\"El bloque de contenido se ha actualizado correctamente\"}},\"custom_fields\":{\"custom_fields\":{\"create\":{\"success\":\"Campo personalizado creado correctamente\"},\"date_options\":{\"date\":\"Fecha\",\"datetime\":\"Fecha y hora\",\"type\":\"Tipo\"},\"destroy\":{\"failed\":\"Ha habido un error que ha impedido eliminar el campo personalizado\",\"success\":\"Campo personalizado eliminado correctamente\"},\"edit\":{\"instance_title\":\"Editar %{field_name} de %{instance_name}\",\"title\":\"Editar %{name}\"},\"form\":{\"confirm\":\"\u00BFEst\u00E1s seguro?\",\"crop\":\"Recortar\",\"multiple\":\"M\u00FAltiple\",\"type\":\"Opciones de contenido\"},\"index\":{\"instance_title\":\"Campos personalizados de %{instance_name}\",\"localized_custom_fields\":\"Campos traducibles\",\"new\":\"A\u00F1adir nuevo campo\",\"not_localized_custom_fields\":\"Campos no traducibles\",\"title\":\"Campos personalizados\"},\"new\":{\"instance_title\":\"Nuevo campo de %{instance_name}\",\"title\":\"Nuevo campo\"},\"new_option\":{\"cancel_new_option\":\"Cancelar\",\"create\":\"Crear opci\u00F3n\",\"new\":\"Nueva opci\u00F3n\"},\"numeric_options\":{\"currency\":\"Monetaria\",\"generic\":\"Gen\u00E9rica\",\"unit_type\":\"Tipo de unidad\"},\"options_form\":{\"add_option\":\"A\u00F1adir opci\u00F3n\"},\"plugin\":{\"budgets\":\"Presupuestos\",\"progress\":\"Progreso\",\"table\":\"Tabla\",\"type\":\"Tipo\"},\"plugin_configuration_form\":{\"configuration\":\"Configuraci\u00F3n\"},\"update\":{\"success\":\"Campo personalizado actualizado correctamente\"},\"vocabulary_select\":{\"vocabulary\":\"Vocabulario de opciones\"},\"vocabulary_type_select\":{\"multiple_select\":\"Selecci\u00F3n m\u00FAltiple\",\"single_select\":\"Selecci\u00F3n \u00FAnica\",\"tags\":\"Tags\",\"type\":\"Tipo\"}},\"forms\":{\"new_gallery_image\":{\"add_item\":\"A\u00F1adir imagen\",\"cancel_new_item\":\"Cancelar\"}},\"module_resources\":{\"index\":{\"custom_fields_for_instances_of\":\"Campos personalizados para instancias de %{name}\",\"empty\":\"De momento no hay ning\u00FAn modelo con campos personalizados habilitados\"}}},\"dynamic_content\":{\"form\":{\"add_child\":\"A\u00F1adir nuevo registro\",\"add_content_block\":\"A\u00F1adir nuevo bloque\",\"add_record\":\"A\u00F1adir\",\"attachment\":\"Adjunto\",\"attachment_file\":\"Archivo adjunto\",\"cancel_record\":\"Cancelar\",\"delete_content_block\":\"Eliminar bloque\",\"delete_content_block_confirm\":\"\u00BFEst\u00E1s seguro de querer eliminar este bloque?\",\"download_attachment\":\"Descargar adjunto\",\"edit_content_block\":\"Editar\",\"remove_attachment\":\"Eliminar adjunto\",\"save_record\":\"Guardar\"}},\"ordered_terms\":{\"create\":{\"success\":\"El t\u00E9rmino se ha creado correctamente.\"},\"destroy\":{\"destroy_failed\":\"El t\u00E9rmino no ha podido ser eliminado: %{validation_errors}\",\"success\":\"El t\u00E9rmino ha sido eliminado correctamente.\"},\"edit_modal\":{\"title\":\"Editar %{term}\"},\"form\":{\"placeholders\":{\"description\":\"Descripci\u00F3n del t\u00E9rmino\",\"external_id\":\"ID001\",\"name\":\"Nombre del t\u00E9rmino\",\"slug\":\"termino\"}},\"index\":{\"collapse_all\":\"Plegar todo\",\"explore\":\"Explora\",\"new\":\"Nuevo\",\"open_all\":\"Desplegar todo\",\"title\":\"T\u00E9rminos de %{vocabulary}\"},\"new_modal\":{\"title\":\"Nuevo t\u00E9rmino\"},\"terms_tree\":{\"delete_confirm\":\"\u00BFEst\u00E1s seguro? Esta operaci\u00F3n no es reversible\"},\"update\":{\"success\":\"El t\u00E9rmino se ha actualizado correctamente.\"}},\"terms\":{\"create\":{\"success\":\"El t\u00E9rmino se ha creado correctamente.\"},\"destroy\":{\"destroy_failed\":\"No puedes borrar un t\u00E9rmino mientras tenga elementos asociados.\",\"success\":\"El t\u00E9rmino ha sido eliminado correctamente.\"},\"edit\":{\"edit\":\"Editar %{term}\"},\"form\":{\"placeholders\":{\"description\":\"El caballo es un mam\u00EDfero herb\u00EDvoro\",\"name\":\"Caballo\",\"slug\":\"reino-animal-caballo\"}},\"index\":{\"delete_confirm\":\"\u00BFEst\u00E1s seguro? Esta operaci\u00F3n no es reversible\",\"header\":{\"description\":\"Descripci\u00F3n\",\"level\":\"Nivel\",\"name\":\"Nombre\",\"parent\":\"Padre\"},\"new\":\"Nuevo\",\"title\":\"T\u00E9rminos de %{vocabulary}\"},\"new\":{\"new\":\"Nuevo T\u00E9rmino\"},\"update\":{\"success\":\"El t\u00E9rmino se ha actualizado correctamente.\"}},\"vocabularies\":{\"create\":{\"success\":\"El vocabulario se ha creado correctamente.\"},\"destroy\":{\"destroy_failed\":\"El vocabulario no ha podido ser eliminado porque est\u00E1 siendo utilizado por alguna entidad\",\"success\":\"El vocabulario ha sido eliminado correctamente.\"},\"edit\":{\"edit\":\"Editar %{vocabulary}\"},\"edit_modal\":{\"title\":\"Editar %{vocabulary}\"},\"form\":{\"placeholders\":{\"name\":\"Reino animal\",\"slug\":\"reino_animal\"}},\"index\":{\"delete_confirm\":\"Seguro? Esta operaci\u00F3n no tiene marcha atr\u00E1s.\",\"header\":{\"name\":\"Tema\",\"terms\":\"T\u00E9rminos\"},\"new\":\"Nuevo\",\"title\":\"Vocabularios\",\"view_vocabulary\":\"Ver t\u00E9rminos\"},\"new\":{\"new\":\"Nuevo Vocabulario\"},\"new_modal\":{\"title\":\"Nuevo Vocabulario\"},\"show\":{\"created_at\":\"Creaci\u00F3n\",\"terms\":\"T\u00E9rminos\",\"terms_count\":\"%{count} t\u00E9rminos\"},\"update\":{\"success\":\"El vocabulario se ha actualizado correctamente.\"}}},\"gobierto_core\":{\"site_templates\":{\"create\":{\"success\":\"La plantilla se ha editado correctamente.\"},\"destroy\":{\"success\":\"La plantilla se ha borrado correctamente.\"},\"update\":{\"success\":\"La plantilla se ha actualizado correctamente.\"}},\"templates\":{\"edit\":{\"preview\":\"Previsualizar\",\"reset\":\"Resetear\",\"reset_title\":\"Descartar cambios guardados, y volver a la plantilla original (ojo, no podr\u00E1s recuperar la plantilla que hayas personalizado)\",\"save\":\"Guardar\"},\"index\":{\"edit_templates\":\"Editar plantillas\"}}},\"gobierto_dashboards\":{\"dashboards\":{\"destroy\":{\"success\":\"El dashboard ha sido eliminado correctamente.\"},\"list_modal\":{\"add\":\"A\u00F1adir\",\"new\":\"\u00BFNecesitas crear un nuevo dashboard?\",\"no_dashboards\":\"No hay dashboards\",\"title\":\"Selecciona el dashboard donde incluir este indicador\"}}},\"gobierto_data\":{\"configuration\":{\"settings\":{\"edit\":{\"api_settings\":\"Configuraci\u00F3n de la API\",\"db_config_placeholder\":\"{\\\\\"pool\\\\\":5, \\\\\"adapter\\\\\":\\\\\"postgresql\\\\\", \\\\\"database\\\\\":\\\\\"gobierto_test\\\\\", \\\\\"encoding\\\\\":\\\\\"unicode\\\\\", \\\\\"password\\\\\":\\\\\"gobierto\\\\\", \\\\\"username\\\\\":\\\\\"gobierto\\\\\"}\",\"frontend\":\"Interfaz p\u00FAblica\",\"frontend_enabled\":\"Visible\",\"title\":\"Configuraci\u00F3n\",\"update\":\"Actualizar\"},\"title\":\"Preferencias\",\"update\":{\"success\":\"Configuraci\u00F3n guardada correctamente\"}}},\"datasets\":{\"create\":{\"success\":\"El conjunto de datos ha sido creado correctamente.\"},\"destroy\":{\"success\":\"El conjunto de datos ha sido eliminado correctamente.\"},\"form\":{\"placeholders\":{\"name\":\"Habitantes\",\"slug\":\"habitantes\"}},\"index\":{\"header\":{\"name\":\"Nombre\",\"status\":\"Estado\",\"table_name\":\"Nombre de la tabla\"},\"new\":\"Nuevo\",\"title\":\"Conjuntos de datos\",\"view_dataset\":\"Ver conjunto de datos\"},\"new\":{\"title\":\"Nuevo conjunto de datos\"},\"update\":{\"success\":\"El conjunto de datos ha sido actualizado correctamente.\"}}},\"gobierto_investments\":{\"projects\":{\"create\":{\"success\":\"El proyecto ha sido creado correctamente.\"},\"destroy\":{\"success\":\"El proyecto ha sido eliminado correctamente.\"},\"form\":{\"placeholders\":{\"external_id\":\"ID001\",\"title\":\"Centro deportivo\"}},\"index\":{\"header\":{\"external_id\":\"ID externo\",\"title\":\"T\u00EDtulo\"},\"new\":\"Nuevo\",\"title\":\"Proyectos\",\"view_project\":\"Ver proyecto\"},\"new\":{\"title\":\"Nuevo proyecto\"},\"update\":{\"success\":\"El proyecto ha sido actualizado correctamente.\"}}},\"gobierto_observatory\":{\"configuration\":{\"settings\":{\"edit\":{\"title\":\"Configuraci\u00F3n del Observatorio\",\"update\":\"Actualizar\"},\"title\":\"Preferencias\",\"update\":{\"error\":\"Se ha producido un error al actualizar la configuraci\u00F3n: %{validation_errors}\",\"success\":\"Configuraci\u00F3n guardada correctamente\"}}}},\"gobierto_people\":{\"configuration\":{\"settings\":{\"edit\":{\"agendas\":\"Agendas\",\"blogs\":\"Blogs\",\"departments\":\"Departamentos\",\"gifts\":\"Obsequios\",\"interest_groups\":\"Grupos de inter\u00E9s\",\"invitations\":\"Invitaciones\",\"officials\":\"Personas\",\"placeholders\":{\"home_text_ca\":\"Texto home catal\u00E1n\",\"home_text_en\":\"Texto home ingl\u00E9s\",\"home_text_es\":\"Texto home espa\u00F1ol\"},\"political_groups_vocabulary\":\"Vocabulario de grupos pol\u00EDticos\",\"statements\":\"Declaraciones\",\"submodules_enabled\":\"Subm\u00F3dulos habilitados\",\"trips\":\"Viajes\",\"update\":\"Actualizar\"},\"update\":{\"error\":\"Ha ocurrido un error guardando las preferencias\",\"success\":\"Preferencias actualizadas correctamente\"}},\"title\":\"Configuraci\u00F3n\"},\"people\":{\"create\":{\"success_html\":\"El perfil ha sido creado correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer la persona\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Editar persona\"},\"form\":{\"avatar_file_constraints\":\"Avatar de usuario (fichero de 500x500)\",\"bio_file_constraints\":\"Adjuntar fichero (PDF)\",\"category\":{\"executive\":\"Directivo\",\"politician\":\"Pol\u00EDtico\"},\"crop\":\"Recortar\",\"party\":{\"government\":\"Equipo de Gobierno\",\"opposition\":\"Oposici\u00F3n\"},\"placeholders\":{\"charge\":\"Alcalde\",\"email\":\"Correo-e\",\"name\":\"Rafael Garc\u00EDa\"}},\"index\":{\"configuration\":\"Configuraci\u00F3n\",\"drag_to_sort\":\"Arrastra para ordenar\",\"header\":{\"charge\":\"Position\",\"events\":\"Eventos\",\"person\":\"Persona\",\"posts\":\"Posts\",\"statements\":\"Declaraciones\",\"status\":\"Estado\"},\"new\":\"Nueva persona\",\"no_permissions\":\"No tienes permisos para editar esta persona. Si la necesitas editar, habla con tu administrador\",\"title\":\"Personas\",\"view_person\":\"Ver persona\",\"visibility_level\":{\"active\":\"Publicada\",\"draft\":\"Borrador\"}},\"navigation\":{\"agenda\":\"Agenda\",\"person\":\"Persona\",\"posts\":\"Blog\",\"statements\":\"Declaraciones\"},\"new\":{\"title\":\"Nueva persona\"},\"person_events\":{\"index\":{\"title\":\"Agenda\"}},\"person_posts\":{\"create\":{\"success_html\":\"El post ha sido creado correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el post\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Editar post\"},\"form\":{\"placeholders\":{\"tags\":\"personal, sobre mi, mi carrera\",\"title\":\"Sobre m\u00ED\"}},\"index\":{\"header\":{\"date\":\"Fecha\",\"status\":\"Estado\",\"tags\":\"Tags\",\"title\":\"T\u00EDtulo\"},\"new\":\"Nuevo post\",\"title\":\"Blog\",\"view_post\":\"Ver post\",\"visibility_level\":{\"active\":\"Publicado\",\"draft\":\"Borrador\"}},\"new\":{\"title\":\"Nuevo post\"},\"update\":{\"success_html\":\"El post ha sido actualizado. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el post\\\\u003c/a\\\\u003e.\"}},\"person_statements\":{\"create\":{\"success_html\":\"La declaraci\u00F3n ha sido creada correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer la declaraci\u00F3n\\\\u003c/a\\\\u003e.\"},\"edit\":{\"title\":\"Editar declaraci\u00F3n\"},\"form\":{\"placeholders\":{\"title\":\"Declaraci\u00F3n de Bienes y Actividades\"}},\"index\":{\"header\":{\"date\":\"Fecha\",\"statement\":\"Declaraci\u00F3n\",\"status\":\"Estado\"},\"new\":\"Nueva declaraci\u00F3n\",\"title\":\"Declaraciones\",\"view_statement\":\"Ver declaraci\u00F3n\",\"visibility_level\":{\"active\":\"Publicada\",\"draft\":\"Borrador\"}},\"new\":{\"title\":\"Nueva declaraci\u00F3n\"},\"update\":{\"success_html\":\"La declaraci\u00F3n ha sido actualizada. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer la declaraci\u00F3n\\\\u003c/a\\\\u003e.\"}},\"update\":{\"success_html\":\"El perfil ha sido actualizado. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer la persona\\\\u003c/a\\\\u003e.\"}},\"settings\":{\"title\":\"Preferencias\"}},\"gobierto_plans\":{\"admin_mailer\":{\"project_attributes_changed\":{\"bye\":\"Saludos\",\"edition_change\":\"el contenido\",\"hi\":\"Hola\",\"intro_html\":\"%{author_name} ha actualizado %{updates_list} en el proyecto %{project_link} del plan %{plan_title}.\",\"minor_change_notice\":\"El cambio se ha guardado como menor con lo que no se ha creado una nueva versi\u00F3n.\",\"moderation_stage_change\":\"el estado de moderaci\u00F3n a %{value}\",\"subject\":\"Se ha modificado un proyecto en el plan %{plan_title} de %{site_name}\",\"subject_with_changes\":\"Se ha modificado un proyecto en el plan %{plan_title} de %{site_name} a %{changes}\",\"visibility_level_change\":\"el estado de publicaci\u00F3n a %{value}\",\"visibility_levels\":{\"draft\":\"No publicado\",\"published\":\"Publicado\"}},\"project_created\":{\"bye\":\"Saludos\",\"hi\":\"Hola\",\"intro_html\":\"%{author_name} ha creado un nuevo proyecto %{project_link} en el plan %{plan_title}\",\"subject\":\"Se ha creado un proyecto en el plan %{plan_title} de %{site_name}\"},\"project_deleted\":{\"bye\":\"Saludos\",\"hi\":\"Hola\",\"intro_html\":\"%{author_name} ha eliminado el proyecto %{project_name} del plan %{plan_link}\",\"subject\":\"Se ha eliminado un proyecto del plan %{plan_title} de %{site_name}\"}},\"categories\":{\"calculated_headers\":{\"items\":\"\u00CDtems\",\"progress\":\"Progreso\"},\"create\":{\"success\":\"La categor\u00EDa se ha creado correctamente.\"},\"destroy\":{\"destroy_failed\":\"La categor\u00EDa no ha podido ser eliminada porque tiene proyectos u otros recursos asociados.\",\"success\":\"La categor\u00EDa ha sido eliminada correctamente.\"},\"plan_summary\":{\"global_progress\":\"Progreso global\",\"projects\":\"Proyectos\"},\"update\":{\"success\":\"La categor\u00EDa se ha actualizado correctamente.\"}},\"dashboards\":{\"index\":{\"headers\":{\"status\":\"Visibilidad\",\"title\":\"T\u00EDtulo\",\"updated\":\"Actualizado\"},\"new\":\"Nuevo\",\"visibility_level\":{\"active\":\"P\u00FAblico\",\"draft\":\"Privado\"}}},\"plan_types\":{\"create\":{\"success\":\"El tipo de plan ha sido creado correctamente.\"},\"destroy\":{\"has_items\":\"No puedes archivar un tipo de plan mientras tenga elementos asociados.\",\"success\":\"El tipo de plan ha sido eliminado correctamente\"},\"edit\":{\"title\":\"Editar tipo de plan\"},\"form\":{\"placeholders\":{\"name\":\"Nombre del tipo de plan\",\"slug\":\"acerca-de-este-tipo-de-plan\"}},\"index\":{\"delete\":\"Borrar\",\"header\":{\"type\":\"Tipo\"},\"new\":\"Nuevo\",\"title\":\"Tipos de planes\"},\"new\":{\"title\":\"Nuevo tipo de plan\"},\"update\":{\"success\":\"El tipo de plan ha sido actualizado correctamente.\"}},\"plans\":{\"create\":{\"success_html\":\"El plan ha sido creado correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el plan\\\\u003c/a\\\\u003e.\"},\"delete_contents\":{\"success\":\"Los proyectos del plan han sido correctamente eliminados\",\"term_deletion_failed_html\":\"El t\u00E9rmino \\\\\"%{term}\\\\\" del vocabulario \\\\\"%{vocabulary}\\\\\" no puede ser borrado: %{message}\"},\"destroy\":{\"success\":\"El plan ha sido eliminado correctamente.\"},\"edit\":{\"title\":\"Configuraci\u00F3n\"},\"form\":{\"delete_contents\":\"Borrar proyectos de este plan\",\"delete_contents_confirm\":\"Confirma que quieres borrar los proyectos de este plan\",\"export_csv\":\"Exportar a CSV\",\"import_csv\":\"Importar desde CSV\",\"indicators\":\"Indicadores\",\"placeholders\":{\"configuration_data\":\"{ \\\\\"open_node\\\\\": true }\",\"css\":\".gobierto_planification section.level_0 .cat_1 { background-color: rgba(0, 191, 255, 0.95); }\",\"footer\":\"Pie de p\u00E1gina del plan\",\"introduction\":\"Introducci\u00F3n del plan\",\"slug\":\"acerca-de-este-plan\",\"title\":\"T\u00EDtulo del plan\",\"year\":2018},\"projects\":\"Proyectos\",\"publish_last_version_automatically\":\"Publicar las versiones nuevas de los proyectos autom\u00E1ticamente\"},\"import_csv\":{\"defaults\":{\"category\":{\"one\":\"elemento de nivel %{level}\",\"other\":\"elementos de nivel %{level}\"},\"project\":{\"one\":\"proyecto\",\"other\":\"proyectos\"}},\"latest_update\":\"\u00DAltima actualizaci\u00F3n: %{datetime}\",\"no_data\":\"Ning\u00FAn dato cargado todav\u00EDa\",\"there_are\":\"Hay %{info}\",\"title\":\"Importar CSV\"},\"import_csv_form\":{\"confirm_import\":\"\u00BFEst\u00E1s seguro?\",\"custom_fields_table_plugin\":\"Campos personalizados (plugin de tabla)\",\"disable_with\":\"Cargando...\",\"more_info_html\":\"Para obtener m\u00E1s informaci\u00F3n visita la documentaci\u00F3n de c\u00F3mo \\\\u003ca href=\\\\\"%{url}\\\\\" target=\\\\\"_blank\\\\\"\\\\u003eImportar datos de un plan\\\\u003c/a\\\\u003e.\",\"plan_content\":\"Contenido del plan\",\"submit\":\"Importar desde fichero CSV\",\"vocabulary_used_by_other_plans\":\"El vocabulario configurado para este plan ya est\u00E1 configurado para alg\u00FAn otro. Por favor, crea un vocabulario nuevo para este plan o elim\u00EDnalo de la configuraci\u00F3n de los otros planes que lo est\u00E9n usando, dado que se borrar\u00EDan sus datos con la importaci\u00F3n.\",\"warning\":\"\\\\u003cstrong\\\\u003eAviso\\\\u003c/strong\\\\u003e Al importar desde un archivo CSV, si el plan est\u00E1 vac\u00EDo se a\u00F1adir\u00E1n t\u00E9rminos a los vocabularios asociados con categor\u00EDas y campos personalizados a medida que se encuentren, pero si el plan ya contiene datos, al tratarse de una actualizaci\u00F3n, se producir\u00E1n errores para los t\u00E9rminos que no se encuentren en los respectivos vocabularios.\"},\"import_data\":{\"missing_file\":\"Es necesario seleccionar un fichero para la importaci\u00F3n.\",\"success_html\":\"Datos importados correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el plan\\\\u003c/a\\\\u003e.\"},\"index\":{\"header\":{\"elements\":\"Elementos\",\"status\":\"Estado\",\"title\":\"T\u00EDtulo\",\"type\":\"Tipo\",\"year\":\"A\u00F1o\"},\"new\":\"Nuevo\",\"title\":\"Planes\",\"types\":\"Tipos\",\"view_plan\":\"Ver plan\",\"visibility_level\":{\"draft\":\"Borrador\",\"published\":\"Publicado\"}},\"new\":{\"title\":\"Nuevo plan\"},\"recover\":{\"success\":\"El plan ha sido recuperado correctamente.\"},\"update\":{\"success_html\":\"El plan ha sido actualizado correctamente. \\\\u003ca href=\\\\\"%{link}\\\\\"\\\\u003eVer el plan\\\\u003c/a\\\\u003e.\"}},\"projects\":{\"create\":{\"success\":\"El proyecto ha sido creado correctamente.\"},\"destroy\":{\"success\":\"El proyecto ha sido eliminado correctamente.\"},\"filter_form\":{\"author\":\"Autor\",\"category\":\"Categor\u00EDa\",\"clear_filters\":\"Limpiar filtros\",\"filter\":\"Filtrar\",\"interval\":\"Rango de fechas\",\"progress\":\"Progreso\",\"search\":\"Busca...\",\"status\":\"Estado\",\"submit\":\"Filtrar\"},\"filters_row\":{\"all\":\"Todos\",\"moderation_stage\":\"Moderaci\u00F3n\",\"moderation_stage_value\":{\"approved\":\"Aprobados\",\"blank\":\"Sin moderaci\u00F3n\",\"in_review\":\"En revisi\u00F3n\",\"rejected\":\"Rechazados\",\"sent\":\"Enviados\",\"unsent\":\"No enviados\"},\"total\":\"Total\",\"versions_visibility_level\":\"Publicaci\u00F3n\",\"versions_visibility_level_value\":{\"draft\":\"Borrador\",\"published_up_to_date\":\"Publicado actualizado\",\"published_with_unpublished_changes\":\"Publicado con cambios sin publicar\"}},\"find_versioned_project\":{\"unavailable_version\":\"Versi\u00F3n no disponible.\"},\"form\":{\"button\":{\"add_dashboard\":\"A\u00F1adir a un dashboard\"},\"placeholders\":{\"name\":\"T\u00EDtulo del proyecto\"}},\"index\":{\"headers\":{\"progress\":\"Progreso\",\"project\":\"Proyecto\",\"status\":\"Estado\",\"updated\":\"Actualizado\",\"visibility_level\":\"Publicaci\u00F3n\"},\"new\":\"Nuevo\",\"title\":\"Proyectos de %{name}\",\"view\":\"Ver item\"},\"new\":{\"title\":\"Nuevo proyecto\"},\"publish\":{\"confirm\":\"Vas a publicar este proyecto, por lo que cualquier usuario podr\u00E1 verlo.\",\"error\":\"El proyecto no se ha podido publicar.\",\"success\":\"El proyecto ha sido publicado correctamente.\"},\"send\":{\"confirm\":\"Vas a enviar este proyecto a un moderador para su validaci\u00F3n.\"},\"unpublish\":{\"error\":\"El proyecto no se ha podido despublicar.\",\"success\":\"El proyecto ha sido despublicado correctamente.\"},\"update\":{\"moderation_reset\":\"Debido a que has modificado el proyecto y no tienes permisos de moderaci\u00F3n su estado ha sido movido a No enviado.\",\"no_changes\":\"No se han producido cambios en el proyecto. Manteniendo la versi\u00F3n actual.\",\"success\":\"El proyecto ha sido actualizado correctamente.\",\"suggest_unpublish_html\":\"El proyecto est\u00E1 sin aprobar pero publicado. \\\\u003ca rel=\\\\\"nofollow\\\\\" data-method=\\\\\"post\\\\\" href=\\\\\"%{url}\\\\\"\\\\u003eDespublicar\\\\u003c/a\\\\u003e.\"}},\"shared\":{\"navigation\":{\"configuration_tab\":\"Configuraci\u00F3n\",\"dashboards_tab\":\"Dashboards\",\"plan_terms_tab\":\"Plan\",\"projects_tab\":\"Proyectos\"}}},\"gobierto_visualizations\":{\"configuration\":{\"settings\":{\"edit\":{\"title\":\"Configuraci\u00F3n de las Visualizaciones\",\"update\":\"Actualizar\"},\"title\":\"Preferencias\",\"update\":{\"error\":\"Se ha producido un error al actualizar la configuraci\u00F3n: %{validation_errors}\",\"success\":\"Configuraci\u00F3n guardada correctamente\"}}}},\"layouts\":{\"application\":{\"admin_dropdown\":{\"account\":\"Tu cuenta\",\"sign_out\":\"Cerrar sesi\u00F3n\"},\"calendars\":\"Agendas\",\"cms\":\"CMS\",\"collapse_menu\":\"Colapsar men\u00FA\",\"custom_fields\":\"Campos personalizados\",\"dirty_forms\":{\"message\":\"Hay cambios sin guardar. \u00BFEst\u00E1s seguro de querer continuar?\"},\"edit_site\":\"Personalizar sitio\",\"file_attachments\":\"Documentos\",\"global\":\"General\",\"hey_admin\":\"Hola, %{admin_name}\",\"manage_sites\":\"Gestionar sites\",\"modules\":{\"budgets\":\"Presupuestos\",\"data\":\"Datos\",\"investments\":\"Inversiones\",\"observatory\":\"Observatorio\",\"people\":\"Altos cargos y Agendas\",\"plans\":\"Planes\",\"visualizations\":\"Visualizaciones\"},\"notifications\":\"Notificaciones\",\"site_network\":\"Red\",\"templates\":\"Plantillas\",\"users\":\"Usuarios\",\"view_documentation\":\"Ver documentaci\u00F3n\",\"view_item\":\"Ver \u00EDtem\",\"view_site\":\"Ver site\",\"vocabularies\":\"Vocabularios\"}},\"module_helper\":{\"not_enabled\":\"No est\u00E1s autorizado a realizar esta acci\u00F3n\"},\"session_helper\":{\"already_signed_in\":\"Ya est\u00E1s identificado\",\"not_authorized\":\"No est\u00E1s autorizado a realizar esta acci\u00F3n\",\"not_signed_in\":\"Necesitas estar identificado para continuar\"},\"sessions\":{\"create\":{\"error\":\"Los datos que has introducido no parecen ser v\u00E1lidos. Por favor, int\u00E9ntalo de nuevo.\",\"success\":\"Sesi\u00F3n iniciada correctamente\"},\"destroy\":{\"success\":\"Sesi\u00F3n cerrada correctamente\"},\"form\":{\"email\":\"Email\",\"password\":\"Contrase\u00F1a\",\"submit\":\"Enviar\"},\"new\":{\"forgot_your_password\":\"\u00BFOlvidaste tu contrase\u00F1a?\",\"title\":\"Iniciar sesi\u00F3n\"}},\"shared\":{\"admin_widget_attachment\":{\"add_new_document\":\"A\u00F1ade nuevo documento\",\"attachments\":\"Documentos\",\"copy_to_clipboard\":\"Copiar URL\",\"description\":\"Descripci\u00F3n\",\"document\":\"Documento\",\"document_title\":\"T\u00EDtulo del documento\",\"drag_document_here\":\"Arrastra y suelta el documento aqu\u00ED\",\"edit_document\":\"Editar documento\",\"include_file\":\"Incluir archivo\",\"include_in_text\":\"Incluir archivo en el texto\",\"latest_documents\":\"\u00DAltimos documentos a\u00F1adidos\",\"no_docs\":\"No hay documentos\",\"or\":\"o\",\"save\":\"Guardar\",\"search\":\"Buscar\",\"select_file\":\"Selecciona un archivo del disco duro\"},\"archive\":{\"confirm\":\"\u00BFSeguro que quieres archivar este elemento? No se mostrar\u00E1 en el front ni en listas como esta. Usted podr\u00E1 recuperarlo.\",\"element\":\"Archivar este elemento\",\"elements\":\"Elementos archivados\"},\"draft\":\"Borrador\",\"form_locale_switchers\":{\"define_content_in_locale\":\"Define el contenido en su versi\u00F3n %{locale_name}\",\"translate\":\"Traducir\"},\"moderation_save_widget\":{\"change_moderation_status\":\"Cambiar estado de moderaci\u00F3n\",\"confirm\":\"\u00BFEst\u00E1s seguro?\",\"confirm_moderation_blocked_update\":\"\u00BFEst\u00E1s seguro? Si guardas modificaciones en este proyecto el estado se actualizar\u00E1 a No enviado.\",\"edit_version\":\"Editando versi\u00F3n\",\"last_versions\":\"\u00DAltimas versiones\",\"minor_change\":\"Cambio menor (no guarda versi\u00F3n)\",\"moderation\":\"Moderaci\u00F3n\",\"moderation_info\":{\"new\":\"Una vez guardes tu contenido, podr\u00E1s enviarlo a moderaci\u00F3n.\",\"publicable\":\"Haz click en Publicar para que esta versi\u00F3n sea visible publicamente.\",\"publicable_html\":\"Haz click en Publicar para que esta versi\u00F3n sea visible publicamente.\",\"published\":\"La versi\u00F3n actual es la que est\u00E1 publicada.\",\"published_html\":\"La versi\u00F3n actual es la que est\u00E1 publicada. \\\\u003ca rel=\\\\\"nofollow\\\\\" data-method=\\\\\"post\\\\\" href=\\\\\"%{url}\\\\\"\\\\u003eDespublicar\\\\u003c/a\\\\u003e.\",\"rejected\":\"La versi\u00F3n est\u00E1 rechazada.\",\"sent\":\"Tu contenido ha sido enviado para revisi\u00F3n. Recibir\u00E1s una notificaci\u00F3n cuando se apruebe o te soliciten cambios.\",\"unsent\":\"Cuando tu contenido est\u00E9 listo para ser revisado por un moderador, haz click en Enviar.\"},\"moderation_status\":{\"approved\":\"Aprobado\",\"in_review\":\"En revisi\u00F3n\",\"rejected\":\"Rechazado\",\"sent\":\"Enviado\",\"unsent\":\"No enviado\"},\"new_version\":\"Nueva (no guardada)\",\"preview\":\"Previsualizar\",\"previous_versions\":\"Versiones anteriores\",\"publication_status\":{\"approved\":\"Publicada\",\"not_published\":\"No publicada\"},\"publish\":\"Publicar\",\"publish_last_version_automatically\":\"Publica autom\u00E1ticamente esta versi\u00F3n\",\"publish_status\":\"Estado\",\"published_version\":\"Versi\u00F3n publicada\",\"published_version_blank\":\"sin publicar todav\u00EDa\",\"save\":\"Guardar\",\"see_all\":\"ver todas\",\"send\":\"Enviar\",\"unpublish\":\"Despublicar\"},\"module\":\"M\u00F3dulo\",\"recover\":{\"confirm\":\"Si recuperas un elemento, se volver\u00E1 a listar de nuevo.\",\"element\":\"Recuperar elemento\"},\"resource_admin_permissions_button\":{\"permissions\":\"Permisos\"},\"save_widget\":{\"save\":\"Guardar\",\"visibility_level\":{\"active\":\"P\u00FAblico\",\"draft\":\"Borrador\",\"published\":\"P\u00FAblico\"}}},\"sites\":{\"create\":{\"success\":\"El sitio se ha creado correctamente\"},\"destroy\":{\"success\":\"El sitio se ha eliminado correctamente\"},\"edit\":{\"title\":\"Personalizar sitio\"},\"form\":{\"admin_authentication_modules\":\"Estrategias de autenticaci\u00F3n para admins\",\"authentication_modules\":\"Estrategias de autenticaci\u00F3n para usuarios\",\"hints\":{\"domain\":{\"a_record\":\"Entrada A a %{target}\",\"cname_record\":\"Entrada CNAME a %{target}\",\"if_domain\":\"Si es un dominio\",\"if_subdomain\":\"Si es un subdominio\",\"instructions\":\"Importante: este dominio deber\u00E1 estar creado previamente para que el sitio funcione correctamente.\"},\"organization_id_html\":\"Puedes buscar el c\u00F3digo \\\\u003ca href=\\\\\"https://populatetools.github.io/ine-places/places.html\\\\\" target=\\\\\"_blank\\\\\"\\\\u003een esta tabla\\\\u003c/a\\\\u003e.\"},\"modules_enabled\":\"M\u00F3dulos activados para este sitio\",\"password\":\"Contrase\u00F1a\",\"placeholders\":{\"domain\":\"gobierto.burjassot.es\",\"google_analytics_id\":\"UA-000000-01\",\"name\":\"Ayuntamiento de Burjassot\",\"organization_name\":\"Burjassot\",\"populate_data_api_token\":\"Token de API de Populate Data\",\"reply_to_email\":\"contacto@correo.es\",\"title\":\"Transparencia y Participaci\u00F3n\"},\"registration\":\"Registro de usuarios\",\"registration_disabled\":\"Deshabilitar el registro (solo oculta los enlaces al registro/login)\",\"username\":\"Nombre de usuario\",\"visibility_level\":{\"active\":\"Publicado\",\"draft\":\"Borrador\"}},\"index\":{\"configuration\":\"Configuraci\u00F3n\",\"header\":{\"created_at\":\"Creado\",\"domain\":\"Dominio\",\"site\":\"Sitio\",\"status\":\"Estado\"},\"new\":\"Crear sitio\",\"title\":\"Sites\",\"view_site\":\"Ver sitio\"},\"new\":{\"title\":\"Crear sitio\"},\"pages\":\"P\u00E1ginas\",\"sections\":\"Secciones\",\"update\":{\"success\":\"El sitio se ha actualizado correctamente\"}},\"users\":{\"edit\":{\"title\":\"Editar Usuario\"},\"form\":{\"change_password\":\"Cambiar contrase\u00F1a\",\"password_block\":\"Contrase\u00F1a\",\"placeholders\":{\"email\":\"fgonzalez@gmail.com\",\"name\":\"Fernando Gonz\u00E1lez\"},\"resend_welcome_email\":\"Reenviar Email de bienvenida\",\"resend_welcome_email_notes\":\"con enlace para cambiar la contrase\u00F1a\"},\"index\":{\"admins_section\":\"Administradores\",\"census_configuration\":\"Censo\",\"header\":{\"created_at\":\"Creado\",\"email\":\"Email\",\"last_sign_in_at\":\"\u00DAltimo login\",\"user\":\"Usuario\",\"verified\":\"Verificado\"},\"title\":\"Usuarios\",\"users\":{\"one\":\"%{count} usuario\",\"other\":\"%{count} usuarios\"},\"users_confirmed\":{\"one\":\"%{count}% confirmado\",\"other\":\"%{count}% confirmados\"},\"users_verified\":{\"one\":\"%{count}% verificado\",\"other\":\"%{count}% verificados\"},\"view_user\":\"Ver Usuario\"},\"passwords\":{\"create\":{\"error\":\"Hubo un problema al cambiar la contrase\u00F1a del usuario\",\"success\":\"La contrase\u00F1a del usuario fue cambiada con \u00E9xito\"},\"form\":{\"submit\":\"Enviar\"},\"new\":{\"title\":\"Cambiar contrase\u00F1a de usuario\"}},\"session_information\":{\"created_at\":\"Creado\",\"last_sign_in\":\"\u00DAltimo login\",\"site\":\"Sitio\"},\"update\":{\"success\":\"El Usuario ha sido actualizado correctamente\"},\"welcome_messages\":{\"create\":{\"error\":\"El mensaje de bienvenida no pudo ser enviado. Por favor, int\u00E9ntalo de nuevo.\",\"success\":\"El mensaje de bienvenida se ha enviado\"}}},\"welcome\":{\"index\":{\"title\":\"Inicio\"}}},\"gobierto_attachments\":{\"events\":{\"gobierto_attachments_attachment_created\":\"Documento creado\",\"gobierto_attachments_attachment_updated\":\"Documento actualizado\"}},\"gobierto_budgets\":{\"budget_lines\":{\"explorer\":{\"examples\":\"Ejemplos\",\"expenses\":\"Gastos\",\"explore_the_detail\":\"Explora el detalle\",\"income\":\"Ingresos\",\"search\":\"Busca\",\"search_budget_line\":\"Busca una partida espec\u00EDfica\"},\"index\":{\"amount\":\"Cantidad\",\"budget_guide_pitch\":\"Consulta la Gu\u00EDa del Presupuesto\",\"budget_line\":\"Partida\",\"categories\":\"Categor\u00EDas presupuestarias\",\"custom\":\"Personalizada\",\"expense_in_what\":\"En qu\u00E9 se gasta\",\"expense_to_do_what\":\"Para qu\u00E9 se gasta\",\"help\":\"Te explicamos como funciona un presupuesto municipal\",\"income_from_what\":\"En qu\u00E9 se ingresa\",\"per_inhabitant\":\"Por habitante\",\"title\":\"Presupuestos municipales en %{year}\"},\"show\":{\"about_this_line\":\"Acerca de esta partida\",\"avg_province\":\"Media %{kind} provincial\",\"avg_province_tooltip\":\"Media de esta partida en los municipios de la provincia\",\"back_to_parent\":\"Volver a la partida padre\",\"budget_line_category\":\"Categor\u00EDa\",\"budget_line_percentage\":\"Porcentaje\",\"budget_line_value\":\"Cantidad\",\"budget_lines_distribution\":\"Distribuci\u00F3n de los gastos de esta partida\",\"current_amount\":\"Presupuesto actual\",\"current_amount_per_inhabitant\":\"Presupuesto actual / hab.\",\"evolution\":\"Evoluci\u00F3n\",\"give_your_opinion\":\"Opina sobre esta partida\",\"give_your_opinion_cta\":\"\u00BFEntiendes de qu\u00E9 va esta partida? \u00BFTe parece mucho, poco? Opina\",\"initial_estimate\":\"Presupuesto inicial\",\"last_year\":\"El a\u00F1o pasado %{value}\",\"no_description\":\"No hay una descripci\u00F3n asociada a esta partida.\",\"no_distribution\":\"No hay distribuci\u00F3n asociada a esta partida.\",\"no_more_descendants\":\"No hay m\u00E1s subpartidas\",\"not_available\":\"No disp.\",\"percentage\":\"% sobre el total del pres.\",\"percentage_tooltip\":\"Porcentaje del presupuesto total que supone esta partida\",\"planned\":\"presupuestado\",\"planned_female\":\"presupuestada\",\"planned_per_inhabitant\":\"Presupuesto inicial / hab.\",\"planned_per_inhabitant_tooltip\":\"Cantidad presupuestada dividida por el n\u00FAmero de habitantes\",\"planned_tooltip\":\"Cantidad presupuestada\",\"raise_hand\":\"Levanta la mano\",\"real_value\":\"El %{kind} real son %{value}\",\"real_vs_planned\":\"% ejecuci\u00F3n\",\"real_vs_planned_tooltip\":\"Porcentaje de la partida que se ha ejecutado\",\"sub_budget_lines\":\"Dentro de esta partida\",\"twitter_text_expense\":\"En @gobierto: Gasto municipal de %{name} en %{budget_line_name} para el %{year}\",\"twitter_text_income\":\"En @gobierto: Ingreso municipal de %{name} en %{budget_line_name} para el %{year}\",\"updated\":\"actualizado\",\"updated_female\":\"actualizada\",\"vs_previous_year\":\"vs. ejercicio anterior\",\"vs_previous_year_tooltip\":\"Comparaci\u00F3n con los datos del ejercicio anterior\"}},\"budgets\":{\"guide\":{\"budget_execution\":\"La ejecuci\u00F3n presupuestaria\",\"budget_execution_p1_html\":\"Aprobar un presupuesto no significa que se quede escrito en piedra. A lo largo del a\u00F1o surgen imprevistos que cambian la cantidad o la finalidad de los gastos. Estos cambios se anotan en otro documento: la \\\\u003ca href=/presupuestos/ejecucion/%{year}\\\\\"\\\\u003eejecuci\u00F3n presupuestaria\\\\u003c/a\\\\u003e.\",\"budget_execution_p2\":\"Para saber si nuestro ayuntamiento ha planificado bien las cuentas s\u00F3lo tenemos que comparar el presupuesto y la ejecuci\u00F3n: \u00BFHa gastado m\u00E1s de lo presupuestado, le ha sobrado dinero o se ha ajustado a lo previsto?.\",\"capital_income\":\"Ingresos de capital\",\"capital_income_p1\":\"Proceden de la venta de propiedades municipales como solares o fincas. Tambi\u00E9n pueden proceder de fondos europeos.\",\"classification\":\"Clasificaci\u00F3n presupuestaria\",\"classification_p1\":\"Todo presupuesto tiene ingresos y los gastos. Los ingresos est\u00E1n clasificados de una manera econ\u00F3mica, que establece su origen. Los gastos, por otra parte, son funcionales y econ\u00F3micos.\",\"debt\":\"Deuda viva: Cu\u00E1nto debe tu municipio\",\"description\":\"El presupuesto municipal es el documento que explica c\u00F3mo se gestiona el dinero p\u00FAblico durante un a\u00F1o. Aqu\u00ED te explicamos los conceptos m\u00E1s importantes para que no te pierdas en su lectura.\",\"economic\":\"Gasto econ\u00F3mico\",\"economic_p1\":\"Indica la naturaleza del gasto. Por ejemplo, \u201CGastos de personal\u201D, que engloba los sueldos de todos los funcionarios seg\u00FAn su categor\u00EDa. Es similar a la clasificaci\u00F3n econ\u00F3mica de los ingresos.\",\"economic_p2\":\"En un presupuesto oficial, los apartados principales se llaman cap\u00EDtulos. Y a su vez, cada cap\u00EDtulo se divide en art\u00EDculos, conceptos y subconceptos.\",\"execution\":\"Ejecuci\u00F3n presupuestaria\",\"expense_economic_1_desc\":\"Sueldos de funcionarios, indemnizaciones, cotizaciones y planes de pensiones para todo el personal contratado.\",\"expense_economic_2_desc\":\"Suministros, materiales y gastos de servicios o trabajos realizados por empresas ajenas contratadas.\",\"expense_economic_3_desc\":\"Pago de intereses derivados de operaciones financieras.\",\"expense_economic_4_desc\":\"Aportaciones a otras entidades o administraciones (estatales, auton\u00F3micas o empresas privadas) para financiar operaciones corrientes.\",\"expense_economic_5_desc\":\"Son fondos que cubren situaciones de emergencia y gastos no previstos.\",\"expense_economic_6_desc\":\"Creaci\u00F3n de nuevos equipamientos o infraestructuras y adquisici\u00F3n de bienes inventariables.\",\"expense_economic_7_desc\":\"Pago de cr\u00E9ditos para financiar operaciones de capital, que hayan financiado inversiones reales.\",\"expense_economic_8_desc\":\"Adquisici\u00F3n de activos financieros para la construcci\u00F3n de dep\u00F3sitos y fianzas exigidos.\",\"expense_economic_9_desc\":\"Pago de amortizaci\u00F3n de pasivos financieros (como por ejemplo, la deuda).\",\"expense_functional_0_desc\":\"Esta partida se destina a pagar la deuda acumulada por el ayuntamiento.\",\"expense_functional_1_desc\":\"Esta partida cubre las necesidades m\u00EDnimas y obligatorias de un municipio.\",\"expense_functional_2_desc\":\"Es el dinero que se destina a la prevenci\u00F3n y la asistencia. Por ejemplo, el fomento del empleo.\",\"expense_functional_3_desc\":\"Afecta a los servicios que mejoran la calidad de vida: sanidad, educaci\u00F3n, cultura y ocio.\",\"expense_functional_4_desc\":\"Aqu\u00ED entra lo que ayuda a desarrollar el potencial de los distintos sectores econ\u00F3micos.\",\"expense_functional_9_desc\":\"Aqu\u00ED se agrupan los gastos del propio ayuntamiento y dem\u00E1s organismos p\u00FAblicos.\",\"expenses\":\"Gastos\",\"expenses_how\":\"\u00BFC\u00F3mo usa el ayuntamiento el dinero de todos los vecinos? Los gastos se pueden clasificar de dos formas: desde el punto de vista funcional (en qu\u00E9 se gasta) y econ\u00F3mico (c\u00F3mo se gasta).\",\"expenses_per_inhabitant\":\"El gasto por habitante fue de...\",\"expenses_types\":\"Tipos de gasto\",\"expenses_types_p1\":\"\u00BFC\u00F3mo usa el ayuntamiento el dinero de todos los vecinos? Aqu\u00ED se detalla todo. Los gastos se pueden clasificar de dos formas: desde el punto de vista funcional (en qu\u00E9 se gasta) y econ\u00F3mico (c\u00F3mo se gasta). La cantidad de dinero es la misma, pero la vemos desde dos \u00E1ngulos.\",\"financial_income\":\"Ingresos financieros\",\"financial_income_p1\":\"Pueden ser dep\u00F3sitos bancarios inmovilizados o cr\u00E9ditos concedidos por entidades privadas, como bancos o aseguradoras.\",\"functional\":\"Gasto funcional\",\"functional_p1\":\"Es la m\u00E1s explicativa: nos dice, por ejemplo, cu\u00E1nto se gasta en la recogida de basura o en instalaciones deportivas. Tambi\u00E9n se la conoce como clasificaci\u00F3n por partidas de gasto.\",\"functional_p2\":\"En un presupuesto oficial se divide en \u00E1reas, y \u00E9stas a su vez en pol\u00EDticas, grupos y programas. Este nivel de profundidad permite saber con detalle a d\u00F3nde va el dinero.\",\"how_much_debt\":\"\u00BFCu\u00E1nto debe tu municipio?\",\"how_much_debt_p1\":\"La deuda viva de un municipio indica lo que debe el ayuntamiento a los bancos y otras entidades financieras. No hay que confundirla con el total del d\u00E9ficit del municipio (la diferencia entre los ingresos y los gastos).\",\"how_much_debt_p2\":\"La deuda viva s\u00F3lo incluye lo que se debe a las entidades financieras.\",\"how_much_debt_p3\":\"Unos municipios tienen mayor capacidad de endeudamiento que otros. Es posible que un municipio tenga m\u00E1s deuda que otro, pero si su econom\u00EDa es m\u00E1s fuerte, tendr\u00E1 m\u00E1s capacidad para soportarla y reducirla.\",\"how_to_read\":\"\u00BFY c\u00F3mo se lee?\",\"how_to_read_p1_html\":\"Todos los presupuestos municipales tienen la misma estructura, definida legalmente en la \\\\u003ca href=\\\\\"https://www.boe.es/buscar/doc.php?id=BOE-A-2008-19916\\\\\"\\\\u003eOrden EHA/3565/2008\\\\u003c/a\\\\u003e. La estructura b\u00E1sica es sencilla: se divide en ingresos y gastos. Es decir, responde a las preguntas \u00BFDe d\u00F3nde sale el dinero? (ingresos) y \u00BFen qu\u00E9 se gasta? (gastos).\",\"income\":\"Ingresos\",\"income_1_desc\":\"Gravan la fuente de la renta, los frutos del patrimonio o de una actividad econ\u00F3mica.\",\"income_2_desc\":\"Algunos municipios recaudan una parte del IVA y otros impuestos especiales.\",\"income_3_desc\":\"Precios p\u00FAblicos y contribuciones por contraprestaciones municipales.\",\"income_4_desc\":\"Dinero que el ayuntamiento recibe del Estado y de la Comunidad Aut\u00F3noma.\",\"income_5_desc\":\"Rentas de patrimonio del municipio. Son los beneficios sobre bienes que no se destinan a servicio p\u00FAblico.\",\"income_6_desc\":\"Venta de solares y fincas r\u00FAsticas.\",\"income_7_desc\":\"Ingresos de naturaleza no tributaria destinados a financiar gastos de capital.\",\"income_8_desc\":\"Devoluci\u00F3n de fianzas o dep\u00F3sitos inmovilizados.\",\"income_9_desc\":\"Cr\u00E9ditos solicitados a entidades privadas.\",\"income_p1\":\"Para empezar, los ingresos se dividen seg\u00FAn su naturaleza econ\u00F3mica, es decir, de d\u00F3nde viene el dinero y qu\u00E9 \u201Cforma\u201D tiene: Si es un cr\u00E9dito bancario, una propiedad municipal que se ha vendido o un impuesto.\",\"income_p2\":\"En %{year} se ingresaron...\",\"intro_p1\":\"La Junta municipal \u2013formada por el alcalde y los responsables de cada \u00E1rea de gobierno\u2013 dise\u00F1a el presupuesto, lo redacta a trav\u00E9s de la concejal\u00EDa de Hacienda y lo presenta en el pleno, que es el \u00F3rgano de m\u00E1xima representaci\u00F3n pol\u00EDtica municipal.\",\"intro_p2\":\"Una vez all\u00ED, todos los concejales lo estudian y sugieren modificaciones. Finalmente se somete a votaci\u00F3n y se aprueba.\",\"intro_p3\":\"El presupuesto tiene que quedar aprobado antes del 31 de diciembre del a\u00F1o anterior. Es decir, el presupuesto de 2016 tiene que estar aprobado en diciembre de 2015, si no, se prorroga autom\u00E1ticamente.\",\"regular_income\":\"Ingresos corrientes\",\"regular_income_p1\":\"Impuestos y tasas que recauda el ayuntamiento, o dinero que el Estado transfiere a cada municipio. Son los m\u00E1s habituales.\",\"sources\":\"Fuentes\",\"sources_p1_html\":\"Para elaborar esta gu\u00EDa hemos tomado como referencia la estructura oficial de un presupuesto municipal, definida en la \\\\u003ca href=\\\\\"https://www.boe.es/buscar/doc.php?id=BOE-A-2008-19916\\\\\"\\\\u003eOrden EHA/3565/2008\\\\u003c/a\\\\u003e y nos hemos inspirado en otros documentos como \\\\u003ca href=\\\\\"http://www.ocmcartagena.org/files/archive/Entendiendo-un-presupuesto-municipal.pdf\\\\\"\\\\u003eEntendiendo un presupuesto municipal\\\\u003c/a\\\\u003e y \\\\u003ca href=\\\\\"https://docs.google.com/presentation/d/1oysDrJvlFxP0sKlzBalxvrV3lzSE5OCSKY7qd5yYpcA/pub?start=false\\\\u0026loop=false\\\\u0026delayms=3000\\\\u0026slide=id.p\\\\\"\\\\u003eGu\u00EDa de introducci\u00F3n a los presupuestos municipales\\\\u003c/a\\\\u003e.\",\"title\":\"C\u00F3mo funciona un presupuesto municipal\",\"types_income\":\"Tipos de ingreso\",\"types_income_p1\":\"Los ingresos se dividen en nueve apartados y cada uno de ellos en varios subapartados. Estas divisiones permiten profundizar para conocer la procedencia exacta de cada ingreso.\",\"types_income_p2\":\"Por ejemplo: dentro de Impuestos indirectos se encuentran los Consumos espec\u00EDficos. Y dentro de este \u00FAltimo, est\u00E1n los Impuestos del alcohol o el tabaco. En un presupuesto oficial, los apartados principales se llaman cap\u00EDtulos. Y a su vez, cada cap\u00EDtulo se divide en art\u00EDculos, conceptos y subconceptos.\",\"types_income_p3\":\"En Gobierto lo hemos simplificado para que s\u00F3lo tengas que buscar el nombre de cada apartado.\"},\"index\":{\"at_a_glance\":\"Evoluci\u00F3n del gasto y comparaci\u00F3n\",\"at_years_end\":\"* a cierre del %{year}\",\"budget_guide\":\"Consulta la Gu\u00EDa del Presupuesto\",\"budget_lines_block\":{\"intro\":\"Estas son las partidas presupuestarias m\u00E1s importantes en tu municipio\",\"title\":\"Partidas presupuestarias\"},\"budget_receipt\":{\"intro\":\"Comprueba a qu\u00E9 se dedican tus aportaciones\",\"title\":\"El recibo de tus impuestos\"},\"budget_slides\":{\"slide_1\":\"Gasto en asistencia social por habitante\",\"title\":\"Los presupuestos de un vistazo\"},\"budgets_comparision\":{\"button\":\"Comparar\",\"text\":\"Compara el presupuesto del %{site} con el de otros municipios desde\"},\"category_percentage\":\"Porcentaje\",\"category_value\":\"Cantidad\",\"context\":\"Contexto\",\"data_of_year\":\"* datos del %{year}\",\"debt\":\"Deuda\",\"debt_tooltip\":\"Deuda del sector de las administraciones p\u00FAblicas %{of_the_organization_name}\",\"description\":\"En esta p\u00E1gina te contamos c\u00FAal es la distribuci\u00F3n de los presupuestos, cu\u00E1l es el estado de ejecuci\u00F3n de cada partida, qui\u00E9nes son los proveedores con los que trabajamos, y c\u00F3mo ha evolucionado el gasto por habitante.\",\"executed\":\"Ejecuci\u00F3n del pres. actual\",\"executed_percent\":\"%{percentage}% del presupuesto actual\",\"executed_percent_other_year_html\":\"En %{year} fue un %{link}\",\"executed_tooltip\":\"Cantidad ejecutada respecto al presupuesto actual (presupuesto inicial m\u00E1s modificaciones)\",\"execution_block\":{\"button\":\"Consulta la ejecuci\u00F3n completa\",\"expense\":\"Gastos\",\"income\":\"Ingresos\",\"intro\":\"As\u00ED va la ejecuci\u00F3n del presupuesto municipal.\",\"last_update\":\"\u00DAltima actualizaci\u00F3n: %{date}.\",\"title\":\"Ejecuci\u00F3n\"},\"expenses\":\"Ingresos\",\"expenses_per_inhabitant\":\"Gasto por habitante\",\"expenses_per_inhabitant_tooltip\":\"Presupuesto inicial dividido por el n\u00FAmero de habitantes\",\"expenses_per_inhabitant_updated\":\"Pres. por hab. actual\",\"header\":\"Presupuestos\",\"in_total\":\"En total\",\"income\":\"Ingresos\",\"income_per_inhabitant\":\"Ingreso por habitante\",\"income_per_inhabitant_tooltip\":\"Presupuesto inicial dividido por el n\u00FAmero de habitantes\",\"inhabitants\":\"Habitantes\",\"inhabitants_tooltip\":\"N\u00FAmero de habitantes\",\"initial_estimate\":\"sobre el pres. inicial\",\"initial_estimate_per_inhabitant\":\"sobre el pres. inicial por hab.\",\"less\":\"menos\",\"level_1_category\":\"Categor\u00EDa nivel 1\",\"level_2_category\":\"Categor\u00EDa nivel 2\",\"main_budget_levels_legend_down\":\"Han bajado\",\"main_budget_levels_legend_one\":\"Cambio entre este a\u00F1o\",\"main_budget_levels_legend_two\":\"y el pasado\",\"main_budget_levels_legend_up\":\"Han subido\",\"main_budget_levels_per_inhabitant\":\"por habitante\",\"main_budget_levels_timeline\":\"Compara gastos e ingresos a\u00F1o por a\u00F1o\",\"main_budget_levels_tooltip_article\":\"desde\",\"main_budget_levels_tooltip_down\":\"Ha bajado un\",\"main_budget_levels_tooltip_up\":\"Ha subido un\",\"main_budget_lines\":\"Los principales ingresos y gastos %{from_your_organization_name}\",\"main_budget_lines_expense\":\"Gastos\",\"main_budget_lines_income\":\"Ingresos\",\"more\":\"m\u00E1s\",\"most_interesting_budget_lines\":\"Gastos que m\u00E1s te interesan\",\"most_interesting_budget_lines_description\":\"Te mostramos algunas de las partidas que m\u00E1s nos afectan directamente en nuestro d\u00EDa a d\u00EDa como ciudadanos. Tambi\u00E9n puedes consultar el explorador completo.\",\"not_available_short\":\"No disp.\",\"note_about_the_data\":\"Nota sobre los datos\",\"note_about_the_data_title\":\"La base de datos que utilizamos no incluye datos para el 100% de los municipios, por lo que las medias est\u00E1n calculadas solo con los datos que existen (que son la gran mayor\u00EDa). M\u00E1s informaci\u00F3n en nuestras preguntas frecuentes\",\"per_person\":\"Por habitante\",\"planned_vs_executed_other_year_html\":\"En %{year} fue %{link}\",\"search_for_a_budget_line\":\"Busca una partida\",\"see_all\":\"ver todos\",\"stories_header\":\"Te explicamos el presupuesto\",\"story_1\":{\"lede\":\"Te contamos cuales son las prioridades presupuestarias para el 2017 en torno a las que hemos articulado el plan econ\u00F3mico.\",\"title\":\"Actuaciones de car\u00E1cter general\"},\"story_2\":{\"lede\":\"Te contamos cuales son las prioridades presupuestarias para el 2017 en torno a las que hemos articulado el plan econ\u00F3mico.\",\"title\":\"Presupuestos y medio ambiente\"},\"story_3\":{\"lede\":\"Te contamos cuales son las prioridades presupuestarias para el 2017 en torno a las que hemos articulado el plan econ\u00F3mico.\",\"title\":\"Potenciando el deporte\"},\"title\":\"Presupuestos municipales de %{place} - %{year}\",\"top_expense_category\":\"Categor\u00EDa\",\"top_expense_value\":\"Cantidad\",\"top_income_category\":\"Categor\u00EDa\",\"top_income_value\":\"Cantidad\",\"total_expenses\":\"Gasto total\",\"total_expenses_tooltip\":\"Presupuesto inicial\",\"total_expenses_updated\":\"Presupuesto actual\",\"visualize\":\"Visualiza los gastos por habitante o el total\"}},\"budgets_elaboration\":{\"index\":{\"at_a_glance\":\"Evoluci\u00F3n del gasto y comparaci\u00F3n\",\"auto_funding\":\"Capacidad autofinanciaci\u00F3n\",\"auto_funding_tooltip\":\"Porcentaje que suponen los ingresos fiscales respecto de los ingresos corrientes\",\"by_custom_category\":\"por \u00E1rea\",\"by_economic_expense\":\"en qu\u00E9 se gasta\",\"by_economic_income\":\"en qu\u00E9 se ingresa\",\"by_functional_expense\":\"para qu\u00E9\",\"category_percentage\":\"% s/ Total\",\"category_value\":\"Importe\",\"context\":\"Contexto\",\"debt_level\":\"Nivel de endeudamiento\",\"debt_level_tooltip\":\"Necesidad de financiacio\u0301n externa para poder hacer frente a sus gastos, una vez utilizados los recursos tributarios y las subvenciones y transferencias\",\"description\":\"El equipo de gobierno publica el borrador del presupuesto del pr\u00F3ximo ejercicio para debatir en abierto con oposici\u00F3n y vecinos. Entre todos podemos elaborar el presupuesto que m\u00E1s conviene a %{place_name}.\",\"diff_previous\":\"vs. anterior\",\"expenses_per_inhabitant\":\"Gasto por habitante\",\"expenses_per_inhabitant_tooltip\":\"Presupuesto inicial dividido por el n\u00FAmero de habitantes\",\"explore_the_detail\":\"Explora el detalle\",\"header\":\"Tramitaci\u00F3n del presupuesto %{year}\",\"in_total\":\"En total\",\"income_per_inhabitant\":\"Ingreso por habitante\",\"income_per_inhabitant_tooltip\":\"Presupuesto inicial dividido por el n\u00FAmero de habitantes\",\"main_budget_levels_timeline\":\"Compara gastos e ingresos a\u00F1o por a\u00F1o\",\"main_budget_lines\":\"Los principales ingresos y gastos %{from_your_organization_name}\",\"main_budget_lines_expense\":\"Gastos\",\"main_budget_lines_income\":\"Ingresos\",\"metric_boxes_data\":\"Los datos\",\"metric_boxes_data_description\":\"As\u00ED cambiar\u00E1 el presupuesto de cara al pr\u00F3ximo ejercicio\",\"net_savings\":\"Ahorro neto\",\"net_savings_tooltip\":\"Capacidad que tiene la entidad de hacer frente\",\"next_year_proposal\":\"Propuesta para el %{year}\",\"no_data\":\"No hay datos para esta clasificaci\u00F3n\",\"note_about_the_data\":\"Nota sobre los datos\",\"note_about_the_data_title\":\"La base de datos que utilizamos no incluye datos para el 100% de los municipios, por lo que las medias est\u00E1n calculadas solo con los datos que existen (que son la gran mayor\u00EDa). M\u00E1s informaci\u00F3n en nuestras preguntas frecuentes\",\"per_person\":\"Por habitante\",\"proposal\":\"Propuesta\",\"total_expenses\":\"Gasto total\",\"total_expenses_tooltip\":\"Presupuesto inicial\",\"total_income\":\"Ingreso total\",\"total_income_tooltip\":\"Presupuesto inicial\",\"visualize\":\"Visualiza los gastos por habitante o el total\"}},\"budgets_execution\":{\"execution_table\":{\"deviation\":\"Desviaci\u00F3n\",\"executed\":\"Ejecutado\",\"planned\":\"Pres.\",\"view_less\":\"Ver menos\",\"view_more\":\"Ver m\u00E1s\"},\"index\":{\"budget_guide\":\"Consulta nuestra Gu\u00EDa del presupuesto\",\"budget_lines_expense_higher\":\"Partidas de gastos muy superiores al presupuesto\",\"budget_lines_expense_lower\":\"Partidas de gastos muy inferiores al presupuesto\",\"budget_lines_income_higher\":\"Partidas de ingresos muy superiores al presupuesto\",\"budget_lines_income_lower\":\"Partidas de ingresos muy inferiores al presupuesto\",\"category\":\"Categor\u00EDa\",\"custom_button\":\"Personalizada\",\"description\":\"La ejecuci\u00F3n es la cantidad que finalmente se ha gastado sobre el presupuesto inicial modificado. Es normal que haya desviaciones ya que es imposible preveer todos los gastos con precisi\u00F3n absoluta\",\"economic\":\"Econ\u00F3mica\",\"economic_button\":\"En qu\u00E9 se gasta\",\"euros\":\"En euros\",\"execution_disclaimer\":\"Es normal que haya desviaciones ya que es imposible preveer todos los gastos con precisi\u00F3n absoluta.\",\"execution_help\":\"La ejecuci\u00F3n es la cantidad que finalmente se ha gastado sobre el presupuesto inicial actualizado.\",\"expenses_executed\":\"Gastos ejecutados\",\"expenses_planned\":\"Gastos presupuestados\",\"functional\":\"Functional\",\"functional_button\":\"Para qu\u00E9 se gasta\",\"higher_execution\":\"Mayor ejecuci\u00F3n\",\"income_executed\":\"Ingresos ejecutados\",\"income_planned\":\"Ingresos presupuestados\",\"initial_estimate\":\"Presupuesto inicial\",\"initial_estimate_per_inhabitant\":\"Presupuesto inicial por habitante\",\"lower_execution\":\"Menor ejecuci\u00F3n\",\"metric\":{\"execution\":{\"expenses_title\":\"Ejecuci\u00F3n de gastos\",\"income_title\":\"Ejecuci\u00F3n de ingresos\",\"previous_execution_message\":\"En el %{year} la ejecuci\u00F3n fue del %{percentage}\"}},\"percentage\":\"Porcentaje\",\"sort\":\"Ordenar\",\"title\":\"Ejecuci\u00F3n presupuestaria\",\"tooltip_disclaimer\":\"\\\\u003cstrong\\\\u003eEsta es una aproximaci\u00F3n\\\\u003c/strong\\\\u003e. \\\\u003cbr /\\\\u003e A lo largo del a\u00F1o surgen imprevistos que cambian la cantidad o la finalidad de los gastos o ingresos.\",\"value\":\"Valor\",\"vis\":{\"absolute\":\"Ejecuci\u00F3n en \u20AC\",\"empty_lines\":\"No hay datos disponibles para esta clasificaci\u00F3n en este a\u00F1o. Por favor, selecciona otro filtro.\",\"expenses\":{\"title\":\"As\u00ED va la ejecuci\u00F3n de los gastos\"},\"income\":{\"title\":\"As\u00ED va la ejecuci\u00F3n de los ingresos\"},\"lines_title\":\"Partidas presupuestarias\",\"percent\":\"% de progreso\",\"percent_log\":\"% de progreso (log)\",\"tooltip\":\"Se ha ejecutado un\",\"tooltip_budgeted\":\"Presupuestado inicial\",\"tooltip_budgeted_updated\":\"Presupuestado actualizado\",\"tooltip_executed_amount\":\"Importe ejecutado\"}},\"widget_template_deviation\":{\"expense\":\"Gastos\",\"income\":\"Ingresos\",\"planned\":\"presupuestados\",\"real\":\"reales\"}},\"common\":{\"budget_line_description_html\":\"Esta partida comprende los %{kind_what} en %{description}. Si quieres saber m\u00E1s sobre esta partida puedes consultar la partida padre: %{link}\",\"expense\":\"gasto\",\"expenses\":\"gastos\",\"income\":\"ingreso\",\"incomes\":\"ingresos\"},\"events\":{\"gobierto_budgets_budgets_updated\":\"Presupuestos actualizados\"},\"exports\":{\"budget_lines_description\":\"Compara gastos e ingresos a\u00F1o por a\u00F1o\",\"budget_lines_title\":\"Partidas presupuestarias\",\"invoices_description\":\"Datos por a\u00F1o\",\"invoices_title\":\"Proveedores y Facturas\"},\"featured_budget_lines\":{\"gobierto_site_template\":{\"how_much_place_in\":\"\u00BFCu\u00E1nto se gasta %{place} en...\",\"last_year\":\"El a\u00F1o pasado gastamos\",\"per_person\":\"Por habitante\",\"show_me_another\":\"Mu\u00E9strame otra\",\"title\":\"Algunos gastos destacados\",\"total\":\"Gasto total\"}},\"feedback\":{\"ask_more_information\":{\"ask_for_feedback\":\"Escribe tu correo para que %{your_organization_name} te pueda contestar\",\"send\":\"Enviar\",\"your_email\":\"Tu correo-e\"},\"follow\":{\"follow\":\"Seguir\",\"your_email\":\"Tu correo-e\"},\"follow_success\":{\"error\":\"Parece que el email introducido no es v\u00E1lido. Por favor rev\u00EDsalo\",\"share\":\"\u00BFQuieres compartir estos datos en\",\"share_text\":\"Informate y opina sobre el presupuesto de %{place_name}\",\"success\":\"\u00A1Genial! Comprueba tu correo y pincha en el enlace que te enviamos\"},\"step1\":{\"answer1_0\":\"S\u00ED\",\"answer1_1\":\"No\",\"understand\":\"\u00BFEntiendes de qu\u00E9 va esta partida?\"},\"step2_no\":{\"answer_html\":\"El \\\\u003cstrong\\\\u003e%{datum}\\\\u003c/strong\\\\u003e de personas han respondido que \\\\u003cstrong\\\\u003eNo entiende de qu\u00E9 va esta partida\\\\u003c/strong\\\\u003e\",\"ask\":\"Puedes solicitar a tu alcalde que amplie la informaci\u00F3n sobre esta y otras partidas\"},\"step2_yes\":{\"option1_html\":\"Me parece \\\\u003cspan\\\\u003ePOCO\\\\u003c/span\\\\u003e\",\"option2_html\":\"Me parece \\\\u003cspan\\\\u003eAPROPIADO\\\\u003c/span\\\\u003e\",\"option3_html\":\"Me parece \\\\u003cspan\\\\u003eMUCHO\\\\u003c/span\\\\u003e\",\"question\":\"\u00BFCrees que la cantidad de gasto es apropiada?\"},\"step3\":{\"option1\":\"Poco\",\"option2\":\"Apropiado\",\"option3\":\"Mucho\",\"thanks\":\"Gracias por tu opini\u00F3n. Esto es lo que piensa el resto de la gente que ha opinado:\"}},\"feedback_mailer\":{\"new_feedback_request\":{\"body\":\"Has recibido una nueva petici\u00F3n de informaci\u00F3n para la partida %{budget_line_name} (%{year}) de una persona con el email %{person_email}.\",\"body_budgets\":\"Has recibido una nueva petici\u00F3n de informaci\u00F3n para los presupuestos de tu municipio de una persona con el email %{person_email}.\",\"subject\":\"Has recibido una nueva petici\u00F3n de informaci\u00F3n\"}},\"indicators\":\"Indicadores\",\"indicators_intro\":\"Conoce los presupuestos de %{place} a trav\u00E9s de sus principales cifras: ahorro bruto, inversi\u00F3n por habitante o financiaci\u00F3n de inversiones.\",\"invoices\":{\"show\":{\"empty\":\"Ning\u00FAn filtro tiene datos\",\"fromto\":\"De A N\u00BA Fact.\",\"invoiced\":\"Importe facturado\",\"more\":\"M\u00E1s de\",\"table\":{\"fields\":{\"date\":\"Fecha\",\"paid\":\"Pagado\",\"payment_date\":\"Fecha de pago\",\"payment_date_limit\":\"Fecha prevista de pago\",\"provider_id\":\"NIF\",\"provider_name\":\"Proveedor\",\"subject\":\"Concepto\",\"value\":\"Cantidad\"},\"pager\":{\"first\":\"Primero\",\"format\":\"P\u00E1ginas %{tpl} de %{tpl2}\",\"last\":\"\u00DAltimo\",\"next\":\"Siguiente\",\"prev\":\"Anterior\"}}}},\"layouts\":{\"application\":{\"budgets\":\"Presupuestos\"},\"menu_subsections\":{\"data\":\"Datos\",\"elaboration\":\"Elaboraci\u00F3n\",\"execution\":\"Ejecuci\u00F3n\",\"guide\":\"Gu\u00EDa\",\"indicators\":\"Indicadores\",\"providers\":\"Proveedores y Facturas\",\"receipt\":\"Recibo\"}},\"providers\":{\"index\":{\"all_invoices\":\"Todas las facturas\",\"amount_distribution\":\"Distribuci\u00F3n por importes\",\"and_more_html\":\"y \\\\u003cspan id=\\\\\"providers-number\\\\\"\\\\u003en\\\\u003c/span\\\\u003e proveedores m\u00E1s\",\"are_from\":\"son de\",\"check_detail\":\"Consulta el detalle\",\"corporation_sa\":\"sociedades an\u00F3nimas\",\"corporation_sl\":\"sociedades limitadas y otras\",\"description\":\"\u00BFA qu\u00E9 proveedores contrata %{the_organization_name}? \u00BFQu\u00E9 facturas paga? Desde esta secci\u00F3n podr\u00E1s consultar y revisar el detalle de cada uno de los pagos que realiza %{the_organization_name}.\",\"freelances\":\"aut\u00F3nomos\",\"invoices\":\"Facturas\",\"invoices_from_which\":\"De los cuales\",\"invoices_sum\":\"facturas suman un total de\",\"largest_provider_html\":\"El mayor proveedor supone un \\\\u003cspan id=\\\\\"largestProvider\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de toda la facturaci\u00F3n\",\"last_12_months\":\"\u00DAltimos 12 meses\",\"last_3_months\":\"\u00DAltimos 3 meses\",\"less_than_1000_html\":\"El \\\\u003cspan id=\\\\\"lessThan1000\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de las facturas son menores de 1.000 \u20AC\",\"loading\":\"Cargando...\",\"main_providers\":\"Principales proveedores\",\"mean_amount\":\"importe medio\",\"mean_and_median\":\"Media y mediana\",\"mean_and_median_summary\":\"Es decir, la mitad de las facturas son de este importe o inferior\",\"mean_summary\":\"Importe resultante de sumar los importes de todas las facturas y dividirlo por el n\u00FAmero de facturas\",\"median_amount\":\"importe mediano\",\"months_distribution\":\"Distribuci\u00F3n por meses\",\"percentile_10_html\":\"El \\\\u003cspan id=\\\\\"percentile10\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de las facturas concentran el 10 % de la facturaci\u00F3n\",\"percentile_50_html\":\"El \\\\u003cspan id=\\\\\"percentile50\\\\\"\\\\u003e\\\\u003c/span\\\\u003e de las facturas concentran el 50 % de la facturaci\u00F3n\",\"previous\":\"Anteriores\",\"sum_amount\":\"IMPORTE ACUMULADO\",\"this_year\":\"Este a\u00F1o\",\"view_data_from\":\"Ver datos de\"}},\"receipts\":{\"show\":{\"description\":\"Parte del presupuesto de tu municipio se financia directamente de impuestos y tasas locales. Calcula cu\u00E1nto aportas t\u00FA al presupuesto de acuerdo a tu vivienda, veh\u00EDculos...\",\"detail\":\"Detalle de tu contribuci\u00F3n\",\"explanation\":\"Introduce las cantidades que has pagado para cada uno de los conceptos en\",\"pick_to_calculate\":\"Selecciona para calcular\",\"share\":\"Comp\u00E1rtelo\",\"share_text\":\"Comprueba cual es tu aportaci\u00F3n al presupuesto de\",\"title\":\"\u00BFCu\u00E1l es tu contribuci\u00F3n al presupuesto de %{site_name}?\",\"your_contribution\":\"Tu contribuci\u00F3n a los presupuestos de %{site_name}\"}},\"shared\":{\"data_updated_at\":{\"last_update\":\"Datos actualizados\"},\"enough_information\":{\"enough_information\":\"\u00BFSuficiente informaci\u00F3n?\",\"enough_information_cta\":\"Pide m\u00E1s informaci\u00F3n\",\"enough_information_desc\":\"Si considera que se tienen que incluir m\u00E1s informaci\u00F3n de estos datos para tener una visi\u00F3n m\u00E1s completa de la misma o sobre el uso de tus impuestos, comunic\u00E1noslo y te contestaremos\"}},\"visualizations\":{\"G_custom\":\"Gastos por \u00E1rea\",\"G_economic\":\"En qu\u00E9 se gasta\",\"G_functional\":\"Para qu\u00E9 se gasta\",\"I_custom\":\"Ingresos por \u00E1rea\",\"I_economic\":\"En qu\u00E9 se ingresa\",\"category_per_inhabitant\":\"%{category} por habitante\",\"expenses_per_inhabitant\":\"Gasto por habitante\",\"expenses_per_inhabitant_updated\":\"Gasto por habitante actual\",\"inhabitant_short\":\"hab\",\"mean_autonomy\":\"Media auton\u00F3mica\",\"mean_national\":\"Media estatal\",\"mean_province\":\"Media provincial\",\"previous_year_diff\":\"Cambio a\u00F1o anterior\",\"total_expenses\":\"Gasto total\"}},\"gobierto_calendars\":{\"calendar_integration\":{\"auth_error\":{\"message\":\"Las credenciales del calendario no son v\u00E1lidas.\"},\"error\":{\"message\":\"Ha habido un problema sincronizando el calendario.\"},\"timeout_error\":{\"message\":\"El tiempo de conexi\u00F3n al servidor de calendarios ha expirado.\"}},\"events\":{\"gobierto_calendars_event_published\":\"%{subject_name}\",\"gobierto_calendars_event_updated\":\"%{subject_name}\"},\"fullcalendar\":{\"day\":\"D\u00EDa\",\"list\":\"Lista\",\"month\":\"Mes\",\"today\":\"Hoy\",\"week\":\"Semana\"}},\"gobierto_cms\":{\"events\":{\"gobierto_cms_page_created\":\"P\u00E1gina creada\",\"gobierto_cms_page_published\":\"P\u00E1gina publicada\",\"gobierto_cms_page_updated\":\"P\u00E1gina actualizada\",\"gobierto_cms_section_created\":\"Secci\u00F3n creada\",\"gobierto_cms_section_item_created\":\"P\u00E1gina a\u00F1adida a secci\u00F3n\",\"gobierto_cms_section_item_deleted\":\"P\u00E1gina borrada de secci\u00F3n\",\"gobierto_cms_section_updated\":\"Secci\u00F3n actualizada\"},\"pages\":{\"templates\":{\"page\":{\"documents\":\"Documentos\"}}}},\"gobierto_common\":{\"dynamic_content\":{\"table_component\":{\"attachment\":\"Documento\",\"download\":\"Descargar\",\"download_attachment\":\"Descargar documento\",\"view_content\":\"Ver contenido\"}},\"events\":{\"gobierto_common_collection_created\":\"Colecci\u00F3n creada\",\"gobierto_common_collection_updated\":\"Colecci\u00F3n actualizada\",\"gobierto_common_term_created\":\"T\u00E9rmino creado\",\"gobierto_common_term_updated\":\"T\u00E9rmino actualizado\"},\"visualizations\":{\"absolute\":\"Ejecuci\u00F3n en \u20AC\",\"adults\":\"Poblaci\u00F3n activa\",\"age\":\"Edad\",\"axis\":\"a\u00F1os\",\"between_25_44\":\"Entre 25 y 44\",\"cards\":{\"active_pop\":{\"figure_first\":\"del total\",\"figure_second\":\"personas\",\"title\":\"Poblaci\u00F3n activa\"},\"births\":{\"country\":\"Media estatal\",\"place\":\"%{place}\",\"province\":\"Media provincial\",\"title\":\"Tasa de nacimientos\"},\"budget_by_inhabitant\":{\"title\":\"Presupuesto por habitante\"},\"cars\":{\"title\":\"Coches por habitante\"},\"cars_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"media provincial\",\"title\":\"Impuesto a los turismos\"},\"companies\":{\"title\":\"Empresas\"},\"construction_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"media provincial\",\"title\":\"Impuesto a las construcciones\"},\"contracts_comparison\":{\"figure_first\":\"temporales\",\"figure_second\":\"indefinidos\",\"title\":\"Contratos en el mes pasado\"},\"contracts_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3n\",\"industry\":\"Industria\",\"services\":\"Servicios\",\"title\":\"Contratos por sector\"},\"deaths\":{\"country\":\"Media estatal\",\"place\":\"%{place}\",\"province\":\"Media provincial\",\"title\":\"Tasa de defunciones\"},\"debt_by_inhabitant\":{\"title\":\"Deuda por habitante\"},\"debt_level\":{\"title\":\"Nivel de endeudamiento\"},\"economic_tax\":{\"title\":\"Impuesto a las actividades econ\u00F3micas\"},\"expenditure_rigidity\":{\"title\":\"Rigidez de gasto\"},\"financial_charge\":{\"title\":\"Carga financiera\"},\"financial_risk\":{\"title\":\"Riesgo financiero\"},\"freelancers\":{\"title\":\"Aut\u00F3nomos\"},\"frequency\":\"Actualizaci\u00F3n %{type}\",\"gross_saving\":{\"title\":\"Ahorro bruto\"},\"gross_savings_rate\":{\"title\":\"\u00CDndice de ahorro bruto\"},\"houses\":{\"figure_first\":\"familiares\",\"figure_second\":\"principales\",\"title\":\"Viviendas\"},\"ibi\":{\"first_column\":\"\",\"second_column\":\"Urbano\",\"third_column\":\"R\u00FAstico\",\"title\":\"Impuesto sobre bienes inmuebles\"},\"income\":{\"first_column\":\"\",\"second_column\":\"Por habitante\",\"third_column\":\"Por hogar\",\"title\":\"Renta municipal\"},\"income_overview\":{\"figure_first\":\"%{place}\",\"figure_second\":\"Espa\u00F1a\",\"title\":\"Renta bruta\"},\"investment_by_inhabitant\":{\"title\":\"Inversi\u00F3n por habitante\"},\"investment_financing\":{\"title\":\"Financiaci\u00F3n inversiones\"},\"liability_cost\":{\"title\":\"Coste deuda\"},\"meta\":{\"time\":\" en \",\"where\":\"En \"},\"net_saving\":{\"title\":\"Ahorro neto\"},\"net_savings_rate\":{\"title\":\"\u00CDndice de ahorro neto\"},\"per_capita_investment\":{\"title\":\"Inversi\u00F3n por habitante\"},\"per_capita_tax_burden\":{\"title\":\"Presi\u00F3n fiscal por habitante\"},\"population\":{\"title\":\"Habitantes\"},\"self_financing_capacity\":{\"title\":\"Capacidad de autofinanciaci\u00F3n\"},\"ss_members\":{\"title\":\"Afiliados a la Seguridad Social\"},\"tax_autonomy\":{\"title\":\"Autonom\u00EDa fiscal\"},\"unemployed_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3n\",\"industry\":\"Industria\",\"services\":\"Servicios\",\"title\":\"Desempleados por sector\"},\"updated\":\"\u00DAltima actualizaci\u00F3n\"},\"country\":\"Espa\u00F1a\",\"elderly\":\"Mayores\",\"elderly_info\":\"El %{percent} de la poblaci\u00F3n tiene m\u00E1s de %{limit} a\u00F1os\",\"empty_lines\":\"No hay datos disponibles para esta clasificaci\u00F3n en este a\u00F1o. Por favor, selecciona otro filtro.\",\"frequency\":\"Actualizaci\u00F3n %{type}\",\"gross_income\":\"Renta bruta\",\"increase\":\"Aumentar\",\"inhabitant_short\":\"hab\",\"inhabitants\":\"Habitantes\",\"keep\":\"Mantener\",\"label\":\"habitantes\",\"less_25\":\"Menores de 25\",\"lines_title\":\"Partidas presupuestarias\",\"main_budget_levels_legend_down\":\"Han bajado\",\"main_budget_levels_legend_one\":\"Cambio entre este a\u00F1o\",\"main_budget_levels_legend_two\":\"y el pasado\",\"main_budget_levels_legend_up\":\"Han subido\",\"main_budget_levels_per_inhabitant\":\"por habitante\",\"main_budget_levels_tooltip_article\":\"desde\",\"main_budget_levels_tooltip_article_last\":\"desde el anterior\",\"main_budget_levels_tooltip_down\":\"Ha bajado un\",\"main_budget_levels_tooltip_up\":\"Ha subido un\",\"mean\":\"Edad media: %{age} a\u00F1os\",\"mean_autonomy\":\"Media auton\u00F3mica\",\"mean_national\":\"Media estatal\",\"mean_province\":\"Media provincial\",\"median\":\"Edad mediana: %{age} a\u00F1os\",\"men\":\"Hombres\",\"million\":\"mill\u00F3n\",\"mode\":\"Edad m\u00E1s com\u00FAn: %{age} a\u00F1os\",\"more_44\":\"Mayores de 44\",\"percent\":\"% de progreso\",\"percent_log\":\"% de progreso (log)\",\"previous_year_diff\":\"Cambio a\u00F1o anterior\",\"project\":\"Proyecto\",\"questions\":\"Preguntas\",\"reduce\":\"Reducir\",\"thousand\":\"mil\",\"time\":\" en \",\"title\":\"Riqueza y poblaci\u00F3n en la provincia\",\"tooltip\":\"Se ha ejecutado un\",\"tooltip_budgeted\":\"Presupuestado inicial\",\"tooltip_budgeted_updated\":\"Presupuestado actualizado\",\"tooltip_executed_amount\":\"Importe ejecutado\",\"unemployed\":\"Desempleada\",\"where\":\"En \",\"women\":\"Mujeres\",\"youth\":\"Menores\",\"youth_info\":\"El %{percent} de la poblaci\u00F3n tiene menos de %{limit} a\u00F1os\"},\"vue_components\":{\"block_header\":{\"all\":\"Todas\",\"none\":\"Ninguna\"},\"calendar\":{\"date\":\"Seleccione fecha\"},\"filters\":{\"clear\":\"Limpiar filtros\"},\"pagination\":{\"next\":\"Siguiente\",\"previous\":\"Anterior\"},\"read_more\":{\"less\":\"Ver menos\",\"more\":\"Ver m\u00E1s\"},\"table\":{\"customize_columns\":\"Personalizar columnas\",\"no_data\":\"No hay datos para este criterio\"}}},\"gobierto_dashboards\":{\"available_cards\":\"Tarjetas disponibles\",\"back\":\"atr\u00E1s\",\"changes\":\"Dashboard modificado\",\"date\":\"Fecha: \",\"default_title\":\"T\u00EDtulo del dashboard\",\"delete\":\"Eliminar\",\"delete_dialog\":\"Desea borrar el dashboard?\",\"discard\":\"cerrar sin guardar\",\"indicators_amount\":\"\u279E %{amount} indicadores\",\"instructions\":\"\\\\\"\u21E7 Selecciona un tipo de tarjeta e incluyela en el \u00E1rea central \u279E\\\\n\\\\nLuego podr\u00E1s configurarla.\\\\\"\\\\n\",\"objective\":\"Objetivo\",\"percentage\":\"Consecuci\u00F3n\",\"percentage_alt\":\"% consecuci\u00F3n\",\"placeholder\":\"Escribe el t\u00EDtulo del indicador o proyecto\",\"public\":\"P\u00FAblico\",\"save\":\"Guardar\",\"select\":\"Selecciona el indicador\",\"type\":\"Tipo\",\"value\":\"Alcanzado\",\"view_item\":\"Ver \u00EDtem\",\"widgets\":{\"html\":\"Contenido HTML\",\"indicator\":\"Indicador\",\"individual\":\"Individual\",\"table\":\"Tabla\"}},\"gobierto_data\":{\"accessibility\":{\"editor\":\"Editor SQL\"},\"data_type\":{\"boolean\":\"boolean\",\"date\":\"fecha\",\"datetime\":\"fecha y hora\",\"decimal\":\"decimal\",\"hstore\":\"hstore\",\"integer\":\"entero\",\"jsonb\":\"jsonb\",\"string\":\"cadena\",\"text\":\"texto\",\"time\":\"tiempo\",\"timestamp\":\"fecha y hora\",\"timestampz\":\"fecha y hora\"},\"events\":{\"gobierto_data_dataset_dataset_created\":\"Conjunto de datos creado\",\"gobierto_data_dataset_dataset_data_updated\":\"Datos de conjunto de datos actualizados\",\"gobierto_data_dataset_dataset_deleted\":\"Conjunto de datos eliminado\",\"gobierto_data_dataset_dataset_updated\":\"Conjunto de datos actualizado\"},\"layouts\":{\"application\":{\"gobierto_data\":\"Datos\"}},\"projects\":{\"all\":\"Todas\",\"buttonFork\":\"Haz click para crear una versi\u00F3n de esta consulta\",\"buttonQueries\":\"Ver consultas (c)\",\"buttonRecentQueries\":\"Ver consultas recientes (r)\",\"buttonRunQuery\":\"Ejecutar consulta (CMD/WIN + Enter)\",\"cancel\":\"Cancelar\",\"categories\":\"Categor\u00EDas\",\"createCopy\":\"Crear una copia\",\"dashboards\":\"Dashboards\",\"data\":\"Datos\",\"dataset\":\"Conjuntos de datos\",\"datasetUpdated\":\"\u00DAltimos datasets actualizados\",\"deleteQuery\":\"\u00BFEst\u00E1s seguro de que deseas eliminar esta consulta?\",\"deleteViz\":\"\u00BFEst\u00E1s seguro de que deseas eliminar esta visualizaci\u00F3n?\",\"description\":\"Descripci\u00F3n\",\"download\":\"Descargar\",\"downloadData\":\"Descargar datos\",\"edit\":\"Editar\",\"emptyRecentQueries\":\"No hay consultas recientes\",\"favs\":\"Favoritas\",\"frequency\":\"Frecuencia\",\"guide\":\"Gu\u00EDa para usar el editor SQL\",\"license\":\"Licencia\",\"link\":\"Enlace\",\"map\":\"Mapa\",\"modifiedQuery\":\"Consulta modificada\",\"modifiedVisualization\":\"Visualizaci\u00F3n modificada\",\"numberOfRows\":\"N\u00FAmero de registros\",\"preview\":\"Previsualizar\",\"private\":\"Privada\",\"queries\":\"Consultas\",\"query\":\"Consulta\",\"queryEmpty\":\"No hay consultas disponibles\",\"queryExecuted\":\"Consulta ejecutada en\",\"queryName\":\"Nombre consulta\",\"recents\":\"Recientes\",\"records\":\"Registros\",\"resetQuery\":\"Restablecer consulta\",\"resetViz\":\"Restablecer Visualizaci\u00F3n\",\"resources\":\"Recursos\",\"revert\":\"Revertir\",\"runQuery\":\"Ejecutar consulta\",\"save\":\"Guardar\",\"savedQuery\":\"Consulta guardada\",\"savedVisualization\":\"Visualizaci\u00F3n guardada\",\"sets\":\"Conjuntos\",\"showAll\":\"Ver todo\",\"showLess\":\"Ver menos\",\"sourceDataset\":\"Fuente\",\"sourceDatasetUrl\":\"Fuente url\",\"subject\":\"Tema\",\"summary\":\"Resumen\",\"updated\":\"Actualizado\",\"visEmpty\":\"No hay visualizaciones disponibles\",\"visName\":\"Nombre visualizaci\u00F3n\",\"visPrivate\":\"Tus visualizaciones\",\"visPublic\":\"Todas\",\"visualizations\":\"Visualizaciones\",\"visualize\":\"Visualizar\",\"yourQueries\":\"Tus consultas\"}},\"gobierto_exports\":{\"exports\":{\"index\":{\"no_submodules\":\"No hay ning\u00FAn subm\u00F3dulo activo\",\"subtitle\":\"Desde esta p\u00E1gina puedes descargar en formato reutilizable el contenido de este sitio.\",\"title\":\"Descarga datos\"}}},\"gobierto_indicators\":{\"events\":{\"gobierto_indicators_indicator_updated\":\"Indicador actualizado\"},\"indicators\":{\"gci\":{\"gci_description\":\"Los indicadores GCI (Global City Indicators), que reflejan la calidad de vida de la ciudad, los define el Banco Mundial, asociaci\u00F3n con el prop\u00F3sito de combatir la pobreza y apoyar el desarrollo. Los indicadores pueden variar seg\u00FAn el a\u00F1o seleccionado.\",\"gci_title\":\"Indicadores GCI\",\"title\":\"Indicadores %{year}\"},\"ip\":{\"ip_description\":\"Infoparticipa es un proyecto desarrollado por el LPCCP, desde el a\u00F1o 2012, cuyo objetivo es evaluar la informaci\u00F3n que se publica en las webs de las administraciones p\u00FAblicas para promover que mejore su transparencia y calidad.\",\"ip_title\":\"Indicadores Infoparticipa\",\"title\":\"Indicadores %{year}\"},\"ita\":{\"ita_description\":\"Los indicadores ITA (\u00CDndice de Transparencia de los Ayuntamientos) son una herramienta que la organizaci\u00F3n no gubernamental Transparencia Internacional pone a disposici\u00F3n de los ayuntamientos espa\u00F1oles para medir su nivel de transparencia. Eval\u00FAan la gesti\u00F3n realizada por el ayuntamiento de una ciudad a trav\u00E9s de un conjunto integrado de 80 indicadores agrupados en diversas \u00E1reas.\",\"ita_title\":\"Indicadores ITA\",\"title\":\"Indicadores %{year}\"},\"shared\":{\"latest_update_html\":\"\\\\u003cstrong\\\\u003e\u00DAltima actualizaci\u00F3n:\\\\u003c/strong\\\\u003e %{date}\"},\"template\":{\"calculation\":\"C\u00E1lculo\",\"false\":\"no se cumple\",\"methodology\":\"Metodolog\u00EDa\",\"more\":\"M\u00E1s informaci\u00F3n\",\"source\":\"Fuente\",\"true\":\"se cumple\"}},\"layouts\":{\"application\":{\"indicators\":\"Indicadores\"},\"navigation\":{\"sub\":{\"gci\":\"Indicadores GCI\",\"ip\":\"Indicadores Infoparticipa\",\"ita\":\"Indicadores ITA\"}}}},\"gobierto_investments\":{\"events\":{\"gobierto_investments_project_project_created\":\"Proyecto de inversi\u00F3n creado\",\"gobierto_investments_project_project_updated\":\"Proyecto de inversi\u00F3n actualizado\"},\"layouts\":{\"application\":{\"investments\":\"Inversiones\",\"investments_paragraph\":\"Consulta los proyectos que tiene en marcha el Ayuntamiento, los que empezar\u00E1n proximamente, y los planes a medio plazo. Detalle sobre el plan anual de inversiones y mecanismos de seguimiento de las obras en marcha.\"}},\"projects\":{\"back\":\"ver todo\",\"description\":\"Descripci\u00F3n\",\"detail_title\":\"Detalle del proyecto\",\"empty\":\"Sin resultados\",\"exit\":\"Salir\",\"gallery\":\"Galer\u00EDa\",\"list\":\"Lista\",\"loading\":\"Cargando datos...\",\"map\":\"Mapa\",\"project\":{\"one\":\"%{count} proyecto\",\"other\":\"%{count} proyectos\"},\"reset\":\"Limpiar filtros\",\"see\":\"Ver de nuevo\",\"showall\":\"Ver todo\",\"showless\":\"Ver menos\",\"summary\":\"Resumen por estados\",\"tech_sheet\":\"Ficha t\u00E9cnica\",\"tour\":\"Tour virtual\"}},\"gobierto_observatory\":{\"cards\":{\"active_pop\":{\"figure_first\":\"del total\",\"figure_second\":\"personas\",\"title\":\"Poblaci\u00F3n activa\"},\"births\":{\"country\":\"Media estatal\",\"place\":\"%{place}\",\"province\":\"Media provincial\",\"title\":\"Tasa de nacimientos\"},\"budget_by_inhabitant\":{\"title\":\"Presupuesto por habitante\"},\"cars\":{\"title\":\"Coches por habitante\"},\"cars_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"media provincial\",\"title\":\"Impuesto a los turismos\"},\"companies\":{\"title\":\"Empresas\"},\"construction_tax\":{\"figure_first\":\"%{place}\",\"figure_second\":\"media provincial\",\"title\":\"Impuesto a las construcciones\"},\"contracts_comparison\":{\"figure_first\":\"temporales\",\"figure_second\":\"indefinidos\",\"title\":\"Contratos en el mes pasado\"},\"contracts_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3n\",\"industry\":\"Industria\",\"services\":\"Servicios\",\"title\":\"Contratos por sector\"},\"deaths\":{\"country\":\"Media estatal\",\"place\":\"%{place}\",\"province\":\"Media provincial\",\"title\":\"Tasa de defunciones\"},\"debt_by_inhabitant\":{\"title\":\"Deuda por habitante\"},\"economic_tax\":{\"title\":\"Impuesto a las actividades econ\u00F3micas\"},\"freelancers\":{\"title\":\"Aut\u00F3nomos\"},\"frequency\":\"Actualizaci\u00F3n %{type}\",\"houses\":{\"figure_first\":\"familiares\",\"figure_second\":\"principales\",\"title\":\"Viviendas\"},\"ibi\":{\"first_column\":\"\",\"second_column\":\"Urbano\",\"third_column\":\"R\u00FAstico\",\"title\":\"Impuesto sobre bienes inmuebles\"},\"income\":{\"first_column\":\"\",\"second_column\":\"Bruta\",\"third_column\":\"Disponible\",\"title\":\"Renta municipal\"},\"income_overview\":{\"figure_first\":\"%{place}\",\"figure_second\":\"Espa\u00F1a\",\"title\":\"Renta bruta\"},\"investment_by_inhabitant\":{\"title\":\"Inversi\u00F3n por habitante\"},\"meta\":{\"time\":\" en \",\"where\":\"En \"},\"population\":{\"title\":\"Habitantes\"},\"ss_members\":{\"title\":\"Afiliados a la Seguridad Social\"},\"unemployed_sector\":{\"agriculture\":\"Agricultura\",\"construction\":\"Construcci\u00F3n\",\"industry\":\"Industria\",\"services\":\"Servicios\",\"title\":\"Desempleados por sector\"},\"updated\":\"\u00DAltima actualizaci\u00F3n\"},\"graphics\":{\"age_distribution\":{\"axis\":\"a\u00F1os\",\"label\":\"habitantes\",\"title\":\"Comprueba la distribuci\u00F3n por edades de tu municipio\"},\"population_pyramid\":{\"adults\":\"Poblaci\u00F3n activa\",\"age\":\"Edad\",\"country\":\"Espa\u00F1a\",\"elderly\":\"Mayores\",\"elderly_info\":\"El %{percent} de la poblaci\u00F3n tiene m\u00E1s de %{limit} a\u00F1os\",\"mean\":\"Edad media: %{age} a\u00F1os\",\"median\":\"Edad mediana: %{age} a\u00F1os\",\"men\":\"Hombres\",\"mode\":\"Edad m\u00E1s com\u00FAn: %{age} a\u00F1os\",\"unemployed\":\"Desempleada\",\"women\":\"Mujeres\",\"youth\":\"Menores\",\"youth_info\":\"El %{percent} de la poblaci\u00F3n tiene menos de %{limit} a\u00F1os\"},\"rent_distribution\":{\"gross_income\":\"Renta bruta\",\"inhabitants\":\"Habitantes\",\"million\":\"mill\u00F3n\",\"thousand\":\"mil\",\"title\":\"Riqueza y poblaci\u00F3n en la provincia\"},\"unemployment_age\":{\"between_25_44\":\"Entre 25 y 44\",\"less_25\":\"Menores de 25\",\"more_44\":\"Mayores de 44\",\"title\":\"Desempleo seg\u00FAn la edad\"},\"unemployment_rate\":{\"country\":\"Espa\u00F1a\",\"title\":\"Comparaci\u00F3n de la tasa de paro\"},\"unemployment_sex\":{\"men\":\"Hombres\",\"title\":\"Desempleo seg\u00FAn el sexo\",\"women\":\"Mujeres\"}},\"inhabitants\":\"hab\",\"intro\":\"Conoce %{place} a trav\u00E9s de sus principales cifras: la poblaci\u00F3n, el empleo, la econom\u00EDa y los presupuestos.\",\"layouts\":{\"application\":{\"observatory\":\"Observatorio\"},\"menu_subsections\":{\"banner_map\":\"Un visor geogr\u00E1fico para explorar la estructura demogr\u00E1fica de %{place}\",\"demographic_observatory\":\"Observatorio demogr\u00E1fico\",\"economia\":\"Econom\u00EDa\",\"empleo\":\"Empleo\",\"poblacion\":\"Poblaci\u00F3n\"}}},\"gobierto_people\":{\"departments\":{\"index\":{\"description\":\"Cualquier organizaci\u00F3n que se re\u00FAne con un alto cargo debe registrarse como grupo de inter\u00E9s, y se crea un registro de los encuentros. \\\\u003ca href=\\\\\"https://web.gencat.cat/es/tramits/tramits-temes/registre-grups-interes\\\\\"\\\\u003eM\u00E1s informaci\u00F3n sobre la normativa de grupos de inter\u00E9s\\\\u003c/a\\\\u003e. Explore las organizaciones (empresas, fundaciones, asociaciones\u2026) que se re\u00FAnen con cargos de la Generalidad.\",\"events\":\"Reuniones registradas\",\"events_by_department\":\"Reuniones por departamentos\",\"explore_departments\":\"Explore los departamentos y sus altos cargos\",\"explore_people\":\"Consulte las agendas de los altos cargos\",\"people_events\":\"Altos cargos con m\u00E1s reuniones en departamentos\",\"people_with_events\":\"Altos cargos con reuniones registradas\",\"punchcard_title\":\"Reuniones por departamento y mes\"},\"show\":{\"interest_groups_box_subtitle\":\"con reuniones en el periodo\",\"interest_groups_box_title\":\"Grupos de inter\u00E9s\",\"interest_groups_box_title_single\":\"Grupo de inter\u00E9s\",\"interest_groups_rowchart_title\":\"Grupos de inter\u00E9s con m\u00E1s reuniones con este departamento\",\"interest_groups_with_events\":\"Grupos de inter\u00E9s que se han reunido con este departamento\",\"map_title\":\"\u00BFA d\u00F3nde viajan los altos cargos?\",\"meetings_box_subtitle\":\"con grupos de inter\u00E9s\",\"meetings_box_title\":\"Reuniones registradas\",\"meetings_box_title_single\":\"Reuni\u00F3n registrada\",\"people_box_subtitle\":\"con reuniones registradas\",\"people_box_title\":\"Altos cargos de este departamento\",\"people_box_title_single\":\"Alto cargo de este departamento\",\"people_rowchart_title\":\"Altos cargos de este departamento con m\u00E1s reuniones\",\"people_with_events\":\"Altos cargos de este departamento con reuniones registradas\",\"punchcard_title\":\"Reuniones por alto cargo y mes\"}},\"events\":{\"gobierto_people_person_post_published\":\"Actualizaci\u00F3n del blog: %{subject_name}\",\"gobierto_people_person_post_updated\":\"Actualizaci\u00F3n del post: %{subject_name}\",\"gobierto_people_person_published\":\"Creada nueva persona: %{subject_name}\",\"gobierto_people_person_statement_published\":\"Publicada la declaraci\u00F3n: %{subject_name}\",\"gobierto_people_person_statement_updated\":\"Actualizada la declaraci\u00F3n: %{subject_name}\",\"gobierto_people_person_updated\":\"Actualizaci\u00F3n de la informaci\u00F3n personal\"},\"exports\":{\"index\":{\"events\":{\"description\":\"Listado de los eventos (pasados y futuros) con t\u00EDtulo y descripci\u00F3n, asistentes, ubicaci\u00F3n...\",\"title\":\"Agendas\"},\"people\":{\"description\":\"Listado de los cargos, con sus datos de contacto, biograf\u00EDa, titulaciones, etc.\",\"title\":\"Cargos\"},\"posts\":{\"description\":\"\u00DAltimas entradas del conjunto de los blogs\",\"title\":\"Blogs\"},\"statements\":{\"description\":\"Listado de las declaraciones de bienes y actividades y todos sus elementos\",\"title\":\"Declaraciones de bienes y actividades\"}}},\"gifts\":{\"coc\":\"El C\u00F3digo de conducta regula qu\u00E9 obsequios se pueden recibir.\",\"description\":\"Los altos cargos deben abstenerse de aceptar regalos y donaciones de particulares y de entidades p\u00FAblicas o privadas a excepci\u00F3n hecha de las muestras no venales de cortes\u00EDa y objetos conmemorativos, oficiales o protocolarios que le puedan ser entregados por raz\u00F3n de su cargo.\",\"last\":\"\u00DAltimos obsequios\",\"none\":\"No se han registrado obsequios en este periodo\",\"title\":\"Obsequios\"},\"interest_groups\":{\"index\":{\"description\":\"Cualquier organizaci\u00F3n que se re\u00FAne con un alto cargo debe registrarse como grupo de inter\u00E9s, y se crea un registro de los encuentros. \\\\u003ca href=\\\\\"https://web.gencat.cat/es/tramits/tramits-temes/registre-grups-interes\\\\\"\\\\u003eM\u00E1s informaci\u00F3n sobre la normativa de grupos de inter\u00E9s\\\\u003c/a\\\\u003e. Explore las organizaciones (empresas, fundaciones, asociaciones\u2026) que se re\u00FAnen con cargos de la Generalidad.\",\"interest_groups\":\"Grupos de inter\u00E9s inscritos\",\"no_data\":\"No hay datos para las fechas seleccionadas\",\"rowchart_title\":\"Grupos de inter\u00E9s con m\u00E1s reuniones\",\"title\":\"Grupos de inter\u00E9s\"},\"show\":{\"event\":\"Reuni\u00F3n registradas\",\"events\":\"Reuniones registradas\",\"events_by_department\":\"Con qu\u00E9 departamentos se re\u00FAne este grupo\",\"events_by_person\":\"Altos cargos con los que se ha reunido este grupo\",\"explore_departments\":\"Explore los departamentos y sus altos cargos\",\"explore_people\":\"Consulte las agendas de los altos cargos\",\"people_with_events\":\"El n\u00FAmero de altos cargos con los que se ha reunido este grupo\",\"punchcard_title\":\"Reuniones por alto cargo y mes\",\"status\":\"Situaci\u00F3n de inscripci\u00F3n en el registro de grupos de inter\u00E9s: %{status}\"}},\"invitations\":{\"coc\":\"El C\u00F3digo de conducta regula qu\u00E9 invitaciones se pueden aceptar.\",\"description\":\"Los altos cargos deben aceptar s\u00F3lo el pago de viajes, desplazamientos y alojamientos por parte de otras administraciones p\u00FAblicas o de entidades p\u00FAblicas dependientes de \u00E9stas, universidades o entidades sin \u00E1nimo de lucro, cuando tenga que asistir invitado oficialmente por raz\u00F3n del cargo a una actividad relacionada con sus responsabilidades.\",\"last\":\"\u00DAltimas invitaciones\",\"none\":\"No se han registrado invitaciones en este periodo\",\"title\":\"Invitaciones\"},\"layouts\":{\"application\":{\"title\":\"Altos cargos y Agendas\"},\"departments\":{\"no_departments_within_dates\":\"Altos cargos y agendas\"},\"menu_subsections\":{\"agendas\":\"Agendas\",\"blogs\":\"Blogs\",\"departments\":\"Departamentos\",\"gifts\":\"Obsequios\",\"interest_groups\":\"Grupos de inter\u00E9s\",\"invitations\":\"Invitaciones\",\"people\":\"Cargos\",\"statements\":\"Declaraciones\",\"trips\":\"Viajes\"}},\"people\":{\"contact_methods\":{\"send_email\":\"Env\u00EDa un correo-e\"},\"gifts\":{\"index\":{\"gifts\":\"Obsequios\",\"no_gifts\":\"No hay obsequios en las fechas seleccionadas\",\"title\":\"Obsequios recibidos por %{person_name}\"}},\"google_calendar\":{\"authorization\":{\"new\":{\"success\":\"Configuraci\u00F3n guardada correctamente. Un \u00FAltimo paso, selecciona qu\u00E9 calendarios quieres publicar autom\u00E1ticamente en tu agenda.\"}},\"calendars\":{\"edit\":{\"explain\":\"Selecciona qu\u00E9 calendarios quieres publicar autom\u00E1ticamente en tu agenda\",\"save\":\"Guardar\",\"title\":\"Integraci\u00F3n con Google Calendar\"},\"update\":{\"success\":\"Calendarios guardados correctamente.\"}}},\"index\":{\"department_officials\":\"Altos cargos en %{department_name}\",\"no_people_within_range\":\"No hay ning\u00FAn alto cargo para este rango de fechas\",\"subscribable_box\":{\"title\":\"Reciba alertas en su correo-e\"},\"title\":\"Organigrama de %{site_name}\"},\"invitations\":{\"index\":{\"invitations\":\"Invitaciones\",\"no_invitations\":\"No hay invitaciones en las fechas seleccionadas\",\"title\":\"Invitaciones recibidas por %{person_name}\"}},\"latest_activity\":{\"no_activity\":\"Este perfil a\u00FAn no ha registrado ninguna actividad.\",\"title\":\"\u00DAltima actividad\"},\"navigation\":{\"agenda\":\"Agenda\",\"bio\":\"Biograf\u00EDa y CV\",\"blog\":\"Blog\",\"gift_received\":\"obsequio recibido\",\"gifts\":\"Obsequios y regalos\",\"gifts_received\":\"obsequios recibidos\",\"interest_group\":\"grupo de inter\u00E9s\",\"interest_groups\":\"grupos de inter\u00E9s\",\"invitation\":\"invitaci\u00F3n\",\"invitations\":\"invitaciones\",\"meeting_with\":\"reuni\u00F3n con\",\"meetings_with\":\"reuniones con\",\"statements\":\"Bienes y actividades\",\"trip_made\":\"viaje realizado\",\"trips\":\"Viajes\",\"trips_made\":\"viajes realizados\"},\"people_filter\":{\"organigram\":\"Organigrama de %{name}\",\"political_groups\":\"Grupos pol\u00EDticos de %{name}\"},\"person\":{\"picture\":\"Foto de %{name}\"},\"person_bio\":{\"show\":{\"download\":\"Descargar CV\",\"subtitle\":\"Biograf\u00EDa y CV\",\"title\":\"Perfil de %{person_name}\"}},\"person_events\":{\"index\":{\"agenda\":\"Agenda\",\"no_events\":\"No hay reuniones en las fechas seleccionadas\",\"past_events\":\"Eventos pasados\",\"title\":\"Agenda de %{person_name}\",\"upcoming_events\":\"Pr\u00F3ximos eventos\"},\"show\":{\"event_data\":{\"event_attachments\":\"Documentos\",\"event_attendees\":\"Asistentes\",\"event_locations\":\"Lugar\"},\"title\":\"Agenda de %{person_name}\"}},\"person_messages\":{\"create\":{\"error\":\"No se ha podido enviar el mensaje\",\"success\":\"Mensaje enviado correctamente\"},\"new\":{\"placeholders\":{\"body\":\"Escribe un mensaje\",\"email\":\"Tu correo-e\",\"name\":\"Tu nombre\"},\"submit\":\"Enviar\",\"title\":\"Env\u00EDa un mensaje a %{name}\"}},\"person_post_tags\":{\"show\":{\"filtering_by_tag\":\"Filtrando por \\\\\"%{tag}\\\\\"\",\"go_back\":\"Volver al blog\"}},\"person_posts\":{\"index\":{\"no_posts\":\"Todav\u00EDa no se ha publicado ning\u00FAn post.\",\"title\":\"El blog de %{person_name}, %{person_charge}\"},\"show\":{\"title\":\"El blog de %{person_name}, %{person_charge}\"}},\"person_statements\":{\"index\":{\"no_statements\":\"Todav\u00EDa no se ha publicado ninguna declaraci\u00F3n para esta persona.\",\"title\":\"Bienes y actividades de %{person_name}\"},\"show\":{\"download\":\"Descargar declaraci\u00F3n (%{file_size})\",\"title\":\"Bienes y actividades de %{person_name}\",\"view_previous\":\"Ver anteriores\"}},\"show\":{\"events_section_title\":\"\u00DAltimas reuniones\",\"gifts_section_title\":\"\u00DAltimos obsequios\",\"invitations_section_title\":\"\u00DAltimas invitaciones\",\"no_data\":\"No hay datos en las fechas seleccionadas\",\"party\":{\"government\":\"Equipo de gobierno\",\"opposition\":\"Oposici\u00F3n\"},\"trips_section_title\":\"\u00DAltimos viajes\"},\"subscription_button\":{\"cancel\":\"Cancelar\",\"follow\":\"Seguir\"},\"trips\":{\"index\":{\"no_trips\":\"No hay viajes en las fechas seleccionadas\",\"title\":\"Viajes realizados por %{person_name}\",\"trips\":\"Viajes\"},\"trip\":{\"accomodation_expenses\":\"Hoteles y alojamiento\",\"by\":\"por\",\"company\":\"Comitiva\",\"expenses\":\"Gastos\",\"food_expenses\":\"Dietas y manutenci\u00F3n\",\"in\":\"en\",\"meeting_name\":{\"one\":\"reuni\u00F3n\",\"other\":\"reuniones\"},\"other_expenses\":\"Otros gastos\",\"person_name\":{\"one\":\"persona\",\"other\":\"personas\"},\"total_expenses\":\"Gastos totales\",\"transport_expenses\":\"Transporte\"}},\"upcoming_events\":{\"no_upcoming_events\":\"No hay eventos pr\u00F3ximos en esta agenda.\",\"title\":\"Agenda\",\"view_all\":\"Ver todos\"}},\"people_filter\":{\"all\":\"Todos\",\"categories\":{\"executive\":\"Directivos\"},\"parties\":{\"government\":\"Equipo de Gobierno\",\"opposition\":\"Oposici\u00F3n\"},\"political_groups\":{\"title\":\"Grupos pol\u00EDticos\"}},\"person_events\":{\"index\":{\"agenda_switcher\":{\"subtitle\":\"Filtrar por miembros de la comunidad\",\"title\":\"Consulte la agenda de...\"},\"displaying_events_of\":\"Mostrando eventos del %{date}\",\"go_back\":\"Volver\",\"no_events\":\"No hay eventos futuros ni pasados.\",\"no_past_events\":\"No hay eventos pasados.\",\"no_upcoming_events\":\"No hay eventos futuros. \u00C9chele un vistazo a los pasados.\",\"past_events\":\"Eventos pasados\",\"subscribable_box\":{\"title\":\"Reciba un resumen de las agendas de sus representantes\"},\"title\":\"Agendas de los miembros de %{site_name}\",\"upcoming_events\":\"Agenda\"},\"person_events_filter\":{\"agenda\":\"Agenda de los miembros del %{name}\"}},\"person_gifts\":{\"index\":{\"error\":\"No hemos encontrado la p\u00E1gina que busca\"}},\"person_mailer\":{\"new_message\":{\"hi\":\"Hola\",\"new_message\":\"Has recibido un nuevo mensaje de %{name} (%{reply_to})\",\"subject\":\"Has recibido un nuevo mensaje desde %{name}\"}},\"person_post_tags\":{\"show\":{\"filtering_by_tag\":\"Filtrando por \\\\\"%{tag}\\\\\"\",\"go_back\":\"Volver\"}},\"person_posts\":{\"index\":{\"subscribable_box\":{\"title\":\"Reciba alertas en su correo-e\"},\"switcher\":{\"subtitle\":\"Filtrar por miembros de la comunidad\",\"title\":\"Consulte los blogs de...\"},\"title\":\"Blogs\"},\"person_post_excerpt\":{\"continue\":\"Seguir leyendo\"}},\"person_statements\":{\"index\":{\"subscribable_box\":{\"title\":\"Reciba alertas en su correo-e\"},\"switcher\":{\"subtitle\":\"Filtrar por miembros de la comunidad\",\"title\":\"Consulte las declaraciones de...\"},\"title\":\"Declaraciones\"}},\"person_trips\":{\"index\":{\"error\":\"No hemos encontrado la p\u00E1gina que busca\"}},\"shared\":{\"app_breadcrumb_title\":\"Visor de la actividad directiva\",\"app_title\":\"Actividad directiva p\u00FAblica derivada del C\u00F3digo de conducta\",\"check_it_out\":\"Consultad el texto del C\u00F3digo de conducta\",\"datepicker\":{\"1m\":\"\u00DAltimo mes\",\"1y\":\"\u00DAltimo a\u00F1o\",\"3m\":\"\u00DAltimos tres meses\",\"all\":\"Todo\",\"range\":\"Rango personalizado\",\"today\":\"Hoy\"},\"datepicker_fixed\":\"Datos correspondientes al periodo\",\"destination\":\"destino\",\"destinations\":\"destinos\",\"displacement\":\"desplazamiento\",\"displacements\":\"desplazamientos\",\"from\":\"de\",\"locales\":{\"locale\":\"Idioma\",\"page_locale\":\"Idioma de la p\u00E1gina\",\"select_locale\":\"Selecciona idioma\"},\"meetings_punchcard\":{\"tooltip\":\"reuniones\",\"tooltip_single\":\"reuni\u00F3n\"},\"meetings_rowchart\":{\"tooltip\":\"reuniones\",\"tooltip_single\":\"reuni\u00F3n\"},\"noresults\":\"Sin resultados\",\"open_data_footer\":{\"gifts\":\"Obsequios\",\"invitations\":\"Invitaciones\",\"meetings\":\"Reuniones\",\"title\":\"Acceder a los datos en el Portal de datos abiertos\",\"trips\":\"Viajes\"},\"table_item\":{\"view_details\":\"Ver detalles\"},\"to\":\"para\",\"view_all\":\"Ver todos\",\"view_all_f\":\"Ver todas\",\"view_charges\":\"Ver todos los cargos\",\"view_details\":\"Ver detalles\",\"view_gifts\":\"Ver todos los obsequios en el Portal de datos abiertos\",\"view_invitations\":\"Ver todas las invitaciones en el Portal de datos abiertos\",\"view_officials\":\"Ver altos cargos\"},\"welcome\":{\"index\":{\"departments\":\"Departamentos\",\"departments_extra\":\"se muestran los departamentos que existen o han existido en funci\u00F3n del periodo seleccionado\",\"departments_rowchart_title\":\"Departamentos con m\u00E1s reuniones\",\"description_1\":\"El visor muestra las reuniones de los altos cargos de la administraci\u00F3n de la Generalitat con los grupos de inter\u00E9s en el periodo temporal que seleccione. Tambi\u00E9n encontrar\u00E1 los regalos e invitaciones permitidos por el C\u00F3digo de conducta, que obliga a los altos cargos a hacer p\u00FAblica esta informaci\u00F3n. Asimismo, el visor permite consultar los viajes al extranjero del presidente, consejeros, asesores y altos cargos en el ejercicio de sus funciones.\",\"description_2_html\":\"Respecto de la informaci\u00F3n de los altos cargos, se muestran los cargos que ocupan o han ocupado en el periodo temporal seleccionado.\",\"events_summary\":{\"no_events\":\"No hay eventos\",\"no_upcoming_events\":\"No hay eventos futuros. \u00C9chele un vistazo a los pasados.\",\"past_events\":\"Eventos pasados\",\"upcoming_events\":\"Pr\u00F3ximos eventos\",\"view_all\":\"Ver todos\"},\"gifts\":\"Obsequios y regalos\",\"interest_groups_box_subtitle\":\"con reuniones en el periodo\",\"interest_groups_box_title\":\"Grupos de inter\u00E9s\",\"interest_groups_box_title_single\":\"Grupo de inter\u00E9s\",\"interest_groups_rowchart_title\":\"Grupos de inter\u00E9s con m\u00E1s reuniones\",\"map_title\":\"\u00BFA d\u00F3nde viajan los altos cargos?\",\"meetings_box_subtitle\":\"con grupos de inter\u00E9s\",\"meetings_box_title\":\"Reuniones registradas\",\"meetings_box_title_single\":\"Reuni\u00F3n registrada\",\"people_box_subtitle\":\"con actividad registrada\",\"people_box_title\":\"Altos cargos\",\"people_box_title_single\":\"Alto cargo\",\"people_rowchart_title\":\"Altos cargos con m\u00E1s reuniones\",\"people_summary\":{\"no_people\":\"No hay personas\",\"title\":\"Organigrama de %{site_name}\",\"view_all\":\"Ver todos\"},\"posts_summary\":{\"title\":\"Blogs\",\"view_all\":\"Ver todos\"},\"punchcard_title\":\"Reuniones por alto cargo y mes\",\"search\":\"Buscar\",\"search_placeholder\":\"Busca un cargo\",\"statements\":\"Declaraciones de bienes y actividades\",\"subscribable_box\":{\"title\":\"Reciba un resumen semanal de las agendas de sus representantes\"},\"title\":\"Agendas\",\"trips\":\"Viajes y desplazamientos\"}}},\"gobierto_plans\":{\"custom_fields_plugins\":{\"budgets\":{\"detail_text\":\"ver detalle en Presupuestos\",\"title\":\"Presupuesto\"}},\"events\":{\"gobierto_plans_plan_created\":\"Plan creado\",\"gobierto_plans_plan_data_csv_imported\":\"Datos de plan importados desde fichero CSV\",\"gobierto_plans_plan_type_created\":\"Tipo de plan creado\",\"gobierto_plans_plan_type_updated\":\"Tipo de plan actualizado\",\"gobierto_plans_plan_updated\":\"Plan actualizado\",\"gobierto_plans_progresses_updated\":\"Progresos de proyectos actualizados\",\"gobierto_plans_project_created\":\"Proyecto creado\",\"gobierto_plans_project_destroyed\":\"Proyecto eliminado del plan\",\"gobierto_plans_project_updated\":\"Proyecto actualizado\"},\"layouts\":{\"application\":{\"plans\":\"Planes\"}},\"plan_types\":{\"sdg\":{\"header\":{\"sdgs_description\":\"Los Objetivos de Desarrollo Sostenible son un conjunto de objetivos mundiales relacionados con los desaf\u00EDos ambientales, pol\u00EDticos y econ\u00F3micos con que se enfrenta nuestro mundo. Aqu\u00ED puedes ver como el Plan de Actuaci\u00F3n Municipal conecta con los ODS.\",\"sdgs_title\":\"Objetivos de Desarrollo Sostenible\"},\"projects\":{\"sdg_projects_empty\":\"No hay %{projects_term} del plan relacionados con este ODS\",\"sdg_projects_title\":\"%{projects_term} del plan relacionados con este ODS\"}},\"show\":{\"category\":\"Categor\u00EDa\",\"customize_columns\":\"Personalizar columnas\",\"dashboards\":\"Dashboards\",\"desc\":\"Descripci\u00F3n\",\"ends\":\"Fin\",\"global_execution\":\"Estado de ejecuci\u00F3n global\",\"latest_update_html\":\"\\\\u003cstrong\\\\u003e\u00DAltima actualizaci\u00F3n:\\\\u003c/strong\\\\u003e %{date}\",\"loading\":\"Cargando...\",\"percent_out_of_total\":\"% sobre total\",\"plan\":\"Plan\",\"progress\":\"Progreso\",\"read_less\":\"Leer menos\",\"read_more\":\"Leer m\u00E1s\",\"starts\":\"Inicio\",\"status\":\"Estado\",\"view_by\":\"Ver por\"}}},\"gobierto_visualizations\":{\"layouts\":{\"application\":{\"gobierto_visualizations\":{\"contracts\":\"Contratos y licitaciones\",\"costs\":\"Costes\",\"debts\":\"Deuda\",\"odss\":\"ODS\",\"subsidies\":\"Subvenciones\"}}},\"shared\":{\"download_data\":\"Descarga los datos completos en formatos reutilizables\",\"loading\":\"Cargando datos...\"},\"visualizations\":{\"categories\":{\"agriculture\":\"Servicios agr\u00EDcolas y forestales\",\"architecture\":\"Arquitectura e ingenier\u00EDa\",\"audiovisual\":\"Audiovisual\",\"catering\":\"Hosteler\u00EDa y restauraci\u00F3n\",\"construction\":\"Construcci\u00F3n y mantenimiento\",\"culture\":\"Cultura y deporte\",\"education\":\"Ense\u00F1anza y formaci\u00F3n\",\"electrical\":\"Equipos el\u00E9ctricos y de iluminaci\u00F3n\",\"energy\":\"Energ\u00EDa\",\"environment\":\"Medio ambiente\",\"finance\":\"Servicios financieros y seguros\",\"furniture\":\"Mobiliario\",\"health\":\"Salud\",\"industry\":\"Industria y maquinaria\",\"it\":\"Tecnolog\u00EDa de la informaci\u00F3n\",\"legal\":\"Jur\u00EDdico, contabilidad, mercadotecnia...\",\"maintenance\":\"Reparaci\u00F3n y mantenimiento\",\"other\":\"Otros\",\"print\":\"Impresi\u00F3n y material de oficina\",\"public_services\":\"Servicios p\u00FAblicos\",\"real_estate\":\"Inmobiliario\",\"security\":\"Seguridad\",\"social_services\":\"Servicios sociales\",\"software\":\"Consultor\u00EDa y desarrollo de software, equipos y licencias\",\"telecom\":\"Telecomunicaciones y correos\",\"textile\":\"Textil\",\"transportation\":\"Transporte\"},\"contract_statuses\":{\"abandoned\":\"Desistimiento\",\"awarded\":\"Adjudicado\",\"finally_awarded\":\"Finalmente adjudicado\",\"finally_void\":\"Desierto\",\"formalized\":\"Formalizado\",\"highest_rated\":\"Mejor valorado\",\"provisionally_awarded\":\"Provisionalmente adjudicado\",\"provisionally_void\":\"Provisionalmente desierto\",\"revoked\":\"Revocado\",\"void\":\"Desierto\"},\"contract_types\":{\"construction\":\"Obras\",\"other\":\"Otros\",\"patrimonial\":\"Patrimonial\",\"private_contract\":\"Privado\",\"public_private_collaboration\":\"Colaboraci\u00F3n entre el sector p\u00FAblico y sector privado\",\"public_services_management\":\"Gesti\u00F3n de Servicios P\u00FAblicos\",\"public_works\":\"Concesi\u00F3n de Obras p\u00FAblicas\",\"services\":\"Servicios\",\"special_administrative\":\"Administrativo especial\",\"supplies\":\"Suministros\"},\"contracts\":{\"amount_by_type_of_process\":\"Importe por tipo de procedimiento\",\"amount_distribution\":\"Distribuci\u00F3n por importes\",\"assignee\":\"Adjudicatario\",\"categories\":\"Categor\u00EDas\",\"contract\":\"Contrato\",\"contract_amount\":\"Imp. adjudicaci\u00F3n\",\"contract_type\":\"Tipo de contrato\",\"contractor\":\"Contrato\",\"contracts\":\"Contratos\",\"contracts_assigned_to\":\"Contratos adjudicados a\",\"contracts_show\":{\"assignee_description\":\"Empresa que ha ganado el contrato (Adjudicatario)\",\"assignees_description\":\"Empresas que han ganado el contrato (Adjudicatarios)\",\"awarding_entity\":\"Entidad adjudicadora\",\"batch\":\"Lote\",\"bid_description\":\"Presupuesto base de licitaci\u00F3n sin impuestos\",\"bidders_description\":\"N\u00FAmero de empresas que se han presentado al proceso (Licitadores)\",\"contract_amount\":\"Importe de adjudicaci\u00F3n\",\"entity\":\"Entidad\",\"estimated_value\":\"Valor estimado\",\"external_source\":\"Fuente\",\"formalization\":\"Formalizaci\u00F3n\",\"process\":\"Procedimiento\",\"question_description\":\"\u00BFQu\u00E9 % del presupuesto supone este contrato?\",\"tender\":\"Licitaci\u00F3n\",\"type\":\"Tipo\"},\"date\":\"Fecha\",\"dates\":\"Fechas\",\"description\":\"Visualizaci\u00F3n y an\u00E1lisis de los contratos adjudicados y las licitaciones del %{entity_name}\",\"entities\":\"Entidades\",\"final_amount_no_taxes\":\"Importe\",\"formalization_date\":\"Fecha de formalizaci\u00F3n\",\"fromto\":\"Desde A N\u00BA. Contr.\",\"main_assignees\":\"Principales adjudicatarios\",\"more\":\"M\u00E1s de\",\"nav\":{\"contracts\":\"Contratos\",\"summary\":\"Resumen\",\"tenders\":\"Licitaciones\"},\"process_type\":\"Tipo de procedimiento\",\"search_placeholder\":\"Busca por adjudicatario o por t\u00EDtulo del contrato\",\"status\":\"Estado\",\"submission_date\":\"Fecha\",\"summary\":{\"contracts\":\"Contratos adjudicados\",\"contracts_for\":\"contratos por importe de\",\"mean_amount\":\"Importe medio\",\"median_amount\":\"Importe mediano\",\"tenders\":\"Licitaciones\",\"tenders_for\":\"licitaciones por importe de\",\"tip_1\":\"El %{strong1} de los contratos son menores de %{strong2}\",\"tip_2\":\"El mayor contrato supone un %{strong} de todo el gasto en contratos\",\"tip_3\":\"El %{strong} de contratos concentran el 50% de todo el gasto\"},\"tender_amount\":\"Imp. licitaci\u00F3n\",\"tender_date\":\"Fecha de licitaci\u00F3n\",\"title\":\"Contratos y licitaciones\"},\"costs\":{\"activities\":\"Actividades\",\"cost_direct\":\"Coste directo\",\"cost_indirect\":\"Coste indirecto\",\"cost_inhabitant\":\"Coste/habitante\",\"cost_per_inhabitant\":\"Coste por habitante\",\"coverage\":\"Cobertura\",\"description\":\"L\\'%{entity_name} presta servicios a sus ciudadanos a partir de sus competencias. Esta prestaci\u00F3n de servicios supone un coste que se cubre con los ingresos que dispone el Ayuntamiento, que son los derivados del propio servicio a prestar o bien de recursos generales de los impuestos o subvenciones recibidas.\",\"description_2\":\"En este apartado se muestran los datos sobre los costes de los servicios y los ingresos necesarios para prestarlos.\",\"description_3\":\"El punto de partida es el presupuesto municipal, pero con este an\u00E1lisis se ampl\u00EDa y se concreta el coste real de un servicio ya que podemos encontrar relacionado el coste indirecto (de apoyo) necesario para la prestaci\u00F3n de un servicio.\",\"detail\":\"Detalle\",\"distribution\":\"Distribuci\u00F3n de costes por \u00E1rea\",\"home\":\"Inicio\",\"income\":\"Ingresos\",\"inhabitants\":\"Habitantes\",\"item\":{\"competence\":\"Competencia\",\"description\":\"Descripci\u00F3n\",\"equipments\":\"Equipamientos\",\"external_services\":\"Servicios externos\",\"goods_and_services\":\"Bienes y servicios\",\"income_cost\":\"Ingresos - Costes\",\"legal_framework\":\"Marco legal\",\"observation\":\"Observaciones\",\"personal_cost\":\"Coste personal\",\"public_tax\":\"Tasa o precios p\u00FAblicos\",\"subsidies\":\"Subvenciones\",\"total\":\"Total\",\"transference\":\"Transferencias\",\"types\":\"Tipos\"},\"per_inhabitant\":\"por habitante\",\"see_all\":\"Ver todos\",\"title\":\"Costes\",\"tooltips\":{\"cost_direct\":\"Recursos necesarios para la prestaci\u00F3n de un servicio o actividad finalista y que se relacionan directamente.\",\"cost_indirect\":\"Recursos para la prestaci\u00F3n de servicios no finalistas y que son de apoyo necesario para la realizaci\u00F3n de servicios y actividades finalistas.\",\"cost_per_habitant\":\"Coste total dividido por el n\u00FAmero de habitantes.\",\"cost_total\":\"Suma del coste directo y coste indirecto.\",\"coverage\":\"Grado de cobertura de los ingresos directamente relacionados con el coste total de la actividad o servicio.\",\"income\":\"Ingresos directamente relacionados con la prestaci\u00F3n del servicio, ya sean derivados de la aplicaci\u00F3n de una tasa o precio p\u00FAblico o bien de una subvenci\u00F3n.\"},\"tooltips_items\":{\"cost_indirect\":\"Parte proporcional del coste de las actividades no finalistas (recursos humanos, servicios econ\u00F3micos).\",\"coverage\":\"Medida (en%) en el que los ingresos directamente relacionados con la actividad son suficientes para cubrir su coste.\",\"equipments\":\"Coste proporcional del uso de la Infrastucturas necesaria para la prestaci\u00F3n de la actividad o servicio (consumos y mantenimientos de los edificios, veh\u00EDculos) en funci\u00F3n de su grado de utilizaci\u00F3n.\",\"externalServices\":\"Servicios diversos adquiridos por el Ayuntamiento y prestaciones de personas jur\u00EDdicas o f\u00EDsicas no integradas en la plantilla.\",\"goodsServices\":\"Valoraci\u00F3n monetaria del consumo de material fungible necesario y no almacenable necesario para la prestaci\u00F3n de la actividad o servicio (suministro, material de oficina)\",\"income_cost\":\"Diferencia entre conjunto de ingresos directamente relacionados con la actividad y el coste necesario para su prestaci\u00F3n. Un saldo negativo indica la insuficiencia de recursos espec\u00EDficos y la necesidad de financiaci\u00F3n con recursos generales del Ayuntamiento.\",\"staff_cost\":\"C\u00F3mputo anual de la parte de los sueldos y salarios de las trabajadoras y trabajadores proporcional a su dedicaci\u00F3n a la actividad.\",\"subsidies\":\"Ingresos sin contraprestaci\u00F3n directa por parte del beneficiario, destinados a una actividad o un proyecto espec\u00EDfico.\",\"taxes\":\"Contraprestaciones econ\u00F3micas recibidas por la prestaci\u00F3n de un servicio o por la utilizaci\u00F3n privativa o aprovechamiento especial del dominio p\u00FAblico.\",\"transferences\":\"Aportaciones de recursos financieros por parte del Ayuntamiento en concepto de subvenci\u00F3n previamente concedida.\"},\"total\":\"Total\",\"total_cost\":\"Coste total\"},\"debts\":{\"breakdown_debt\":\"Desglose de la deuda\",\"creditor\":\"Por acreedor\",\"date_debt\":\"Datos de deuda a 31 de diciembre de 2024.\",\"debtor\":\"Por deudor\",\"description\":\"La deuda financiera y a largo plazo del Ayuntamiento englova la deuda de todos sus entes dependientes (Sociedades Mercantiles, EPE\u2019s, Fundacio\u00F3ns, Consorcios).\",\"evolution_debt\":\"Evoluci\u00F3n de la deuda\",\"millions\":\"La unidad de las cifras de este gr\u00E1fico es millones de euros.\",\"title\":\"Deuda\",\"total_debt\":\"Deuda total\"},\"odss\":{\"amount\":\"Importe\",\"assigned\":\"Alineado\",\"description_html\":\"\\\\u003cp\\\\u003eDesde el a\u00F1o 2015, la ONU ha aprobado la Agenda 2030, incorporando los 17 Objetivos de Desarrollo Sostenible (ODS), y establecido una visi\u00F3n transformadora hacia la sostenibilidad econ\u00F3mica, social y ambiental, este Ayuntamiento ha colaborado en abrir un nuevo camino para mejorar la vida de todas y todos, sin dejar a nadie atr\u00E1s.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eEs por ello, que despu\u00E9s de presentar el Plan Estrat\u00E9gico Municipal 2023-2027 alineado con los ODS, se compite la alineaci\u00F3n del presupuesto municipal con la Agenda 2030.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eEl visor del presupuesto permite una mejor evaluaci\u00F3n de la adecuaci\u00F3n de los recursos utilizados y las prioridades pol\u00EDticas, y contribuye a dirigir los esfuerzos hacia las \u00E1reas donde se necesita un mayor enfoque.\\\\u003c/p\\\\u003e \\\\u003cp\\\\u003eEsta herramienta se plantea con el objetivo de ofrecer a la ciudadan\u00EDa una visi\u00F3n integral del grado de alineamiento de las gastos municipales de este a\u00F1o con la consecuci\u00F3n de los ODS.\\\\u003c/p\\\\u003e\",\"functional_code\":\"C\u00F3digo programa\",\"label_title_budgets_ods\":\"Distribuci\u00F3n de partidas por ODS\",\"label_title_ods\":\"Distribuci\u00F3n de gastos por Objetivos de Desarrollo Sostenible\",\"name\":\"Nombre\",\"ods_distribution\":\"Distribuci\u00F3n ODS\",\"title\":\"Presupuesto vigente alineado con los Objetivos de Desarrollo Sostenible (ODS)\",\"unassigned\":\"Sin alinear\",\"updated_date\":\"Datos actualizados el 18 de marzo de 2025\"},\"process_types\":{\"based_on_agreement\":\"Basat en Acord Marc\",\"competitive_dialogue\":\"Di\u00E1logo competitivo\",\"dynamic_acquisition\":\"Basado en sistema din\u00E1mico de adquisici\u00F3n\",\"innovation\":\"Asociaci\u00F3n para la innovaci\u00F3n\",\"innovation_derived\":\"Derivado de asociaci\u00F3n para la innovaci\u00F3n\",\"internal_rules\":\"Normas Internas\",\"minor_contract\":\"Contrato menor\",\"negotiated\":\"Licitaci\u00F3n con negociaci\u00F3n\",\"negotiated_with_publicity\":\"Negociado con publicidad\",\"negotiated_without_publicity\":\"Negociado sin publicidad\",\"open\":\"Abierto\",\"open_simplified\":\"Abierto simplificado\",\"others\":\"Otros\",\"project_competition\":\"Concurso de proyectos\",\"restricted\":\"Restringido\"},\"subsidies\":{\"amount\":\"Importe\",\"amount_distribution\":\"Distribuci\u00F3n por importes\",\"beneficiary\":\"Beneficiario\",\"call\":\"Convocatoria\",\"category\":\"Categor\u00EDa\",\"date\":\"Fecha\",\"dates\":\"Fechas\",\"description\":\"Visualizaci\u00F3n y an\u00E1lisis de las subvenciones concedidas por %{entity_name}\",\"details\":\"De acuerdo con lo previsto en el art\u00EDculo 7.8 del Real Decreto 130/2019, la informaci\u00F3n sobre concesiones permanecer\u00E1 publicada durante los cuatro a\u00F1os naturales siguientes al a\u00F1o en que se concedi\u00F3 la subvenci\u00F3n en el caso de personas jur\u00EDdicas, y en el caso de personas f\u00EDsicas la publicidad se reduce al a\u00F1o de concesi\u00F3n y al a\u00F1o siguiente.\",\"fromto\":\"Desde A N\u00BA. Subv.\",\"main_beneficiaries\":\"Principales beneficiarios\",\"more\":\"M\u00E1s de\",\"nav\":{\"subsidies\":\"Subvenciones\",\"summary\":\"Resumen\"},\"person\":\"Persona individual\",\"subsidies\":\"Subvenciones\",\"subsidies_amount\":\"Imp. Subvenci\u00F3n\",\"subsidies_total\":\"Total Subvenciones\",\"summary\":{\"collective_subsidies_for\":\"a colectivos por importe de\",\"individual_subsidies_for\":\"a particulares por importe de\",\"mean_amount\":\"Importe medio\",\"median_amount\":\"Importe mediano\",\"subsidies\":\"Subvenciones\",\"subsidies_for\":\"subvenciones por importe de\",\"tip_1\":\"El %{strong1} de las subvenciones son menores de %{strong2}\",\"tip_2\":\"La mayor subvenci\u00F3n supone un %{strong} de todo el gasto en subvenciones\",\"tip_3\":\"El %{strong} de subvenciones concentran el 50% de todo el gasto\"},\"title\":\"Subvenciones\"},\"tender_statuses\":{\"awarded\":\"Adjudicada\",\"cancelled\":\"Desistida\",\"evaluation\":\"Evaluaci\u00F3n\",\"modified\":\"Anulada\",\"partially_awarded\":\"Parcialmente adjudicada\",\"partially_resolved\":\"Parcialmente resuelta\",\"prior_announcement\":\"Anuncio previo\",\"prior_evaluation\":\"Evaluaci\u00F3n previa\",\"provisionally_resolved\":\"Adjudicaci\u00F3n provisional\",\"published\":\"Publicada\",\"resolved\":\"Resuelta\"},\"visualizations\":{\"title_beeswarm\":\"Contratos por tipo, volumen, tama\u00F1o y fecha\",\"tooltip_beeswarm\":\"Importe de adjudicaci\u00F3n\",\"tooltip_treemap\":\"Total contratos\"}}},\"grammatical_particles\":{\"from\":\"de\",\"of\":\"de\",\"of_the\":{\"f\":\"de la\",\"m\":\"del\",\"n\":\"del\"},\"our\":{\"f\":\"nuestra\",\"m\":\"nuestro\",\"n\":\"nuestro\"},\"the\":{\"f\":\"la\",\"m\":\"el\",\"n\":\"el\"},\"to\":\"a\",\"your\":{\"f\":\"tu\",\"m\":\"tu\",\"n\":\"tu\"}},\"helpers\":{\"page_entries_info\":{\"more_pages\":{\"display_entries\":\"Mostrando %{entry_name} \\\\u003cb\\\\u003e%{first}\\\\u0026nbsp;-\\\\u0026nbsp;%{last}\\\\u003c/b\\\\u003e de \\\\u003cb\\\\u003e%{total}\\\\u003c/b\\\\u003e en total\"},\"one_page\":{\"display_entries\":{\"one\":\"Mostrando \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{entry_name}\",\"other\":\"Mostrando \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e %{entry_name}\",\"zero\":\"No hay %{entry_name}\"}}},\"select\":{\"prompt\":\"-- selecciona --\"},\"submit\":{\"create\":\"Crear\",\"submit\":\"Guardar\",\"update\":\"Actualizar\"}},\"invisible_captcha\":{\"sentence_for_humans\":\"Si es humano, por favor, ignore este campo.\",\"timestamp_error_message\":\"Perd\u00F3n, eso ha sido muy r\u00E1pido. Por favor, vuelva a enviar el formulario.\"},\"issue\":{\"events\":{\"issue_description_translations_changed\":\"Nuevo tema creado\"}},\"issues\":{\"events\":{\"issues_issue_created\":\"Tema creado\",\"issues_issue_updated\":\"Tema actualizado\"}},\"layouts\":{\"accept_privacy_policy_signup\":\"Al registrarse est\u00E1 aceptando la pol\u00EDtica de privacidad.\",\"application\":{\"disclaimer\":\"Esta web es una demostraci\u00F3n de Gobierto, software de transparencia y participaci\u00F3n.\",\"more_information\":\"M\u00E1s informaci\u00F3n en gobierto.es\",\"search\":\"Busca...\",\"session\":{\"alerts\":\"Sus alertas\",\"login\":\"Haga login o reg\u00EDstrese\",\"notifications\":\"Notificaciones\",\"sign_in\":\"Iniciar sesi\u00F3n\",\"sign_out\":\"Cerrar sesi\u00F3n\",\"title\":\"Tu cuenta\"},\"start\":\"Inicio\"},\"gobierto_budgets\":{\"application\":{\"about_the_data\":\"Sobre los datos\",\"disclaimer\":\"Esta web es una demostraci\u00F3n de Gobierto, software de transparencia y participaci\u00F3n\",\"is_open_source\":\"es software libre creado por\",\"more_information\":\"M\u00E1s informaci\u00F3n en gobierto.es\",\"session\":{\"admin\":\"Administraci\u00F3n\",\"alerts\":\"Tus alertas\",\"notifications\":\"Notificaciones\",\"sign_in\":\"Iniciar sesi\u00F3n\",\"sign_out\":\"Cerrar sesi\u00F3n\",\"title\":\"Tu cuenta\"}}},\"mailcheck\":{\"suggestion_message\":\"\u00BFQuieres decir\"},\"sandbox\":{\"application\":{\"about_the_data\":\"Sobre los datos\",\"disclaimer\":\"Esta web es una demostraci\u00F3n de Gobierto, software de transparencia y participaci\u00F3n\",\"is_open_source\":\"es software libre creado por\",\"more_information\":\"M\u00E1s informaci\u00F3n en gobierto.es\",\"session\":{\"admin\":\"Administraci\u00F3n\",\"alerts\":\"Tus alertas\",\"notifications\":\"Notificaciones\",\"sign_in\":\"Iniciar sesi\u00F3n\",\"sign_out\":\"Cerrar sesi\u00F3n\",\"title\":\"Tu cuenta\"}}},\"search\":{\"budget_line_item_expense\":\"Partida presupuestaria - Gasto\",\"budget_line_item_income\":\"Partida presupuestaria - Ingreso\",\"dataset_item\":\"Datos\",\"drag_drop_instructions\":\"Arrastre y suelte en la parte izquierda para colocar esta p\u00E1gina en el men\u00FA\",\"event_item\":\"Evento\",\"no_results\":\"La b\u00FAsqueda no ha coincidido con ninguna p\u00E1gina. Pruebe algo como usando t\u00E9rminos m\u00E1s generales o verificando la ortograf\u00EDa.\",\"page_item\":\"P\u00E1gina\",\"person_item\":\"Biograf\u00EDa\",\"person_post_item\":\"Post\",\"person_statement_item\":\"Declaraci\u00F3n\",\"plan_project_item\":\"Plan - Actuaci\u00F3n\",\"updated\":\"Actualizado\"}},\"locales\":{\"ca\":\"Catal\u00E1n\",\"ca_short\":\"CA\",\"en\":\"Ingl\u00E9s\",\"en_short\":\"EN\",\"es\":\"Castellano\",\"es_short\":\"ES\"},\"number\":{\"currency\":{\"format\":{\"delimiter\":\".\",\"format\":\"%n %u\",\"precision\":2,\"separator\":\",\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"\u20AC\"}},\"format\":{\"delimiter\":\".\",\"precision\":3,\"separator\":\",\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"mil millones\",\"million\":\"mill\u00F3n\",\"quadrillion\":\"mil billones\",\"thousand\":\"mil\",\"trillion\":\"bill\u00F3n\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":1,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"tb\":\"TB\"}}},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"routes\":{\"bio\":\"biografia\",\"department_people\":\"personas/departamentos/:department_slug\",\"departments\":\"departamentos\",\"events\":\"agendas\",\"executive_category_events\":\"agendas/directivos\",\"executive_category_past_events\":\"agendas/directivos/eventos-pasados\",\"gifts\":\"obsequios-y-regalos\",\"government\":\"gobierno\",\"government_party_events\":\"agendas/gobierno\",\"government_party_past_events\":\"agendas/gobierno/eventos-pasados\",\"interest_groups\":\"grupos-de-interes\",\"invitations\":\"invitaciones\",\"managers\":\"directivos\",\"messages\":\"contacto\",\"opposition\":\"oposicion\",\"opposition_party_events\":\"agendas/oposicion\",\"opposition_party_past_events\":\"agendas/oposicion/eventos-pasados\",\"past_events\":\"agendas/eventos-pasados\",\"people\":\"personas\",\"people_and_agendas\":\"cargos-y-agendas\",\"people_government\":\"personas/gobierno\",\"people_managers\":\"personas/directivos\",\"people_opposition\":\"personas/oposicion\",\"person_events\":\"agendas/:container_slug\",\"person_past_events\":\"agendas/:container_slug/eventos-pasados\",\"person_post_tags\":\"blogs/:person_slug/tags\",\"person_posts\":\"blogs/:person_slug\",\"person_statements\":\"declaraciones/:person_slug\",\"political_groups\":\"personas/grupos-politicos\",\"post_tags\":\"blogs/tags\",\"posts\":\"blogs/posts\",\"statements\":\"declaraciones\",\"trips\":\"viajes-y-desplazamientos\"},\"scopes\":{\"events\":{\"scopes_scope_created\":\"\u00C1mbito creado\",\"scopes_scope_updated\":\"\u00C1mbito actualizado\"}},\"shared\":{\"currently\":\"actualmente\",\"download_open_data\":{\"exports\":\"Descargue los datos en formato reutilizable\"},\"poll_question\":{\"multiple_choice_msg\":\"Puede elegir varias opciones\"},\"polls\":{\"no_unanswered_polls\":\"No hay encuestas pendientes de contestar.\",\"opinion\":\"Opine\"},\"previous\":\"anterior\"},\"sites\":{\"events\":{\"sites_site_created\":\"Sitio creado\",\"sites_site_destroyed\":\"Sitio eliminado\",\"sites_site_modules_updated\":\"M\u00F3dulos del sitio actualizados\",\"sites_site_updated\":\"Sitio actualizado\",\"sites_site_visibility_updated\":\"Sitio publicado\"}},\"support\":{\"array\":{\"last_word_connector\":\" y \",\"two_words_connector\":\" y \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%A, %d de %B de %Y %H:%M:%S %z\",\"from_to\":\"Del %{starts} al %{ends}\",\"long\":\"%d de %B de %Y %H:%M\",\"short\":\"%d de %b %H:%M\"},\"pm\":\"pm\"},\"user\":{\"census_verifications\":{\"create\":{\"error\":\"No se ha podido verificar tu identidad. Por favor verifica tus datos y vuelve a intentarlo. Si el problema persiste, ponte en contacto con tu administraci\u00F3n local.\",\"notice\":\"Tu identidad se ha verificado correctamente\"},\"form\":{\"verify\":\"Verificar\"},\"messages\":{\"already_verified\":\"Tu cuenta ya est\u00E1 verificada\",\"comments\":{\"not_verified\":\"La contribuci\u00F3n en la que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\"},\"consultation_responses\":{\"not_verified\":\"El proceso en el que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\"},\"contributions\":{\"not_verified\":\"La contribuci\u00F3n en la que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\"},\"flags\":{\"not_verified\":\"La contribuci\u00F3n en la que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\"},\"not_verified\":\"El proceso en el que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\",\"poll_answers\":{\"not_verified\":\"El proceso en el que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\"},\"process_contributions\":{\"not_verified\":\"La contribuci\u00F3n en la que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\"},\"votes\":{\"not_verified\":\"La contribuci\u00F3n en la que deseas participar exige que verifiques que est\u00E1s empadronado/a en %{site_name}. Confirma tus datos para continuar (ser\u00E1n verificados contra el padr\u00F3n, si no est\u00E1s empadronado/a, no te podremos verificar)\"}},\"new\":{\"title\":\"Verifica tu identidad\"}},\"confirmations\":{\"create\":{\"error\":\"Los datos que has introducido no parecen ser correctos. Por favor, int\u00E9ntalo de nuevo.\",\"success\":\"Sesi\u00F3n iniciada correctamente\"},\"form\":{\"document_number_notice\":\"N\u00FAmero de documento\",\"gender\":{\"female\":\"Mujer\",\"male\":\"Hombre\"},\"hints\":{\"census_locked\":\"Esta informaci\u00F3n proviene del censo, por lo que no es editable.\",\"date_of_birth\":\"Esta informaci\u00F3n ser\u00E1 privada, y nunca se identificar\u00E1 con tu perfil. El dato ser\u00E1 anonimizado, y te lo pedimos para poder obtener informaci\u00F3n segmentada para entender mejor las opiniones y preferencias de los ciudadanos.\",\"email\":\"Tu direcci\u00F3n de correo-e ser\u00E1 privada en todo momento. Solo lo utilizaremos para enviarte comunicaciones.\",\"gender\":\"Esta informaci\u00F3n ser\u00E1 privada, y nunca se identificar\u00E1 con tu perfil. El dato ser\u00E1 anonimizado, y te lo pedimos para poder obtener informaci\u00F3n segmentada para entender mejor las opiniones y preferencias de los ciudadanos.\"},\"submit\":\"Guardar\",\"your_gender_is\":\"Eres...\"},\"new\":{\"error\":\"La URL no parece ser correcta\",\"title\":\"Ya casi estamos: completa los siguientes datos para poder personalizar tus alertas y participar en el site. Podr\u00E1s completar tu perfil m\u00E1s adelante.\"}},\"custom_sessions\":{\"create\":{\"invalid_data\":\"Los datos recibidos no son v\u00E1lidos, no se ha podido crear la sesi\u00F3n\",\"not_confirmed\":\"Revisa tu correo-e y haz click en el enlace de confirmaci\u00F3n para poder acceder al servicio\",\"success\":\"Sesi\u00F3n iniciada correctamente\"},\"destroy\":{\"success\":\"Sesi\u00F3n terminada correctamente\"},\"null_strategy\":{\"edit_form\":{\"edit\":\"A\u00F1ada alg\u00FAn campo a este formulario\",\"session_title\":\"Por favor, rellene los campos que faltan (Null strategy)\",\"submit\":\"Enviar\"},\"new_form\":{\"session_title\":\"Iniciar sesi\u00F3n (Null strategy)\",\"submit\":\"Enviar\"}}},\"layouts\":{\"menu_subsections\":{\"admin\":\"Ajustes\",\"alerts\":\"Alertas\",\"notifications\":\"Notificaciones\"}},\"notification_mailer\":{\"notification_digest\":{\"bye\":\"Saludos\",\"hi\":\"Hola\",\"manage_notifications\":\"Recuerda que puedes administrar tus notificaciones en %{url}\",\"manage_notifications_html\":\"Recuerda que puedes administrar tus notificaciones en \\\\u003ca href=\\'%{url}\\'\\\\u003etu p\u00E1gina de preferencias\\\\u003c/a\\\\u003e\",\"new_activity\":\"Hay nueva actividad en %{site_name}\",\"subject\":\"Resumen de actividad en %{site_name}\"},\"single_notification\":{\"bye\":\"Saludos\",\"hi\":\"Hola\",\"manage_notifications\":\"Recuerda que puedes administrar tus notificaciones en %{url}\",\"manage_notifications_html\":\"Recuerda que puedes administrar tus notificaciones en \\\\u003ca href=\\'%{url}\\'\\\\u003etu p\u00E1gina de preferencias\\\\u003c/a\\\\u003e\",\"new_activity\":\"Hay una nueva actividad en %{site_name}\",\"subject\":\"Nueva actividad en %{site_name}: %{action_name}\"}},\"notifications\":{\"index\":{\"no_new_notifications\":\"No hay notificaciones nuevas\",\"title\":\"Actividad reciente\"}},\"passwords\":{\"create\":{\"error\":\"La direcci\u00F3n de email que has indicado no parece ser v\u00E1lida\",\"success\":\"Por favor, comprueba tu email para recibir las instrucciones\"},\"edit\":{\"error\":\"Esta URL no parece ser v\u00E1lida\",\"title\":\"Establece tu nueva contrase\u00F1a:\"},\"edit_form\":{\"submit\":\"Cambiar\"},\"update\":{\"error\":\"Ha habido un problema al cambiar tu contrase\u00F1a\",\"success\":\"Sesi\u00F3n iniciada correctamente\"}},\"registrations\":{\"create\":{\"email_taken\":\"El email ya est\u00E1 en uso. Prueba a hacer login o a recuperar la contrase\u00F1a\",\"error\":\"Los datos que has introducido no parecen ser v\u00E1lidos. Por favor, int\u00E9ntalo de nuevo.\",\"success\":\"Genial. Revisa tu correo-e y haz click en el enlace de confirmaci\u00F3n para poder continuar con el proceso de registro.\"}},\"sessions\":{\"create\":{\"error\":\"Los datos que has introducido no parecen ser v\u00E1lidos. Por favor, int\u00E9ntalo de nuevo.\",\"success\":\"Sesi\u00F3n iniciada correctamente\"},\"destroy\":{\"success\":\"Sesi\u00F3n terminada correctamente\"},\"new\":{\"password_title\":\"\u00BFNo recuerdas tu contrase\u00F1a? Te ayudamos:\",\"registration_title\":\"\u00BFNuevo por aqu\u00ED? Create una cuenta:\",\"session_title\":\"\u00BFYa tienes cuenta? Haz login\"},\"new_password_form\":{\"session_section\":\"\u00BFTe acuerdas de la contrase\u00F1a? Haz login\",\"submit\":\"Recuperar\"},\"registration_form\":{\"submit\":\"Vamos\"},\"session_form\":{\"password_section\":\"\u00BFContrase\u00F1a?\",\"submit\":\"Conectarse\"},\"user_already_authenticated\":\"Ya est\u00E1s autenticado.\",\"user_not_authorized\":\"No est\u00E1s autorizado.\",\"user_not_signed_in\":\"Reg\u00EDstrate o haz login si ya tienes cuenta para poder continuar.\"},\"settings\":{\"form\":{\"gender\":{\"female\":\"Mujer\",\"male\":\"Hombre\"},\"hints\":{\"census_locked\":\"Esta informaci\u00F3n proviene del censo, por lo que no es editable.\",\"date_of_birth\":\"Esta informaci\u00F3n ser\u00E1 privada, y nunca se identificar\u00E1 con tu perfil. El dato ser\u00E1 anonimizado, y te lo pedimos para poder obtener informaci\u00F3n segmentada para entender mejor las opiniones y preferencias de los ciudadanos.\",\"email\":\"Tu direcci\u00F3n de correo-e ser\u00E1 privada en todo momento. Solo lo utilizaremos para enviarte comunicaciones.\",\"gender\":\"Esta informaci\u00F3n ser\u00E1 privada, y nunca se identificar\u00E1 con tu perfil. El dato ser\u00E1 anonimizado, y te lo pedimos para poder obtener informaci\u00F3n segmentada para entender mejor las opiniones y preferencias de los ciudadanos.\"},\"submit\":\"Guardar\",\"your_gender_is\":\"Eres...\"},\"show\":{\"title\":\"Tu cuenta\"},\"update\":{\"error\":\"Ha habido un error al guardar tus ajustes\",\"success\":\"Ajustes guardados con \u00E9xito\"}},\"subscription_preferences\":{\"update\":{\"error\":\"Ha habido un problema al guardar los datos: %{details}\",\"update_success\":\"Se han actualizado las preferencias correctamente\"}},\"subscriptions\":{\"create\":{\"create_success\":\"Se ha realizado la suscripci\u00F3n\",\"delete_success\":\"Se ha cancelado esta suscripci\u00F3n\",\"error\":\"Ha ocurrido un problema al suscribirte: %{details}. Si ya est\u00E1s registrado, identif\u00EDcate \\\\u003ca href=\\\\\"%{sign_in_path}\\\\\"\\\\u003eaqu\u00ED\\\\u003c/a\\\\u003e.\"},\"destroy\":{\"success\":\"Se ha cancelado esta suscripci\u00F3n\"},\"index\":{\"areas\":\"\u00C1reas\",\"frequency\":\"Cada cu\u00E1nto\",\"modules\":{\"gobierto_budgets\":\"Presupuestos\",\"gobierto_observatory\":\"Observatorio\",\"gobierto_people\":\"Personas\"},\"notification_frequency\":{\"daily\":\"Resumen diario\",\"disabled\":\"Deshabilitadas\",\"hourly\":\"Resumen cada hora\",\"immediate\":\"Inmediatas\",\"submit\":\"Guardar\",\"weekly\":\"Resumen semanal\"},\"people\":\"Personas\",\"submit\":\"Guardar\",\"title\":\"Tus alertas\",\"whole_site\":\"Todo el site\"},\"subscribable_box\":{\"cancel\":\"Ya est\u00E1s suscrito. \u00BFCancelar?\",\"form\":{\"placeholders\":{\"user_email\":\"Tu correo-e\"},\"submit\":\"Suscribirme\"},\"subscribe\":\"Suscribirme\"},\"subscribable_button\":{\"event_followed\":\"\u00A1Evento seguido!\",\"follow_event\":\"Seguir evento\",\"follow_group_process\":\"Seguir grupo\",\"follow_issue\":\"Seguir tema\",\"follow_person\":\"Seguir persona\",\"follow_process\":\"Seguir proceso\",\"follow_scope\":\"Seguir \u00E1mbito\",\"group_process_followed\":\"\u00A1Grupo seguido!\",\"issue_followed\":\"\u00A1Tema seguido!\",\"manage_subscriptions\":\"Gestionar tus alertas\",\"person_followed\":\"\u00A1Persona seguida!\",\"process_followed\":\"\u00A1Proceso seguido!\",\"scope_followed\":\"\u00A1\u00C1mbito seguido!\"}},\"user_mailer\":{\"confirmation_instructions\":{\"bye\":\"Saludos\",\"click_link\":\"Para confirmar tu registro haz click en el siguiente enlace:\",\"hi\":\"Hola\",\"ignore_link\":\"si no te estabas suscribiendo en %{site_name}, puedes ignorar este mensaje\",\"subject\":\"Completa tu registro en %{site_name}\"},\"reset_password_instructions\":{\"bye\":\"Saludos\",\"click_link\":\"Has solicitado restaurar tu contrase\u00F1a. Pulsa en el siguiente enlace y sigue las instrucciones:\",\"hi\":\"Hola\",\"subject\":\"Restaura tu contrase\u00F1a\"},\"welcome\":{\"alerts\":\"Puedes gestionar tus alertas desde tu cuenta: %{subscriptions_url}\",\"bye\":\"Saludos\",\"hi\":\"Hola\",\"subject\":\"Bienvenido\",\"success\":\"Tu registro se ha completado con \u00E9xito. Ahora puedes interactuar en %{site_url} como usuario registrado.\"}}},\"users\":{\"events\":{\"users_user_updated\":\"Usuario actualizado\"}},\"views\":{\"delete\":\"Eliminar\",\"delete_confirm\":\"\u00BFSeguro? Esta operaci\u00F3n no tiene marcha atr\u00E1s.\",\"edit\":\"Edita\",\"forms\":{\"max_characters\":\"M\u00E1x. %{length} caracteres\",\"required\":\"Obligatorio\",\"required_and_max_characters\":\"Obligatorio y m\u00E1x. %{length} caracteres\"},\"of\":\"de\",\"pagination\":{\"next\":\"Siguiente\",\"previous\":\"Anterior\",\"truncate\":\"\\\\u0026hellip;\"},\"see\":{\"less\":\"ver menos\",\"more\":\"ver m\u00E1s\"}}}'));\n", "import '../../assets/stylesheets/admin.scss'\nimport select2 from 'select2'\n\nselect2($) // load select2 into jquery\n\nimport './modules/init.js'\nimport './modules/admin_groups_admins_controller.js'\nimport './modules/admin_groups_controller.js'\nimport './modules/admins_controller.js'\nimport './modules/application.js'\nimport './modules/consultation_items_controller.js'\nimport './modules/consultation_responses_controller.js'\nimport './modules/content_blocks_controller.js'\nimport './modules/dirty_forms_component.js'\nimport './modules/dynamic_content_component.js'\nimport './modules/globalized_forms_component.js'\nimport './modules/gobierto_attachments_controller.js'\nimport './modules/gobierto_budgets_controller.js'\nimport './modules/gobierto_calendars_events_controller.js'\nimport './modules/gobierto_calendars_calendar_configurations_controller.js'\nimport './modules/gobierto_cms_controller.js'\nimport './modules/gobierto_core_controller.js'\nimport './modules/gobierto_plans_indicators_controller.js'\nimport './modules/gobierto_plans_plan_projects_controller.js'\nimport './modules/module-admin.js'\nimport './modules/module-admin-search.js'\nimport './modules/people_controller.js'\nimport './modules/person_controller.js'\nimport './modules/person_events_controller.js'\nimport './modules/sections_controller.js'\nimport './modules/terms_controller.js'\nimport './modules/sites_controller.js'\nimport './modules/gobierto_common_custom_fields_controller.js'\nimport './modules/gobierto_common_custom_field_records_controller.js'\nimport './modules/color_picker_component.js'\nimport './modules/sortable_component.js'\n", "window.GobiertoAdmin = {\n  init: function() {}\n};\n\n$(document).ready(function() {\n  return GobiertoAdmin.init();\n});\n", "window.GobiertoAdmin.AdminGroupsAdminsController = (function() {\n\n  function AdminGroupsAdminsController() {}\n\n  AdminGroupsAdminsController.prototype.index = function() {\n    _handleSelectBehaviors();\n  };\n\n  function _handleSelectBehaviors() {\n    $(\"[data-behavior=select2]\")\n      .select2()\n      .on(\"select2:select\", ({ params }) => {\n        // this callback only applies to list_modal.html.erb\n        const { element } = params?.data\n        if (element) {\n          const { dataset, value } = element\n          const btn = document.getElementById(\"add-current-dashboard-btn\")\n          if (btn) {\n            const url = new URL(btn.href)\n            url.searchParams.set(\"id\", value)\n            url.searchParams.set(\"preview_path\", dataset?.previewPath)\n\n            btn.href = url\n          }\n        }\n      })\n  }\n\n  return AdminGroupsAdminsController;\n})();\n\nwindow.GobiertoAdmin.admin_groups_admins_controller = new GobiertoAdmin.AdminGroupsAdminsController;\n", "window.GobiertoAdmin.AdminGroupsController = (function() {\n\n    function AdminGroupsController() {}\n\n    AdminGroupsController.prototype.form = function() {\n      _addToggleModulesBehaviors();\n      _addToggleActionsBehaviors();\n      _addToggleAllPeopleBehaviors();\n      _addTogglePersonBehaviors();\n    };\n\n\n    function _addToggleModulesBehaviors() {\n      $(\"[data-behavior='toggle-module']\").click(function() {\n        let $modules_actions_block = $(`#modules_actions_${this.value}`);\n        let $subresources_block = $(`#subresources_${this.value}`);\n        if (this.checked) {\n          $modules_actions_block.find(\"[data-class='modules_action'] input[type='checkbox']\").prop('disabled', false);\n          $modules_actions_block.show('slow');\n          $modules_actions_block.prop(\"disabled\", false);\n          if ($modules_actions_block.find(\"[data-class='modules_action'] input[type='checkbox']:checked\").length == 0) {\n            // For Gobierto Plans, use 'manage_plans' instead of deprecated 'manage'\n            let defaultAction = this.value === 'GobiertoPlans' ? 'manage_plans' : 'manage';\n            $modules_actions_block.find(`[data-class='modules_action'] input[type='checkbox'][value='${defaultAction}']`).prop('checked', true);\n          }\n          $subresources_block.show('slow');\n        } else {\n          $modules_actions_block.hide('slow');\n          $modules_actions_block.prop(\"disabled\", true);\n          $modules_actions_block.find(\"[data-class='modules_action'] input[type='checkbox']\").prop('disabled', true);\n          $subresources_block.hide('slow');\n        }\n      });\n    }\n\n    function _addToggleActionsBehaviors() {\n      $(\"[data-behavior='toggle-action']\").click(function() {\n        if (!this.checked) {\n          let module_name = this.parentElement.getAttribute(\"data-module\")\n          let $modules_actions_block = $(`#modules_actions_${this.parentElement.getAttribute(\"data-module\")}`);\n          if ($modules_actions_block.find(\"[data-class='modules_action'] input[type='checkbox']:checked\").length == 0) {\n            $(`input[type='checkbox'][data-behavior='toggle-module'][value='${module_name}']`).trigger(\"click\");\n          }\n        }\n      });\n    }\n\n    function _addToggleAllPeopleBehaviors() {\n      $('#admin_group_all_people').click(function() {\n        if (this.checked) {\n          $(\"[data-class='site_person'] input[type='checkbox']\").prop('checked', false);\n        }\n      });\n    }\n\n    function _addTogglePersonBehaviors() {\n      $(\"[data-class='site_person'] input[type='checkbox']\").click(function() {\n        if (this.checked) {\n          $('#admin_group_all_people').prop('checked', false);\n        }\n      });\n    }\n\n    return AdminGroupsController;\n  })();\n\n  window.GobiertoAdmin.admin_groups_controller = new GobiertoAdmin.AdminGroupsController;\n", "window.GobiertoAdmin.AdminsController = (function() {\n\n    function AdminsController() {}\n\n    AdminsController.prototype.form = function() {\n      _addToggleSiteBehaviors();\n      _addChangeAuthorizationLevelBehaviors();\n    };\n\n    AdminsController.prototype.show = function() {\n      _addCopyBehaviors()\n    }\n\n    function _addToggleSiteBehaviors() {\n      var $siteCheckboxes = $(\"[data-behavior='toggle_site']\");\n\n      $siteCheckboxes.click(function() {\n        var siteId = $(this).attr('data-site-id');\n        var $siteAdminGroups = $(\"[data-class='site_admin_group'][data-site-id='\" + siteId + \"']\");\n        var $adminGroups = $(\"[data-class='site_admin_group']\");\n\n        if (this.checked) {\n          if ($siteAdminGroups.length > 0) { $('#admin_groups').show('slow'); }\n\n          $siteAdminGroups.show('slow');\n        } else {\n          $siteAdminGroups.hide('slow');\n\n          if ($siteAdminGroups.length == $adminGroups.length) { $('#admin_groups').hide('slow'); }\n        }\n      });\n    }\n\n    function _addChangeAuthorizationLevelBehaviors() {\n      var $regular = $(\"[data-behavior='authorization-level-regular']\");\n      var $manager = $(\"[data-behavior='authorization-level-manager']\");\n      var $disabled = $(\"[data-behavior='authorization-level-disabled']\");\n\n      $regular.click(function() {\n        $('#sites_permissions').show('fast');\n        $('#admin_groups').show('fast');\n      });\n\n      $manager.click(function() {\n        $('#sites_permissions').hide('fast');\n        $('#admin_groups').hide('fast');\n      });\n\n      $disabled.click(function() {\n        $('#sites_permissions').hide('fast');\n        $('#admin_groups').hide('fast');\n      });\n    }\n\n    function _addCopyBehaviors() {\n      $(\"[data-behavior='copy']\").click(function() {\n          var textArea = document.createElement(\"textarea\");\n          textArea.value = this.parentNode.children[1].innerText\n          document.body.appendChild(textArea);\n          textArea.select();\n          document.execCommand(\"copy\");\n          document.body.removeChild(textArea);\n          $(this.parentElement).find(\"span\").removeClass(\"hidden\")\n      })\n    }\n\n    return AdminsController;\n  })();\n\n  window.GobiertoAdmin.admins_controller = new GobiertoAdmin.AdminsController;\n", "import 'air-datepicker'\nimport 'devbridge-autocomplete'\nimport 'magnific-popup'\nimport SimpleMDE from 'simplemde'\nimport 'sticky-kit/dist/sticky-kit.js'\nimport Turbolinks from 'turbolinks'\nimport { AUTOCOMPLETE_DEFAULTS } from '../../lib/shared'\n\n$(document).on('turbolinks:load', function() {\n  $(\".stick_in_parent\").stick_in_parent();\n\n  addDatepickerBehaviors();\n  initializeDatepickersWithoutBehavior();\n\n  $('#site_visibility_level_active').on('click', function(){\n    $('#site_username').val('');\n    $('#site_password').val('');\n  });\n\n  $('a[data-disabled]').on('click', function(e){\n    e.preventDefault();\n  });\n\n  $('input[autofocus]').focus();\n\n  var $autocomplete = $('[data-autocomplete]');\n\n  var searchOptions = {\n    serviceUrl: $autocomplete.data('autocomplete'),\n    onSelect: function(suggestion) {\n      Turbolinks.visit(suggestion.data.url);\n    }\n  };\n\n  $autocomplete.devbridgeAutocomplete($.extend({}, AUTOCOMPLETE_DEFAULTS, searchOptions));\n\n  $('[data-wysiwyg]').each(function(){\n    var $el = $(this);\n    var isDisabled = $el.prop('disabled');\n    var simplemde = new SimpleMDE({\n      element: $el[0],\n      autofocus: false,\n      forceSync: true,\n      spellChecker: false,\n      renderingConfig: {\n        singleLineBreaks: false\n      },\n      toolbar: isDisabled ? false : [\n        \"bold\",\n        \"italic\",\n        \"heading\",\n        \"|\",\n        \"quote\",\n        \"unordered-list\",\n        \"ordered-list\",\n        \"|\",\n        \"link\",\n        \"image\",\n        \"|\",\n        \"preview\",\n        \"side-by-side\",\n        \"fullscreen\",\n        \"|\",\n        { name: \"guide\",\n          action: function openlink() {\n            var win = window.open(\"https://gobierto.readme.io/v0.1/docs/guia-de-markdown\", \"_blank\");\n            win.focus();\n          },\n          className: \"fas fa-question-circle\",\n          title: \"Markdown Guide\",\n        default: true },\n        \"|\"],\n      status: false\n    });\n\n    $el.data({ editor: simplemde });\n\n    // Disable editor if textarea is disabled\n    if (isDisabled) {\n      simplemde.codemirror.setOption('readOnly', 'nocursor');\n      // Add disabled class to CodeMirror wrapper for styling\n      $(simplemde.codemirror.getWrapperElement()).addClass('CodeMirror-disabled');\n      // Add disabled class to parent form_item for label styling\n      $el.closest('.form_item').addClass('wysiwyg-disabled');\n    }\n\n    simplemde.codemirror.on(\"change\", function(){\n      var id = \"#\" + $el.attr('id').replace('_source', '');\n      $(id).val(simplemde.markdown(simplemde.value()))\n    });\n\n    // Add event once it's rendered\n    $(document).ready(() => toggleStickyToolbar($el))\n  });\n});\n\nfunction datepickerStartDate($datepicker) {\n  if ($datepicker.data(\"startdate\")) {\n    return new Date($datepicker.data(\"startdate\"))\n  } else if ($datepicker.data(\"allowBlank\")) {\n    return undefined\n  } else {\n    return new Date()\n  }\n}\n\nfunction addDatepickerBehaviors() {\n  let $datepickerWithBehavior = $('input[data-behavior!=\"none\"].air-datepicker')\n\n  if ($datepickerWithBehavior.length == 1) {\n    initializePageWithOnlyOneDatepicker();\n  } else if ($datepickerWithBehavior.length){\n    var $fromDatePickers = $datepickerWithBehavior.filter(':even');\n    var $toDatePickers = $datepickerWithBehavior.filter(':odd');\n\n    $toDatePickers.each(function(index, toDatePicker) {\n      let $toDatePicker = $(toDatePicker);\n\n      // Check if properties were informed before set defaults\n      const toDatePickerDEFAULTS = {\n        autoClose: ($toDatePicker.data('autoclose') === undefined)\n          ? true\n          : ($toDatePicker.data('autoclose'))\n      }\n\n      // Datepicker end time\n      let toDatePickerOPTIONS = {\n        autoClose: toDatePickerDEFAULTS.autoClose,\n        onSelect: function onSelect(a, selectedDate, instance) {\n          if (instance.visible) $(instance.el).trigger(\"datepicker-change\");\n\n          // Updates first datepicker if end_date is earlier\n          if (selectedDate < $fromDatePicker.data('datepicker').lastSelectedDate) {\n            selectedDate.setHours(selectedDate.getHours() - 1)\n            setDateOnBindedDatepicker(selectedDate, $fromDatePicker[0])\n          }\n        }\n      }\n\n      let toDatepickerDate = datepickerStartDate($toDatePicker);\n\n      if (toDatepickerDate) toDatePickerOPTIONS.startDate = toDatepickerDate\n\n      $toDatePicker.datepicker(toDatePickerOPTIONS);\n\n      // Datepicker start time\n      var $fromDatePicker = $($fromDatePickers[index]);\n      let fromDatepickerDate = datepickerStartDate($fromDatePicker);\n\n      // Check if properties were informed before set defaults\n      const fromDatePickerDEFAULTS = {\n        autoClose: ($fromDatePicker.data('autoclose') === undefined)\n          ? true\n          : ($fromDatePicker.data('autoclose')),\n        minutesStep: ($fromDatePicker.data('minutesstep') === undefined)\n          ? 5\n          : ($fromDatePicker.data('minutesstep')),\n        startDate: fromDatepickerDate\n      }\n\n      if ($fromDatePicker.data('range') === undefined) {\n        $fromDatePicker.datepicker({\n          autoClose: fromDatePickerDEFAULTS.autoClose,\n          minutesStep: fromDatePickerDEFAULTS.minutesStep,\n          startDate: fromDatePickerDEFAULTS.startDate,\n          onSelect: function onSelect(_, selectedDate, instance) {\n            if (instance.visible) $(instance.el).trigger(\"datepicker-change\");\n\n            // data-bind=true links fromDatePicker to toDatePicker\n            // on fromDatePicker selection, updates toDatePicker +1h\n            if ($(instance.el).data('bind')) {\n              selectedDate.setHours(selectedDate.getHours() + 1)\n            }\n\n            if (selectedDate > $(toDatePicker).data('datepicker').lastSelectedDate) {\n              setDateOnBindedDatepicker(selectedDate, toDatePicker)\n            }\n          }\n        });\n\n        if (fromDatepickerDate) $fromDatePicker.data(\"datepicker\").selectDate(fromDatepickerDate);\n        if (toDatepickerDate) $toDatePicker.data(\"datepicker\").selectDate(toDatepickerDate);\n      } else {\n        $fromDatePicker.datepicker({\n          autoClose: fromDatePickerDEFAULTS.autoClose,\n          onSelect: function onSelect(_, selectedDate, instance) {\n            $(instance.el).trigger(\"datepicker-change\");\n          }\n        });\n      }\n\n      index++;\n    });\n  }\n}\n\nfunction initializePageWithOnlyOneDatepicker() {\n  const $datepickerWithBehavior = $('input[data-behavior!=\"none\"].air-datepicker')\n\n  // Check if properties were informed before set defaults\n  const datePickerDEFAULTS = {\n    autoClose: ($datepickerWithBehavior.data('autoclose') === undefined) ? true : ($datepickerWithBehavior.data('autoclose')),\n    startDate: ($datepickerWithBehavior.data('startdate') === undefined) ? new Date() : new Date($datepickerWithBehavior.data('startdate'))\n  }\n\n  $('input[data-behavior!=\"none\"].air-datepicker').datepicker({\n    autoClose: datePickerDEFAULTS.autoClose,\n    startDate: datePickerDEFAULTS.startDate,\n    onSelect: function onSelect(_, selectedDate, instance) {\n      $(instance.el).trigger(\"datepicker-change\");\n    }\n  });\n\n  // If a default value was set, force datepicker parse it so the TZ offset is\n  // not shown to the user\n  $('input[data-behavior!=\"none\"].air-datepicker').each(function() {\n    if (this.value && !$(this).data('range')) {\n      var dateAttr = $(this).data('startdate');\n      setDateOnBindedDatepicker(new Date(dateAttr), $(this));\n    }\n  });\n}\n\nfunction initializeSingleDatepicker(element) {\n  let datepickerDEFAULTS = {\n    autoClose: (element.data('autoclose') === undefined)\n      ? true\n      : (element.data('autoclose')),\n      minutesStep: (element.data('minutesstep') === undefined)\n        ? 5\n        : (element.data('minutesstep')),\n        startDate: (element.data('startdate') === undefined)\n          ? new Date()\n          : new Date(element.data('startdate')),\n  }\n\n  if (element.data('range') === undefined) {\n    element.datepicker({\n      autoClose: datepickerDEFAULTS.autoClose,\n      minutesStep: datepickerDEFAULTS.minutesStep,\n      startDate: datepickerDEFAULTS.startDate,\n      onSelect: function onSelect(_, selectedDate, instance) {\n        $(instance.el).trigger(\"datepicker-change\");\n\n        if ($(instance.el).data('bind')) {\n          selectedDate.setHours(selectedDate.getHours() + 1)\n        }\n      }\n    });\n    var dateAttr = element.data('startdate');\n    setDateOnBindedDatepicker(new Date(dateAttr), element);\n\n    if (!element.data('allowBlank')){\n      let date = new Date(element.data('startdate'));\n\n      element.data('datepicker').selectDate(date);\n    }\n  } else {\n    element.datepicker({\n      autoClose: datepickerDEFAULTS.autoClose,\n      onSelect: function onSelect(_, selectedDate, instance) {\n        $(instance.el).trigger(\"datepicker-change\");\n      }\n    });\n  }\n}\n\nfunction initializeDatepickersWithoutBehavior() {\n  let $datepickersWithoutBehavior = $('input[data-behavior=\"none\"].air-datepicker')\n  $datepickersWithoutBehavior.each(function(index, datepicker) {\n    initializeSingleDatepicker($(datepicker))\n  })\n}\n\nfunction setDateOnBindedDatepicker(date, datepicker) {\n  if ($(datepicker).length) {\n    $(datepicker).data('datepicker').selectDate(date);\n  }\n}\n\nfunction toggleStickyToolbar(wysiwyg) {\n  // Unique locale id\n  const id = wysiwyg.attr(\"id\").substring(0, wysiwyg.attr(\"id\").length - 3)\n  // Header height\n  const headerHeight = $(\"header\").height()\n  // Toolbar from the element itself\n  const toolbar = wysiwyg.siblings(\".editor-toolbar\")\n\n  // Group who gathers the same form element toolbars, but different locales\n  const localeToolbarGroup = wysiwyg.parent().parent().find(`[id^=${id}]`).siblings(\".editor-toolbar\")\n  // If element is visible, get its offset, otherwise, get the visible offset height from its locale group\n  const toolbarOffsetTop = toolbar.is(\":visible\")\n    ? toolbar.offset().top - headerHeight\n    : localeToolbarGroup.filter(\":visible\").offset().top - headerHeight\n\n  $(window).on(\"scroll resize\", function () {\n    const scroll = $(this).scrollTop();\n    // Add the height of the floating globalize tool, if exists\n    const localeBarHeight = $('.is-floating .globalize_tool').outerHeight() || 0;\n\n    if (toolbar.is(\":visible\")) {\n      if (scroll > (toolbarOffsetTop - localeBarHeight)) {\n        localeToolbarGroup.each((i, item) => {\n          $(item).addClass(\"is-sticky\");\n          $(item).css({ top: `${headerHeight + localeBarHeight}px` });\n        })\n      } else if (toolbar.hasClass(\"is-sticky\")) {\n        localeToolbarGroup.each((i, item) => {\n          $(item).removeClass(\"is-sticky\");\n          $(item).removeAttr(\"style\");\n        })\n      }\n    }\n  })\n}\n\nexport { addDatepickerBehaviors, initializeDatepickersWithoutBehavior }\n", "window.GobiertoAdmin.ConsultationItemsController = (function() {\n  function ConsultationItemsController() {}\n\n  ConsultationItemsController.prototype.edit = function() {\n    _handleBudgetLineAutocomplete();\n  };\n\n  ConsultationItemsController.prototype.index = function() {\n    _handleSortableList();\n  };\n\n  function _handleBudgetLineAutocomplete() {\n    var budgetLineAutocompleteHandler = \"#consultation_item_budget_line_name\";\n    var budgetLineIdHandler = \"#consultation_item_budget_line_id\";\n    var consultationItemTitleHandler = \"#consultation_item_title\";\n    var budgetLineAmountHandler = \"#consultation_item_budget_line_amount\";\n\n    var autocompleteOptions = {\n      source: $(budgetLineAutocompleteHandler).data(\"source\"),\n      select: function(event, ui) {\n        $(budgetLineIdHandler).val(ui.item.id);\n        $(consultationItemTitleHandler).val(ui.item.name);\n        $(budgetLineAmountHandler).val(ui.item.amount);\n      }\n    };\n\n    $.ui.autocomplete(autocompleteOptions, $(budgetLineAutocompleteHandler));\n  }\n\n  function _handleSortableList() {\n    var wrapper = \"ul[data-behavior=sortable]\";\n\n    $(wrapper).sortable({\n      update: function() {\n        _refreshPositions(wrapper);\n        _requestUpdate(wrapper, _buildPositions(wrapper));\n      },\n      helper: _fixWidthHelper\n    });\n  }\n\n  function _fixWidthHelper(e, ui) {\n    ui.children().each(function() {\n      $(this).width($(this).width());\n    });\n    return ui;\n  }\n\n  function _refreshPositions(wrapper) {\n    $(wrapper).find(\"li\").each(function(index) {\n      $(this).attr(\"data-pos\", index + 1);\n    });\n  }\n\n  function _buildPositions(wrapper) {\n    var positions = [];\n\n    $(wrapper).find(\"li\").each(function(index) {\n      positions.push({\n        id: $(this).data(\"id\"),\n        position: index + 1\n      });\n    });\n\n    return positions;\n  }\n\n  function _requestUpdate(wrapper, positions) {\n    $.ajax({\n      url: $(wrapper).data(\"sortable-target\"),\n      method: \"POST\",\n      data: { positions: positions }\n    });\n  }\n\n  return ConsultationItemsController;\n})();\n\nwindow.GobiertoAdmin.consultation_items_controller = new GobiertoAdmin.ConsultationItemsController;\n", "import { VisAgeReport, VisIndicators } from '../../lib/visualizations'\n\nwindow.GobiertoAdmin.ConsultationResponsesController = (function() {\n  function ConsultationResponsesController() {}\n\n  ConsultationResponsesController.prototype.index = function(dataUrl) {\n    _loadReport(dataUrl);\n  };\n\n  function _loadReport(dataUrl) {\n    var vis_ageReport = new VisAgeReport('#age_report .vis', dataUrl);\n    vis_ageReport.render();\n\n    var vis_consultationIndicators = new VisIndicators('#consultation-indicators', dataUrl);\n    vis_consultationIndicators.render();\n  }\n\n  return ConsultationResponsesController;\n})();\n\nwindow.GobiertoAdmin.consultation_responses_controller = new GobiertoAdmin.ConsultationResponsesController;\n", "import { VisAgeReport } from './modules/age_report.js';\nimport { AmountDistributionBars } from './modules/amount_distribution_bars';\nimport { Areachart } from './modules/areachart';\nimport { VisBubbles } from './modules/bubbles.js';\nimport { VisBubble } from './modules/bubble_cost.js';\nimport { VisBubbleLegend } from './modules/bubble_legend.js';\nimport { BarsCard } from './modules/card_bars.js';\nimport { ComparisonCard } from './modules/card_comparison.js';\nimport { SimpleCard } from './modules/card_simple.js';\nimport { SparklineTableCard } from './modules/card_sparkline_table.js';\nimport { TableCard } from './modules/card_table.js';\nimport { VisIndicators } from './modules/consultation_indicators.js';\nimport { GroupPctDistributionBars } from './modules/group_pct_distribution_bars';\nimport { VisLineasJ } from './modules/lineas_tabla.js';\nimport { VisLinesExecution } from './modules/lines_execution.js';\nimport { VisPopulationPyramid } from './modules/population_pyramid.js';\nimport { Punchcard } from './modules/punchcard.js';\nimport { VisRentDistribution } from './modules/rent_distribution.js';\nimport { Rowchart } from './modules/rowchart.js';\nimport { VisSlider } from './modules/slider.js';\nimport { Sparkline } from './modules/sparkline.js';\nimport { VisTreemap } from './modules/treemap.js';\nimport { VisUnemploymentAge } from './modules/unemployment_age.js';\nimport { VisUnemploymentRate } from './modules/unemployment_rate.js';\nimport { VisUnemploymentSex } from './modules/unemployment_sex.js';\n\nexport {\n  Areachart,\n  VisAgeReport,\n  VisBubbleLegend,\n  VisBubbles,\n  VisBubble,\n  BarsCard,\n  ComparisonCard,\n  SimpleCard,\n  SparklineTableCard,\n  TableCard,\n  VisIndicators,\n  VisLineasJ,\n  VisLinesExecution,\n  VisPopulationPyramid,\n  Punchcard,\n  VisRentDistribution,\n  Rowchart,\n  VisSlider,\n  Sparkline,\n  VisTreemap,\n  VisUnemploymentAge,\n  VisUnemploymentRate,\n  VisUnemploymentSex,\n  AmountDistributionBars,\n  GroupPctDistributionBars\n};\n", "import * as d3 from 'd3';\nimport { uniq } from 'lodash';\nimport { accounting } from '../../../lib/shared';\n\nexport class VisAgeReport {\n  constructor(divId, url) {\n    this.container = divId;\n    this.data = null;\n    this.ageGroups = null;\n    this.dataUrl = url;\n    this.isMobile = window.innerWidth <= 768;\n\n    // Chart dimensions\n    this.margin = { top: 25, right: 10, bottom: 25, left: 15 };\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    // Scales & Ranges\n    this.xScale = d3.scaleBand().padding(0.3);\n\n    this.yScale = d3.scaleLinear();\n\n    // this.color = d3.scaleSequential(d3.interpolateWarm);\n\n    // Create axes\n    this.xAxis = d3.axisBottom();\n    this.yAxis = d3.axisRight();\n\n    // Chart objects\n    this.svg = null;\n    this.chart = null;\n\n    // Create main elements\n    this.svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    // Append axes containers\n    this.svg.append(\"g\").attr(\"class\", \"x axis\");\n    this.svg.append(\"g\").attr(\"class\", \"y axis\");\n\n    d3.select(window).on(\"resize.\" + this.container, () => {\n      if (this.data) {\n        this._resize();\n      }\n    });\n  }\n\n  getData() {\n    d3.csv(this.dataUrl).then(csvData => {\n      // Main dataset\n      this.data = csvData;\n      this.data.forEach(function(d) {\n        d.age = +d.age;\n        d.answer = +d.answer;\n        d.id = +d.id;\n      });\n\n      // Make an object for each participant\n      var nested = Array.from(\n        d3.group(this.data, d => d.id),\n        ([key, values]) => ({\n          key,\n          values\n        })\n      );\n\n      // Gather total participations\n      var total = nested.length;\n\n      // Assign people to age groups\n      this.ageGroups = d3.rollup(this.data, v => [\n        {\n          age_group: \"16-24\",\n          response_rate: +accounting.toFixed(\n            uniq(\n              v\n                .filter(function(d) {\n                  return d.age >= 16 && d.age <= 24;\n                })\n                .map(function(d) {\n                  return d.id;\n                })\n            ).length / total,\n            4\n          )\n        },\n        {\n          age_group: \"25-34\",\n          response_rate: +accounting.toFixed(\n            uniq(\n              v\n                .filter(function(d) {\n                  return d.age >= 25 && d.age <= 34;\n                })\n                .map(function(d) {\n                  return d.id;\n                })\n            ).length / total,\n            4\n          )\n        },\n        {\n          age_group: \"35-44\",\n          response_rate: +accounting.toFixed(\n            uniq(\n              v\n                .filter(function(d) {\n                  return d.age >= 35 && d.age <= 44;\n                })\n                .map(function(d) {\n                  return d.id;\n                })\n            ).length / total,\n            4\n          )\n        },\n        {\n          age_group: \"45-54\",\n          response_rate: +accounting.toFixed(\n            uniq(\n              v\n                .filter(function(d) {\n                  return d.age >= 45 && d.age <= 54;\n                })\n                .map(function(d) {\n                  return d.id;\n                })\n            ).length / total,\n            4\n          )\n        },\n        {\n          age_group: \"55-64\",\n          response_rate: +accounting.toFixed(\n            uniq(\n              v\n                .filter(function(d) {\n                  return d.age >= 55 && d.age <= 64;\n                })\n                .map(function(d) {\n                  return d.id;\n                })\n            ).length / total,\n            4\n          )\n        },\n        {\n          age_group: \"65+\",\n          response_rate: +accounting.toFixed(\n            uniq(\n              v\n                .filter(function(d) {\n                  return d.age >= 65;\n                })\n                .map(function(d) {\n                  return d.id;\n                })\n            ).length / total,\n            4\n          )\n        }\n      ]);\n\n      // // Convert map to specific array\n      this.ageGroups = Array.from(this.ageGroups, ([key, values]) => ({\n        key,\n        values\n      }));\n\n      this.updateRender();\n      this._renderBars();\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.updateRender();\n    }\n  }\n\n  updateRender() {\n    this.xScale\n      .rangeRound([0, this.width])\n      .domain(this.ageGroups.map(d => d.age_group));\n\n    this.yScale\n      .rangeRound([this.height, 0])\n      .domain([0, d3.max(this.ageGroups, d => d.response_rate)]);\n\n    this._renderAxis();\n  }\n\n  _renderBars() {\n    // We keep this separate to not create them after every resize\n    var barGroup = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"bars\")\n      .selectAll(\"rect\")\n      .data(this.ageGroups)\n      .enter();\n\n    var bars = barGroup.append(\"g\").attr(\n      \"transform\",\n      function(d) {\n        return (\n          \"translate(\" +\n          this.xScale(d.age_group) +\n          \",\" +\n          this.yScale(d.response_rate) +\n          \")\"\n        );\n      }.bind(this)\n    );\n\n    bars\n      .append(\"rect\")\n      .attr(\"width\", this.xScale.bandwidth())\n      .attr(\n        \"height\",\n        function(d) {\n          return this.height - this.yScale(d.response_rate);\n        }.bind(this)\n      );\n\n    bars\n      .append(\"text\")\n      .attr(\"text-anchor\", \"middle\")\n      .attr(\"dy\", -5)\n      .attr(\"x\", this.xScale.bandwidth() / 2)\n      .text(d => d3.format(\".0%\")(d.response_rate));\n  }\n\n  _renderAxis() {\n    // X axis\n    this.svg\n      .select(\".x.axis\")\n      .attr(\"transform\", \"translate(0,\" + this.height + \")\");\n\n    this.xAxis.tickPadding(5);\n    this.xAxis.tickSize(0, 0);\n    this.xAxis.scale(this.xScale);\n    this.svg.select(\".x.axis\").call(this.xAxis);\n\n    // Y axis\n    this.svg\n      .select(\".y.axis\")\n      .attr(\"transform\", \"translate(\" + (this.width - 35) + \" ,0)\");\n\n    this.yAxis.tickSize(-this.width);\n    this.yAxis.scale(this.yScale);\n    this.yAxis.ticks(3);\n    this.yAxis.tickFormat(d3.format(\".0%\"));\n    this.svg.select(\".y.axis\").call(this.yAxis);\n\n    // Remove the zero\n    this.svg\n      .selectAll(\".y.axis .tick\")\n      .filter(d => d === 0)\n      .remove();\n  }\n\n  _width() {\n    return d3.select(this.container).node()\n      ? parseInt(d3.select(this.container).style(\"width\"))\n      : 0;\n  }\n\n  _height() {\n    return this.isMobile ? 200 : this._width() * 0.25;\n  }\n\n  _resize() {\n    this.width = this._width();\n    this.height = this._height();\n\n    this.updateRender();\n\n    d3.select(this.container + \" svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom);\n\n    this.svg\n      .select(this.container + \" > g\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    // Update bars\n    d3.select(this.container + \" .bars\")\n      .selectAll(\"g\")\n      .attr(\n        \"transform\",\n        function(d) {\n          return (\n            \"translate(\" +\n            this.xScale(d.age_group) +\n            \",\" +\n            this.yScale(d.response_rate) +\n            \")\"\n          );\n        }.bind(this)\n      );\n\n    d3.select(this.container + \" .bars\")\n      .selectAll(\"g rect\")\n      .attr(\"width\", this.xScale.bandwidth())\n      .attr(\n        \"height\",\n        function(d) {\n          return this.height - this.yScale(d.response_rate);\n        }.bind(this)\n      );\n\n    d3.select(this.container + \" .bars\")\n      .selectAll(\"g text\")\n      .attr(\"x\", this.xScale.bandwidth() / 2);\n  }\n}\n", "import * as d3 from 'd3';\n\n/**\n * NOTE: dc@4 has been imported via CDN due to d3 compatibility issues\n * It requires d3@5 to be imported as well\n */\nexport class AmountDistributionBars {\n  constructor(options) {\n    // Declaration\n    const {\n      containerSelector,\n      dimension,\n      onFilteredFunction,\n      range,\n      labelMore,\n      labelFromTo\n    } = options;\n    this.container = new dc.RowChart(containerSelector, \"group\");\n\n    // Dimensions\n    const amountByGroupingField = dimension.group().reduceCount();\n\n    // Styling\n    (this._count = amountByGroupingField.size()), (this._gap = 10);\n    this._barHeight = 18;\n\n    const _labelOffset = 195;\n\n    this.node = this.container.root().node() || document.createElement(\"div\");\n\n    this.setContainerSize();\n\n    // Construction\n    this.container\n      .x(d3.scaleThreshold())\n      .dimension(dimension)\n      .group(amountByGroupingField)\n      .ordering(d => d.key)\n      .labelOffsetX(-_labelOffset)\n      .gap(this._gap)\n      .elasticX(true)\n      .title(d => d.value)\n      .on(\"pretransition\", function(chart) {\n        // Apply rounded corners AFTER render, otherwise they don't exist\n        chart\n          .selectAll(\"rect\")\n          .attr(\"rx\", 4)\n          .attr(\"ry\", 4);\n\n        // edit labels positions\n        chart\n          .selectAll(\"text.row\")\n          .text(\"\")\n          .selectAll(\"tspan\")\n          .data(d => {\n            // helper\n            function intervalFormat(d) {\n              var n = Number(range.domain[d.key]);\n              var _s = Number(range.domain[d.key - 1]) || 1;\n\n              // Last value is not a range\n              if (d.key === range.domain.length) {\n                return [\n                  labelMore +\n                    \" \" +\n                    (_s - 1).toLocaleString(I18n.locale, {\n                      style: \"currency\",\n                      currency: \"EUR\",\n                      minimumFractionDigits: 0\n                    })\n                ];\n              }\n\n              var _l = Number(n - 1);\n\n              return [_s, _l].map(n =>\n                n.toLocaleString(I18n.locale, {\n                  style: \"currency\",\n                  currency: \"EUR\",\n                  minimumFractionDigits: 0\n                })\n              );\n            }\n\n            return intervalFormat(d);\n          })\n          .enter()\n          .append(\"tspan\")\n          .text(d => d)\n          .attr(\"x\", (d, i) => (i === 0 ? -_labelOffset : -_labelOffset / 2));\n\n        chart\n          .select(\"g.axis\")\n          .attr(\"transform\", \"translate(0,0)\")\n          .append(\"text\")\n          .attr(\"class\", \"axis-title\")\n          .attr(\"y\", -9) // Default\n          .selectAll(\"text\")\n          .data(() => {\n            // helper\n            function titleFormat(str) {\n              str = str.split(\" \");\n              if (str.length !== 4) throw new Error();\n\n              var last = [str[2], str[3]].join(\" \");\n              return [str[0], str[1], last];\n            }\n\n            return titleFormat(labelFromTo);\n          })\n          .enter()\n          .append(\"tspan\")\n          .text(d => d)\n          .attr(\"x\", (d, i) =>\n            i === 0 ? -_labelOffset : i === 1 ? -_labelOffset / 2 : 0\n          )\n          .attr(\"text-anchor\", (d, i) => (i === 2 ? \"middle\" : \"\"));\n\n        chart.selectAll(\"g.axis line.grid-line\").attr(\"y2\", function() {\n          return (\n            Math.abs(+d3.select(this).attr(\"y2\")) + chart.margins().top / 2\n          );\n        });\n      })\n      .on(\"filtered\", (chart, filter) => onFilteredFunction(chart, filter));\n\n    // Customization\n    this.container.xAxis(d3.axisTop().ticks(5));\n    this.container.xAxis().tickFormat((tick, pos) => {\n      if (pos === 0) return null;\n      return tick;\n    });\n    this.container.margins().top = 20;\n    this.container.margins().left = _labelOffset + 5;\n    this.container.margins().right = 0;\n\n    // Rendering\n    this.container.render();\n  }\n\n  setContainerSize() {\n    this.container\n      .width((this.node.parentNode || this.node).getBoundingClientRect().width) // webkit doesn't recalculate dynamic width. it has to be set by parentNode\n      .height(\n        this.container.margins().top +\n          this.container.margins().bottom +\n          this._count * this._barHeight +\n          (this._count + 1) * this._gap\n      ) // Margins top/bottom + bars + gaps (space between)\n      .fixedBarHeight(this._barHeight);\n  }\n}\n", "import * as d3 from 'd3';\n\nexport class Areachart {\n  constructor(props) {\n    this.container = d3.select(props.ctx);\n    this.data = props.data || [];\n\n    // options\n    this.maxWidth = props.maxWidth || 1440;\n    this.minHeight = props.minHeight || 50;\n    this.aspectRatio = props.aspectRatio || 4;\n    this.circleSize = props.circleSize || 3;\n    this.minValue = props.minValue || 0;\n    this.tooltip = props.tooltip || this.defaultTooltip;\n    this.xTickFormat = props.xTickFormat || (d => d3.timeFormat(\"%b %y\")(d));\n    this.margin = {\n      top: props.marginTop !== undefined ? props.marginTop : 5,\n      right: props.marginRight !== undefined ? props.marginRight : 5,\n      bottom: props.marginBottom !== undefined ? props.marginBottom : 20,\n      left: props.marginLeft !== undefined ? props.marginLeft : 5\n    };\n\n    // create main elements\n    this.svg = this.container.append(\"svg\").attr(\"class\", \"areachart\");\n    this.g = this.svg.append(\"g\");\n    this.g.append(\"path\").attr(\"class\", \"area\");\n    this.g.append(\"path\").attr(\"class\", \"headline\");\n    this.g.append(\"g\").attr(\"class\", \"x axis\");\n    this.tooltipContainer = this.container.append(\"div\");\n\n    if (this.data.length) {\n      this.draw();\n    }\n\n    window.addEventListener(\"resize\", this.draw.bind(this));\n  }\n\n  draw() {\n    if (this.data.length) {\n      this.setElements();\n      this.handleArea();\n      this.handleLine();\n      this.handleCircles();\n    }\n  }\n\n  setElements() {\n    // Dimensions\n    this.width = Math.min(\n      this.maxWidth,\n      +this.container.node().getBoundingClientRect().width -\n        this.margin.left -\n        this.margin.right\n    );\n    this.height = Math.max(\n      this.minHeight,\n      this.width / this.aspectRatio - this.margin.top - this.margin.bottom\n    );\n\n    // Scales & Ranges\n    this.x = d3\n      .scaleTime()\n      .range([this.data.length === 1 ? this.width / 2 : 0, this.width])\n      .domain(d3.extent(this.data, d => d.key));\n\n    this.y = d3\n      .scaleLinear()\n      .range([this.height, 0])\n      .domain([this.minValue, d3.max(this.data, d => d.value)]);\n\n    // Positions\n    this.svg\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom);\n    this.g.attr(\n      \"transform\",\n      `translate(${this.margin.left},${this.margin.top})`\n    );\n\n    // Axes\n    this.g\n      .select(\".x.axis\")\n      .attr(\"transform\", `translate(0,${this.height})`)\n      .call(this.xAxis.bind(this));\n  }\n\n  handleArea() {\n    const path = this.g.selectAll(`path.area`).datum(this.data);\n\n    path.exit().remove();\n\n    const pathEnter = path\n      .enter()\n      .append(\"path\")\n      .attr(\"class\", \"area\");\n\n    path\n      .merge(pathEnter)\n      .attr(\"class\", \"area\")\n      .attr(\n        \"d\",\n        d3\n          .area()\n          .x(d => this.x(d.key))\n          .y0(this.y(this.minValue))\n          .y1(d => this.y(d.value))\n      );\n  }\n\n  handleLine() {\n    const path = this.g.selectAll(`path.headline`).datum(this.data);\n\n    path.exit().remove();\n\n    const pathEnter = path\n      .enter()\n      .append(\"path\")\n      .attr(\"class\", \"headline\");\n\n    path\n      .merge(pathEnter)\n      .attr(\"class\", \"headline\")\n      .attr(\n        \"d\",\n        d3\n          .line()\n          .x(d => this.x(d.key))\n          .y(d => this.y(d.value))\n      );\n  }\n\n  handleCircles() {\n    const circles = this.g.selectAll(`circle.circle`).data(this.data);\n\n    circles.exit().remove();\n\n    const circlesEnter = circles\n      .enter()\n      .append(\"circle\")\n      .attr(\"class\", \"circle\")\n      .on(\"mouseover\", this.onCircleMouseover.bind(this))\n      .on(\"mouseout\", this.onCircleMouseout.bind(this));\n\n    circles\n      .merge(circlesEnter)\n      .attr(\"cx\", d => this.x(d.key))\n      .attr(\"cy\", d => this.y(d.value))\n      .attr(\"r\", this.circleSize);\n\n    if (this.circleSize < 5) {\n      const hoverCircles = this.g\n        .selectAll(`circle.hover-circle`)\n        .data(this.data);\n\n      hoverCircles.exit().remove();\n\n      const hoverCirclesEnter = hoverCircles\n        .enter()\n        .append(\"circle\")\n        .attr(\"class\", \"hover-circle\")\n        .attr(\"fill\", \"transparent\")\n        .attr(\"cursor\", \"pointer\")\n        .on(\"mouseover\", this.onCircleMouseover.bind(this))\n        .on(\"mouseout\", this.onCircleMouseout.bind(this));\n\n      hoverCircles\n        .merge(hoverCirclesEnter)\n        .attr(\"cx\", d => this.x(d.key))\n        .attr(\"cy\", d => this.y(d.value))\n        .attr(\"r\", 5);\n    }\n  }\n\n  onCircleMouseover(d) {\n    this.tooltipContainer\n      .html(this.tooltip(d))\n      .style(\"opacity\", 1)\n      .style(\"position\", \"absolute\")\n      .style(\"z-index\", \"1\")\n      .style(\"transform\", \"translate(-50%, -100%)\")\n      .style(\"transition\", \"opacity 250ms\")\n      .style(\"left\", `${this.x(d.key) + this.margin.left}px`)\n      .style(\n        \"top\",\n        `${this.y(d.value) + this.margin.top - this.circleSize * 3}px`\n      );\n  }\n\n  onCircleMouseout() {\n    this.tooltipContainer.style(\"opacity\", 0).style(\"z-index\", \"-1\");\n  }\n\n  xAxis(g) {\n    g.call(\n      d3\n        .axisBottom(this.x)\n        .tickSize(0)\n        .tickArguments([this.data.length])\n        .tickFormat(this.xTickFormat)\n    );\n\n    // remove baseline\n    g.select(\".domain\").remove();\n    // remove default formats\n    g.attr(\"font-family\", null);\n    // align last item\n    g.select(\".x.axis .tick:last-of-type:not(:only-child) text\").attr(\n      \"text-anchor\",\n      \"end\"\n    );\n  }\n\n  defaultTooltip(d) {\n    return `<span>${d.key.toLocaleDateString()}</span>: <span>${\n      d.value\n    }</span>`;\n  }\n}\n", "import * as d3 from 'd3'\nimport { accounting, d3locale, wordwrap, tspans } from '../../../lib/shared';\n\nd3.selection.prototype.tspans = tspans;\n\nexport class VisBubbles {\n  constructor(divId, budgetCategory, data) {\n    this.build(divId, budgetCategory, data)\n  }\n\n  build(divId, budgetCategory, data) {\n    this.container = divId;\n    d3.select(this.container).html(\"\");\n    this.currentYear = parseInt(d3.select(\"body\").attr(\"data-year\"));\n    this.data = data;\n    this.budget_category = budgetCategory;\n    this.forceStrength = 0.045;\n    this.isMobile = window.innerWidth <= 590;\n    this.locale = I18n.locale;\n\n    d3.formatDefaultLocale(d3locale[this.locale]);\n\n    this.margin = { top: 20, right: 10, bottom: 20, left: 10 };\n    const containerNode =\n      d3.select(this.container).node() || document.createElement(\"div\");\n    this.width =\n      (containerNode.parentNode || containerNode).getBoundingClientRect()\n        .width -\n      this.margin.left -\n      this.margin.right;\n    this.height = this.isMobile\n      ? 320\n      : 520 - this.margin.top - this.margin.bottom;\n    this.center = { x: this.width / 2, y: this.height / 2 };\n\n    this.selectionNode = d3.select(this.container).node();\n\n    this.budgetColor = d3\n      .scaleThreshold()\n      .domain([-30, -10, -5, 0, 5, 10, 30, 100])\n      .range([\n        \"#b2182b\",\n        \"#d6604d\",\n        \"#f4a582\",\n        \"#fddbc7\",\n        \"#f7f7f7\",\n        \"#d1e5f0\",\n        \"#92c5de\",\n        \"#4393c3\",\n        \"#2166ac\"\n      ])\n      .unknown(\"#ffffff\");\n\n    this.fontSize = d3\n      .scaleLinear()\n      .domain([0, 90])\n      .range([0, 22]);\n\n    this.tooltip = d3\n      .select(this.container)\n      .append(\"div\")\n      .attr(\"class\", \"tooltip\");\n\n    this.nodes = [];\n\n    this.simulation = d3\n      .forceSimulation()\n      .velocityDecay(0.3)\n      .force(\n        \"x\",\n        d3\n          .forceX()\n          .strength(this.forceStrength)\n          .x(this.center.x)\n      )\n      .force(\n        \"y\",\n        d3\n          .forceY()\n          .strength(this.forceStrength)\n          .y(this.center.y)\n      )\n      .force(\"charge\", d3.forceManyBody().strength(this._charge))\n      .force(\n        \"collide\",\n        d3\n          .forceCollide()\n          .radius(d => d.radius + 0.5)\n          .iterations(2)\n      )\n      .on(\"tick\", this._ticked.bind(this));\n\n    this.simulation.stop();\n\n    this.svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"transform\", `translate(${this.margin.left},${this.margin.top})`);\n  }\n\n  render() {\n    this.updateRender();\n  }\n\n  resize() {\n    this.build(this.container, this.budget_category, this.data);\n    this.render();\n  }\n\n  createNodes(rawData, year) {\n    var data = rawData;\n    if (this.locale === \"en\") this.locale = \"es\";\n\n    this.maxAmount = d3.max(\n      data,\n      function(d) {\n        return d.values[year];\n      }.bind(this)\n    );\n    this.filtered = data.filter(\n      function(d) {\n        return d.budget_category === this.budget_category;\n      }.bind(this)\n    );\n\n    this.radiusScale = d3\n      .scaleSqrt()\n      .range(this.isMobile ? [0, 80] : [0, 120])\n      .domain([0, this.maxAmount]);\n\n    // Assigns the nodes an initial y before the force takes place\n    this.nodeScale = d3\n      .scaleLinear()\n      .range([0, 500]) // SVG coordinates\n      .domain([80, -80]) // Percentage diff between this year and last\n      .clamp(true);\n\n    // If we enter for the first time, we build the data\n    // If we update, we update the data but not the x and the y\n    if (!this.nodes.length > 0) {\n      this.nodes = this.filtered.map(\n        function(d) {\n          return {\n            values: d.values,\n            pct_diffs: d.pct_diff,\n            id: d.id,\n            area_name: d.area_name,\n            values_per_inhabitant: d.values_per_inhabitant,\n            radius: d.values[year] ? this.radiusScale(d.values[year]) : 0,\n            value: d.values[year],\n            name: d[\"level_2_\" + this.locale],\n            pct_diff: d.pct_diff[year],\n            per_inhabitant: d.values_per_inhabitant[year],\n            x: Math.random() * 600,\n            y: d.pct_diff[year] ? this.nodeScale(d.pct_diff[year]) : 0,\n            year: year\n          };\n        }.bind(this)\n      );\n    } else {\n      this.nodes.forEach(\n        function(d) {\n          d.radius = this.radiusScale(d.values[year]);\n          d.radius = d.values[year] ? this.radiusScale(d.values[year]) : 0;\n          d.value = d.values[year];\n          d.pct_diff = d.pct_diffs[year];\n          d.per_inhabitant = d.values_per_inhabitant[year];\n          d.year = year;\n        }.bind(this)\n      );\n    }\n\n    this.nodes.sort((a, b) => b.value - a.value);\n\n    return this.nodes;\n  }\n\n  update(year) {\n    const transitionDuration = 500;\n\n    this.nodes = this.createNodes(this.data, year);\n    this.bubbles.data(this.nodes, d => d.id);\n\n    d3.selectAll(\".bubble\")\n      .data(this.nodes, d => d.name)\n      .attr(\"class\", d => `bubble bubble-${d.year}`)\n      .transition()\n      .duration(transitionDuration)\n      .attr(\"r\", d => d.radius)\n      .attr(\n        \"fill\",\n        function(d) {\n          return this.budgetColor(d.pct_diff);\n        }.bind(this)\n      );\n\n    d3.selectAll('.bubble-g a')\n      .attr('xlink:href', function(d) { return this.setLink(d); }.bind(this))\n\n    d3.selectAll(\".bubble-g text\")\n      .data(this.nodes, d => d.name)\n      .transition()\n      .duration(transitionDuration)\n      .attr(\"fill\", function(d) {\n        return d.pct_diff > 30 || d.pct_diff < -10 ? \"white\" : \"black\";\n      })\n      .style(\n        \"font-size\",\n        function(d) {\n          return this.fontSize(d.radius) + \"px\";\n        }.bind(this)\n      );\n\n    this.simulation.nodes(this.nodes);\n    this.simulation.alpha(1).restart();\n  }\n\n  setLink(d) {\n    var areaName = d.area_name || (this.budget_category === \"income\" ? \"economic\" : \"functional\");\n    var budgetCategory = this.budget_category === \"income\" ? \"I\" : \"G\";\n    return \"/presupuestos/partidas/\" + d.id + \"/\" + d.year + \"/\" + areaName + \"/\" + budgetCategory;\n  }\n\n  updateRender() {\n    // var budgetCategory = this.budget_category;\n    this.nodes = this.createNodes(this.data, this.currentYear);\n\n    this.bubbles = this.svg\n      .selectAll(\"g\")\n      .data(this.nodes, d => d.name)\n      .enter()\n      .append(\"g\")\n      .attr(\"class\", \"bubble-g\");\n\n    var bubblesG = this.bubbles\n      .append(\"a\")\n      .attr(\n        \"xlink:href\",\n        function(d) { return this.setLink(d); }.bind(this)\n      )\n      .append(\"circle\")\n      .attr(\"class\", d => `${d.year} bubble`)\n      .attr(\"r\", d => d.radius)\n      .attr(\n        \"fill\",\n        function(d) {\n          return this.budgetColor(d.pct_diff);\n        }.bind(this)\n      )\n      .attr(\"stroke-width\", 2)\n      .on(\"mousemove\", !this.isMobile && this._mousemoved.bind(this))\n      .on(\"mouseleave\", !this.isMobile && this._mouseleft.bind(this));\n\n    this.bubbles = this.bubbles.merge(bubblesG);\n\n    this.bubbles\n      .append(\"text\")\n      .style(\"font-size\", d => this.fontSize(d.radius) + \"px\")\n      .attr(\"text-anchor\", \"middle\")\n      .attr(\"y\", -15)\n      .attr(\"fill\", d =>\n        d.pct_diff > 30 || d.pct_diff < -10 ? \"white\" : \"black\"\n      )\n      .tspans(\n        d => (d.radius > 40 ? wordwrap(d.name, 15) : wordwrap(\"\", 15)),\n        d => this.fontSize(d.radius)\n      );\n\n    this.simulation.nodes(this.nodes);\n    this.simulation.alpha(1).restart();\n  }\n\n  _ticked() {\n    this.bubbles.attr(\"transform\", d => `translate(${d.x},${d.y})`);\n  }\n\n  _mousemoved(event, d) {\n    var coordinates = d3.pointer(event, this.selectionNode);\n    var x = coordinates[0],\n      y = coordinates[1];\n\n    this.tooltip\n      .style(\"display\", \"block\")\n      .style(\"left\", `${x - 100}px`)\n      .style(\"top\", `${y + 40}px`);\n\n    function getString(d) {\n      return d > 0\n        ? I18n.t(\"gobierto_common.visualizations.main_budget_levels_tooltip_up\")\n        : I18n.t(\n            \"gobierto_common.visualizations.main_budget_levels_tooltip_down\"\n          );\n    }\n    function perInhabitantTooltipStr(d) {\n      return d\n        ? `<div class=\"clear_b\">${accounting.formatMoney(\n            d,\n            \"\u20AC\",\n            0,\n            I18n.t(\"number.currency.format.delimiter\"),\n            I18n.t(\"number.currency.format.separator\")\n          )} ${I18n.t(\n            \"gobierto_common.visualizations.main_budget_levels_per_inhabitant\"\n          )}</div>`\n        : \"\";\n    }\n\n    var tooltipEnding;\n    if (d.year > new Date().getFullYear()) {\n      tooltipEnding = I18n.t(\n        \"gobierto_common.visualizations.main_budget_levels_tooltip_article_last\"\n      );\n    } else {\n      tooltipEnding = `${I18n.t(\n        \"gobierto_common.visualizations.main_budget_levels_tooltip_article\"\n      )} ${d.year - 1}`;\n    }\n\n    this.tooltip.html(`<div class=\"line-name\"><strong>${d.name}</strong></div>\n                      <div>${accounting.formatMoney(\n                        d.value,\n                        \"\u20AC\",\n                        0,\n                        I18n.t(\"number.currency.format.delimiter\"),\n                        I18n.t(\"number.currency.format.separator\")\n                      )}</div>\n                        ${perInhabitantTooltipStr(d.per_inhabitant)}\n                      <div class=\"line-pct\">${getString(\n                        d.pct_diff\n                      )} ${accounting.formatNumber(\n      d.pct_diff,\n      1\n    )} %</span> ${tooltipEnding}</div>`);\n  }\n\n  _mouseleft() {\n    this.tooltip.style(\"display\", \"none\");\n  }\n\n  _charge(d) {\n    return -Math.pow(d.radius, 2) * 0.06;\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting, d3locale, tspans, wordwrap } from '../../../lib/shared';\n\nd3.selection.prototype.tspans = tspans;\n\nexport class VisBubble {\n  constructor(divId, year, data) {\n    const children = d3.selectAll(`${divId} *`)\n    if (children) {\n      children.remove()\n    }\n\n    this.container = divId;\n    this.data = data;\n    this.year = year;\n    this.forceStrength = 0.045;\n    this.isMobile = window.innerWidth <= 590;\n    this.radiusReponsive = this.isMobile ? 2 : 1.5;\n    this.locale = I18n.locale;\n\n    d3.formatDefaultLocale(d3locale[this.locale]);\n\n    this.margin = { top: 20, right: 10, bottom: 20, left: 10 };\n    //Get container from Vue Template\n    this.containerWidth = document.querySelector(\".vis-costs\");\n    const containerNode = document.getElementById(\n      \"gobierto-visualizations-bubble-container\"\n    );\n    this.width =\n      this.containerWidth.offsetWidth - this.margin.left - this.margin.right;\n    this.height = this.isMobile\n      ? 320\n      : 520 - this.margin.top - this.margin.bottom;\n    this.center = { x: this.width / 2, y: this.height / 2 };\n\n    this.selectionNode = containerNode;\n\n    this.budgetColor = d3\n      .scaleThreshold()\n      .domain([0, 20, 40, 60, 80, 100, 120, 140])\n      .range([\"#4393c3\"]);\n\n    this.fontSize = d3\n      .scaleLinear()\n      .domain([0, 90])\n      .range([0, 22]);\n\n    this.tooltip = d3\n      .select(this.container)\n      .append(\"div\")\n      .attr(\"class\", \"tooltip\");\n\n    this.nodes = [];\n\n    this.simulation = d3\n      .forceSimulation()\n      .velocityDecay(0.3)\n      .force(\n        \"x\",\n        d3\n          .forceX()\n          .strength(this.forceStrength)\n          .x(this.center.x)\n      )\n      .force(\n        \"y\",\n        d3\n          .forceY()\n          .strength(this.forceStrength)\n          .y(this.center.y)\n      )\n      .force(\"charge\", d3.forceManyBody().strength(this._charge))\n      .force(\n        \"collide\",\n        d3\n          .forceCollide()\n          .radius(d => d.radius + 0.5)\n          .iterations(2)\n      )\n      .on(\"tick\", this._ticked.bind(this));\n\n    this.simulation.stop();\n\n    this.svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"transform\", `translate(${this.margin.left},${this.margin.top})`);\n  }\n\n  createNodes(rawData) {\n    var data = rawData;\n    if (this.locale === \"en\") this.locale = \"es\";\n\n    this.maxAmount = d3.max(\n      data,\n      function(d) {\n        return d.radius;\n      }.bind(this)\n    );\n\n    this.radiusScale = d3\n      .scaleSqrt()\n      .range(this.isMobile ? [0, 80] : [0, 120])\n      .domain([0, 100]);\n\n    // Assigns the nodes an initial y before the force takes place\n    this.nodeScale = d3\n      .scaleLinear()\n      .range([0, 500]) // SVG coordinates\n      .domain([0, 100]) // Percentage diff between this year and last\n      .clamp(true);\n\n    // If we enter for the first time, we build the data\n    // If we update, we update the data but not the x and the y\n    if (!this.nodes.length > 0) {\n      this.nodes = rawData.map(\n        function(d) {\n          return {\n            id: d.agrupacio,\n            radius: +d.costtotal / (d.population * this.radiusReponsive),\n            x: Math.random() * 600,\n            y: this.nodeScale(\n              +d.costtotal / (d.population * this.radiusReponsive)\n            ),\n            costtotal: d.costtotal,\n            year: d.any_,\n            ordreagrup: d.ordreagrup,\n            costperhabit: (d.costtotal / d.population).toFixed(2)\n          };\n        }.bind(this)\n      );\n    } else {\n      this.nodes.forEach(\n        function(d) {\n          (d.id = d.agrupacio),\n            (d.radius = +d.costtotal / (d.population * this.radiusReponsive)),\n            (d.costperhabit = (d.costtotal / d.population).toFixed(2));\n        }.bind(this)\n      );\n    }\n\n    this.nodes.sort((a, b) => b.value - a.value);\n\n    return this.nodes;\n  }\n\n  update(year) {\n    const transitionDuration = 500;\n\n    this.nodes = this.createNodes(this.data, year);\n    this.bubbles.data(this.nodes, d => d.id);\n\n    d3.selectAll(\".bubble\")\n      .data(this.nodes, d => d.id)\n      .attr(\"class\", d => \"bubble bubble-\" + d.year)\n      .transition()\n      .duration(transitionDuration)\n      .attr(\"r\", d => d.radius)\n      .attr(\n        \"fill\",\n        function(d) {\n          return this.budgetColor(d.radius);\n        }.bind(this)\n      );\n\n    d3.selectAll(\".bubble-g text\")\n      .data(this.nodes, d => d.id)\n      .transition()\n      .duration(transitionDuration)\n      .attr(\"fill\", \"white\")\n      .style(\n        \"font-size\",\n        function(d) {\n          return this.fontSize(d.radius) + \"px\";\n        }.bind(this)\n      );\n\n    this.simulation.nodes(this.nodes);\n    this.simulation.alpha(1).restart();\n  }\n\n  render() {\n    const year = this.year;\n    const data = this.data.filter(element => element.any_ === year);\n\n    // var budgetCategory = this.budget_category;\n    this.nodes = this.createNodes(data, year);\n\n    this.bubbles = this.svg\n      .selectAll(\"g\")\n      .data(this.nodes, d => d.id)\n      .enter()\n      .append(\"g\")\n      .attr(\"class\", \"bubble-g\");\n\n    this.bubbles\n      .append(\"circle\")\n      .attr(\"class\", d => `${d.year} bubble`)\n      .attr(\"r\", d => d.radius)\n      .attr(\n        \"fill\",\n        function(d) {\n          return this.budgetColor(d.radius);\n        }.bind(this)\n      )\n      .attr(\"stroke-width\", 2)\n      .on(\"mousemove\", !this.isMobile && this._mousemoved.bind(this))\n      .on(\"mouseleave\", !this.isMobile && this._mouseleft.bind(this));\n\n    var bubblesG = this.bubbles\n      .append(\"a\")\n      .attr(\n        \"xlink:href\",\n        function(d) {\n          return `/visualizaciones/costes/${d.year}/${d.ordreagrup}`;\n        }.bind(this)\n      )\n      .attr(\"class\", \"bubbles-links\")\n      .append(\"circle\")\n      .attr(\"class\", d => `${d.year} bubble`)\n      .attr(\"data-order\", d => d.ordreagrup)\n      .attr(\"data-year\", d => d.year)\n      .attr(\"r\", d => d.radius)\n      .attr(\n        \"fill\",\n        function(d) {\n          return this.budgetColor(d.radius);\n        }.bind(this)\n      )\n      .on(\"mousemove\", !this.isMobile && this._mousemoved.bind(this))\n      .on(\"mouseleave\", !this.isMobile && this._mouseleft.bind(this));\n\n    this.bubbles = this.bubbles.merge(bubblesG);\n\n    this.bubbles\n      .append(\"text\")\n      .style(\n        \"font-size\",\n        function(d) {\n          return this.fontSize(d.radius) + \"px\";\n        }.bind(this)\n      )\n      .attr(\"text-anchor\", \"middle\")\n      .attr(\"y\", -15)\n      .attr(\"fill\", \"white\")\n      .tspans(\n        d => (d.radius > 40 ? wordwrap(d.id, 15) : wordwrap(\"\", 15)),\n        d => this.fontSize(d.radius)\n      );\n\n    this.simulation.nodes(this.nodes);\n    this.simulation.alpha(1).restart();\n  }\n\n  _ticked() {\n    this.bubbles.attr(\"transform\", d => `translate(${d.x},${d.y})`);\n  }\n\n  _mousemoved(event, d) {\n    var coordinates = d3.pointer(event, this.containerWidth);\n    var x = coordinates[0],\n      y = coordinates[1];\n\n    this.tooltip\n      .style(\"display\", \"block\")\n      .style(\"left\", `${x - 100}px`)\n      .style(\"top\", `${y + 40}px`);\n\n    this.tooltip.html(`<div class=\"line-name\"><strong>${d.id}</strong></div>\n                      <div>${I18n.t(\n                        \"gobierto_visualizations.visualizations.costs.total_cost\"\n                      )}: ${accounting.formatMoney(\n      d.costtotal,\n      \"\u20AC\",\n      0,\n      I18n.t(\"number.currency.format.delimiter\"),\n      I18n.t(\"number.currency.format.separator\")\n    )}</div>\n                        ${d.costperhabit}\u20AC ${I18n.t(\n      \"gobierto_visualizations.visualizations.costs.per_inhabitant\"\n    )}`);\n  }\n\n  _mouseleft() {\n    this.tooltip.style(\"display\", \"none\");\n  }\n\n  _charge(d) {\n    return -Math.pow(d.radius, 2) * 0.06;\n  }\n}\n", "import * as d3 from 'd3';\n\nexport class VisBubbleLegend {\n  constructor(divId) {\n    this.container = divId;\n    $(this.container).html(\"\");\n    this.isMobile = window.innerWidth <= 740;\n\n    var bigScreen = window.innerWidth > 1280;\n\n    var colors = [\n      \"#b2182b\",\n      \"#d6604d\",\n      \"#f4a582\",\n      \"#fddbc7\",\n      \"#f7f7f7\",\n      \"#d1e5f0\",\n      \"#92c5de\",\n      \"#4393c3\",\n      \"#2166ac\"\n    ];\n\n    var scale = d3\n      .scaleOrdinal()\n      .domain(colors.reverse())\n      .range(d3.range(0, 100, 100 / colors.length));\n\n    var margin = { top: 15, right: 5, bottom: 15, left: 5 },\n      width =\n        parseInt(d3.select(this.container).style(\"width\")) -\n        margin.left -\n        margin.right,\n      height = this.isMobile ? 320 : 520 - margin.top - margin.bottom;\n\n    var svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", width + margin.left + margin.right)\n      .attr(\"height\", height + margin.top + margin.bottom)\n      .style(\"overflow\", \"visible\")\n      .append(\"g\")\n      .attr(\"transform\", `translate(${margin.left},${margin.top})`);\n\n    var defs = svg.append(\"defs\");\n\n    defs\n      .append(\"marker\")\n      .attr(\"id\", \"arrow_start\")\n      .attr(\"viewBox\", \"-10 -10 20 20\")\n      .attr(\"markerWidth\", 6)\n      .attr(\"markerHeight\", 6)\n      .attr(\"orient\", \"-90\")\n      .append(\"path\")\n      .attr(\"fill\", \"#2166ac\")\n      .attr(\"d\", \"M-4,-6 L 10,0 L -4,6\");\n\n    defs\n      .append(\"marker\")\n      .attr(\"id\", \"arrow_end\")\n      .attr(\"viewBox\", \"-10 -10 20 20\")\n      .attr(\"markerWidth\", 6)\n      .attr(\"markerHeight\", 6)\n      .attr(\"orient\", \"auto\")\n      .append(\"path\")\n      .attr(\"fill\", \"#b2182b\")\n      .attr(\"d\", \"M-4,-6 L 10,0 L -4,6\");\n\n    var gradient = defs\n      .append(\"linearGradient\")\n      .attr(\"id\", \"gradient\")\n      .attr(\"x1\", 0)\n      .attr(\"x2\", 0)\n      .attr(\"y1\", 0)\n      .attr(\"y2\", height)\n      .attr(\"gradientUnits\", \"userSpaceOnUse\");\n\n    gradient\n      .selectAll(\"stop\")\n      .data(colors)\n      .enter()\n      .append(\"stop\")\n      .attr(\"stop-color\", d => d)\n      .attr(\"offset\", d => `${scale(d)}%`);\n\n    svg\n      .append(\"line\")\n      .attr(\"transform\", \"translate(\" + width / 2 + \",\" + 0 + \")\")\n      .attr(\"x1\", 0)\n      .attr(\"x2\", 0)\n      .attr(\"y1\", 0)\n      .attr(\"y2\", height)\n      .attr(\"stroke\", \"url(#gradient)\")\n      .attr(\"stroke-width\", 4)\n      .attr(\"marker-end\", \"url(#arrow_end)\")\n      .attr(\"marker-start\", \"url(#arrow_start)\");\n\n    var label = svg\n      .append(\"text\")\n      .attr(\n        \"transform\",\n        \"translate(\" + width / 2 + \",\" + (height / 2 - 30) + \")\"\n      )\n      .attr(\"text-anchor\", \"middle\");\n\n    label\n      .append(\"tspan\")\n      .text(\n        I18n.t(\"gobierto_common.visualizations.main_budget_levels_legend_one\")\n      );\n\n    label\n      .append(\"tspan\")\n      .attr(\"x\", 0)\n      .attr(\"y\", 18)\n      .text(\n        I18n.t(\"gobierto_common.visualizations.main_budget_levels_legend_two\")\n      );\n\n    svg\n      .append(\"text\")\n      .attr(\"class\", \"legend-label\")\n      .attr(\"x\", bigScreen ? 36 : 34)\n      .attr(\"dy\", 2)\n      .text(\n        I18n.t(\"gobierto_common.visualizations.main_budget_levels_legend_up\")\n      );\n\n    svg\n      .append(\"text\")\n      .attr(\"class\", \"legend-label\")\n      .attr(\"x\", bigScreen ? 12 : 4)\n      .attr(\"y\", height + 8)\n      .attr(\"text-anchor\", \"end\")\n      .text(\n        I18n.t(\"gobierto_common.visualizations.main_budget_levels_legend_down\")\n      );\n  }\n}\n", "import * as d3 from 'd3';\nimport { Card } from './card.js';\n\nexport class BarsCard extends Card {\n  constructor(divClass, data, { metadata, cardName }) {\n    super(divClass);\n\n    this.dataType = this.div.attr(\"data-type\");\n\n    var parsedDate = new Date(metadata.updated_at);\n    var formatDate = d3.timeFormat(\"%b %Y\");\n    var isMobile = innerWidth <= 768;\n\n    this.div\n      .selectAll(\".tw-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://twitter.com/intent/tweet?text=\" +\n          I18n.t(\"gobierto_common.visualizations.where\") +\n          encodeURI(window.populateData.municipalityName) +\n          \": \" +\n          encodeURI(\n            I18n.t(\n              \"gobierto_common.visualizations.cards.\" + cardName + \".title\"\n            )\n          ).toLowerCase() +\n          I18n.t(\"gobierto_common.visualizations.time\") +\n          encodeURI(formatDate(parsedDate).toLowerCase()) +\n          \", \" +\n          encodeURI(this._printData(data[0].value)) +\n          \"&url=\" +\n          window.location.href +\n          \"&via=gobierto&source=webclient\"\n      );\n\n    this.div\n      .selectAll(\".fb-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://www.facebook.com/sharer/sharer.php?u=\" + window.location.href\n      );\n\n    // Append source\n    this.div\n      .selectAll(\".widget_src\")\n      .attr(\"title\", metadata[\"source_name\"])\n      .html(metadata[\"source_url\"] ? `<a href=\"${metadata[\"source_url\"]}\" target=\"_blank\" rel=\"noopener noreferrer\">${metadata[\"source_name\"]}</a>` : metadata[\"source_name\"]);\n\n    // Append date of last data point\n    this.div.selectAll(\".widget_updated\").text(formatDate(parsedDate));\n\n    // Append update frequency\n    this.div\n      .selectAll(\".widget_freq\")\n      .text(this._printFreq(metadata.frequency_type));\n\n    // Append metadata\n    this.div\n      .selectAll(\".widget_title\")\n      .attr(\n        \"title\",\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      )\n      .text(\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      );\n\n    // Append backface info\n    this.div\n      .selectAll(\".js-data-desc\")\n      .text(metadata.description);\n    this.div.selectAll(\".js-data-freq\").text(formatDate(parsedDate));\n\n    // Paint bars\n    var x = d3\n      .scaleLinear()\n      .range([0, isMobile ? 30 : 35])\n      .domain([\n        0,\n        d3.max(data, function(d) {\n          return d.value;\n        })\n      ]);\n\n    var row = this.div\n      .select(\".bars\")\n      .selectAll(\"div\")\n      .data(data)\n      .enter()\n      .append(\"div\")\n      .attr(\"class\", \"row\");\n\n    row\n      .append(\"div\")\n      .attr(\"class\", \"key\")\n      .text(function(d) {\n        return d.key;\n      });\n\n    row\n      .append(\"div\")\n      .attr(\"class\", \"bar\")\n      .style(\"width\", function(d) {\n        return x(d.value) + \"%\";\n      });\n\n    row\n      .append(\"div\")\n      .attr(\"class\", \"qty\")\n      .text(\n        function(d) {\n          return this._printData(d.value);\n        }.bind(this)\n      );\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting, d3locale } from '../../../lib/shared';\n\nexport class Card {\n  constructor(divClass) {\n    d3.timeFormatDefaultLocale(d3locale[I18n.locale]);\n\n    this.div = d3.select(divClass);\n  }\n\n  _printData(dataRaw) {\n    var data = Number(dataRaw);\n\n    // Switch between different figure types\n    switch (this.dataType) {\n      case \"percentage\":\n        return accounting.formatNumber(data, 1) + \"%\";\n      case \"percentage_by_thousand\":\n        return accounting.formatNumber(data, 1) + \"\u2030\";\n      case \"currency\":\n        return accounting.formatNumber(data, 0) + \"\u20AC\";\n      case \"currency_per_person\":\n        return (\n          accounting.formatNumber(data, 0) +\n          \"\u20AC/\" +\n          I18n.t(\"gobierto_common.visualizations.inhabitants\")\n        );\n      case \"per_inhabitant\":\n        return (\n          accounting.formatNumber(data, 2) +\n          \"/\" +\n          I18n.t(\"gobierto_common.visualizations.inhabitants\")\n        );\n      default:\n        return accounting.formatNumber(data, 0);\n    }\n  }\n\n  _printFreq(type) {\n    return I18n.t(\"gobierto_common.visualizations.frequency\", { type })\n  }\n\n  _normalize(str) {\n    var from =\n        \"1234567890\u00C3\u00C0\u00C1\u00C4\u00C2\u00C8\u00C9\u00CB\u00CA\u00CC\u00CD\u00CF\u00CE\u00D2\u00D3\u00D6\u00D4\u00D9\u00DA\u00DC\u00DB\u00E3\u00E0\u00E1\u00E4\u00E2\u00E8\u00E9\u00EB\u00EA\u00EC\u00ED\u00EF\u00EE\u00F2\u00F3\u00F6\u00F4\u00F9\u00FA\u00FC\u00FB\u00D1\u00F1\u00C7\u00E7 \u2018/&().!,'\",\n      to = \"izeasgtogoAAAAAEEEEIIIIOOOOUUUUaaaaaeeeeiiiioooouuuunncc_______\",\n      mapping = {};\n\n    for (let i = 0, j = from.length; i < j; i++) {\n      mapping[from.charAt(i)] = to.charAt(i);\n    }\n\n    var ret = [];\n    for (let i = 0, j = str.length; i < j; i++) {\n      var c = str.charAt(i);\n      if (Object.prototype.hasOwnProperty.call(mapping, str.charAt(i))) {\n        ret.push(mapping[c]);\n      } else {\n        ret.push(c);\n      }\n    }\n\n    return ret.join(\"\").toLowerCase();\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting } from '../../../lib/shared';\nimport { Card } from './card.js';\n\nexport class ComparisonCard extends Card {\n  constructor(divClass, value_1, value_2, { metadata, cardName }) {\n    super(divClass);\n\n    this.firstDataType = this.div.attr(\"data-type-first\");\n    this.secondDataType = this.div.attr(\"data-type-second\");\n\n    var parsedDate = new Date(metadata.updated_at);\n    var formatDate = d3.timeFormat(\"%b %Y\");\n\n    this.div\n      .selectAll(\".tw-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://twitter.com/intent/tweet?text=\" +\n          I18n.t(\"gobierto_common.visualizations.where\") +\n          encodeURI(window.populateData.municipalityName) +\n          \": \" +\n          encodeURI(\n            I18n.t(\n              \"gobierto_common.visualizations.cards.\" + cardName + \".title\"\n            )\n          ).toLowerCase() +\n          I18n.t(\"gobierto_common.visualizations.time\") +\n          encodeURI(formatDate(parsedDate).toLowerCase()) +\n          \", \" +\n          encodeURI(this._printData(this.firstDataType, value_1)) +\n          \"&url=\" +\n          window.location.href +\n          \"&via=gobierto&source=webclient\"\n      );\n\n    this.div\n      .selectAll(\".fb-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://www.facebook.com/sharer/sharer.php?u=\" + window.location.href\n      );\n\n    this.div\n      .select(\".widget_figure .figure-first\")\n      .text(this._printData(this.firstDataType, value_1));\n\n    this.div\n      .select(\".widget_figure .figure-second\")\n      .text(this._printData(this.secondDataType, value_2));\n\n    // Append source\n    this.div\n      .selectAll(\".widget_src\")\n      .attr(\"title\", metadata[\"source_name\"])\n      .html(metadata[\"source_url\"] ? `<a href=\"${metadata[\"source_url\"]}\" target=\"_blank\" rel=\"noopener noreferrer\">${metadata[\"source_name\"]}</a>` : metadata[\"source_name\"]);\n\n    // Append update frequency\n    this.div\n      .selectAll(\".widget_freq\")\n      .text(this._printFreq(metadata.frequency_type));\n\n    // Append date of last data point\n    this.div.selectAll(\".widget_updated\").text(formatDate(parsedDate));\n\n    // Append metadata\n    this.div\n      .selectAll(\".widget_title\")\n      .attr(\n        \"title\",\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      )\n      .text(\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      );\n\n    // Append backface info\n    this.div\n      .selectAll(\".js-data-desc\")\n      .text(metadata.description);\n    this.div.selectAll(\".js-data-freq\").text(formatDate(parsedDate));\n  }\n\n  _printData(type, dataRaw) {\n    var data = Number(dataRaw)\n\n\n    // Switch between different figure types\n    switch (type) {\n      case \"percentage\":\n        return accounting.formatNumber(data, 2) + \"%\";\n      case \"currency\":\n        return accounting.formatNumber(data, 0) + \"\u20AC\";\n      case \"currency_per_person\":\n        return (\n          accounting.formatNumber(data, 1) +\n          \"\u20AC/\" +\n          I18n.t(\"gobierto_common.visualizations.inhabitants\")\n        );\n      default:\n        return accounting.formatNumber(data, 0);\n    }\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting } from '../../../lib/shared';\nimport { Card } from './card.js';\nimport { Sparkline } from './sparkline.js';\n\nexport class SimpleCard extends Card {\n  constructor(divClass, data, { metadata, cardName }) {\n    super(divClass);\n\n    this.dataType = this.div.attr(\"data-type\");\n\n    var trend = this.div.attr(\"data-trend\");\n    var freq = this.div.attr(\"data-freq\");\n\n    var parsedDate = new Date(metadata.updated_at);\n    var formatDate = d3.timeFormat(\"%b %Y\");\n\n    var divCard = $('div[class*=\"' + divClass.replace(\".\", \"\") + '\"]');\n\n    var lastValue = data[0].value\n    var nextToLastValue = data[1].value\n\n    divCard\n      .find(\"div.indicator_widget.padded\")\n      .find(\"div.widget_body\")\n      .find(\"div.sparkline\")\n      .empty();\n\n    this.div\n      .selectAll(\".tw-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://twitter.com/intent/tweet?text=\" +\n          I18n.t(\"gobierto_common.visualizations.where\") +\n          encodeURI(window.populateData.municipalityName) +\n          \": \" +\n          encodeURI(\n            I18n.t(\n              \"gobierto_common.visualizations.cards.\" + cardName + \".title\"\n            )\n          ).toLowerCase() +\n          I18n.t(\"gobierto_common.visualizations.time\") +\n          encodeURI(formatDate(parsedDate).toLowerCase()) +\n          \", \" +\n          encodeURI(this._printData(lastValue)) +\n          \"&url=\" +\n          window.location.href +\n          \"&via=gobierto&source=webclient\"\n      );\n\n    this.div\n      .selectAll(\".fb-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://www.facebook.com/sharer/sharer.php?u=\" + window.location.href\n      );\n\n    this.div.select(\".widget_figure\").text(this._printData(lastValue));\n\n    // If the data is 0\n    if (\n      divCard\n        .find(\"div.indicator_widget.padded\")\n        .find(\"div.widget_body\")\n        .find(\"span.widget_figure\")\n        .text() == 0\n    )\n      return divCard.remove();\n\n    // Append source\n    this.div\n      .selectAll(\".widget_src\")\n      .attr(\"title\", metadata[\"source_name\"])\n      .html(metadata[\"source_url\"] ? `<a href=\"${metadata[\"source_url\"]}\" target=\"_blank\" rel=\"noopener noreferrer\">${metadata[\"source_name\"]}</a>` : metadata[\"source_name\"]);\n\n    // Append date of last data point\n    this.div.selectAll(\".widget_updated\").text(formatDate(parsedDate));\n\n    // Append update frequency\n    this.div\n      .selectAll(\".widget_freq\")\n      .text(this._printFreq(metadata.frequency_type));\n\n    // Append metadata\n    this.div\n      .selectAll(\".widget_title\")\n      .attr(\n        \"title\",\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      )\n      .text(\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      );\n\n    // Append backface info\n    this.div\n      .selectAll(\".js-data-desc\")\n      .text(metadata.description);\n    this.div.selectAll(\".js-data-freq\").text(formatDate(parsedDate));\n    if (typeof data[1] !== \"undefined\") {\n      var spark = new Sparkline(divClass + \" .sparkline\", data, {\n        trend,\n        freq\n      });\n      spark.render();\n\n      var pctChange = (lastValue / nextToLastValue) * 100 - 100;\n      var pctFormat = accounting.formatNumber(pctChange, 2) + \"%\";\n      var isPositive = pctChange > 0;\n\n      // If is a positive change, attach a plus sign to the number\n      this.div.select(\".widget_pct\").text(function() {\n        return isPositive ? \"+\" + pctFormat : pctFormat;\n      });\n\n      // Return the correct icon\n      this.div\n        .select(\".widget_pct\")\n        .append(\"i\")\n        .attr(\"aria-hidden\", \"true\")\n        .attr(\"class\", function() {\n          return isPositive ? \"fas fa-caret-up\" : \"fas fa-caret-down\";\n        });\n    }\n  }\n}\n", "import * as d3 from 'd3';\n\nexport class Sparkline {\n  constructor(context, data, options = {}) {\n    this.container = context;\n    this.data = data;\n\n    // options\n    this.timeParse =\n      options.freq === \"daily\"\n        ? d3.timeParse(\"%Y-%m-%d\")\n        : options.freq === \"monthly\"\n        ? d3.timeParse(\"%Y-%m\")\n        : d3.timeParse(\"%Y\");\n    this.trend = options.trend;\n    this.axes = options.axes || false;\n    this.aspectRatio = options.aspectRatio || 5;\n    this.margin = options.margins || { top: 5, right: 5, bottom: 5, left: 5 };\n\n    // Chart dimensions\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    // Scales & Ranges\n    this.xScale = d3.scaleTime();\n    this.yScale = d3.scaleLinear();\n    this.color = d3.scaleOrdinal();\n\n    // Create main elements\n    this.svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    d3.select(window).on(\"resize.\" + this.container, () => {\n      if (this.data) {\n        this._resize();\n      }\n    });\n  }\n\n  render() {\n    this._type();\n    this.updateRender();\n    this._renderLines();\n  }\n\n  updateRender() {\n    this.xScale.rangeRound([0, this.width]).domain(\n      d3.extent(\n        this.data,\n        function(d) {\n          return d.date;\n        }.bind(this)\n      )\n    );\n\n    this.yScale\n      .rangeRound([this.height, 0])\n      .domain(\n        d3.extent(\n          this.data,\n          function(d) {\n            return Number(d.value);\n          }.bind(this)\n        )\n      )\n      .nice();\n  }\n\n  _renderLines() {\n    this.line = d3\n      .line()\n      .x(\n        function(d) {\n          return this.xScale(d.date);\n        }.bind(this)\n      )\n      .y(\n        function(d) {\n          return this.yScale(Number(d.value));\n        }.bind(this)\n      );\n\n    this.isPositive =\n      this.data[0].value - this.data.slice(-1)[0].value > 0 ? true : false;\n\n    if (this.axes) {\n      this.svg\n        .append(\"g\")\n        .attr(\"class\", \"x axis\")\n        .attr(\"transform\", `translate(0,${this.height})`)\n        .call(this._xAxis.bind(this));\n    }\n\n    this.svg\n      .append(\"path\")\n      .datum(this.data)\n      .attr(\"stroke\", this._getColor())\n      .attr(\"fill\", \"none\")\n      .attr(\"d\", this.line);\n\n    this.svg\n      .append(\"circle\")\n      .attr(\n        \"cx\",\n        function() {\n          return this.xScale(this.data[0].date);\n        }.bind(this)\n      )\n      .attr(\n        \"cy\",\n        function() {\n          return this.yScale(this.data[0].value);\n        }.bind(this)\n      )\n      .attr(\"r\", 2.5)\n      .attr(\"fill\", this._getColor());\n  }\n\n  _xAxis(g) {\n    g.call(d3.axisTop(this.xScale).ticks(this.data.length));\n    g.selectAll(\".domain\").remove();\n    g.selectAll(\".tick text\").remove();\n    g.selectAll(\".tick:first-of-type line\").remove();\n    g.selectAll(\".tick:last-of-type line\").remove();\n    g.selectAll(\".tick line\")\n      .attr(\"y1\", 0)\n      .attr(\"y2\", -this.height);\n  }\n\n  _getColor() {\n    if (\n      (this.isPositive && this.trend === \"up\") ||\n      (!this.isPositive && this.trend === \"down\")\n    ) {\n      return \"#AAC44B\";\n    } else {\n      return \"#981F2E\";\n    }\n  }\n\n  _type() {\n    this.data = this.data\n      .map(d => ({\n        ...d,\n        date: this.timeParse(d.date)\n      }))\n      .sort((a, b) => (a.date < b.date ? 1 : -1));\n  }\n\n  _width() {\n    return d3.select(this.container).node()\n      ? parseInt(d3.select(this.container).style(\"width\"))\n      : 0;\n  }\n\n  _height() {\n    return this._width() / this.aspectRatio;\n  }\n\n  _resize() {\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    this.updateRender();\n\n    d3.select(this.container + \" svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom);\n\n    this.svg\n      .select(\".chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    this.svg.select(\"path\").attr(\"d\", this.line);\n\n    this.svg\n      .select(\"circle\")\n      .attr(\n        \"cx\",\n        function() {\n          return this.xScale(this.data[0].date);\n        }.bind(this)\n      )\n      .attr(\n        \"cy\",\n        function() {\n          return this.yScale(this.data[0].value);\n        }.bind(this)\n      );\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting } from '../../../lib/shared';\nimport { Card } from './card.js';\n\nexport class SparklineTableCard extends Card {\n  constructor(divClass, data, { metadata, cardName }) {\n    super(divClass);\n\n    this.dataType = this.div.attr(\"data-type\");\n\n    var parsedDate = new Date(metadata.updated_at);\n    var formatDate = d3.timeFormat(\"%b %Y\");\n\n    this.div\n      .selectAll(\".tw-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://twitter.com/intent/tweet?text=\" +\n          I18n.t(\"gobierto_common.visualizations.where\") +\n          encodeURI(window.populateData.municipalityName) +\n          \": \" +\n          encodeURI(\n            I18n.t(\n              \"gobierto_common.visualizations.cards.\" + cardName + \".title\"\n            )\n          ).toLowerCase() +\n          I18n.t(\"gobierto_common.visualizations.time\") +\n          encodeURI(formatDate(parsedDate).toLowerCase()) +\n          \", \" +\n          encodeURI(this._printData(data[0].value)) +\n          \"&url=\" +\n          window.location.href +\n          \"&via=gobierto&source=webclient\"\n      );\n\n    this.div\n      .selectAll(\".fb-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://www.facebook.com/sharer/sharer.php?u=\" + window.location.href\n      );\n\n    // Append source\n    this.div\n      .selectAll(\".widget_src\")\n      .attr(\"title\", metadata[\"source_name\"])\n      .html(metadata[\"source_url\"] ? `<a href=\"${metadata[\"source_url\"]}\" target=\"_blank\" rel=\"noopener noreferrer\">${metadata[\"source_name\"]}</a>` : metadata[\"source_name\"]);\n\n    // Append date of last data point\n    this.div.selectAll(\".widget_updated\").text(formatDate(parsedDate));\n\n    // Append update frequency\n    this.div\n      .selectAll(\".widget_freq\")\n      .text(this._printFreq(metadata.frequency_type));\n\n    // Append metadata\n    this.div\n      .selectAll(\".widget_title\")\n      .attr(\n        \"title\",\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      )\n      .text(\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      );\n\n    // Append backface info\n    this.div\n      .selectAll(\".js-data-desc\")\n      .text(metadata.description);\n    this.div.selectAll(\".js-data-freq\").text(formatDate(parsedDate));\n\n    var rows = data.map(\n      function(d) {\n        return (\n          \"<td>\" +\n          d.title +\n          '</td> \\\n        <td class=\"sparktable sparkline-' +\n          d.key +\n          '\"></td> \\\n        <td>' +\n          accounting.formatNumber(d.diff, 1) +\n          \"%</td> \\\n        <td>\" +\n          this._printData(d.value) +\n          \"</td>\"\n        );\n      }.bind(this)\n    );\n\n    this.div\n      .select(\".widget_table\")\n      .selectAll(\"tr\")\n      .data(rows)\n      .enter()\n      .append(\"tr\")\n      .html(function(d) {\n        return d;\n      });\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting } from '../../../lib/shared';\nimport { Card } from './card.js';\n\nexport class TableCard extends Card {\n  constructor(divClass, data, { metadata, cardName }) {\n    super(divClass);\n\n    this.dataTypeOne = this.div.attr(\"data-type-one\");\n    this.dataTypeTwo = this.div.attr(\"data-type-two\");\n\n    var parsedDate = new Date(metadata.updated_at);\n    var formatDate = d3.timeFormat(\"%b %Y\");\n\n    this.div\n      .selectAll(\".tw-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://twitter.com/intent/tweet?text=\" +\n          I18n.t(\"gobierto_common.visualizations.where\") +\n          encodeURI(window.populateData.municipalityName) +\n          \": \" +\n          encodeURI(\n            I18n.t(\n              \"gobierto_common.visualizations.cards.\" + cardName + \".title\"\n            )\n          ).toLowerCase() +\n          I18n.t(\"gobierto_common.visualizations.time\") +\n          encodeURI(formatDate(parsedDate).toLowerCase()) +\n          \", \" +\n          encodeURI(this._printData(data[0].value_1)) +\n          \"&url=\" +\n          window.location.href +\n          \"&via=gobierto&source=webclient\"\n      );\n\n    this.div\n      .selectAll(\".fb-sharer\")\n      .attr(\"target\", \"_blank\")\n      .attr(\n        \"href\",\n        \"https://www.facebook.com/sharer/sharer.php?u=\" + window.location.href\n      );\n\n    // Append source\n    this.div\n      .selectAll(\".widget_src\")\n      .attr(\"title\", metadata[\"source_name\"])\n      .html(metadata[\"source_url\"] ? `<a href=\"${metadata[\"source_url\"]}\" target=\"_blank\" rel=\"noopener noreferrer\">${metadata[\"source_name\"]}</a>` : metadata[\"source_name\"]);\n\n    // Append date of last data point\n    this.div.selectAll(\".widget_updated\").text(formatDate(parsedDate));\n\n    // Append update frequency\n    this.div\n      .selectAll(\".widget_freq\")\n      .text(this._printFreq(metadata.frequency_type));\n\n    // Append metadata\n    this.div\n      .selectAll(\".widget_title\")\n      .attr(\n        \"title\",\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      )\n      .text(\n        I18n.t(\"gobierto_common.visualizations.cards.\" + cardName + \".title\")\n      );\n\n    // Append backface info\n    this.div\n      .selectAll(\".js-data-desc\")\n      .text(metadata.description);\n    this.div.selectAll(\".js-data-freq\").text(formatDate(parsedDate));\n\n    var header = data.map(\n      function(d) {\n        return I18n.t(\n          \"gobierto_common.visualizations.cards.\" +\n            cardName +\n            \".\" +\n            this._normalize(d.column)\n        );\n      }.bind(this)\n    );\n\n    var rows = data.map(\n      function(d) {\n        return (\n          \"<td>\" +\n          d.key +\n          '</td> \\\n        <td class=\"right\">' +\n          this._printData(d.value_1, this.dataTypeOne) +\n          '</td> \\\n        <td class=\"right\">' +\n          this._printData(d.value_2, this.dataTypeTwo) +\n          \"</td>\"\n        );\n      }.bind(this)\n    );\n\n    var table = this.div.select(\".widget_table\");\n\n    table\n      .selectAll(\"th\")\n      .data(header)\n      .enter()\n      .append(\"th\")\n      .attr(\"class\", \"right\")\n      .html(function(d) {\n        if (d === \"\")\n          d =\n            '<span style=\"display:none\" aria-hidden=\"true\">WCAG 2.0 AA</span>';\n        return d;\n      });\n\n    table\n      .selectAll(\"tr\")\n      .data(rows)\n      .enter()\n      .append(\"tr\")\n      .html(function(d) {\n        return d;\n      });\n  }\n\n  _printData(dataRaw, dataType) {\n    var data = Number(dataRaw)\n\n    // Switch between different figure types\n    switch ((data, dataType)) {\n      case \"percentage\":\n        return accounting.formatNumber(data, 1) + \"%\";\n      case \"currency\":\n        return accounting.formatNumber(data, 0) + \"\u20AC\";\n      case \"currency_per_person\":\n        return (\n          accounting.formatNumber(data, 0) +\n          \"\u20AC/\" +\n          I18n.t(\"gobierto_common.visualizations.inhabitants\")\n        );\n      default:\n        return accounting.formatNumber(data, 0);\n    }\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting } from '../../../lib/shared';\n\nexport class VisIndicators {\n  constructor(divId, url) {\n    this.container = divId;\n    this.data = null;\n    this.total = null;\n    this.genderRatio = null;\n    this.eqRatio = null;\n    this.avgAge = null;\n    this.places = null;\n    this.table = null;\n    this.dataUrl = url;\n  }\n\n  getData() {\n    d3.csv(this.dataUrl).then(csvData => {\n      // Main dataset\n      this.data = csvData;\n      this.data.forEach(function(d) {\n        d.age = +d.age;\n        d.answer = +d.answer;\n        d.id = +d.id;\n      });\n\n      // Make an object for each participant\n      var totalNest = Array.from(\n        d3.group(this.data, d => d.id),\n        ([key, values]) => ({\n          key,\n          values\n        })\n      );\n\n      totalNest.forEach(function(d) {\n        d.age = d.values[0].age;\n        d.location = d.values[0].location;\n      });\n\n      // TOTAL RESPONSES\n      this.total = totalNest.length;\n\n      // GENDER RATIO\n      var ratioNest = Array.from(\n        d3.group(this.data, d => d.gender, d => d.id),\n        ([key, values]) => ({\n          key,\n          values\n        })\n      );\n\n      this.genderRatio = [\n        ratioNest[0].values.length / this.total,\n        ratioNest[1].values.length / this.total\n      ];\n\n      // EQ / DEFICIT RATIO\n      var eqNest = Array.from(\n        d3.rollup(this.data, v => d3.sum(v, d => d.answer), d => d.id),\n        ([key, value]) => ({\n          key,\n          value\n        })\n      );\n\n      this.eqRatio = [\n        eqNest.filter(function(d) {\n          return d.value < 0;\n        }).length / this.total,\n        eqNest.filter(function(d) {\n          return d.value === 0;\n        }).length / this.total,\n        eqNest.filter(function(d) {\n          return d.value > 0;\n        }).length / this.total\n      ];\n\n      // AVERAGE AGE\n      this.avgAge = d3.mean(totalNest, d => d.age);\n\n      // PLACES COUNT\n      var placesNest = Array.from(\n        d3.rollup(this.data, v => v.length, d => d.id, d => d.location),\n        ([key, values]) => ({\n          key,\n          values\n        })\n      );\n\n      this.places = placesNest.map(\n        function(d) {\n          return {\n            location: d.key,\n            responses: d.values.length / this.total\n          };\n        }.bind(this)\n      );\n\n      this.places.sort((a, b) => b.responses - a.responses);\n\n      // GET QUESTIONS SUMMARY\n      this.table = Array.from(\n        d3.rollup(\n          this.data,\n          d => d.length / this.total,\n          d => d.answer,\n          d => d.question\n        ),\n        ([key, values]) => ({\n          key,\n          values\n        })\n      );\n\n      this.updateRender();\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.updateRender();\n    }\n  }\n\n  updateRender() {\n    var format = d3.format(\".0%\");\n\n    // TOTAL PARTICIPANTS\n    d3.select(\".total-participants\").text(this.total);\n\n    // PARTICIPANTS GENDER\n    var genderClasses = [\".ratio-participants-m\", \".ratio-participants-w\"];\n\n    genderClasses.forEach(\n      function(className, i) {\n        d3.select(className).text(format(this.genderRatio[i]));\n      }.bind(this)\n    );\n\n    // SURPLUS, EQ AND DEFICIT\n    var budgetClasses = [\n      \".ratio-responses-sp\",\n      \".ratio-responses-eq\",\n      \".ratio-responses-df\"\n    ];\n\n    budgetClasses.forEach(\n      function(className, i) {\n        d3.select(className).text(format(this.eqRatio[i]));\n      }.bind(this)\n    );\n\n    // AVG AGE\n    d3.select(\".avg-participants\").text(\n      accounting.formatNumber(this.avgAge, 0)\n    );\n\n    // PLACES LIST\n    var placeList = d3\n      .select(\".location-participants\")\n      .append(\"ol\")\n      .selectAll(\"li\")\n      .data(this.places)\n      .enter();\n\n    placeList\n      .append(\"li\")\n      .attr(\"class\", \"figure-row\")\n      .html(function(d) {\n        return (\n          d.location +\n          '<span class=\"f_right\">' +\n          format(d.responses) +\n          \"</span>\"\n        );\n      });\n\n    // TABLE\n    var color = d3\n      .scaleQuantile()\n      .domain([0, 1])\n      .range([\n        \"bg-scale--1\",\n        \"bg-scale--2\",\n        \"bg-scale--3\",\n        \"bg-scale--4\",\n        \"bg-scale--5\"\n      ]);\n\n    function returnValue(row) {\n      return typeof row !== \"undefined\" ? format(row.value) : \"\u2014\";\n    }\n\n    function customClass(row) {\n      return typeof row !== \"undefined\"\n        ? \"center number \" + color(row.value)\n        : \"center empty\";\n    }\n\n    function extractValue(row, key) {\n      return row.find(function(d) {\n        return d.key === key;\n      });\n    }\n\n    var columns = [\n      {\n        head: I18n.t(\"gobierto_common.visualizations.questions\"),\n        headCl: \"title\",\n        cl: \"title\",\n        html(d) {\n          return d.key;\n        }\n      },\n      {\n        head: I18n.t(\"gobierto_common.visualizations.reduce\"),\n        headCl: \"center\",\n        cl(d) {\n          return customClass(extractValue(d.values, \"-5\"));\n        },\n        html(d) {\n          return returnValue(extractValue(d.values, \"-5\"));\n        }\n      },\n      {\n        head: I18n.t(\"gobierto_common.visualizations.keep\"),\n        headCl: \"center\",\n        cl(d) {\n          return customClass(extractValue(d.values, \"0\"));\n        },\n        html(d) {\n          return returnValue(extractValue(d.values, \"0\"));\n        }\n      },\n      {\n        head: I18n.t(\"gobierto_common.visualizations.increase\"),\n        headCl: \"center\",\n        cl(d) {\n          return customClass(extractValue(d.values, \"5\"));\n        },\n        html(d) {\n          return returnValue(extractValue(d.values, \"5\"));\n        }\n      }\n    ];\n\n    var table = d3.select(\"#table_report\").append(\"table\");\n\n    table\n      .append(\"thead\")\n      .append(\"tr\")\n      .selectAll(\"th\")\n      .data(columns)\n      .enter()\n      .append(\"th\")\n      .attr(\"class\", function(d) {\n        return d.headCl + \" table--header\";\n      })\n      .text(function(d) {\n        return d.head;\n      });\n\n    table\n      .append(\"tbody\")\n      .selectAll(\"tr\")\n      .data(this.table)\n      .enter()\n      .append(\"tr\")\n      .selectAll(\"td\")\n      .data(function(row, i) {\n        return columns.map(function(c) {\n          var cell = {};\n\n          Object.keys(c).forEach(function(k) {\n            cell[k] = typeof c[k] == \"function\" ? c[k](row, i) : c[k];\n          });\n          return cell;\n        });\n      })\n      .enter()\n      .append(\"td\")\n      .html(function(d) {\n        return d.html;\n      })\n      .attr(\"class\", function(d) {\n        return d.cl;\n      });\n  }\n}\n", "import * as d3 from 'd3';\nimport { truncate } from '../../../lib/vue/filters';\nimport { divide } from '../../shared';\n\n/**\n * NOTE: dc@4 has been imported via CDN due to d3 compatibility issues\n * It requires d3@5 to be imported as well\n */\nexport class GroupPctDistributionBars {\n  constructor(options) {\n    // Declaration\n    const { containerSelector, dimension, onFilteredFunction, groupValue } = options;\n    this.container = new dc.RowChart(containerSelector, \"group\");\n\n    // Dimensions\n    const groupedDimension = !groupValue ? dimension.group().reduceCount() : dimension.group().reduceSum(d => d[groupValue]),\n      all = dimension.groupAll();\n\n    // Styling\n    this._count = groupedDimension.size();\n    this._gap = 10;\n    this._barHeight = 18;\n\n    const _initialLabelOffset = 250\n    const _pctLabelOffset = !groupValue ? 50 : 80;\n\n    this.node = this.container.root().node() || document.createElement(\"div\");\n\n    this.setContainerSize();\n\n    // Construction\n    this.container\n      .x(d3.scaleThreshold())\n      .dimension(dimension)\n      .group(groupedDimension)\n      .ordering(d => -d.value)\n      .labelOffsetX(-_initialLabelOffset)\n      .gap(this._gap)\n      .elasticX(true)\n      .title(d => d.value)\n      .valueAccessor(d => parseFloat(divide(d.value, all.value())));\n\n    this.container.on(\"pretransition\", function(chart) {\n      // Apply rounded corners AFTER render, otherwise they don't exist\n      chart\n        .selectAll(\"rect\")\n        .attr(\"rx\", 4)\n        .attr(\"ry\", 4);\n\n      // Custom labels\n      chart\n        .selectAll(\"text.row\")\n        .text(\"\")\n        .selectAll(\"tspan\")\n        .data(d => {\n          let label = truncate(d.key, { length: 25 });\n          let labelValue;\n\n          if (this.hasFilter() && !this.hasFilter(d.key)) {\n            labelValue = 0.0;\n          } else if (this.hasFilter() && this.hasFilter(d.key)) {\n            labelValue = !groupValue\n              ? parseFloat(divide(d.value, dimension.top(Infinity).length))\n              : d.value;\n          } else {\n            labelValue = !groupValue\n              ? parseFloat(divide(d.value, all.value()))\n              : d.value;\n          }\n\n          if (!groupValue) {\n            labelValue = labelValue.toLocaleString(I18n.locale, {\n              style: \"percent\",\n              minimumFractionDigits: 1\n            });\n          } else {\n            //Convert negative zero to positive zero\n            labelValue = Math.max(0, labelValue).toLocaleString(I18n.locale, {\n              style: \"currency\",\n              currency: \"EUR\",\n              maximumFractionDigits: 0\n            });\n          }\n\n          return [label, labelValue];\n        })\n        .enter()\n        .append(\"tspan\")\n        .text(d => d)\n        .attr(\"x\", (d, i) =>\n          i === 0 ? -_initialLabelOffset : -_pctLabelOffset\n        );\n    });\n\n    this.container.on(\"filtered\", (chart, filter) =>\n      onFilteredFunction(chart, filter)\n    );\n\n    // Customization\n    this.container.xAxis(d3.axisTop().ticks(0));\n    this.container.margins().left = _initialLabelOffset + 5;\n    this.container.margins().right = 0;\n\n    // Rendering\n    this.container.render();\n  }\n\n  setContainerSize() {\n    this.container\n      .width((this.node.parentNode || this.node).getBoundingClientRect().width) // webkit doesn't recalculate dynamic width. it has to be set by parentNode\n      .height(\n        this.container.margins().top +\n          this.container.margins().bottom +\n          this._count * this._barHeight +\n          (this._count + 1) * this._gap\n      ) // Margins top/bottom + bars + gaps (space between)\n      .fixedBarHeight(this._barHeight);\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting } from '../../../lib/shared';\n\nArray.prototype.unique = function() {\n  var a = this.concat();\n  for (var i = 0; i < a.length; ++i) {\n    for (var j = i + 1; j < a.length; ++j) {\n      if (a[i] === a[j]) a.splice(j--, 1);\n    }\n  }\n\n  return a;\n};\n\nexport class VisLineasJ {\n  constructor(divId, tableID, measure, series) {\n    this.container = divId;\n    this.tableContainer = tableID;\n\n    // Chart dimensions\n    this.containerWidth = null;\n    this.tableWidth = null;\n    this.margin = { top: 30, right: 60, bottom: 20, left: 20 };\n    this.width = null;\n    this.height = null;\n\n    // Variable: valid values are total_budget and total_budget_per_inhabitant\n    // TODO: check what to do with percentage\n    this.measure = measure;\n    this.series = series;\n\n    // Scales\n    this.xScale = d3.scaleTime();\n    this.yScale = d3.scaleLinear();\n    this.colorScale = d3.scaleOrdinal();\n    this.yScaleTable = d3.scaleBand();\n    this.xScaleTable = d3.scaleLinear();\n\n    // Axis\n    this.xAxis = d3.axisBottom();\n    this.yAxis = d3.axisRight();\n\n    // Data\n    this.data = null;\n    this.dataChart = null;\n    this.dataDomain = null;\n    this.kind = null;\n    this.dataYear = null;\n    this.dataTitle = null;\n    this.lastYear = null;\n    this.maxYear = new Date().getFullYear();\n\n    // Objects\n    this.tooltip = null;\n    this.formatPercent =\n      this.measure == \"percentage\" ? d3.format(\"%\") : d3.format(\".0f\");\n    this.parseDate = d3.timeParse(\"%Y\");\n    this.line = d3.line();\n\n    // Chart objects\n    this.svgLines = null;\n    this.svgTable = null;\n    this.chart = null;\n    this.focus = null;\n\n    // Constant values\n    this.radius = 4;\n    this.heavyLine = 3;\n    this.mediumLine = 2;\n    this.lightLine = 1;\n    this.opacity = 0.7;\n    this.opacityLow = 0.4;\n    this.duration = 400;\n    this.mainColor = \"#F69C95\";\n    this.darkColor = \"#B87570\";\n    this.softGrey = \"#d6d5d1\";\n    this.darkGrey = \"#554E41\";\n    this.blue = \"#2A8998\";\n    this.meanColorRange = [\"#2A8998\", \"#F8B419\", \"#B82E2E\", \"#66AA00\"];\n    this.comparatorColorRange = [\n      \"#2A8998\",\n      \"#F8B419\",\n      \"#b82e2e\",\n      \"#66aa00\",\n      \"#dd4477\",\n      \"#636363\",\n      \"#273F8E\",\n      \"#e6550d\",\n      \"#990099\",\n      \"#06670C\"\n    ];\n    // azul main, amarillo main, rojo g scale, verde g, verde, violeta,\n    // gris\n\n    this.niceCategory = null;\n  }\n\n  render(urlData) {\n    $(this.container).html(\"\");\n    $(this.tableContainer).html(\"\");\n\n    var self = this;\n\n    // Chart dimensions\n    this.containerWidth = parseInt(\n      d3.select(this.container).style(\"width\"),\n      10\n    );\n    if (isNaN(this.containerWidth)) {\n      this.containerWidth = 0;\n    }\n\n    if (d3.select(this.tableContainer).size() !== 0) {\n      this.tableWidth = parseInt(\n        d3.select(this.tableContainer).style(\"width\"),\n        10\n      );\n    } else {\n      this.tableWidth = 0;\n    }\n\n    this.margin.right =\n      this.measure == \"per_person\"\n        ? this.containerWidth * 0.07\n        : this.containerWidth * 0.15;\n\n    this.width = this.containerWidth - this.margin.left - this.margin.right;\n    this.height =\n      this.containerWidth / 2.6 - this.margin.top - this.margin.bottom;\n\n    if (this.height < 230) {\n      this.height = 230;\n    }\n\n    // Append svg\n    this.svgLines = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom + 10)\n      .attr(\"class\", \"svg_lines\")\n      .append(\"g\")\n      .attr(\"transform\", \"translate(\" + 0 + \",\" + this.margin.top + \")\");\n\n    // Set nice category\n    this.niceCategory = {\n      mean_national: I18n.t(\"gobierto_common.visualizations.mean_national\"),\n      mean_autonomy: I18n.t(\"gobierto_common.visualizations.mean_autonomy\"),\n      mean_province: I18n.t(\"gobierto_common.visualizations.mean_province\"),\n      G: \"Gasto/habitante\",\n      I: \"Ingreso/habitante\",\n      percentage: \"% sobre el total\"\n    };\n\n    // Load the data\n    d3.json(urlData).then(jsonData => {\n      this.data = jsonData;\n\n      var budgetsData =\n        this.data[\"budgets\"][\"per_person\"] ||\n        this.data[\"budgets\"][\"total_budget\"];\n      var yearsWithData = budgetsData.map(x =>\n        x[\"values\"].map(value => value[\"date\"])\n      );\n\n      yearsWithData = [].concat.apply([], yearsWithData); // Flatten array\n\n      var uniqueYears = [];\n      yearsWithData.forEach(year => {\n        if (uniqueYears.indexOf(year) === -1) {\n          uniqueYears.push(year);\n        }\n      });\n\n      if (uniqueYears.length < 2) {\n        $(\"#lines_chart_wrapper\").html(\"\");\n        $(\"#lines_chart_wrapper_separator\").remove();\n        return;\n      }\n\n      this.data.budgets[this.measure].forEach(d => {\n        d.values.forEach(v => {\n          v.date = this.parseDate(v.date);\n          v.name = d.name;\n        });\n      });\n\n      this.dataChart = this.data.budgets[this.measure];\n      this.kind = this.data.kind;\n      this.dataYear = this._defaultYearForVerticalLine(this.data);\n      this.lastYear = this.parseDate(this.data.year).getFullYear(); // For the mouseover interaction\n      if (this.lastYear > this.maxYear) {\n        this.dataYear = new Date(this.maxYear + \"-01-01\");\n        this.lastYear = this.maxYear;\n      }\n      this.dataTitle = this.data.title;\n\n      ////// Complete the dataTable.\n      // Get all the years\n      var years = [];\n\n      this.dataChart.map(d => {\n        d.values.map(v => {\n          if (years.map(Number).indexOf(+v.date) == -1) {\n            years.push(v.date);\n          }\n        });\n      });\n\n      // Sort them\n      years = years.sort(d3.ascending);\n\n      // Create a values object for every municipality for every year\n      this.dataChart.map(d => {\n        if (d.values.length != years.length) {\n          years.forEach(year => {\n            // If the year does not exist\n            // Push a new object\n            var aux = d.values.filter(v => v.date == year);\n\n            if (aux.length == 0) {\n              var obj = {\n                date: year,\n                dif: null,\n                name: d.name,\n                value: null\n              };\n              d.values.push(obj);\n            }\n          });\n        }\n      });\n\n      this.dataDomain = [\n        d3.min(this.dataChart.map(d => d3.min(d.values.map(v => v.value)))),\n        d3.max(this.dataChart.map(d => d3.max(d.values.map(v => v.value))))\n      ];\n\n      var min = 0;\n      if (this.dataDomain[0] > 100000) {\n        min = Math.floor((this.dataDomain[0] * 0.1) / 10000.0) * 10000;\n      } else {\n        min = Math.floor((this.dataDomain[0] * 0.1) / 100.0) * 100;\n      }\n\n      var max = 0;\n      if (this.dataDomain[1] > 100000) {\n        max = Math.floor((this.dataDomain[1] * 1.2) / 10000.0) * 10000;\n      } else {\n        max = Math.ceil(this.dataDomain[1] * 1.2);\n      }\n\n      // Set the scales\n      this.xScale\n        .domain(d3.extent(years))\n        .range([this.margin.left, this.width - this.margin.right]);\n\n      this.yScale\n        // .domain([this.dataDomain[0] * .3, this.dataDomain[1] * 1.2])\n        .domain([min, max])\n        .range([this.height, this.margin.top]);\n\n      this.colorScale\n        .range(\n          this.series == \"means\"\n            ? this.meanColorRange\n            : this.comparatorColorRange\n        )\n        .domain(this.dataChart.map(d => d.name));\n\n      // Define the axis\n      this.xAxis.tickValues(this._xTickValues(years)).scale(this.xScale);\n\n      this.yAxis\n        .scale(this.yScale)\n        .tickValues(this._tickValues(this.yScale))\n        .tickFormat(d =>\n          accounting.formatMoney(\n            d,\n            \"\u20AC\",\n            0,\n            I18n.t(\"number.currency.format.delimiter\"),\n            I18n.t(\"number.currency.format.separator\")\n          )\n        )\n        .tickSize(-(this.width - (this.margin.right + this.margin.left - 20)));\n\n      // Define the line\n      this.line\n        .curve(d3.curveCardinal)\n        .x(d => this.xScale(d.date))\n        .y(d => this.yScale(d.value));\n\n      // --> DRAW THE AXIS\n      this.svgLines\n        .append(\"g\")\n        .attr(\"class\", \"x axis\")\n        .attr(\"transform\", \"translate(\" + 0 + \",\" + this.height + \")\")\n        .call(this.xAxis);\n\n      this.svgLines\n        .append(\"g\")\n        .attr(\"class\", \"y axis\")\n        .attr(\n          \"transform\",\n          \"translate(\" + (this.width - this.margin.right) + \",0)\"\n        )\n        .call(this.yAxis);\n\n      // Change ticks color\n      d3.selectAll(\".axis\")\n        .selectAll(\"text\")\n        .attr(\"fill\", this.darkGrey)\n        .style(\"font-size\", \"12px\");\n\n      d3.selectAll(\".y.axis\")\n        .selectAll(\"text\")\n        .attr(\"transform\", \"translate(10,0)\");\n\n      d3.selectAll(\".x.axis\")\n        .selectAll(\"text\")\n        .attr(\"transform\", \"translate(0,10)\");\n\n      d3.selectAll(\".y.axis\")\n        .selectAll(\"path\")\n        .attr(\"stroke\", \"none\");\n\n      d3.selectAll(\".axis\")\n        .selectAll(\"line\")\n        .attr(\"stroke\", this.softGrey);\n\n      // --> DRAW VERTICAL LINE\n      this.svgLines\n        .selectAll(\".v_line\")\n        .data([this.dataYear])\n        .enter()\n        .append(\"line\")\n        .attr(\"class\", \"v_line\")\n        .attr(\"x1\", d => this.xScale(d))\n        .attr(\"y1\", this.margin.top)\n        .attr(\"x2\", d => this.xScale(d))\n        .attr(\"y2\", this.height)\n        .style(\"stroke\", this.darkGrey);\n\n      // --> DRAW THE LINES\n      this.chart = this.svgLines.append(\"g\").attr(\"class\", \"evolution_chart\");\n\n      this.chart\n        .append(\"g\")\n        .attr(\"class\", \"lines\")\n        .selectAll(\"path\")\n        .data(this.dataChart)\n        .enter()\n        .append(\"path\")\n        .attr(\"class\", d => \"evolution_line \" + this._normalize(d.name))\n        .attr(\"d\", d => this.line(d.values.filter(v => v.value != null)))\n        .style(\"stroke\", d => this.colorScale(d.name))\n        .style(\"stroke-width\", (d, i) => {\n          if (this.series == \"means\")\n            return i == 3 ? this.heavyLine : this.lightLine;\n          else return this.lightLine;\n        });\n\n      // Add dot to lines\n      this.chart\n        .selectAll(\"g.dots\")\n        .data(this.dataChart)\n        .enter()\n        .append(\"g\")\n        .attr(\"class\", \"dots\")\n        .selectAll(\"circle\")\n        .data(d => d.values.filter(v => v.value != null))\n        .enter()\n        .append(\"circle\")\n        .attr(\"class\", d => {\n          return (\n            \"dot_line \" + this._normalize(d.name) + \" x\" + d.date.getFullYear()\n          );\n        })\n        .attr(\"cx\", d => this.xScale(d.date))\n        .attr(\"cy\", d => this.yScale(d.value))\n        .attr(\"r\", this.radius)\n        .style(\"fill\", d => this.colorScale(d.name))\n        .on(\"mouseover\", function() {\n          var selected = this,\n            selectedClass = selected.classList,\n            selectedData = d3.select(selected).data()[0];\n\n          var dataChartFiltered = self.dataChart.map(\n            d =>\n              d.values.filter(\n                v => v.date.getFullYear() == selectedData.date.getFullYear()\n              )[0]\n          );\n\n          if (self.lastYear != selectedData.date.getFullYear()) {\n            // Hide table figures and update text\n            // Year header\n            d3.selectAll(self.tableContainer + \" .year_header\")\n              .transition()\n              .duration(self.duration / 2)\n              .style(\"opacity\", 0)\n              .text(selectedData.date.getFullYear())\n              .transition()\n              .duration(self.duration)\n              .style(\"opacity\", 1);\n\n            // Values\n            d3.selectAll(self.tableContainer + \" .value\")\n              .transition()\n              .duration(self.duration / 2)\n              .style(\"opacity\", 0)\n              .text(d => {\n                var newValue = dataChartFiltered.filter(\n                  value => value.name == d.name\n                );\n                d.value = newValue[0].value;\n                return d.value != null\n                  ? accounting.formatMoney(\n                      d.value,\n                      \"\u20AC\",\n                      2,\n                      I18n.t(\"number.currency.format.delimiter\"),\n                      I18n.t(\"number.currency.format.separator\")\n                    )\n                  : \"-- \u20AC\";\n              })\n              .transition()\n              .duration(self.duration)\n              .style(\"opacity\", 1);\n\n            // Difs\n            d3.selectAll(self.tableContainer + \" .dif\")\n              .transition()\n              .duration(self.duration / 2)\n              .style(\"opacity\", 0)\n              .text(d => {\n                var newValue = dataChartFiltered.filter(\n                  dif => dif.name == d.name\n                );\n                d.dif = newValue[0].dif;\n                if (d.dif != null) {\n                  return d.dif <= 0\n                    ? d.dif.toLocaleString(I18n.locale) + \" %\"\n                    : \"+\" + d.dif.toLocaleString(I18n.locale) + \" %\";\n                } else {\n                  return \"-- %\";\n                }\n              })\n              .transition()\n              .duration(self.duration)\n              .style(\"opacity\", 1);\n          }\n\n          self.lastYear = selectedData.date.getFullYear();\n\n          self.svgLines\n            .selectAll(\".v_line\")\n            .transition()\n            .duration(self.duration / 2)\n            .attr(\"x1\", () => self.xScale(selectedData.date))\n            .attr(\"x2\", () => self.xScale(selectedData.date));\n\n          d3.select(selected)\n            .transition()\n            .duration(self.duration)\n            .attr(\"r\", self.radius * 1.5);\n\n          self.svgLines\n            .selectAll(\".dot_line\")\n            .transition()\n            .duration(self.duration)\n            .filter(\n              d =>\n                d.name != selectedClass[1] &&\n                \"x\" + d.date.getFullYear() != selectedClass[2]\n            )\n            .style(\"opacity\", self.opacityLow);\n\n          self.svgLines\n            .selectAll(\".evolution_line\")\n            .transition()\n            .duration(self.duration)\n            .filter(d => d.name != selectedClass[1])\n            .style(\"opacity\", self.opacityLow);\n        })\n        .on(\"mouseout\", () => {\n          this.svgLines\n            .selectAll(\".dot_line\")\n            .transition()\n            .duration(this.duration)\n            .attr(\"r\", this.radius)\n            .style(\"opacity\", 1);\n\n          this.svgLines\n            .selectAll(\".evolution_line\")\n            .transition()\n            .duration(this.duration)\n            .style(\"opacity\", 1);\n        });\n\n      // --> ADD THE CHART TITLE\n      this.svgLines\n        .append(\"text\")\n        .attr(\"class\", \"chart_title\")\n        .attr(\"x\", this.margin.left)\n        .attr(\"y\", this.margin.top)\n        .attr(\"dx\", -this.margin.left)\n\n        .attr(\"dy\", -this.margin.top * 1.3)\n        .attr(\"text-anchor\", \"start\")\n        .text(this.dataTitle)\n        .style(\"fill\", this.darkGrey)\n        .style(\"font-size\", \"1.2em\");\n\n      // --> DRAW THE 'TABLE'\n\n      // Set columns and rows\n      var columns = [\"color\", \"name\", \"value\", \"dif\"];\n\n      var rows = this.colorScale.domain();\n      rows.push(\"header\");\n\n      var colors = {\n        mean_province: \"province\",\n        mean_autonomy: \"com\",\n        mean_national: \"country\"\n      };\n      // Set scales\n\n      this.yScaleTable.domain(rows).rangeRound([this.height, 0]);\n      this.xScaleTable.domain([0, 1]).range([0, this.tableWidth]);\n\n      var table = d3.select(this.tableContainer).append(\"table\"),\n        thead = table.append(\"thead\"),\n        tbody = table.append(\"tbody\");\n\n      // append the header row\n      thead\n        .append(\"tr\")\n        .selectAll(\"th\")\n        .data(columns)\n        .enter()\n        .append(\"th\")\n        .attr(\"title\", column => column)\n        .attr(\"class\", column => {\n          if (column == \"dif\") {\n            return \"right per_change\";\n          } else if (column == \"value\") {\n            return \"right year_header\";\n          }\n        })\n        .html(column => {\n          if (column == \"color\" || column == \"name\") {\n            return '<span style=\"display:none\" aria-hidden=\"true\">WCAG 2.0 AA</span>';\n          } else if (column == \"dif\") {\n            return I18n.t(\"gobierto_common.visualizations.previous_year_diff\");\n          } else if (column == \"value\") {\n            return this.dataYear.getFullYear();\n          }\n        });\n\n      thead.select(\".year_header\").style(\"font-size\", \"14px\");\n\n      // create a row for each object in the data\n      rows = tbody\n        .selectAll(\"tr\")\n        .data(this.dataChart.reverse())\n        .enter()\n        .append(\"tr\")\n        .attr(\"class\", d => this._normalize(d.name))\n        .on(\"mouseover\", function() {\n          var classed = this.classList[this.classList.length - 1];\n\n          self.svgLines\n            .selectAll(\".dot_line\")\n            .transition()\n            .duration(self.duration)\n            .filter(d => self._normalize(d.name) !== classed)\n            .style(\"opacity\", self.opacityLow);\n\n          self.svgLines\n            .selectAll(\".evolution_line\")\n            .transition()\n            .duration(self.duration)\n            .filter(d => self._normalize(d.name) !== classed)\n            .style(\"opacity\", self.opacityLow);\n        })\n        .on(\"mouseout\", () => {\n          this.svgLines\n            .selectAll(\".dot_line\")\n            .transition()\n            .duration(this.duration)\n            .attr(\"r\", this.radius)\n            .style(\"opacity\", 1);\n\n          this.svgLines\n            .selectAll(\".evolution_line\")\n            .transition()\n            .duration(this.duration)\n            .style(\"opacity\", 1);\n        });\n\n      // create a cell in each row for each column\n      rows\n        .selectAll(\"td\")\n        .data(row => {\n          var dataChartFiltered = row.values.filter(\n            v => v.date.getFullYear() == this.dataYear.getFullYear()\n          );\n\n          dataChartFiltered.map(d =>\n            colors[d.name] != undefined\n              ? (d[\"color\"] = \"le le-\" + colors[d.name])\n              : (d[\"color\"] = \"le le-place\")\n          );\n\n          return columns.map(column => {\n            var value, classed;\n            if (column == \"name\") {\n              value =\n                this.niceCategory[dataChartFiltered[0][column]] != undefined\n                  ? this.niceCategory[dataChartFiltered[0][column]]\n                  : dataChartFiltered[0][column];\n              classed = this._normalize(dataChartFiltered[0].name);\n            } else if (column == \"value\") {\n              value =\n                dataChartFiltered[0][column] != null\n                  ? accounting.formatMoney(\n                      dataChartFiltered[0][column],\n                      \"\u20AC\",\n                      2,\n                      I18n.t(\"number.currency.format.delimiter\"),\n                      I18n.t(\"number.currency.format.separator\")\n                    )\n                  : \"-- \u20AC\";\n              classed =\n                \"value right \" + this._normalize(dataChartFiltered[0].name);\n            } else if (column == \"dif\") {\n              if (dataChartFiltered[0][column] != null) {\n                value =\n                  dataChartFiltered[0][column] > 0\n                    ? \"+\" +\n                      dataChartFiltered[0][column].toLocaleString(I18n.locale) +\n                      \" %\"\n                    : dataChartFiltered[0][column].toLocaleString(I18n.locale) +\n                      \" %\";\n              } else {\n                value = \"--%\";\n              }\n              classed =\n                \"dif right \" + this._normalize(dataChartFiltered[0].name);\n            } else {\n              value = dataChartFiltered[0][column];\n              classed = this._normalize(dataChartFiltered[0].name);\n            }\n            return {\n              column: column,\n              value: value,\n              name: dataChartFiltered[0].name,\n              classed: classed\n            };\n          });\n        })\n        .enter()\n        .append(\"td\")\n        .attr(\"class\", d => d.classed)\n        .html((d, i) => (i != 0 ? d.value : '<i class=\"' + d.value + '\"></i>'));\n\n      var bulletsColors = this.colorScale.range();\n\n      // Replace bullets colors\n      $(this.container + \"_wrapper .le\").each((i, v) => {\n        var color = bulletsColors[i];\n        $(v).css(\"background\", color);\n\n        var $parent = $(v).parent();\n        var cssClass = $parent.attr(\"class\");\n\n        $(this.container + \"_wrapper path.\" + cssClass).css(\"stroke\", color);\n        $(this.container + \"_wrapper circle.\" + cssClass).css(\"fill\", color);\n      });\n    }); // end load data\n  }\n\n  //PRIVATE\n  _tickValues(scale) {\n    var range = scale.domain()[1] - scale.domain()[0];\n    var a = range / 4;\n    return [\n      scale.domain()[0],\n      scale.domain()[0] + a,\n      scale.domain()[0] + a * 2,\n      scale.domain()[1] - a,\n      scale.domain()[1]\n    ];\n  }\n\n  _xTickValues(years) {\n    return [\n      new Date(2010, 0, 1),\n      new Date(2011, 0, 1),\n      new Date(2012, 0, 1),\n      new Date(2013, 0, 1),\n      new Date(2014, 0, 1),\n      new Date(2015, 0, 1)\n    ]\n      .concat(years)\n      .unique();\n  }\n\n  _defaultYearForVerticalLine(data) {\n    /**\n     * Returns the most recent year that has data for at least two different municipalities.\n     */\n    var yearsDataItems = {};\n    var measureType = Object.keys(data.budgets)[0];\n\n    data.budgets[measureType].forEach(x => {\n      x.values.forEach(y => {\n        var year = y.date.getFullYear();\n        yearsDataItems[year] =\n          yearsDataItems[year] === undefined ? 1 : yearsDataItems[year] + 1;\n      });\n    });\n\n    if (yearsDataItems[data.year] > 1) return new Date(data.year, 0, 1);\n\n    var yearsWithData = Object.keys(yearsDataItems)\n      .sort()\n      .reverse();\n    var chosenYear = undefined;\n\n    yearsWithData.forEach(year => {\n      if (yearsDataItems[year] > 1 && chosenYear == undefined) {\n        chosenYear = new Date(year, 0, 1);\n      }\n    });\n\n    // set default date if it's undefined\n    return chosenYear || new Date();\n  }\n\n  _units() {\n    if (this.measure == \"total_budget\") {\n      return \" \u20AC\";\n    } else {\n      return \" \u20AC/hab\";\n    }\n  }\n\n  _normalize(str) {\n    var from =\n        \"1234567890\u00C3\u00C0\u00C1\u00C4\u00C2\u00C8\u00C9\u00CB\u00CA\u00CC\u00CD\u00CF\u00CE\u00D2\u00D3\u00D6\u00D4\u00D9\u00DA\u00DC\u00DB\u00E3\u00E0\u00E1\u00E4\u00E2\u00E8\u00E9\u00EB\u00EA\u00EC\u00ED\u00EF\u00EE\u00F2\u00F3\u00F6\u00F4\u00F9\u00FA\u00FC\u00FB\u00D1\u00F1\u00C7\u00E7 \u2018/&().!,'\",\n      to = \"izeasgtogoAAAAAEEEEIIIIOOOOUUUUaaaaaeeeeiiiioooouuuunncc_______\",\n      mapping = {};\n\n    for (let i = 0, j = from.length; i < j; i++) {\n      mapping[from.charAt(i)] = to.charAt(i);\n    }\n\n    var ret = [];\n    for (let i = 0, j = str.length; i < j; i++) {\n      var c = str.charAt(i);\n      if (Object.prototype.hasOwnProperty.call(mapping, str.charAt(i))) {\n        ret.push(mapping[c]);\n      } else {\n        ret.push(c);\n      }\n    }\n\n    return ret.join(\"\").toLowerCase();\n  }\n}\n", "import * as d3 from 'd3'\nimport { flatten } from 'lodash';\nimport { GOBIERTO_BUDGETS } from '../../../lib/events';\nimport { accounting, d3locale } from '../../../lib/shared';\n\nexport class VisLinesExecution {\n  constructor(divId, type, category) {\n    // Set default locale based on the app setting\n    this.locale = I18n.locale;\n    this.localeFallback = this.locale === \"en\" ? \"es\" : this.locale;\n\n    d3.formatDefaultLocale(d3locale[this.locale]);\n    d3.timeFormatDefaultLocale(d3locale[this.locale]);\n\n    this.container = divId;\n    this.data = null;\n    this.executionKind = type;\n    this.budgetCategory = category;\n    this.placeId = d3.select(\"body\").attr(\"data-place-id\");\n    this.parseTime = d3.timeParse(\"%Y-%m-%d\");\n    this.pctFormat = d3.format(\",\");\n    this.monthFormat = d3.timeFormat(\"%B %Y\");\n    this.dayFormat = d3.timeFormat(\"%e %B %Y\");\n    this.isMobile = window.innerWidth <= 768;\n    this.selectionNode = d3.select(this.container).node();\n    this.currentYear = new Date().getFullYear();\n    this.budgetYear = d3.select(\"body\").attr(\"data-year\");\n\n    // Income and expenses colors\n    this.color = d3\n      .scaleOrdinal()\n      .domain([\"I\", \"G\"])\n      .range([\"#f88f59\", \"#00909e\"]);\n\n    // Create axes\n    this.xAxis = d3.axisBottom();\n\n    // Chart objects\n    this.svg = null;\n    this.chart = null;\n\n    this.tooltip = d3\n      .select(this.container)\n      .append(\"div\")\n      .attr(\"class\", \"tooltip\");\n  }\n\n  getData() {\n    this.dataUrl =\n      \"/presupuestos/api/data/widget/budget_execution_comparison/\" +\n      this.placeId +\n      \"/\" +\n      this.budgetYear +\n      \"/\" +\n      this.executionKind +\n      \"/\" +\n      this.budgetCategory +\n      \".json\";\n\n    d3.json(this.dataUrl).then(jsonData => {\n      this.data = jsonData;\n\n      // Setting scales in a separate step, as we need the lines to set the height\n      this.setScales();\n      this.updateRender();\n\n      dispatchEvent(new Event(GOBIERTO_BUDGETS.LOADED));\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.updateRender();\n    }\n  }\n\n  setScales() {\n    if (this.svg) {\n      // Destroy the container and render again\n      this.svg.node().parentNode.remove();\n      this.isMobile = window.innerWidth <= 768;\n      this.render();\n    }\n\n    // Chart dimensions\n    this.margin = {\n      top: 55,\n      right: 0,\n      bottom: 50,\n      left: this.isMobile ? 0 : 385\n    };\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    this.maxPct = d3.max(this.data.lines, function(d) {\n      return d.pct_executed;\n    });\n\n    // Triggered if a budget line's execution is over 500%\n    this.bigDeviation = this.maxPct > 500;\n\n    // Scales & Ranges\n    this.x = this.bigDeviation\n      ? d3.scaleLog().range([0.1, this.width])\n      : d3\n          .scaleLinear()\n          .range([0, this.width])\n          .clamp(true);\n    this.z = d3.scaleTime().range([0, this.width]);\n    this.y0 = d3\n      .scaleBand()\n      .rangeRound([this.height, 0])\n      .paddingInner(0.5);\n    this.y1 = d3\n      .scaleBand()\n      .rangeRound([this.height, 0])\n      .paddingInner(0.5)\n      .paddingOuter(0);\n\n    // Create main elements\n    this.svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      // NOTE: Height is set later, after elements rendered\n      // .attr('height', this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    this.xAxis = d3\n      .axisTop(this.x)\n      .tickFormat(\n        function(d) {\n          return d === 0 ? \"\" : this.pctFormat(d) + \"%\";\n        }.bind(this)\n      )\n      .tickSize(-this.height - this.margin.bottom)\n      .tickPadding(10)\n      .ticks(this.isMobile ? 2 : this.bigDeviation ? 3 : 5);\n\n    // Message if custom lines are empty\n    if (this.data.lines.length === 0) {\n      d3.select(this.container)\n        .append(\"div\")\n        .attr(\"class\", \"flash-message alert\")\n        .text(I18n.t(\"gobierto_common.visualizations.empty_lines\"));\n    }\n  }\n\n  updateRender() {\n    this.nested = Array.from(\n      d3.group(this.data.lines, d => d.parent_id),\n      ([key, values]) => ({ key, values })\n    );\n\n    this.nested.forEach(d => {\n      d.values = d.values.sort((a, b) =>\n        a.level === 1 || b.level === 1 ? b.level - a.level : b.id - a.id\n      );\n\n      // Get parent line values for each group to sort them later\n      d.group_pct = d.values\n        .filter(d => d.level == 1)\n        .map(d => d.pct_executed)[0];\n      d.group_executed = d.values\n        .filter(d => d.level == 1)\n        .map(d => d.executed)[0];\n\n      return d;\n    });\n\n    if (this.data.lines.length === 0) return false;\n\n    // Sort by execution\n    this.nested.sort((a, b) => a.group_pct - b.group_pct);\n\n    /* Extent of the execution */\n    this.x.domain(this.maxPct <= 100 ? [0.1, 100] : [0.1, this.maxPct]);\n\n    /* Number of lines */\n    this.y0.domain(this.nested.map(d => d.key));\n\n    /* Get the id of every line */\n    this.y1.domain(flatten(this.nested.map(d => d.values.map(v => v.id))));\n\n    /* A time scale which spreads along the whole chart */\n    this.z.domain([\n      this.parseTime(this.currentYear + \"-01-01\"),\n      this.parseTime(this.currentYear + \"-12-31\")\n    ]);\n\n    this.bars = this.svg\n      .selectAll(\"g\")\n      .data(this.nested)\n      .enter()\n      .append(\"g\")\n      .attr(\"class\", \"line-group\")\n      .attr(\n        \"transform\",\n        d => \"translate(\" + 0 + \",\" + this.y0(d.key) / 14 + \")\"\n      );\n\n    var lineGroup = this.bars\n      .selectAll(\"a\")\n      .data(d => d.values)\n      .enter()\n      .append(\"a\")\n      .attr(\"class\", \"line\")\n      .attr(\"xlink:href\", d => {\n        return (\n          \"/presupuestos/partidas/\" +\n          d.id +\n          \"/\" +\n          this.budgetYear +\n          \"/\" +\n          this.budgetCategory +\n          \"/\" +\n          this.executionKind\n        );\n      })\n\n    var barGroup = lineGroup\n      .append(\"g\")\n      .attr(\"class\", \"bar-group\")\n      .on(\"mousemove\", this._mousemoved.bind(this))\n      .on(\"mouseleave\", this._mouseleft.bind(this));\n\n    barGroup\n      .append(\"rect\")\n      .attr(\"class\", \"bar-bg\")\n      .attr(\"x\", 0)\n      .attr(\"height\", this.y1.bandwidth())\n      .attr(\"y\", d => this.y1(d.id))\n      .attr(\"width\", this.x(this.x.domain()[1]))\n      .attr(\"fill\", \"#efefef\");\n\n    /* White bar marking 100% completion */\n    barGroup\n      .append(\"line\")\n      .attr(\"class\", \"hundred_percent\")\n      .attr(\"x1\", this.x(100))\n      .attr(\"x2\", this.x(100))\n      .attr(\"y1\", d => this.y1(d.id))\n      .attr(\"y2\", d => this.y1(d.id) + this.y1.bandwidth())\n      .attr(\"stroke\", \"white\")\n      .attr(\"stroke-width\", 4);\n\n    /* Main bar */\n    barGroup\n      .append(\"rect\")\n      .attr(\"class\", \"bar\")\n      .attr(\"x\", 0)\n      .attr(\"height\", this.y1.bandwidth())\n      .attr(\"y\", d => this.y1(d.id))\n      .attr(\"width\", d => {\n        if (d.pct_executed == 0) {\n          return 0;\n        } else {\n          return this.x(d.pct_executed);\n        }\n      })\n      .attr(\"fill\", d => {\n        var levelTwoColor = d3.rgb(this.color(this.executionKind));\n        levelTwoColor.opacity = this.isMobile ? 0.3 : 0.5;\n\n        return d.level === 1 ? this.color(this.executionKind) : levelTwoColor;\n      });\n\n    /* Line names */\n    if (!this.isMobile) {\n      lineGroup\n        .append(\"text\")\n        .attr(\"x\", 0)\n        .attr(\"y\", d => this.y1(d.id))\n        .attr(\"dy\", 12)\n        .attr(\"dx\", -10)\n        .attr(\"text-anchor\", \"end\")\n        .attr(\"class\", d =>\n          d.level === 1 ? \"line-txt-group\" : \"line-txt-detail\"\n        )\n        .text(d => d[\"name_\" + this.localeFallback])\n        .on(\"mousemove\", function() {\n          $(this)\n            .prev()\n            .css(\"stroke\", \"black\");\n        })\n        .on(\"mouseleave\", function() {\n          $(this)\n            .prev()\n            .css(\"stroke\", \"none\");\n        })\n        .append(\"title\")\n        .text(d => d[\"name_\" + this.localeFallback]);\n    } else {\n      lineGroup\n        .append(\"text\")\n        .attr(\"x\", 0)\n        .attr(\"y\", d => this.y1(d.id))\n        .attr(\"dy\", 12)\n        .attr(\"dx\", 2)\n        .attr(\"text-anchor\", \"start\")\n        .style(\"text-shadow\", d => (d.level === 1 ? \"0 0 4px white\" : \"\"))\n        .style(\"font-size\", d => (d.level === 1 ? \"0.875rem\" : \"0.75rem\"))\n        .style(\"font-weight\", d => (d.level === 1 ? \"600\" : \"400\"))\n        .style(\"fill\", \"#4A4A4A\")\n        .text(d => d[\"name_\" + this.localeFallback])\n        .style(\"mouse-events\", \"none\");\n    }\n\n    this.svg\n      .append(\"g\")\n      .attr(\"class\", \"x axis\")\n      .call(this.xAxis);\n\n    /* Legend */\n    var legend = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"legend\")\n      .attr(\"transform\", \"translate(0, -10)\");\n\n    if (!this.isMobile) {\n      legend\n        .append(\"text\")\n        .attr(\"text-anchor\", \"end\")\n        .attr(\"dx\", \"-12\")\n        .text(I18n.t(\"gobierto_common.visualizations.lines_title\"));\n    }\n\n    legend\n      .append(\"text\")\n      .attr(\"class\", \"legend-value halo\")\n      .text(\n        this.bigDeviation\n          ? I18n.t(\"gobierto_common.visualizations.percent_log\")\n          : I18n.t(\"gobierto_common.visualizations.percent\")\n      )\n      .attr(\"stroke\", \"white\")\n      .attr(\"stroke-width\", 5);\n\n    legend\n      .append(\"text\")\n      .attr(\"class\", \"legend-value\")\n      .text(\n        this.bigDeviation\n          ? I18n.t(\"gobierto_common.visualizations.percent_log\")\n          : I18n.t(\"gobierto_common.visualizations.percent\")\n      );\n\n    /* Remove first tick */\n    d3.selectAll(\".x.axis .tick\")\n      .filter(d => d === 0 || d === 0.1)\n      .remove();\n\n    /* Style 100% completion */\n    d3.selectAll(\".x.axis .tick\")\n      .filter(d => d === 100)\n      .classed(\"hundred_percent\", true);\n\n    /* Switch to absolute values */\n    $(\".value-switcher-\" + this.executionKind).on(\"click\", e => {\n      var valueKind = $(e.target).attr(\"data-toggle\");\n      var symbol = $(e.target).attr(\"data-symbol\");\n\n      $(\".value-switcher-\" + this.executionKind).removeClass(\"active\");\n      $(e.target).addClass(\"active\");\n\n      this._update(valueKind, symbol);\n    });\n\n    /* Trigger sorting functions */\n    $(\".sort-\" + this.executionKind).on(\"click\", e => {\n      var sortKind = $(e.target).attr(\"data-toggle\");\n\n      $(\".sort-\" + this.executionKind).removeClass(\"active\");\n      $(e.target).addClass(\"active\");\n\n      this._sortValues(e.target, sortKind);\n    });\n\n    d3.select(\"body:not(\" + this.container + \")\").on(\n      \"touchstart\",\n      this._mouseleft.bind(this)\n    );\n\n    // NOTE: resize container once all data has been displayed\n    const node = this.svg.node() || document.createElement(\"div\");\n    d3.select(this.container + \" svg\").attr(\n      \"height\",\n      node.getBoundingClientRect().height + this.margin.top\n    );\n  }\n\n  _update(valueKind, symbol) {\n    this.xAxis.tickFormat(d => (d === 0 ? \"\" : this.pctFormat(d) + symbol));\n    this.x.domain([0.1, d3.max(this.data.lines, d => d[valueKind])]);\n\n    this.svg.select(\".x.axis\").call(this.xAxis);\n\n    this.svg\n      .selectAll(\".x.axis .tick\")\n      .filter(d =>\n        valueKind === \"executed\"\n          ? d === 0 || d === 0.1 || d === 1\n          : d === 0 || d === 0.1\n      )\n      .remove();\n\n    this.svg\n      .selectAll(\".x.axis .tick\")\n      .filter(d => d === 100)\n      .classed(\"hundred_percent\", valueKind === \"pct_executed\" ? true : false);\n\n    this.svg\n      .select(\".legend-value\")\n      .text(\n        valueKind === \"executed\"\n          ? I18n.t(\"gobierto_common.visualizations.absolute\")\n          : I18n.t(\"gobierto_common.visualizations.percent\")\n      );\n\n    this.svg\n      .selectAll(\".hundred_percent\")\n      .transition()\n      .style(\"opacity\", valueKind === \"executed\" ? 0 : 1);\n\n    this.svg\n      .selectAll(\".bar\")\n      .transition()\n      .duration(300)\n      .attr(\"width\", d => this.x(d[valueKind]));\n  }\n\n  _sortValues(target, sortKind) {\n    sortKind === \"highest\"\n      ? this.nested.sort((a, b) => a.group_pct - b.group_pct)\n      : this.nested.sort((a, b) => b.group_pct - a.group_pct);\n\n    this.y0.domain(\n      sortKind === \"highest\"\n        ? this.nested.map(d => d.key)\n        : this.nested.map(d => d.key).reverse()\n    );\n\n    this.y1.domain(flatten(this.nested.map(d => d.values.map(v => v.id))));\n\n    this.svg\n      .selectAll(\".line-group\")\n      .data(this.nested)\n      .transition()\n      .duration(500)\n      .attr(\n        \"transform\",\n        d => \"translate(\" + 0 + \",\" + this.y0(d.key) / 14 + \")\"\n      );\n\n    this.svg\n      .selectAll(\".bar\")\n      .transition()\n      .duration(300)\n      .attr(\"y\", d => this.y1(d.id));\n\n    this.svg\n      .selectAll(\".bar-bg\")\n      .transition()\n      .duration(300)\n      .attr(\"y\", d => this.y1(d.id));\n\n    this.svg\n      .selectAll(\".line text\")\n      .transition()\n      .duration(300)\n      .attr(\"y\", d => this.y1(d.id));\n\n    this.svg\n      .selectAll(\".hundred_percent\")\n      .transition()\n      .duration(300)\n      .attr(\"y1\", d => this.y1(d.id))\n      .attr(\"y2\", d => this.y1(d.id) + this.y1.bandwidth());\n  }\n\n  _mousemoved(event, d) {\n    var coordinates = d3.pointer(event, this.selectionNode);\n    var x = coordinates[0],\n      y = coordinates[1];\n\n    this.tooltip\n      .style(\"display\", \"block\")\n      .style(\"left\", x - 110 + \"px\")\n      .style(\"top\", y + 40 + \"px\");\n\n    var tooltipHtml =\n      '<div class=\"line-name\"><strong>' +\n      d[\"name_\" + this.localeFallback] +\n      \"</strong></div>\" +\n      '<div class=\"line-name\">' +\n      I18n.t(\"gobierto_common.visualizations.tooltip_budgeted\") +\n      \": \" +\n      accounting.formatMoney(\n        d.budget,\n        \"\u20AC\",\n        0,\n        I18n.t(\"number.currency.format.delimiter\"),\n        I18n.t(\"number.currency.format.separator\")\n      ) +\n      \"</div>\";\n\n    if (d.budget_updated !== null)\n      tooltipHtml +=\n        '<div class=\"line-name\">' +\n        I18n.t(\"gobierto_common.visualizations.tooltip_budgeted_updated\") +\n        \": \" +\n        accounting.formatMoney(\n          d.budget_updated,\n          \"\u20AC\",\n          0,\n          I18n.t(\"number.currency.format.delimiter\"),\n          I18n.t(\"number.currency.format.separator\")\n        ) +\n        \"</div>\";\n\n    tooltipHtml +=\n      '<div class=\"line-name\">' +\n      I18n.t(\"gobierto_common.visualizations.tooltip_executed_amount\") +\n      \": \" +\n      accounting.formatMoney(\n        d.executed,\n        \"\u20AC\",\n        0,\n        I18n.t(\"number.currency.format.delimiter\"),\n        I18n.t(\"number.currency.format.separator\")\n      ) +\n      \"</div>\";\n\n    tooltipHtml +=\n      \"<div>\" +\n      I18n.t(\"gobierto_common.visualizations.tooltip\") +\n      \" \" +\n      this.pctFormat(d.pct_executed) +\n      \" %</div>\";\n\n    this.tooltip.html(tooltipHtml);\n  }\n\n  _mouseleft() {\n    d3.selectAll(\".tooltip\").style(\"display\", \"none\");\n  }\n\n  _width() {\n    return parseInt(d3.select(this.container).style(\"width\"));\n  }\n\n  _height() {\n    // Height depends on number of lines\n    var groupPadding = this.data.lines.filter(d => d.level === 1).length * 10;\n\n    return this.data.lines.length * 30 + groupPadding;\n  }\n}\n", "import * as d3 from 'd3';\nimport { maxBy, mean, sumBy, uniq } from 'lodash';\n\nexport class VisPopulationPyramid {\n  constructor(divId, city_id, filter) {\n    this.container = divId;\n\n    // Remove previous\n    $(`${this.container} svg`).remove();\n\n    this.data = null;\n    this.tbiToken = window.populateData.token;\n    this.dataUrls = this.getUrls(city_id, filter);\n\n    this.isMobile = window.innerWidth <= 768;\n    this.ageBreakpoints = [16, 65];\n\n    // Chart dimensions\n    this.gutter = 10;\n    this.margin = {\n      top: this.gutter * 3.5,\n      right: this.gutter,\n      bottom: this.gutter * 4,\n      left: this.gutter * 4\n    };\n\n    const dimensions = this._getDimensions();\n    this.width = {\n      chart: dimensions.width + this.margin.left + this.margin.right,\n      pyramid: dimensions.pyramid.width,\n      areas: dimensions.areas.width,\n      marks: dimensions.marks.width\n    };\n    this.height = {\n      chart: dimensions.height + this.margin.bottom + this.margin.top,\n      pyramid: dimensions.pyramid.height,\n      areas: dimensions.areas.height,\n      marks: dimensions.marks.height\n    };\n\n    // Scales & Ranges\n    this.xScaleMale = d3.scaleLinear().range([0, this.width.pyramid / 2]);\n    this.xScaleFemale = d3.scaleLinear().range([0, this.width.pyramid / 2]);\n    this.xScaleAgeRanges = d3.scaleLinear().range([0, this.width.areas / 3]);\n    this.yScale = d3.scaleBand().range([this.height.pyramid, 0]);\n\n    // Create axes\n    this.xAxisMale = d3\n      .axisBottom()\n      .scale(this.xScaleMale)\n      .ticks(5)\n      .tickFormat(t =>\n        t.toLocaleString(I18n.locale, {\n          style: \"percent\",\n          minimumFractionDigits: 1\n        })\n      );\n    this.xAxisFemale = d3\n      .axisBottom()\n      .scale(this.xScaleFemale)\n      .ticks(5)\n      .tickFormat(t =>\n        t.toLocaleString(I18n.locale, {\n          style: \"percent\",\n          minimumFractionDigits: 1\n        })\n      );\n    this.yAxis = d3.axisRight().scale(this.yScale);\n\n    // Chart objects\n    this.svg = null;\n    this.pyramid = null;\n    this.areas = null;\n    this.marks = null;\n\n    // Create main elements\n    this.svg = d3\n      .select(this.container)\n      .style(\n        \"padding-bottom\",\n        `${100 * (this.height.chart / this.width.chart)}%`\n      ) // aspect ratio\n      .append(\"svg\")\n      .attr(\"preserveAspectRatio\", \"xMinYMin meet\")\n      .attr(\"viewBox\", `0 0 ${this.width.chart} ${this.height.chart}`)\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    this.pyramid = this.svg.append(\"g\").attr(\"class\", \"pyramid\");\n    this.areas = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"areas\")\n      .attr(\n        \"transform\",\n        `translate(${this.width.pyramid + 2 * this.gutter},0)`\n      );\n    this.marks = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"marks\")\n      .attr(\n        \"transform\",\n        `translate(${this.width.pyramid + this.width.areas + this.gutter},0)`\n      );\n\n    // Append axes containers\n    this.pyramid.append(\"g\").attr(\"class\", \"x axis males\");\n    this.pyramid.append(\"g\").attr(\"class\", \"x axis females\");\n    this.pyramid.append(\"g\").attr(\"class\", \"y axis\");\n\n    // Static elements\n    this._renderStatic();\n  }\n\n  getUrls(city_id, filter = 0) {\n    // Ensure data to null to force http request\n    this.data = null;\n\n    let population = \"\"\n    let unemployed = \"\"\n\n    switch (filter) {\n      case 0:\n      default:\n        population =\n          window.populateData.endpoint +\n          `\n          WITH maxyear AS (SELECT max(year)\n                            FROM poblacion_edad_sexo\n                            WHERE place_id = ${city_id})\n          SELECT\n            CASE\n              WHEN sex = 'Hombres' THEN 'V'\n              WHEN sex = 'Mujeres' THEN 'M'\n            END AS sex,\n            age::integer,\n            total::integer AS value\n          FROM poblacion_edad_sexo\n          WHERE place_id = ${city_id}\n            AND sex != 'Total'\n            AND year =\n              (SELECT *\n              FROM maxyear)\n          ORDER BY age\n          `;\n\n        unemployed =\n          window.populateData.endpoint +\n          `\n          WITH maxyear AS\n            (SELECT year,\n                    month\n            FROM paro_personas\n            WHERE place_id = ${city_id}\n            ORDER BY year DESC, month DESC\n            LIMIT 1)\n          SELECT sum(value::decimal) AS value\n          FROM paro_personas\n          WHERE place_id = ${city_id}\n            AND year =\n              (SELECT year\n              FROM maxyear)\n            AND month =\n              (SELECT month\n              FROM maxyear)\n          `;\n        break;\n      case 1:\n        population =\n          window.populateData.endpoint +\n          `\n          WITH maxyear AS\n            (SELECT max(year)\n            FROM poblacion_edad_sexo\n            WHERE place_id = ${city_id})\n          SELECT\n            CASE\n              WHEN sex = 'Hombres' THEN 'V'\n              WHEN sex = 'Mujeres' THEN 'M'\n            END AS sex,\n            age::integer,\n            SUM(total::integer) AS value\n          FROM poblacion_edad_sexo\n          WHERE place_id\n            BETWEEN FLOOR(${city_id}::decimal / 1000) * 1000\n            AND (CEIL(${city_id}::decimal / 1000) * 1000) - 1\n            AND year =\n              (SELECT *\n              FROM maxyear)\n            AND sex != 'Total'\n          GROUP BY age, sex\n          ORDER BY age\n          `;\n\n        unemployed =\n          window.populateData.endpoint +\n          `\n          WITH maxyear AS\n            (SELECT year,\n                    month\n            FROM paro_personas\n            WHERE place_id = ${city_id}\n            ORDER BY year DESC, month DESC\n            LIMIT 1)\n          SELECT sum(value::decimal) AS value\n          FROM paro_personas\n          WHERE place_id\n            BETWEEN FLOOR(${city_id}::decimal / 1000) * 1000\n            AND (CEIL(${city_id}::decimal / 1000) * 1000) - 1\n            AND year =\n              (SELECT year\n              FROM maxyear)\n            AND month =\n              (SELECT month\n              FROM maxyear)\n          `;\n        break;\n      case 2:\n        population =\n          window.populateData.endpoint +\n          `\n          WITH maxyear AS\n            (SELECT max(year)\n            FROM poblacion_edad_sexo\n            WHERE place_id = ${city_id})\n          SELECT\n            CASE\n              WHEN sex = 'Hombres' THEN 'V'\n              WHEN sex = 'Mujeres' THEN 'M'\n            END AS sex,\n            age::integer,\n            SUM(total::integer) AS value\n          FROM poblacion_edad_sexo\n          WHERE year =\n              (SELECT *\n              FROM maxyear)\n            AND sex != 'Total'\n          GROUP BY age, sex\n          ORDER BY age\n          `;\n\n        unemployed =\n          window.populateData.endpoint +\n          `\n          WITH maxyear AS\n            (SELECT year,\n                    month\n            FROM paro_personas\n            WHERE place_id = ${city_id}\n            ORDER BY year DESC, month DESC\n            LIMIT 1)\n          SELECT sum(value::decimal) AS value\n          FROM paro_personas\n          WHERE year =\n              (SELECT year\n              FROM maxyear)\n            AND month =\n              (SELECT month\n              FROM maxyear)\n          `;\n        break;\n    }\n\n    return {\n      population,\n      unemployed\n    };\n  }\n\n  handlePromise(url, opts = {}) {\n    return d3.json(url, {\n      headers: new Headers({ authorization: \"Bearer \" + this.tbiToken }),\n      ...opts\n    });\n  }\n\n  getData() {\n    const data = this.handlePromise(this.dataUrls.population);\n    const unemployed = this.handlePromise(this.dataUrls.unemployed);\n\n    Promise.all([data, unemployed]).then(([jsonPopulation, jsonUnemployed]) => {\n      const aux = {\n        pyramid: this._transformPyramidData(jsonPopulation.data),\n        areas: this._transformAreasData(jsonPopulation.data),\n        marks: this._transformMarksData(jsonPopulation.data),\n        unemployed: +jsonUnemployed.data[0].value\n      };\n\n      this.data = aux;\n\n      this.update(this.data);\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.update(this.data);\n    }\n  }\n\n  update(data) {\n    this._updateScales(data);\n    this._updateAxes();\n    this._updateBars(data.pyramid);\n    this._updateAreas(data.areas, data.unemployed);\n    this._updateMarks(data.marks);\n  }\n\n  _updateScales(data) {\n    this.xScaleMale.domain([d3.max(data.pyramid.map(d => d._value)), 0]).nice();\n\n    this.xScaleFemale\n      .domain([0, d3.max(data.pyramid.map(d => d._value))])\n      .nice();\n\n    this.xScaleAgeRanges\n      .domain([d3.max(data.areas.map(d => d.value)), 0])\n      .nice();\n\n    this.yScale.domain(uniq(data.pyramid.map(d => d.age)));\n  }\n\n  _updateAxes() {\n    this.pyramid\n      .select(\".x.axis.males\")\n      .transition()\n      .duration(500)\n      .call(this._xAxisMale.bind(this));\n\n    this.pyramid\n      .select(\".x.axis.females\")\n      .transition()\n      .duration(500)\n      .call(this._xAxisFemale.bind(this));\n\n    this.pyramid\n      .select(\".y.axis\")\n      .transition()\n      .duration(500)\n      .call(this._yAxis.bind(this));\n  }\n\n  _updateBars(data) {\n    let male = this.pyramid\n      .select(\"g.bars g.males\")\n      .selectAll(\"g\")\n      .data(data.filter(d => d.sex === \"V\"));\n\n    let female = this.pyramid\n      .select(\"g.bars g.females\")\n      .selectAll(\"g\")\n      .data(data.filter(d => d.sex === \"M\"));\n\n    // exits\n    male.exit().remove();\n    female.exit().remove();\n\n    // enters\n    let mm = male.enter().append(\"g\");\n\n    mm.append(\"rect\")\n      .attr(\"x\", this.width.pyramid / 2) // To animate right to left. Fake value\n      .attr(\"y\", d => this.yScale(d.age))\n      .attr(\"height\", this.yScale.bandwidth())\n      .on(\"mousemove\", this._mousemove.bind(this))\n      .on(\"mouseout\", this._mouseout.bind(this))\n      .transition()\n      .duration(500)\n      .attr(\"width\", d => this.width.pyramid / 2 - this.xScaleMale(d._value))\n      .attr(\"x\", d => this.xScaleMale(d._value)); // Real value\n\n    mm.append(\"line\")\n      .attr(\"x1\", this.width.pyramid / 2) // To animate right to left. Fake value\n      .attr(\"x2\", this.width.pyramid / 2)\n      .attr(\"y1\", d => this.yScale(d.age) + this.yScale.bandwidth() - 1)\n      .attr(\"y2\", d => this.yScale(d.age) + this.yScale.bandwidth() - 1)\n      .transition()\n      .duration(500)\n      .attr(\"x1\", d => this.xScaleMale(d._value));\n\n    let ff = female.enter().append(\"g\");\n\n    ff.append(\"rect\")\n      .attr(\"x\", this.width.pyramid / 2)\n      .attr(\"y\", d => this.yScale(d.age))\n      .attr(\"height\", this.yScale.bandwidth())\n      .on(\"mousemove\", this._mousemove.bind(this))\n      .on(\"mouseout\", this._mouseout.bind(this))\n      .transition()\n      .duration(500)\n      .attr(\"width\", d => this.xScaleFemale(d._value));\n\n    ff.append(\"line\")\n      .attr(\"x1\", this.width.pyramid / 2)\n      .attr(\"x2\", this.width.pyramid / 2)\n      .attr(\"y1\", d => this.yScale(d.age) + this.yScale.bandwidth() - 1)\n      .attr(\"y2\", d => this.yScale(d.age) + this.yScale.bandwidth() - 1)\n      .transition()\n      .duration(500)\n      .attr(\"x2\", d => this.width.pyramid / 2 + this.xScaleFemale(d._value));\n\n    // updates\n    male\n      .select(\"rect\")\n      .transition()\n      .duration(500)\n      .attr(\"width\", d => this.width.pyramid / 2 - this.xScaleMale(d._value))\n      .attr(\"x\", d => this.xScaleMale(d._value)); // Real value\n\n    male\n      .select(\"line\")\n      .transition()\n      .duration(500)\n      .attr(\"x1\", d => this.xScaleMale(d._value));\n\n    female\n      .select(\"rect\")\n      .transition()\n      .duration(500)\n      .attr(\"width\", d => this.xScaleFemale(d._value));\n\n    female\n      .select(\"line\")\n      .transition()\n      .duration(500)\n      .attr(\"x2\", d => this.width.pyramid / 2 + this.xScaleFemale(d._value));\n  }\n\n  _updateAreas(data, unemployed) {\n    let g = this.areas.selectAll(\".range\").data(data);\n\n    // enters\n    const chartWidth = this.width.areas / 3;\n\n    let ranges = g\n      .enter()\n      .append(\"g\")\n      .attr(\"class\", (d, i) => `range r-${i}`);\n\n    ranges.attr(\"transform\", d => `translate(0, ${this.yScale(d.range[1])})`);\n\n    ranges\n      .append(\"rect\")\n      .attr(\"x\", chartWidth) // To animate right to left. Fake value\n      .attr(\"height\", d => this.yScale(d.range[0]) - this.yScale(d.range[1]))\n      .transition()\n      .duration(1000)\n      .attr(\"width\", d => chartWidth - this.xScaleAgeRanges(d.value))\n      .attr(\"x\", d => this.xScaleAgeRanges(d.value)); // Real value\n\n    ranges\n      .append(\"text\")\n      .attr(\"x\", chartWidth + this.gutter)\n      .attr(\"dy\", `${this._pxToEm(1.5 * this.gutter)}em`)\n      .attr(\"class\", \"title\")\n      .text(d => `${d.name}: ${this._percent(d.value, this.data.pyramid)}`);\n\n    ranges\n      .append(\"text\")\n      .attr(\"x\", chartWidth + this.gutter)\n      .attr(\"dy\", `${this._pxToEm(4 * this.gutter)}em`)\n      .attr(\"class\", \"subtitle\")\n      .text(d => d.info)\n      .call(\n        this._wrap,\n        2 * chartWidth - 4 * this.gutter,\n        chartWidth + this.gutter\n      );\n\n    // updates\n    g.select(\"rect\")\n      .transition()\n      .duration(1000)\n      .attr(\"width\", d => chartWidth - this.xScaleAgeRanges(d.value))\n      .attr(\"x\", d => this.xScaleAgeRanges(d.value)); // Real value\n\n    g.select(\"text.title\").text(\n      d => `${d.name}: ${this._percent(d.value, this.data.pyramid)}`\n    );\n\n    g.select(\"text.subtitle\")\n      .text(d => d.info)\n      .call(\n        this._wrap,\n        2 * chartWidth - 4 * this.gutter,\n        chartWidth + this.gutter\n      );\n\n    // exits\n    g.exit().remove();\n\n    /*\n     * Ghost Area - area inside the second one (depends on its dimensions)\n     *\n     */\n    let fakeObj = data.find((d, i) => i === 1);\n    let fakeData = [Object.assign(fakeObj, { fake: unemployed })];\n\n    let bp = this.ageBreakpoints;\n    let yFakeScale = d3\n      .scaleLinear()\n      .range([0, this.yScale(bp[0]) - this.yScale(bp[1])])\n      .domain([0, fakeObj.value]);\n\n    let fakeG = ranges\n      .selectAll(\"rect\")\n      .filter(d => !Object.prototype.hasOwnProperty.call(d, \"fake\"))\n      .data(fakeData);\n\n    // enters\n    let fake = fakeG\n      .enter()\n      .append(\"g\")\n      .attr(\"class\", \"r-fake\");\n\n    fake.attr(\n      \"transform\",\n      d =>\n        `translate(0, ${this.yScale(d.range[0]) -\n          this.yScale(d.range[1]) -\n          yFakeScale(d.fake)})`\n    );\n\n    fake\n      .append(\"rect\")\n      .attr(\"class\", \"inner\")\n      .attr(\"x\", d => this.xScaleAgeRanges(d.value))\n      .attr(\"y\", d => yFakeScale(d.fake))\n      .attr(\"width\", d => chartWidth - this.xScaleAgeRanges(d.value))\n      .attr(\"height\", 0)\n      .transition()\n      .delay(1000)\n      .duration(1000)\n      .attr(\"height\", d => yFakeScale(d.fake))\n      .attr(\"y\", 0);\n\n    fake\n      .append(\"text\")\n      .attr(\"class\", \"subtitle\")\n      .attr(\"opacity\", 0)\n      .attr(\"x\", chartWidth + this.gutter)\n      .attr(\"dy\", `${this._pxToEm(1.5 * this.gutter)}em`)\n      .html(\n        d =>\n          `<tspan class=\"as-title\">${(\n            d.fake / d.value\n          ).toLocaleString(I18n.locale, { style: \"percent\" })}</tspan> ${I18n.t(\n            \"gobierto_common.visualizations.unemployed\"\n          )}`\n      )\n      .transition()\n      .delay(1000)\n      .duration(1000)\n      .attr(\"opacity\", 1);\n\n    // updates\n    // NOTE: fakeG doesn't work here, we need the g.range updates\n    g.select(\"g.r-fake\")\n      .transition()\n      .delay(1000)\n      .duration(1000)\n      .attr(\n        \"transform\",\n        d =>\n          `translate(0, ${this.yScale(d.range[0]) -\n            this.yScale(d.range[1]) -\n            yFakeScale(d.fake)})`\n      );\n\n    g.select(\"g.r-fake rect\")\n      .transition()\n      .delay(1000)\n      .duration(1000)\n      .attr(\"width\", d => chartWidth - this.xScaleAgeRanges(d.value))\n      .attr(\"x\", d => this.xScaleAgeRanges(d.value)) // Real value\n      .attr(\"height\", d => yFakeScale(d.fake))\n      .attr(\"y\", 0);\n\n    g.select(\"g.r-fake text.subtitle\").html(\n      d =>\n        `<tspan class=\"as-title\">${this._percent(\n          d.fake,\n          this.data.pyramid\n        )}</tspan> ${I18n.t(\"gobierto_common.visualizations.unemployed\")}`\n    );\n\n    // exits\n    fakeG.exit().remove();\n  }\n\n  _updateMarks(data) {\n    let g = this.marks.selectAll(\".mark\").data(data);\n\n    // enters\n    let marks = g\n      .enter()\n      .append(\"g\")\n      .attr(\"class\", (d, i) => `mark m-${i}`);\n\n    marks\n      .transition()\n      .duration(1000)\n      .attr(\"transform\", d => `translate(0, ${this.yScale(d.value)})`);\n\n    marks\n      .append(\"line\")\n      .attr(\"x1\", 0)\n      .attr(\"x2\", 1.5 * this.gutter);\n\n    marks\n      .append(\"text\")\n      .attr(\"x\", 2 * this.gutter)\n      .attr(\"dy\", \".3em\")\n      .text(d => d.name)\n      .call(this._wrap, this.width.areas - 2 * this.gutter, 2 * this.gutter);\n\n    // updates\n    g.transition()\n      .duration(500)\n      .attr(\"transform\", d => `translate(0, ${this.yScale(d.value)})`);\n\n    g.select(\"text\")\n      .text(d => d.name)\n      .call(this._wrap, this.width.areas - 2 * this.gutter, 2 * this.gutter);\n\n    // exits\n    g.exit().remove();\n  }\n\n  _renderStatic() {\n    // NOTE: We keep this separate to not create them after every update/resize\n\n    // Pyramid axes\n    this.pyramid\n      .select(\".x.axis.males\")\n      .attr(\"transform\", `translate(0,${this.height.pyramid})`)\n      .call(this._xAxisMale.bind(this));\n\n    this.pyramid\n      .select(\".x.axis.females\")\n      .attr(\n        \"transform\",\n        `translate(${this.width.pyramid / 2},${this.height.pyramid})`\n      )\n      .call(this._xAxisFemale.bind(this));\n\n    this.pyramid.select(\".y.axis\").call(this._yAxis.bind(this));\n\n    // Pyramid titles\n    let titles = this.pyramid.append(\"g\").attr(\"class\", \"titles\");\n\n    titles\n      .append(\"text\")\n      .attr(\n        \"transform\",\n        `translate(${this.width.pyramid / 2 - this.gutter},${-this.margin.top /\n          2})`\n      )\n      .attr(\"text-anchor\", \"end\")\n      .text(I18n.t(\"gobierto_common.visualizations.men\"));\n\n    titles\n      .append(\"text\")\n      .attr(\n        \"transform\",\n        `translate(${this.width.pyramid / 2 + this.gutter},${-this.margin.top /\n          2})`\n      )\n      .attr(\"text-anchor\", \"start\")\n      .text(I18n.t(\"gobierto_common.visualizations.women\"));\n\n    titles\n      .append(\"text\")\n      .attr(\"transform\", `translate(${-this.gutter},${-this.margin.top / 2})`)\n      .attr(\"text-anchor\", \"end\")\n      .text(I18n.t(\"gobierto_common.visualizations.age\"));\n\n    // Pyramid bar-groups\n    let g = this.pyramid.append(\"g\").attr(\"class\", \"bars\");\n\n    g.append(\"g\").attr(\"class\", \"males\");\n\n    g.append(\"g\").attr(\"class\", \"females\");\n\n    // Pyramid tooltip\n    let focus = g\n      .append(\"g\")\n      .attr(\"class\", \"tooltip\")\n      .attr(\"opacity\", 0);\n\n    focus.append(\"text\");\n  }\n\n  _mousemove(_, d) {\n    this.svg\n      .select(\".tooltip\")\n      .attr(\"opacity\", 1)\n      .select(\"text\")\n      .attr(\"text-anchor\", d.sex === \"V\" ? undefined : \"end\")\n      .attr(\"x\", d.sex === \"V\" ? 0 : this.width.pyramid)\n      .attr(\"y\", this.yScale(95))\n      .text(\n        `${I18n.t(\"gobierto_common.visualizations.age\")}: ${\n          d.age\n        } - ${d.value.toLocaleString()} ${\n          d.sex === \"V\"\n            ? I18n.t(\"gobierto_common.visualizations.men\")\n            : I18n.t(\"gobierto_common.visualizations.women\")\n        }`\n      );\n  }\n\n  _mouseout() {\n    this.svg.select(\".tooltip\").attr(\"opacity\", 0);\n  }\n\n  _xAxisMale(g) {\n    g.call(this.xAxisMale);\n\n    let s = g.selection ? g.selection() : g; // https://bl.ocks.org/mbostock/4323929\n    s.selectAll(\".domain\").remove();\n    s.selectAll(\".tick line\").remove();\n    s.selectAll(\".tick:last-child text\").remove();\n  }\n\n  _xAxisFemale(g) {\n    g.call(this.xAxisFemale);\n\n    let s = g.selection ? g.selection() : g; // https://bl.ocks.org/mbostock/4323929\n    s.selectAll(\".domain\").remove();\n    s.selectAll(\".tick:not(:first-child) line\").remove();\n    s.selectAll(\".tick:first-child line\").attr(\"y1\", -this.height.chart);\n  }\n\n  _yAxis(g) {\n    g.call(\n      this.yAxis.tickValues(this.yScale.domain().filter((d, i) => !(i % 10)))\n    );\n\n    // https://bl.ocks.org/mbostock/4323929\n    let s = g.selection ? g.selection() : g;\n    s.selectAll(\".domain\").remove();\n    s.selectAll(\".tick line\")\n      .attr(\"x1\", 0)\n      .attr(\"x2\", this.width.pyramid);\n    s.selectAll(\".tick text\").attr(\"x\", -this.margin.left / 4);\n\n    if (s !== g) {\n      g.selectAll(\".tick line\")\n        .attrTween(\"x1\", null)\n        .attrTween(\"x2\", null);\n      g.selectAll(\".tick text\").attrTween(\"x\", null);\n    }\n  }\n\n  _transformPyramidData(data) {\n    const totalMen = this._total(data.filter(p => p.sex === \"V\"));\n    const totalWomen = this._total(data.filter(p => p.sex === \"M\"));\n\n    // updates every value with its respective percentage\n    return data.map(item => {\n      item._value =\n        item.sex === \"V\"\n          ? item.value / totalMen\n          : item.sex === \"M\"\n          ? item.value / totalWomen\n          : 0;\n      return item;\n    });\n  }\n\n  _transformAreasData(data) {\n    let bp = this.ageBreakpoints;\n    let self = this;\n\n    return [\n      {\n        name: I18n.t(\"gobierto_common.visualizations.youth\"),\n        get info() {\n          return I18n.t(\"gobierto_common.visualizations.youth_info\", {\n            percent: self._percent(this.value, self.data.pyramid),\n            limit: bp[0]\n          });\n        },\n        range: [d3.min(data.map(d => d.age)), bp[0] - 1],\n        value: data\n          .filter(d => d.age < bp[0])\n          .map(d => d.value)\n          .reduce((a, b) => a + b)\n      },\n      {\n        name: I18n.t(\"gobierto_common.visualizations.adults\"),\n        range: [bp[0], bp[1] - 1],\n        value: data\n          .filter(d => d.age < bp[1] && d.age >= bp[0])\n          .map(d => d.value)\n          .reduce((a, b) => a + b)\n      },\n      {\n        name: I18n.t(\"gobierto_common.visualizations.elderly\"),\n        get info() {\n          return I18n.t(\"gobierto_common.visualizations.elderly_info\", {\n            percent: self._percent(this.value, self.data.pyramid),\n            limit: bp[1]\n          });\n        },\n        range: [bp[1], d3.max(data.map(d => d.age))],\n        value: data\n          .filter(d => d.age >= bp[1])\n          .map(d => d.value)\n          .reduce((a, b) => a + b)\n      }\n    ];\n  }\n\n  _transformMarksData(data) {\n    return [\n      {\n        value: this._mean(data.map(f => f.age)),\n        get name() {\n          return I18n.t(\"gobierto_common.visualizations.mean\", {\n            age: this.value\n          });\n        }\n      },\n      {\n        value: this._median(data.map(f => f.age)),\n        get name() {\n          return I18n.t(\"gobierto_common.visualizations.median\", {\n            age: this.value\n          });\n        }\n      },\n      {\n        value: this._mode(data),\n        get name() {\n          return I18n.t(\"gobierto_common.visualizations.mode\", {\n            age: this.value\n          });\n        }\n      }\n    ];\n  }\n\n  _getDimensions() {\n    const width = +(\n      d3.select(this.container).node() || document.createElement(\"div\")\n    ).getBoundingClientRect().width;\n    const ratio = 2;\n    const height = width / ratio;\n\n    const pyramid = {\n      width: width / 2,\n      height\n    };\n    const areas = {\n      width: width / 4,\n      height\n    };\n    const marks = {\n      width: width / 4,\n      height\n    };\n\n    return {\n      ratio,\n      width,\n      height,\n      pyramid,\n      areas,\n      marks\n    };\n  }\n\n  _total(data) {\n    return sumBy(data, \"value\");\n  }\n\n  _mode(data) {\n    // It's not required the common mode arithmetical function\n    // since the data it's grouped by age, only get the biggest number\n    return maxBy(data, \"value\").age;\n  }\n\n  _mean(data) {\n    return mean(data);\n  }\n\n  _median(data) {\n    let array = data.sort();\n    if (array.length % 2 === 0) {\n      // array with even number elements\n      return (array[array.length / 2] + array[array.length / 2 - 1]) / 2;\n    } else {\n      return array[(array.length - 1) / 2]; // array with odd number elements\n    }\n  }\n\n  _percent(d, data) {\n    return (d / this._total(data)).toLocaleString(I18n.locale, {\n      style: \"percent\"\n    });\n  }\n\n  _wrap(text, width, start = 0) {\n    text.each(function() {\n      var text = d3.select(this),\n        words = text\n          .text()\n          .split(/\\s+/)\n          .reverse(),\n        word,\n        line = [],\n        lineNumber = 0,\n        lineHeight = 1.1, // ems\n        y = text.attr(\"y\") || 0,\n        dy = parseFloat(text.attr(\"dy\")),\n        tspan = text\n          .text(null)\n          .append(\"tspan\")\n          .attr(\"x\", start)\n          .attr(\"y\", y)\n          .attr(\"dy\", dy + \"em\");\n\n\n      while ((word = words.pop())) {\n        line.push(word);\n        tspan.text(line.join(\" \"));\n        if (tspan.node().getComputedTextLength() > width) {\n          line.pop();\n          tspan.text(line.join(\" \"));\n          line = [word];\n          tspan = text\n            .append(\"tspan\")\n            .attr(\"x\", start)\n            .attr(\"y\", y)\n            .attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\")\n            .text(word);\n        }\n      }\n    });\n  }\n\n  _pxToEm(px, element) {\n    element =\n      element === null || element === undefined\n        ? document.documentElement\n        : element;\n    var temporaryElement = document.createElement(\"div\");\n    temporaryElement.style.setProperty(\"position\", \"absolute\", \"important\");\n    temporaryElement.style.setProperty(\"visibility\", \"hidden\", \"important\");\n    temporaryElement.style.setProperty(\"font-size\", \"1em\", \"important\");\n    element.appendChild(temporaryElement);\n    var baseFontSize = parseFloat(getComputedStyle(temporaryElement).fontSize);\n    temporaryElement.parentNode.removeChild(temporaryElement);\n    return px / baseFontSize;\n  }\n}\n", "import * as d3 from 'd3';\nimport { extend, flatten, map } from 'lodash';\n\nfunction monthDiff(dateFrom, dateTo) {\n  return (\n    dateTo.getMonth() -\n    dateFrom.getMonth() +\n    12 * (dateTo.getFullYear() - dateFrom.getFullYear())\n  );\n}\n\nexport class Punchcard {\n  constructor(context, data, options = {}) {\n    // Markup has already a svg inside\n    if ($(`${context} svg`).length !== 0) return;\n\n    // options\n    let itemHeight = options.itemHeight || 50;\n    let gutter = options.gutter || 20;\n    let margin = extend(\n      {\n        top: gutter * 3.5,\n        right: gutter,\n        bottom: gutter * 1.5,\n        left: gutter * 15\n      },\n      options.margins\n    );\n    let xTickFormat = options.xTickFormat || (d => d);\n    let yTickFormat = options.yTickFormat || (d => d);\n    let title = options.title || \"\";\n    let tooltipContainer = options.tooltipContainer || \"body\";\n    let tooltipContent = options.tooltipContent;\n    let fixedWidth = options.width;\n    let fixedHeight = options.height;\n\n    // parse dates\n    data.forEach((element, elementIndex) => {\n      for (var dateIndex = 0; dateIndex < element.value.length; dateIndex++) {\n        let dateString = element.value[dateIndex].key;\n        data[elementIndex].value[dateIndex].key = new Date(dateString);\n      }\n    });\n\n    // estimation number of x.axis.ticks to center if there are no so much\n    let xAxisLimits = d3.extent(map(flatten(map(data, \"value\")), \"key\"));\n    let xAxisLength = monthDiff(...xAxisLimits);\n    if (xAxisLength < 5) {\n      margin = extend(margin, {\n        left: margin.left * 2,\n        right: margin.right * 10\n      });\n    }\n\n    // dimensions\n    let container = d3.select(context);\n    let containerNode = container.node() || document.createElement(\"div\");\n    let width =\n      fixedWidth ||\n      +containerNode.getBoundingClientRect().width - margin.left - margin.right;\n    let height =\n      fixedHeight || data.length * itemHeight + margin.top + margin.bottom;\n    let svg = container\n      .append(\"svg\")\n      .attr(\"width\", width + margin.left + margin.right)\n      .attr(\"height\", height + margin.top + margin.bottom);\n\n    // scales\n    let x = d3.scaleTime().range([0, width]);\n    let y = d3.scaleBand().range([height, 0]);\n    let r = d3.scaleSqrt().range([3, 15]); // tama\u00F1o de las bolas\n\n    // domains\n    x.domain([\n      d3.min(data.map(d => d3.min(d.value.map(v => v.key)))),\n      d3.max(data.map(d => d3.max(d.value.map(v => v.key))))\n    ]);\n    y.domain(data.map(d => d.key)).padding(0);\n    r.domain([\n      d3.min(data.map(d => d3.min(d.value.map(v => v.value)))),\n      d3.max(data.map(d => d3.max(d.value.map(v => v.value))))\n    ]);\n\n    let g = svg\n      .append(\"g\")\n      .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n    // circles\n    let _g = g\n      .selectAll(\"g.row\")\n      .data(data)\n      .enter()\n      .append(\"g\")\n      .attr(\"class\", \"row\")\n      .attr(\"transform\", d => `translate(0, ${y(d.key)})`);\n\n    _g.append(\"rect\")\n      .attr(\"x\", -margin.left)\n      .attr(\"rx\", 6)\n      .attr(\"ry\", 6)\n      .attr(\"width\", svg.attr(\"width\"))\n      .attr(\"height\", y.bandwidth());\n\n    _g.selectAll(\"circle\")\n      .data(d => d.value)\n      .enter()\n      .append(\"a\")\n      // .attr(\"xlink:href\", d => (d.properties || {}).url)\n      .append(\"circle\")\n      .attr(\"class\", \"circle\")\n      .attr(\"cx\", d => x(d.key))\n      .attr(\"cy\", y.bandwidth() / 2)\n      .on(\"mousemove\", function(_, d) {\n        if (!tooltipContent) return\n\n        const content = `<div class=\"tooltip-content left\">${tooltipContent(d)}</div>`;\n\n        const node = container.node() || document.createElement(\"div\");\n        const coords = {\n          x: window.scrollX + node.getBoundingClientRect().left,\n          y: window.scrollY + node.getBoundingClientRect().top\n        };\n\n        tooltip\n          .style(\"opacity\", \"1\")\n          .style(\"left\", `${coords.x + margin.left + x(d.key)}px`)\n          .style(\n            \"top\",\n            `${coords.y +\n              margin.top +\n              y(d3.select(this.parentNode.parentNode).data()[0].key)}px`\n          )\n          .html(content);\n      })\n      .on(\"mouseout\", () => tooltip.style(\"opacity\", \"0\"))\n      .transition()\n      .duration(800)\n      .attr(\"r\", d => r(d.value));\n\n    // Custom X-axis\n    function xAxis(g) {\n      g.call(\n        d3\n          .axisTop(x)\n          .ticks(d3.timeMonth.every(1))\n          .tickSizeOuter(0)\n          .tickSizeInner(0)\n          .tickFormat(xTickFormat)\n      );\n      g.selectAll(\".domain\").remove();\n      g.selectAll(\".tick line\")\n        .attr(\"y1\", 0)\n        .attr(\"y2\", height);\n      g.selectAll(\".tick text\").attr(\"y\", -margin.top / 1.5 + itemHeight / 2);\n    }\n\n    // Custom Y-axis\n    function yAxis(g) {\n      g.call(\n        d3\n          .axisLeft(y)\n          .tickSizeOuter(0)\n          .tickSizeInner(0)\n          .tickFormat(yTickFormat)\n      );\n      g.selectAll(\"text\").each(function() {\n        // max size axis\n        let maxWidth = margin.left - 2 * gutter;\n\n        let self = d3.select(this);\n        let textLength = self.node().getComputedTextLength();\n        let text = self.text();\n\n        while (textLength > maxWidth && text.length > 0) {\n          text = text.slice(0, -1);\n          self.html(`${text}&hellip;`);\n          textLength = self.node().getComputedTextLength();\n        }\n\n        return self.text();\n      });\n\n      g.selectAll(\".domain\").remove();\n      g.selectAll(\".tick\").on(\"click\", function(d, i) {\n        document.location.href = (data[i].properties || {}).url;\n      });\n    }\n\n    // axis\n    g.append(\"g\")\n      .attr(\"class\", \"x axis\")\n      .call(xAxis);\n\n    g.append(\"g\")\n      .attr(\"class\", \"y axis\")\n      .attr(\"transform\", \"translate(\" + (-margin.left + gutter) + \",0)\")\n      .call(yAxis);\n\n    // chart title\n    if (title) {\n      const topSpace = margin.top / 3 + itemHeight / 2;\n\n      // To overlap axis text, we create a fake background\n      let bgText = svg\n        .append(\"rect\")\n        .attr(\"x\", 0)\n        .attr(\"fill\", \"white\");\n\n      let titleText = svg\n        .append(\"text\")\n        .attr(\"x\", 0)\n        .attr(\"y\", topSpace)\n        .attr(\"class\", \"title\")\n        .attr(\"text-anchor\", \"start\")\n        .text(title);\n\n      bgText\n        .attr(\"width\", titleText.node().getBBox().width)\n        .attr(\"height\", titleText.node().getBBox().height)\n        .attr(\"y\", topSpace - titleText.node().getBBox().height / 2);\n    }\n\n    // tooltip\n    let tooltip = d3\n      .select(tooltipContainer)\n      .append(\"div\")\n      .attr(\"id\", `${container.node().id}-tooltip`)\n      .attr(\"class\", \"graph-tooltip\")\n      .style(\"transform\", \"translate(-50%, -10%)\");\n  }\n}\n", "import * as d3 from 'd3';\nimport { distanceLimitedVoronoi } from \"./d3-distance-limited-voronoi.js\"\nimport { accounting, d3locale } from '../../../lib/shared';\n\nexport class VisRentDistribution {\n  constructor(divId, city_id) {\n    this.container = divId;\n    this.cityId = city_id;\n\n    this.data = null;\n    this.tbiToken = window.populateData.token;\n\n    this.url =\n      window.populateData.endpoint +\n      `\n      WITH maxyear AS\n        (SELECT max(year)\n        FROM renta_habitante\n        WHERE renta_media_hogar IS NOT NULL)\n      SELECT\n        place_id AS location_id,\n        poblacion_residente::integer AS value,\n        renta_media_hogar::decimal AS rent,\n        nombre AS municipality_name\n      FROM renta_habitante\n      INNER JOIN municipios ON codigo_ine = place_id\n      WHERE year =\n          (SELECT *\n          FROM maxyear)\n        AND place_id\n          BETWEEN FLOOR(${city_id}::decimal / 1000) * 1000\n          AND (CEIL(${city_id}::decimal / 1000) * 1000) - 1\n        AND poblacion_residente IS NOT NULL\n      `;\n\n    this.formatThousand = d3.format(\",.0f\");\n    this.isMobile = window.innerWidth <= 768;\n\n    // Set default locale\n    d3.formatDefaultLocale(d3locale[I18n.locale]);\n\n    // Chart dimensions\n    this.margin = { top: 25, right: 15, bottom: 30, left: 15 };\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    // Scales & Ranges\n    this.xScale = d3.scaleLog();\n    this.yScale = d3.scaleLinear();\n\n    this.color = d3.scaleSequential(d3.interpolatePlasma);\n\n    // Create axes\n    this.xAxis = d3.axisBottom();\n    this.yAxis = d3.axisRight();\n\n    // Chart objects\n    this.svg = null;\n\n    // Create main elements\n    this.svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .style(\"overflow\", \"visible\")\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    // Append axes containers\n    this.svg.append(\"g\").attr(\"class\", \"x axis\");\n    this.svg.append(\"g\").attr(\"class\", \"y axis\");\n\n    this.tooltip = d3\n      .select(this.container)\n      .append(\"div\")\n      .attr(\"class\", \"tooltip\");\n\n    d3.select(window).on(\"resize.\" + this.container, () => {\n      if (this.data) {\n        this._resize();\n      }\n    });\n  }\n\n  handlePromise(url, opts = {}) {\n    return d3.json(url, {\n      headers: new Headers({ authorization: \"Bearer \" + this.tbiToken }),\n      ...opts\n    });\n  }\n\n  getData() {\n    var data = this.handlePromise(this.url);\n\n    data.then((jsonData) => {\n      this.data = jsonData.data\n\n      this.updateRender();\n      this._renderCircles();\n      this.isMobile ? null : this._renderVoronoi();\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.updateRender();\n    }\n  }\n\n  updateRender() {\n    this.xScale\n      .rangeRound([0, this.width])\n      .domain(d3.extent(this.data, d => d.value)).nice();\n\n    this.yScale\n      .rangeRound([this.height, 0])\n      .domain(d3.extent(this.data, d => d.rent));\n\n    this.color.domain(d3.extent(this.data, d => d.rent).reverse());\n\n    this._renderAxis();\n  }\n\n  _renderCircles() {\n    // We keep this separate to not create them after every resize\n    var circles = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"circles\")\n      .selectAll(\"circle\")\n      .data(this.data)\n      .enter();\n\n    circles\n      .append(\"circle\")\n      .attr(\"class\", (d, i) => {\n        return d.location_id === +this.cityId\n          ? \"circle\" + i + \" selected-city\"\n          : \"circle\" + i;\n      })\n      .attr(\"cx\", d => this.xScale(d.value))\n      .attr(\"cy\", d => this.yScale(d.rent))\n      .attr(\"fill\", d => this.color(d.rent))\n      .attr(\"stroke\", \"white\")\n      .attr(\"r\", this.isMobile ? 6 : 12);\n\n    // Add name of the current city\n    var cityLabel = this.svg.append(\"g\").attr(\"class\", \"text-label\");\n\n    // cityLabel.append()\n\n    cityLabel\n      .selectAll(\"text\")\n      .data(this.data)\n      .enter()\n      .filter(d => d.location_id === +this.cityId)\n      .append(\"text\")\n      .attr(\"x\", d => this.xScale(d.value))\n      .attr(\"y\", d => this.yScale(d.rent))\n      .attr(\"dy\", 7)\n      .attr(\"dx\", -15)\n      .attr(\"text-anchor\", \"end\")\n      .text(d => d.municipality_name);\n  }\n\n  _renderVoronoi() {\n    // Create voronoi\n    this.voronoi = distanceLimitedVoronoi()\n      .x(d => this.xScale(d.value))\n      .y(d => this.yScale(+d.rent))\n      .limit(50)\n      .extent([[0, 0], [this.width, this.height]]);\n\n    this.voronoiGroup = this.svg.append(\"g\").attr(\"class\", \"voronoi\");\n\n    this.voronoiGroup\n      .selectAll(\"path\")\n      .data(this.voronoi(this.data))\n      .enter()\n      .append(\"path\")\n      .style(\"fill\", \"transparent\") // with none the event didn't trigger\n      .style(\"mouse-events\", \"all\")\n      .attr(\"class\", \"voronoiPath\")\n      .attr(\"d\", d => (d || {}).path)\n      .on(\"mousemove\", this._mousemove.bind(this))\n      .on(\"mouseout\", this._mouseout.bind(this));\n\n    // Attach hover circle\n    this.svg\n      .append(\"circle\")\n      .style(\"mouse-events\", \"none\")\n      .attr(\"class\", \"hover\")\n      .attr(\"fill\", \"none\")\n      .attr(\"transform\", \"translate(-100,-100)\")\n      .attr(\"r\", this.isMobile ? 6 : 12);\n  }\n\n  _mousemove(event, d, i) {\n    d3.select('.circle' + i).attr('stroke', 'none')\n\n    d3.selectAll(\".hover\")\n      .attr(\"stroke\", \"#111\")\n      .attr(\"stroke-width\", 1.5)\n      .attr(\"cx\", this.xScale(d.datum.value))\n      .attr(\"cy\", this.yScale(d.datum.rent))\n      .attr(\"transform\", \"translate(0,0)\");\n\n    // Fill the tooltip\n    this.tooltip\n      .html(\n        '<div class=\"tooltip-city\">' +\n          d.datum.municipality_name +\n          \"</div>\" +\n          '<table class=\"tooltip-table\">' +\n          '<tr class=\"first-row\">' +\n          '<td class=\"table-t\">' +\n          I18n.t(\"gobierto_common.visualizations.inhabitants\") +\n          \"</td>\" +\n          '<td><span class=\"table-n\">' +\n          accounting.formatNumber(d.datum.value, 0) +\n          \"</span></td>\" +\n          \"</tr>\" +\n          '<tr class=\"second-row\">' +\n          '<td class=\"table-t\">' +\n          I18n.t(\"gobierto_common.visualizations.gross_income\") +\n          \"</td>\" +\n          \"<td>\" +\n          accounting.formatNumber(d.datum.rent, 0) +\n          \"\u20AC</td>\" +\n          \"</tr>\" +\n          \"</table>\"\n      )\n      .style(\"opacity\", 1);\n\n    // Tooltip position\n    if (this.isMobile) {\n      this.tooltip.style(\"opacity\", 0);\n    } else {\n      var coords = d3.pointer(event);\n\n      var x = coords[0],\n        y = coords[1];\n\n      this.tooltip.style(\"top\", y + 23 + \"px\");\n\n      if (x > 900) {\n        // Move tooltip to the left side\n        return this.tooltip.style(\"left\", x - 200 + \"px\");\n      } else {\n        return this.tooltip.style(\"left\", x - 20 + \"px\");\n      }\n    }\n  }\n\n  _mouseout() {\n    d3.selectAll(\".circle\").attr(\"stroke\", \"white\");\n\n    d3.select(\".hover\").attr(\"stroke\", \"none\");\n\n    this.tooltip.style(\"opacity\", 0);\n  }\n\n  _renderAxis() {\n    // X axis\n    this.svg\n      .select(\".x.axis\")\n      .attr(\"transform\", \"translate(0,\" + this.height + \")\");\n\n    this.xAxis\n      .tickPadding(10)\n      .ticks(3)\n      .tickSize(-this.height)\n      .scale(this.xScale)\n      .tickFormat(this._formatNumberX.bind(this));\n\n    this.svg.select(\".x.axis\").call(this.xAxis);\n\n    // Y axis\n    this.svg\n      .select(\".y.axis\")\n      .attr(\"transform\", \"translate(\" + this.width + \" ,0)\");\n\n    this.yAxis\n      .scale(this.yScale)\n      .ticks(this.isMobile ? 3 : 4)\n      .tickSize(-this.width)\n      .tickFormat(this._formatNumberY.bind(this));\n\n    this.svg.select(\".y.axis\").call(this.yAxis);\n\n    // Place y axis labels on top of ticks\n    this.svg\n      .selectAll(\".y.axis .tick text\")\n      .attr(\"dx\", \"-3.4em\")\n      .attr(\"dy\", \"-0.55em\");\n\n    // Remove the zero on the y axis\n    this.svg\n      .selectAll(\".y.axis .tick\")\n      .filter(function(d) {\n        return d === 0;\n      })\n      .remove();\n  }\n\n  _formatMillionAbbr(x) {\n    return (\n      d3.format(\".0f\")(x / 1e6) +\n      \" \" +\n      I18n.t(\"gobierto_common.visualizations.million\")\n    );\n  }\n\n  _formatThousandAbbr(x) {\n    return (\n      d3.format(\".0f\")(x / 1e3) +\n      \" \" +\n      I18n.t(\"gobierto_common.visualizations.thousand\")\n    );\n  }\n\n  _formatAbbreviation(x) {\n    var v = Math.abs(x);\n\n    return (v >= 0.9995e6\n      ? this._formatMillionAbbr\n      : v >= 0.9995e4\n      ? this._formatThousandAbbr\n      : this.formatThousand)(x);\n  }\n\n  _formatNumberX(d) {\n    // Spanish custom thousand separator\n    return this._formatAbbreviation(d);\n  }\n\n  _formatNumberY(d) {\n    // Show percentages\n    return accounting.formatNumber(d, 0) + \"\u20AC\";\n  }\n\n  _width() {\n    return d3.select(this.container).node()\n      ? parseInt(d3.select(this.container).style(\"width\"))\n      : 0;\n  }\n\n  _height() {\n    return this.isMobile ? 320 : this._width() * 0.5;\n  }\n\n  _resize() {\n    this.width = this._width();\n    this.height = this._height();\n\n    this.updateRender();\n\n    d3.select(this.container + \" svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom);\n\n    this.svg\n      .select(\".chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    this.svg\n      .selectAll(\".circles circle\")\n      .attr(\"cx\", d => this.xScale(d.value))\n      .attr(\"cy\", d => this.yScale(d.rent));\n\n    this.svg\n      .select(\".text-label text\")\n      .attr(\"x\", d => this.xScale(d.value))\n      .attr(\"y\", d => this.yScale(d.rent));\n\n    this.svg.selectAll(\".rent-anno\").attr(\"x\", this.width - 65);\n\n    if (this.voronoi) {\n      this.voronoi.extent([[0, 0], [this.width, this.height]]);\n\n      this.voronoiGroup\n        .selectAll(\".voronoiPath\")\n        .data(this.voronoi(this.data))\n        .attr(\"d\", d => (d || {}).path);\n    }\n  }\n}\n", "import * as d3 from 'd3';\nimport { voronoi as d3voronoi } from 'd3-voronoi';\n\nexport function distanceLimitedVoronoi() {\n  /////// Internals ///////\n  var voronoi = d3voronoi().extent([[-1e6, -1e6], [1e6, 1e6]]);\n  var limit = 20; // default limit\n  var context = null; // set it to render to a canvas' 2D context\n\n  function _distanceLimitedVoronoi(data) {\n    if (context != null) {\n      //renders into a Canvas\n      context.beginPath();\n      voronoi.polygons(data).forEach(function(cell) {\n        distanceLimitedCell(cell, limit, context);\n      });\n      return true;\n    } else {\n      //final viz is an SVG\n      return voronoi.polygons(data).map(function(cell) {\n        return {\n          path: distanceLimitedCell(cell, limit, d3.path()).toString(),\n          datum: cell.data\n        };\n      });\n    }\n  }\n\n  ///////////////////////\n  ///////// API /////////\n  ///////////////////////\n\n  _distanceLimitedVoronoi.limit = function(_) {\n    if (!arguments.length) {\n      return limit;\n    }\n    if (typeof _ === \"number\") {\n      limit = Math.abs(_);\n    }\n\n    return _distanceLimitedVoronoi;\n  };\n\n  _distanceLimitedVoronoi.x = function(_) {\n    if (!arguments.length) {\n      return voronoi.x();\n    }\n    voronoi.x(_);\n\n    return _distanceLimitedVoronoi;\n  };\n\n  _distanceLimitedVoronoi.y = function(_) {\n    if (!arguments.length) {\n      return voronoi.y();\n    }\n    voronoi.y(_);\n\n    return _distanceLimitedVoronoi;\n  };\n\n  _distanceLimitedVoronoi.extent = function(_) {\n    if (!arguments.length) {\n      return voronoi.extent();\n    }\n    voronoi.extent(_);\n\n    return _distanceLimitedVoronoi;\n  };\n\n  //exposes the underlying d3.geom.voronoi\n  //eg. allows to code 'limitedVoronoi.voronoi().triangle(data)'\n  _distanceLimitedVoronoi.voronoi = function(_) {\n    if (!arguments.length) {\n      return voronoi;\n    }\n    voronoi = _;\n\n    return _distanceLimitedVoronoi;\n  };\n\n  _distanceLimitedVoronoi.context = function(_) {\n    if (!arguments.length) {\n      return context;\n    }\n    context = _;\n\n    return _distanceLimitedVoronoi;\n  };\n\n  ///////////////////////\n  /////// Private ///////\n  ///////////////////////\n\n  function distanceLimitedCell(cell, r, context) {\n    var seed = [voronoi.x()(cell.data), voronoi.y()(cell.data)];\n    if (allVertecesInsideMaxDistanceCircle(cell, seed, r)) {\n      context.moveTo(cell[0][0], cell[0][1]);\n      for (var j = 1, m = cell.length; j < m; ++j) {\n        context.lineTo(cell[j][0], cell[j][1]);\n      }\n      context.closePath();\n      return context;\n    } else {\n      var pathNotYetStarted = true;\n      var firstPointTooFar = pointTooFarFromSeed(cell[0], seed, r);\n      var p0TooFar = firstPointTooFar;\n      var p0, p1, intersections;\n      var openingArcPoint, lastClosingArcPoint;\n      var startAngle, endAngle;\n\n      //begin: loop through all segments to compute path\n      for (var iseg = 0; iseg < cell.length; iseg++) {\n        p0 = cell[iseg];\n        p1 = cell[(iseg + 1) % cell.length];\n        // compute intersections between segment and maxDistance circle\n        intersections = segmentCircleIntersections(p0, p1, seed, r);\n        // complete the path (with lines or arc) depending on:\n        // intersection count (0, 1, or 2)\n        // if the segment is the first to start the path\n        // if the first point of the segment is inside or outside of the maxDistance circle\n        if (intersections.length === 2) {\n          if (p0TooFar) {\n            if (pathNotYetStarted) {\n              pathNotYetStarted = false;\n              // entire path will finish with an arc\n              // store first intersection to close last arc\n              lastClosingArcPoint = intersections[0];\n              // init path at 1st intersection\n              context.moveTo(intersections[0][0], intersections[0][1]);\n            } else {\n              //draw arc until first intersection\n              startAngle = angle(seed, openingArcPoint);\n              endAngle = angle(seed, intersections[0]);\n              context.arc(seed[0], seed[1], r, startAngle, endAngle, 1);\n            }\n            // then line to 2nd intersection, then initiliaze an arc\n            context.lineTo(intersections[1][0], intersections[1][1]);\n            openingArcPoint = intersections[1];\n          } else {\n            // THIS CASE IS IMPOSSIBLE AND SHOULD NOT ARISE\n            console.error(\"What's the f**k\");\n          }\n        } else if (intersections.length === 1) {\n          if (p0TooFar) {\n            if (pathNotYetStarted) {\n              pathNotYetStarted = false;\n              // entire path will finish with an arc\n              // store first intersection to close last arc\n              lastClosingArcPoint = intersections[0];\n              // init path at first intersection\n              context.moveTo(intersections[0][0], intersections[0][1]);\n            } else {\n              // draw an arc until intersection\n              startAngle = angle(seed, openingArcPoint);\n              endAngle = angle(seed, intersections[0]);\n              context.arc(seed[0], seed[1], r, startAngle, endAngle, 1);\n            }\n            // then line to next point (1st out, 2nd in)\n            context.lineTo(p1[0], p1[1]);\n          } else {\n            if (pathNotYetStarted) {\n              pathNotYetStarted = false;\n              // init path at p0\n              context.moveTo(p0[0], p0[1]);\n            }\n            // line to intersection, then initiliaze arc (1st in, 2nd out)\n            context.lineTo(intersections[0][0], intersections[0][1]);\n            openingArcPoint = intersections[0];\n          }\n          p0TooFar = !p0TooFar;\n        } else {\n          if (p0TooFar) {\n            // entire segment too far, nothing to do\n            true;\n          } else {\n            // entire segment in maxDistance\n            if (pathNotYetStarted) {\n              pathNotYetStarted = false;\n              // init path at p0\n              context.moveTo(p0[0], p0[1]);\n            }\n            // line to next point\n            context.lineTo(p1[0], p1[1]);\n          }\n        }\n      } //end: loop through all segments\n\n      if (pathNotYetStarted) {\n        // special case: no segment intersects the maxDistance circle\n        // cell perimeter is entirely outside the maxDistance circle\n        // path is the maxDistance circle\n        pathNotYetStarted = false;\n        context.moveTo(seed[0] + r, seed[1]);\n        context.arc(seed[0], seed[1], r, 0, 2 * Math.PI, false);\n      } else {\n        // if final segment ends with an opened arc, close it\n        if (firstPointTooFar) {\n          startAngle = angle(seed, openingArcPoint);\n          endAngle = angle(seed, lastClosingArcPoint);\n          context.arc(seed[0], seed[1], r, startAngle, endAngle, 1);\n        }\n        context.closePath();\n      }\n\n      return context;\n    }\n\n    function allVertecesInsideMaxDistanceCircle(cell, seed, r) {\n      var result = true;\n      for (var ip = 0; ip < cell.length; ip++) {\n        result = result && !pointTooFarFromSeed(cell[ip], seed, r);\n      }\n      return result;\n    }\n\n    function pointTooFarFromSeed(p, seed, r) {\n      return (\n        Math.pow(p[0] - seed[0], 2) + Math.pow(p[1] - seed[1], 2) >\n        Math.pow(r, 2)\n      );\n    }\n\n    function angle(seed, p) {\n      var v = [p[0] - seed[0], p[1] - seed[1]];\n      // from http://stackoverflow.com/questions/2150050/finding-signed-angle-between-vectors, with v1 = horizontal radius = [seed[0]+r - seed[0], seed[0] - seed[0]]\n      return Math.atan2(v[1], v[0]);\n    }\n  }\n\n  function segmentCircleIntersections(A, B, C, r) {\n    /*\n    from http://stackoverflow.com/questions/1073336/circle-line-segment-collision-detection-algorithm\n    */\n    var Ax = A[0],\n      Ay = A[1],\n      Bx = B[0],\n      By = B[1],\n      Cx = C[0],\n      Cy = C[1];\n\n    // compute the euclidean distance between A and B\n    var LAB = Math.sqrt(Math.pow(Bx - Ax, 2) + Math.pow(By - Ay, 2));\n\n    // compute the direction vector D from A to B\n    var Dx = (Bx - Ax) / LAB;\n    var Dy = (By - Ay) / LAB;\n\n    // Now the line equation is x = Dx*t + Ax, y = Dy*t + Ay with 0 <= t <= 1.\n\n    // compute the value t of the closest point to the circle center (Cx, Cy)\n    var t = Dx * (Cx - Ax) + Dy * (Cy - Ay);\n\n    // This is the projection of C on the line from A to B.\n\n    // compute the coordinates of the point E on line and closest to C\n    var Ex = t * Dx + Ax;\n    var Ey = t * Dy + Ay;\n\n    // compute the euclidean distance from E to C\n    var LEC = Math.sqrt(Math.pow(Ex - Cx, 2) + Math.pow(Ey - Cy, 2));\n\n    // test if the line intersects the circle\n    if (LEC < r) {\n      // compute distance from t to circle intersection point\n      var dt = Math.sqrt(Math.pow(r, 2) - Math.pow(LEC, 2));\n      var tF = t - dt; // t of first intersection point\n      var tG = t + dt; // t of second intersection point\n\n      var result = [];\n      if (tF > 0 && tF < LAB) {\n        // test if first intersection point in segment\n        // compute first intersection point\n        var Fx = (t - dt) * Dx + Ax;\n        var Fy = (t - dt) * Dy + Ay;\n        result.push([Fx, Fy]);\n      }\n      if (tG > 0 && tG < LAB) {\n        // test if second intersection point in segment\n        // compute second intersection point\n        var Gx = (t + dt) * Dx + Ax;\n        var Gy = (t + dt) * Dy + Ay;\n        result.push([Gx, Gy]);\n      }\n      return result;\n    } else {\n      // either (LEC === r), tangent point to circle is E\n      // or (LEC < r), line doesn't touch circle\n      // in both cases, returning nothing is OK\n      return [];\n    }\n  }\n\n  return _distanceLimitedVoronoi;\n}\n", "export {default as voronoi} from \"./voronoi\";\n", "import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      extent = null;\n\n  function voronoi(data) {\n    return new Diagram(data.map(function(d, i) {\n      var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n      s.index = i;\n      s.data = d;\n      return s;\n    }), extent);\n  }\n\n  voronoi.polygons = function(data) {\n    return voronoi(data).polygons();\n  };\n\n  voronoi.links = function(data) {\n    return voronoi(data).links();\n  };\n\n  voronoi.triangles = function(data) {\n    return voronoi(data).triangles();\n  };\n\n  voronoi.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n  };\n\n  voronoi.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n  };\n\n  voronoi.extent = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n  };\n\n  voronoi.size = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n  };\n\n  return voronoi;\n}\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "export function x(d) {\n  return d[0];\n}\n\nexport function y(d) {\n  return d[1];\n}\n", "import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n}\n", "import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon\n      && Math.abs(y - lArc.circle.cy) < epsilon) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon\n      && Math.abs(y - rArc.circle.cy) < epsilon) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n", "function RedBlackTree() {\n  this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\n    if (after) {\n      node.P = after;\n      node.N = after.N;\n      if (after.N) after.N.P = node;\n      after.N = node;\n      if (after.R) {\n        after = after.R;\n        while (after.L) after = after.L;\n        after.L = node;\n      } else {\n        after.R = node;\n      }\n      parent = after;\n    } else if (this._) {\n      after = RedBlackFirst(this._);\n      node.P = null;\n      node.N = after;\n      after.P = after.L = node;\n      parent = after;\n    } else {\n      node.P = node.N = null;\n      this._ = node;\n      parent = null;\n    }\n    node.L = node.R = null;\n    node.U = parent;\n    node.C = true;\n\n    after = node;\n    while (parent && parent.C) {\n      grandpa = parent.U;\n      if (parent === grandpa.L) {\n        uncle = grandpa.R;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.R) {\n            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(this, grandpa);\n        }\n      } else {\n        uncle = grandpa.L;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.L) {\n            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\n\n  remove: function(node) {\n    if (node.N) node.N.P = node.P;\n    if (node.P) node.P.N = node.N;\n    node.N = node.P = null;\n\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\n\n    if (left && right) {\n      red = next.C;\n      next.C = node.C;\n      next.L = left;\n      left.U = next;\n      if (next !== right) {\n        parent = next.U;\n        next.U = node.U;\n        node = next.R;\n        parent.L = node;\n        next.R = right;\n        right.U = next;\n      } else {\n        next.U = parent;\n        parent = next;\n        node = next.R;\n      }\n    } else {\n      red = node.C;\n      node = next;\n    }\n\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; return; }\n\n    do {\n      if (node === this._) break;\n      if (node === parent.L) {\n        sibling = parent.R;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(this, parent);\n          node = this._;\n          break;\n        }\n      } else {\n        sibling = parent.L;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(this, parent);\n          node = this._;\n          break;\n        }\n      }\n      sibling.C = true;\n      node = parent;\n      parent = parent.U;\n    } while (!node.C);\n\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.R = q.L;\n  if (p.R) p.R.U = p;\n  q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.L = q.R;\n  if (p.L) p.L.U = p;\n  q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nexport default RedBlackTree;\n", "import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n              : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n              : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren\u2019t any edges, have the closest site cover the extent.\n  // It doesn\u2019t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n", "import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang\u2013Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\n    }\n  } else {\n    fm = (lx - rx) / (ry - ly);\n    fb = fy - fm * fx;\n    if (fm < -1 || fm > 1) {\n      if (lx > rx) {\n        if (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n      delete edges[i];\n    }\n  }\n}\n", "import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nexport function attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n", "import * as d3 from 'd3';\n\nexport class Rowchart {\n  constructor(context, data, options = {}) {\n    // Markup has already a svg inside\n    if ($(`${context} svg`).length !== 0) return;\n\n    // options\n    let itemHeight = options.itemHeight || 25;\n    let gutter = options.gutter || 20;\n    let margin = options.margins || {\n      top: gutter / 1.5,\n      right: gutter,\n      bottom: gutter * 1.5,\n      left: gutter\n    };\n    let xTickFormat = options.xTickFormat || (d => d);\n    let yTickFormat = options.yTickFormat || (d => d);\n    let tooltipContainer = options.tooltipContainer || \"body\";\n    let tooltipContent = options.tooltipContent;\n\n    // dimensions\n    let container = d3.select(context);\n    let width =\n      +container.node().getBoundingClientRect().width -\n      margin.left -\n      margin.right;\n    let height = data.length * itemHeight + margin.top + margin.bottom;\n    let svg = container\n      .append(\"svg\")\n      .attr(\"width\", width + margin.left + margin.right)\n      .attr(\"height\", height + margin.top + margin.bottom);\n\n    // tooltip\n    let tooltip = d3\n      .select(tooltipContainer)\n      .append(\"div\")\n      .attr(\"id\", `${container.node().id}-tooltip`)\n      .attr(\"class\", \"graph-tooltip\")\n      .style(\"transform\", \"translateX(20%)\");\n\n    // scales\n    let x = d3.scaleLinear().range([0, width]);\n    let y = d3.scaleBand().range([height, 0]);\n\n    let g = svg\n      .append(\"g\")\n      .attr(\"transform\", \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\n    x.domain([0, d3.max(data, d => d.value)]);\n    y.domain(data.map(d => d.key)).padding(0.1);\n\n    g.append(\"g\")\n      .attr(\"class\", \"x axis\")\n      .attr(\"transform\", \"translate(0,\" + (height + gutter / 4) + \")\")\n      .call(\n        d3\n          .axisBottom(x)\n          .ticks(5)\n          .tickSizeOuter(0)\n          .tickFormat(xTickFormat)\n      );\n\n    g.selectAll(\".bar\")\n      .data(data)\n      .enter()\n      .append(\"a\")\n      .attr(\"xlink:href\", d => (d.properties || {}).url)\n      .append(\"rect\")\n      .on(\"mousemove\", function(_, d) {\n        if (!tooltipContent) return\n\n        const content = `<div class=\"tooltip-content left\">${tooltipContent(d)}</div>`;\n\n        const node = container.node() || document.createElement(\"div\");\n        const coords = {\n          x: window.scrollX + node.getBoundingClientRect().left,\n          y: window.scrollY + node.getBoundingClientRect().top\n        };\n\n        tooltip\n          .style(\"opacity\", \"1\")\n          .style(\"left\", `${coords.x + x(d.value) + margin.left}px`)\n          .style(\"top\", `${coords.y + y(d.key) + itemHeight / 2}px`)\n          .html(content);\n      })\n      .on(\"mouseout\", () => tooltip.style(\"opacity\", \"0\"))\n      .attr(\"class\", \"bar\")\n      .attr(\"x\", 0)\n      .attr(\"y\", d => y(d.key))\n      .attr(\"height\", y.bandwidth())\n      .transition()\n      .duration(750)\n      .attr(\"width\", d => x(d.value));\n\n    g.append(\"g\")\n      .attr(\"class\", \"y axis\")\n      .attr(\"transform\", \"translate(\" + gutter + \", 0)\")\n      .call(d3.axisLeft(y).tickFormat(yTickFormat));\n  }\n}\n", "import * as d3 from 'd3'\n\nexport class VisSlider {\n  constructor(divId, data) {\n    this.container = divId;\n    $(this.container).html(\"\");\n    this.data = data;\n\n    var currentYear = parseInt(d3.select(\"body\").attr(\"data-year\"));\n    var maxYear = parseInt(d3.select(\"body\").attr(\"data-max-year\"));\n    var years = this.data\n      .reduce((acc, { values }) => {\n        // add the keys, if they're not included, up to maxYear\n        Object.keys(values).forEach(x => {\n          if (!acc.includes(+x) && +x <= maxYear) acc.push(+x);\n        });\n        return acc;\n      }, [])\n      .sort();\n    if (years.indexOf(currentYear) === -1) {\n      years.push(currentYear);\n    }\n\n    var margin = {\n      right: 20,\n      left: 10\n    };\n    var width =\n      parseInt(d3.select(this.container).style(\"width\")) -\n      margin.left -\n      margin.right;\n    var height = 130;\n\n    var svg = d3\n      .select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", width + margin.left + margin.right)\n      .attr(\"height\", height)\n      .append(\"g\")\n      .attr(\"transform\", \"translate(\" + margin.left + \",\" + 0 + \")\");\n\n    // scalePoint derives from the ordinal scale, but allows a continuous range\n    var x = d3\n      .scalePoint()\n      .domain(years)\n      .range([0, width]);\n\n    // Invert ordinal scale, from: https://gist.github.com/shimizu/808e0f5cadb6a63f28bb00082dc8fe3f\n    x.invert = (function() {\n      var domain = x.domain();\n      var range = x.range();\n      var scale = d3\n        .scaleQuantize()\n        .domain(range)\n        .range(domain);\n\n      return function(x) {\n        return scale(x);\n      };\n    })();\n\n    var slider = svg\n      .append(\"g\")\n      .attr(\"class\", \"slider\")\n      .attr(\"transform\", \"translate(0,\" + height / 4 + \")\");\n\n    slider\n      .append(\"line\")\n      .attr(\"class\", \"track\")\n      .attr(\"x1\", x.range()[0])\n      .attr(\"x2\", x.range()[1])\n      .select(function() {\n        return this.parentNode.appendChild(this.cloneNode(true));\n      })\n      .attr(\"class\", \"track-inset\")\n      .select(function() {\n        return this.parentNode.appendChild(this.cloneNode(true));\n      })\n      .attr(\"class\", \"track-overlay\")\n      .call(\n        d3\n          .drag()\n          .on(\"start.interrupt\", () => {\n            slider.interrupt();\n          })\n          .on(\"start drag\", dragged)\n          .on(\"end\", endDrag)\n      );\n\n    slider\n      .append(\"g\")\n      .attr(\"class\", \"year-circles\")\n      .attr(\"transform\", \"translate(0,\" + 0 + \")\")\n      .selectAll(\"circle\")\n      .data(years)\n      .enter()\n      .append(\"circle\")\n      .attr(\"cx\", d => x(d))\n      .attr(\"r\", 9)\n      .call(\n        d3\n          .drag()\n          .on(\"start.interrupt\", () => {\n            slider.interrupt();\n          })\n          .on(\"start drag\", dragged)\n          .on(\"end\", endDrag)\n      );\n\n    slider\n      .append(\"g\")\n      .attr(\"class\", \"ticks\")\n      .attr(\"transform\", \"translate(0,\" + 30 + \")\")\n      .selectAll(\"text\")\n      .data(years)\n      .enter()\n      .append(\"text\")\n      .attr(\"x\", d => x(d))\n      .text(year => year)\n      .classed(\"active\", d => parseFloat(d) === parseFloat(currentYear))\n      .attr(\"dx\", d => {\n        if (d === maxYear) {\n          return 10;\n        } else if (d === years[0]) {\n          return -10;\n        } else {\n          return 0;\n        }\n      })\n      .attr(\"text-anchor\", d => {\n        if (d === maxYear) {\n          return \"end\";\n        } else if (d === years[0]) {\n          return \"start\";\n        } else {\n          return \"middle\";\n        }\n      })\n      .call(\n        d3\n          .drag()\n          .on(\"start.interrupt\", () => {\n            slider.interrupt();\n          })\n          .on(\"start drag\", dragged)\n          .on(\"end\", endDrag)\n      );\n\n    var handle = slider\n      .append(\"circle\")\n      .attr(\"class\", \"handle\")\n      .attr(\"cx\", x(currentYear))\n      .attr(\"r\", 9)\n      .call(\n        d3\n          .drag()\n          .on(\"start.interrupt\", () => {\n            slider.interrupt();\n          })\n          .on(\"start drag\", dragged)\n          .on(\"end\", endDrag)\n      );\n\n    function dragged(d) {\n      var year = x.invert(d3.pointer(d)[0]);\n      handle.attr(\"cx\", x(year));\n\n      slider\n        .select(\".ticks\")\n        .selectAll(\"text\")\n        .classed(\"active\", d => d === year);\n    }\n\n    function endDrag(d) {\n      var year = x.invert(d3.pointer(d)[0]);\n      $(document).trigger(\"visSlider:yearChanged\", year);\n    }\n  }\n}\n", "import * as d3 from 'd3';\nimport { accounting } from '../../../lib/shared';\n\nexport class VisTreemap {\n  constructor(divId, size, clickable) {\n    this.containerId = divId;\n\n    // Chart dimensions\n    this.containerWidth = null;\n    this.margin = { top: 0, right: 0, bottom: 0, left: 0 };\n    this.width = null;\n    this.height = null;\n\n    this.sizeFactor = size == \"big\" ? 5.5 : 2.5;\n    this.clickable = clickable;\n\n    this.treemap = null;\n    this.container = null;\n\n    var colors = [\n      \"#FFBCC8\",\n      \"#FF6181\",\n      \"#EE2657\",\n      \"#8C3044\",\n      \"#516773\",\n      \"#427991\",\n      \"#1F3F4F\",\n      \"#473D3F\",\n      \"#24191B\"\n    ];\n    this.colorScale = d3.scaleOrdinal().range(colors);\n\n    this.opacity = 1;\n    this.duration = 1;\n  }\n\n  render(urlData) {\n    $(this.containerId).html(\"\");\n\n    // Chart dimensions\n    const containerNode =\n      d3.select(this.containerId).node() || document.createElement(\"div\");\n    this.containerWidth = (\n      containerNode.parentNode || containerNode\n    ).getBoundingClientRect().width;\n\n    this.width = this.containerWidth - this.margin.left - this.margin.right;\n    this.height =\n      this.containerWidth / this.sizeFactor -\n      this.margin.top -\n      this.margin.bottom;\n\n    this.container = d3\n      .select(this.containerId)\n      .style(\"position\", \"relative\")\n      .style(\"width\", this.width + this.margin.left + this.margin.right + \"px\")\n      .style(\n        \"height\",\n        this.height + this.margin.top + this.margin.bottom + \"px\"\n      )\n      .style(\"left\", this.margin.left + \"px\")\n      .style(\"top\", this.margin.top + \"px\");\n\n    this.treemap = d3.treemap().size([this.width, this.height]);\n\n    d3.json(urlData).then(data => {\n      var root = d3\n        .hierarchy(data)\n        .eachBefore(d => {\n          d.data.id = d.data.code;\n        })\n        .sum(d => d.budget)\n        .sort((a, b) => b.budget - a.budget);\n\n      this.colorScale.domain(root.children.map(d => d.code));\n\n      this.container\n        .selectAll(\".treemap_node\")\n        .data(this.treemap(root).leaves())\n        .enter()\n        .append(\"div\")\n        .attr(\"class\", () => {\n          if (this.clickable) {\n            return \"tipsit-treemap treemap_node clickable\";\n          } else {\n            return \"tipsit-treemap treemap_node\";\n          }\n        })\n        .attr(\n          \"title\",\n          function(d) {\n            function totalBudgetTooltipStr(str) {\n              return (\n                \"<br>\" +\n                accounting.formatMoney(\n                  str,\n                  \"\u20AC\",\n                  0,\n                  I18n.t(\"number.currency.format.delimiter\"),\n                  I18n.t(\"number.currency.format.separator\")\n                )\n              );\n            }\n            function perInhabitantTooltipStr(str) {\n              return str\n                ? \"<br>\" +\n                    accounting.formatMoney(\n                      str,\n                      \"\u20AC\",\n                      0,\n                      I18n.t(\"number.currency.format.delimiter\"),\n                      I18n.t(\"number.currency.format.separator\")\n                    ) +\n                    \" /\" +\n                    I18n.t(\"gobierto_common.visualizations.inhabitant_short\")\n                : \"\";\n            }\n            return (\n              \"<strong>\" +\n              d.data.name +\n              \"</strong>\" +\n              totalBudgetTooltipStr(d.data.budget) +\n              perInhabitantTooltipStr(d.data.budget_per_inhabitant)\n            );\n          }.bind(this)\n        )\n        .attr(\"data-url\", d => {\n          if (this.clickable) {\n            return d.children\n              ? null\n              : urlData.split(\"?\")[0] + \"?parent_code=\" + d.data.code;\n          }\n        })\n        .style(\"left\", d => d.x0 + \"px\")\n        .style(\"top\", d => d.y0 + \"px\")\n        .style(\"width\", d => d.x1 - d.x0 + \"px\")\n        .style(\"height\", d => d.y1 - d.y0 + \"px\")\n        .style(\"background\", d => this.colorScale(d.data.code))\n        .html(function(d) {\n          function getBudgetAmount(d) {\n            if (d.data.budget_per_inhabitant) {\n              return (\n                accounting.formatMoney(\n                  d.data.budget_per_inhabitant,\n                  \"\u20AC\",\n                  0,\n                  I18n.t(\"number.currency.format.delimiter\"),\n                  I18n.t(\"number.currency.format.separator\")\n                ) +\n                \"/\" +\n                I18n.t(\"gobierto_common.visualizations.inhabitant_short\")\n              );\n            } else {\n              return accounting.formatMoney(\n                d.data.budget,\n                \"\u20AC\",\n                0,\n                I18n.t(\"number.currency.format.delimiter\"),\n                I18n.t(\"number.currency.format.separator\")\n              );\n            }\n          }\n          if (d.children) {\n            return null;\n          } else {\n            // If the square is small, don't add the text\n            if (d.x1 - d.x0 > 70 && d.y1 - d.y0 > 90) {\n              return (\n                \"<p><strong>\" +\n                d.data.name +\n                \"</strong></p><p>\" +\n                getBudgetAmount(d) +\n                \"</p>\"\n              );\n            }\n          }\n        });\n\n      $(\".tipsit-treemap\").tipsy({\n        fade: false,\n        gravity: $.fn.tipsy.autoNS,\n        html: true\n      });\n    });\n  }\n}\n", "import * as d3 from 'd3';\nimport { voronoi } from 'd3-voronoi';\nimport { d3locale, groupBy } from '../../../lib/shared';\n\nexport class VisUnemploymentAge {\n  constructor(divId, city_id) {\n    this.container = divId;\n    this.data = null;\n    this.tbiToken = window.populateData.token;\n\n    this.url =\n      window.populateData.endpoint +\n      `\n      WITH pob_activa AS\n        (SELECT year,\n                SUM(total::integer) AS value\n        FROM poblacion_edad_sexo\n        WHERE place_id = ${city_id}\n          AND sex = 'Total'\n          AND age BETWEEN 16 AND 65\n        GROUP BY year\n        ORDER BY 1 DESC)\n      SELECT paro.year,\n            month,\n            CONCAT(paro.year, '-', month, '-', 1) AS date,\n            paro.age as key,\n            SUM(paro.value::decimal) / COALESCE(pob_activa.value, (SELECT value FROM pob_activa LIMIT 1)) AS value\n      FROM paro_personas paro\n      LEFT JOIN pob_activa ON paro.year = pob_activa.year\n      WHERE place_id = ${city_id}\n      GROUP BY paro.year,\n              month,\n              paro.age,\n              pob_activa.value\n      ORDER BY year DESC, month DESC\n      `;\n\n    d3.timeFormatDefaultLocale(d3locale[I18n.locale]);\n\n    this.isMobile = window.innerWidth <= 768;\n\n    // Chart dimensions\n    this.margin = { top: 25, right: 20, bottom: 25, left: 50 };\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    // Scales & Ranges\n    this.xScale = d3.scaleTime();\n    this.yScale = d3.scaleLinear();\n    this.color = d3.scaleOrdinal();\n\n    // Create axes\n    this.xAxis = d3.axisBottom();\n    this.yAxis = d3.axisLeft();\n\n    // Chart objects\n    this.svg = null;\n\n    // Create main elements\n    this.svg = d3.select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    // Append axes containers\n    this.svg.append(\"g\").attr(\"class\", \"x axis\");\n    this.svg.append(\"g\").attr(\"class\", \"y axis\");\n\n    d3.select(window).on(\"resize.\" + this.container, () => {\n      if (this.data) {\n        this._resize();\n      }\n    });\n  }\n\n  handlePromise(url, opts = {}) {\n    return d3.json(url, {\n      headers: new Headers({ authorization: \"Bearer \" + this.tbiToken }),\n      ...opts\n    });\n  }\n\n  getData() {\n    var data = this.handlePromise(this.url);\n\n    data.then(json => {\n      this.data = Object.entries(groupBy(json.data, \"key\"));\n\n      this.updateRender();\n      this._renderLines();\n      this._renderVoronoi();\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.updateRender();\n    }\n  }\n\n  updateRender() {\n    const values = this.data.flatMap(x => x[1]);\n\n    this.xScale\n      .rangeRound([0, this.width])\n      .domain(d3.extent(values, d => new Date(d.date)));\n\n    this.yScale\n      .rangeRound([this.height, 0])\n      .domain([0, d3.max(values, d => d.value)]);\n\n    this.color\n      .domain([...new Set(values.map(x => x.key))])\n      .range([\"#F6B128\", \"#F39D96\", \"#007382\"]);\n\n    this._renderAxis();\n  }\n\n  _renderLines() {\n    this.line = d3.line()\n      .x(d => this.xScale(new Date(d.date)))\n      .y(d => this.yScale(+d.value))\n      .curve(d3.curveCatmullRom.alpha(0.5));\n\n    var lines = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"lines\")\n      .selectAll(\"path\")\n      .data(this.data, ([key]) => key)\n      .enter();\n\n    var linesGroup = lines.append(\"g\").attr(\"class\", \"line\");\n\n    linesGroup\n      .append(\"path\")\n      .attr(\"d\", ([, values]) => this.line(values))\n      .attr(\"stroke\", ([key]) => this.color(key));\n\n    linesGroup\n      .append(\"circle\")\n      .attr(\"cx\", ([, values]) => this.xScale(new Date(values[0].date)))\n      .attr(\"cy\", ([, values]) => this.yScale(values[0].value))\n      .attr(\"r\", 5)\n      .attr(\"fill\", ([key]) => this.color(key));\n\n    var linesText = d3.select(this.container)\n      .append(\"div\")\n      .attr(\"class\", \"lines-labels\")\n      .selectAll(\"p\")\n      .data(this.data, ([key]) => key)\n      .enter();\n\n    linesText\n      .append(\"div\")\n      .style(\"right\", \"-25px\")\n      .style(\"top\", ([, values]) => this.yScale(values[0].value) + \"px\")\n      .text(([key]) => this._getAgeRange(key));\n  }\n\n  _renderVoronoi() {\n    // Voronoi\n    this.focus = this.svg\n      .append(\"g\")\n      .attr(\"transform\", \"translate(-100,-100)\")\n      .attr(\"class\", \"focus\");\n\n    this.focus\n      .append(\"circle\")\n      .attr(\"fill\", \"white\")\n      .attr(\"r\", 5);\n\n    this.text = this.focus.append(\"text\");\n\n    this.text\n      .append(\"tspan\")\n      .attr(\"y\", -10)\n      .attr(\"x\", 0);\n\n    this.voronoi = voronoi()\n      .x(d => this.xScale(new Date(d.date)))\n      .y(d => this.yScale(+d.value))\n      .extent([\n        [0, 0],\n        [this.width, this.height]\n      ]);\n\n    this.voronoiGroup = this.svg.append(\"g\").attr(\"class\", \"voronoi\");\n\n    this.voronoiGroup\n      .selectAll(\"path\")\n      .data(this.voronoi.polygons(this.data.flatMap(x => x[1])))\n      .enter()\n      .append(\"path\")\n      .attr(\"d\", function(d) {\n        return d ? \"M\" + d.join(\"L\") + \"Z\" : null;\n      })\n      .on(\"mouseover\", this._mouseover.bind(this))\n      .on(\"mouseout\", this._mouseout.bind(this));\n  }\n\n  _mouseover(_, d) {\n    this.focus.select(\"circle\").attr(\"stroke\", this.color(d.data.key));\n\n    this.focus.attr(\n      \"transform\",\n      \"translate(\" +\n        this.xScale(new Date(d.data.date)) +\n        \",\" +\n        this.yScale(+d.data.value) +\n        \")\"\n    );\n\n    const [startDate, endDate] = this.xScale.domain()\n    const middleDate = new Date((startDate.getTime() + endDate.getTime()) / 2);\n\n    this.focus\n      .select(\"text\")\n      .attr(\n        \"text-anchor\",\n        new Date(d.data.date) >= middleDate ? \"end\" : \"start\"\n      );\n\n    const month = d3.timeFormat(\"%b %Y\")(new Date(d.data.date));\n    const value = Number(d.data.value).toLocaleString(I18n.locale, {\n      style: \"percent\",\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2\n    });\n\n    this.focus\n      .select(\"tspan\")\n      .text(`${this._getAgeRange(d.data.key)}: ${value} (${month})`);\n  }\n\n  _mouseout() {\n    this.focus.attr(\"transform\", \"translate(-100,-100)\");\n  }\n\n  _getAgeRange(age) {\n    switch (age) {\n      case \"<25\":\n        return I18n.t(\"gobierto_common.visualizations.less_25\");\n      case \"25-44\":\n        return I18n.t(\"gobierto_common.visualizations.between_25_44\");\n      case \">=45\":\n        return I18n.t(\"gobierto_common.visualizations.more_44\");\n    }\n  }\n\n  _renderAxis() {\n    // X axis\n    this.svg\n      .select(\".x.axis\")\n      .attr(\"transform\", \"translate(0,\" + this.height + \")\");\n\n    this.xAxis\n      .ticks(4)\n      .tickPadding(10)\n      .tickSize(0, 0)\n      .scale(this.xScale);\n\n    this.yAxis\n      .ticks(3)\n      .tickSize(-this.width)\n      .tickFormat(d => d.toLocaleString(I18n.locale, { style: \"percent\" }))\n      .scale(this.yScale);\n\n    this.svg.select(\".x.axis\").call(this.xAxis);\n    this.svg.select(\".y.axis\").call(this.yAxis);\n\n    // Remove the zero\n    this.svg\n      .selectAll(\".y.axis .tick\")\n      .filter(function(d) {\n        return d === 0;\n      })\n      .remove();\n\n    // Move y axis ticks on top of the chart\n    this.svg\n      .selectAll(\".y.axis .tick text\")\n      .attr(\"text-anchor\", \"start\")\n      .attr(\"dx\", \"0.25em\")\n      .attr(\"dy\", \"-0.55em\");\n  }\n\n  _width() {\n    return d3.select(this.container).node()\n      ? parseInt(d3.select(this.container).style(\"width\"))\n      : 0;\n  }\n\n  _height() {\n    return this.isMobile ? 200 : 250;\n  }\n\n  _resize() {\n    this.isMobile = window.innerWidth <= 768;\n\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    this.updateRender();\n\n    d3.select(this.container + \" svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom);\n\n    this.svg\n      .select(\".chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    this.svg.selectAll(\".lines path\")\n      .attr(\"d\", ([, values]) => this.line(values));\n\n    this.svg\n      .selectAll(\".lines circle\")\n      .attr(\"cx\", ([, values]) => this.xScale(new Date(values[0].date)))\n      .attr(\"cy\", ([, values]) => this.yScale(values[0].value));\n\n    d3.selectAll(this.container + \" .lines-labels div\").style(\n      \"top\",\n      ([, values]) => this.yScale(values[0].value) + \"px\"\n    );\n\n    this.voronoi.extent([\n      [0, 0],\n      [this.width, this.height]\n    ]);\n\n    this.voronoiGroup\n      .selectAll(\"path\")\n      .data(this.voronoi.polygons(this.data.flatMap(x => x[1])))\n      .attr(\"d\", function(d) {\n        return d ? \"M\" + d.join(\"L\") + \"Z\" : null;\n      });\n  }\n}\n", "import * as d3 from 'd3';\nimport { voronoi } from 'd3-voronoi';\nimport { d3locale, groupBy } from '../../../lib/shared';\n\nexport class VisUnemploymentRate {\n  constructor(divId, city_id) {\n    this.container = divId;\n    this.data = null;\n    this.tbiToken = window.populateData.token;\n\n    this.url =\n      window.populateData.endpoint +\n      `\n      WITH pob_activa AS\n        (SELECT year,\n                SUM(total::integer) AS value\n        FROM poblacion_edad_sexo\n        WHERE place_id = ${city_id}\n          AND sex = 'Total'\n          AND age BETWEEN 16 AND 65\n        GROUP BY year\n        ORDER BY 1 DESC),\n          pob_activa_prov AS\n        (SELECT year,\n                SUM(total::integer) AS value\n        FROM poblacion_edad_sexo\n        WHERE\n          place_id BETWEEN FLOOR(${city_id}::decimal / 1000) * 1000\n          AND (CEIL(${city_id}::decimal / 1000) * 1000) - 1\n          AND sex = 'Total'\n          AND age BETWEEN 16 AND 65\n        GROUP BY year\n        ORDER BY 1 DESC)\n      SELECT 1 AS key,\n            paro.year,\n            month,\n            CONCAT(paro.year, '-', month, '-', 1) AS date,\n            SUM(paro.value::decimal) / COALESCE(pob_activa.value, (SELECT value FROM pob_activa LIMIT 1)) AS value\n      FROM paro_personas paro\n      LEFT JOIN pob_activa ON paro.year = pob_activa.year\n      WHERE place_id = ${city_id}\n      GROUP BY paro.year,\n              month,\n              pob_activa.value\n      UNION\n      SELECT 2 AS key,\n            paro.year,\n            month,\n            CONCAT(paro.year, '-', month, '-', 1) AS date,\n            SUM(paro.value::decimal) / COALESCE(pob_activa_prov.value, (SELECT value FROM pob_activa_prov LIMIT 1)) AS value\n      FROM paro_personas paro\n      LEFT JOIN pob_activa_prov ON paro.year = pob_activa_prov.year\n      WHERE\n        place_id BETWEEN FLOOR(${city_id}::decimal / 1000) * 1000\n        AND (CEIL(${city_id}::decimal / 1000) * 1000) - 1\n      GROUP BY paro.year,\n              month,\n              pob_activa_prov.value\n      ORDER BY key, year DESC, month DESC\n      `;\n\n    d3.timeFormatDefaultLocale(d3locale[I18n.locale]);\n\n    this.isMobile = window.innerWidth <= 768;\n\n    // Chart dimensions\n    this.margin = { top: 25, right: 80, bottom: 25, left: 0 };\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    // Scales & Ranges\n    this.xScale = d3.scaleTime();\n    this.yScale = d3.scaleLinear();\n    this.color = d3.scaleOrdinal();\n\n    // Create axes\n    this.xAxis = d3.axisBottom();\n    this.yAxis = d3.axisLeft();\n\n    // Chart objects\n    this.svg = null;\n\n    // Create main elements\n    this.svg = d3.select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    // Append axes containers\n    this.svg.append(\"g\").attr(\"class\", \"x axis\");\n    this.svg.append(\"g\").attr(\"class\", \"y axis\");\n\n    d3.select(window).on(\"resize.\" + this.container, () => {\n      if (this.data) {\n        this._resize();\n      }\n    });\n  }\n\n  handlePromise(url, opts = {}) {\n    return d3.json(url, {\n      headers: new Headers({ authorization: \"Bearer \" + this.tbiToken }),\n      ...opts\n    });\n  }\n\n  getData() {\n    var data = this.handlePromise(this.url);\n\n    data.then(json => {\n      this.data = Object.entries(groupBy(json.data, \"key\"));\n\n      this.updateRender();\n      this._renderLines();\n      this._renderVoronoi();\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.updateRender();\n    }\n  }\n\n  updateRender() {\n    const values = this.data.flatMap(x => x[1]);\n\n    this.xScale\n      .rangeRound([0, this.width])\n      .domain(d3.extent(values, d => new Date(d.date)));\n\n    this.yScale\n      .rangeRound([this.height, 0])\n      .domain([0, d3.max(values, d => d.value)]);\n\n    this.color\n      .domain([...new Set(values.map(x => x.key))])\n      .range([\"#F6B128\", \"#F39D96\"]);\n\n    this._renderAxis();\n  }\n\n  _renderLines() {\n    this.line = d3.line()\n      .x(d => this.xScale(new Date(d.date)))\n      .y(d => this.yScale(+d.value));\n    // .curve(curveCatmullRom.alpha(0.5));\n\n    var lines = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"lines\")\n      .selectAll(\"path\")\n      .data(this.data, ([key]) => key)\n      .enter();\n\n    var linesGroup = lines.append(\"g\").attr(\"class\", \"line\");\n\n    linesGroup\n      .append(\"path\")\n      .attr(\"d\", ([, values]) => this.line(values))\n      .attr(\"stroke\", ([key]) => this.color(key));\n\n    linesGroup\n      .append(\"circle\")\n      .attr(\"cx\", ([, values]) => this.xScale(new Date(values[0].date)))\n      .attr(\"cy\", ([, values]) => this.yScale(values[0].value))\n      .attr(\"r\", 5)\n      .attr(\"fill\", ([key]) => this.color(key));\n\n    var linesText = d3.select(this.container)\n      .append(\"div\")\n      .attr(\"class\", \"lines-labels\")\n      .selectAll(\"p\")\n      .data(this.data, ([key]) => key)\n      .enter();\n\n    linesText\n      .append(\"div\")\n      .style(\"right\", \"10px\")\n      .style(\"top\", ([, values]) => this.yScale(values[0].value) + \"px\")\n      .text(([key]) => this._getPlaceType(key));\n  }\n\n  _renderVoronoi() {\n    this.focus = this.svg\n      .append(\"g\")\n      .attr(\"transform\", \"translate(-100,-100)\")\n      .attr(\"class\", \"focus\");\n\n    this.focus\n      .append(\"circle\")\n      .attr(\"fill\", \"white\")\n      .attr(\"r\", 5);\n\n    this.text = this.focus.append(\"text\");\n\n    this.text\n      .append(\"tspan\")\n      .attr(\"y\", -10)\n      .attr(\"x\", 0);\n\n    this.voronoi = voronoi()\n      .x(d => this.xScale(new Date(d.date)))\n      .y(d => this.yScale(+d.value))\n      .extent([\n        [0, 0],\n        [this.width, this.height]\n      ]);\n\n    this.voronoiGroup = this.svg.append(\"g\").attr(\"class\", \"voronoi\");\n\n    this.voronoiGroup\n      .selectAll(\"path\")\n      .data(this.voronoi.polygons(this.data.flatMap(x => x[1])))\n      .enter()\n      .append(\"path\")\n      .attr(\"d\", function(d) {\n        return d ? \"M\" + d.join(\"L\") + \"Z\" : null;\n      })\n      .on(\"mouseover\", this._mouseover.bind(this))\n      .on(\"mouseout\", this._mouseout.bind(this));\n  }\n\n  _mouseover(_, d) {\n    this.focus.select(\"circle\").attr(\"stroke\", this.color(d.data.key));\n\n    this.focus.attr(\n      \"transform\",\n      \"translate(\" +\n        this.xScale(new Date(d.data.date)) +\n        \",\" +\n        this.yScale(+d.data.value) +\n        \")\"\n    );\n\n    const [startDate, endDate] = this.xScale.domain()\n    const middleDate = new Date((startDate.getTime() + endDate.getTime()) / 2);\n\n    this.focus\n      .select(\"text\")\n      .attr(\n        \"text-anchor\",\n        new Date(d.data.date) >= middleDate ? \"end\" : \"start\"\n      );\n\n    const month = d3.timeFormat(\"%b %Y\")(new Date(d.data.date));\n    const value = Number(d.data.value).toLocaleString(I18n.locale, {\n      style: \"percent\",\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2\n    });\n\n    this.focus\n      .select(\"tspan\")\n      .text(`${this._getPlaceType(d.data.key)}: ${value} (${month})`);\n  }\n\n  _mouseout() {\n    this.focus.attr(\"transform\", \"translate(-100,-100)\");\n  }\n\n  _renderAxis() {\n    // X axis\n    this.svg\n      .select(\".x.axis\")\n      .attr(\"transform\", \"translate(0,\" + this.height + \")\");\n\n    this.xAxis\n      .ticks(4)\n      .tickPadding(10)\n      .tickSize(0, 0)\n      .scale(this.xScale);\n\n    this.yAxis\n      .ticks(3)\n      .tickSize(-this.width)\n      .tickFormat(d => d.toLocaleString(I18n.locale, { style: \"percent\" }))\n      .scale(this.yScale);\n\n    this.svg.select(\".x.axis\").call(this.xAxis);\n    this.svg.select(\".y.axis\").call(this.yAxis);\n\n    // Remove the zero\n    this.svg\n      .selectAll(\".y.axis .tick\")\n      .filter(function(d) {\n        return d === 0;\n      })\n      .remove();\n\n    // Move y axis ticks on top of the chart\n    this.svg\n      .selectAll(\".y.axis .tick text\")\n      .attr(\"text-anchor\", \"start\")\n      .attr(\"dx\", \"0.25em\")\n      .attr(\"dy\", \"-0.55em\");\n  }\n\n  _getPlaceType(place) {\n    switch (place.toString()) {\n      case \"3\":\n        return I18n.t(\"gobierto_common.visualizations.country\");\n      case \"2\":\n        return window.populateData.provinceName;\n      case \"1\":\n        return window.populateData.municipalityName;\n    }\n  }\n\n  _width() {\n    return d3.select(this.container).node()\n      ? parseInt(d3.select(this.container).style(\"width\"))\n      : 0;\n  }\n\n  _height() {\n    return this.isMobile ? 200 : 250;\n  }\n\n  _resize() {\n    this.isMobile = window.innerWidth <= 768;\n\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    this.updateRender();\n\n    d3.select(this.container + \" svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom);\n\n    this.svg\n      .select(\".chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    this.svg\n      .selectAll(\".lines path\")\n      .attr(\"d\", ([, values]) => this.line(values));\n\n    this.svg\n      .selectAll(\".lines circle\")\n      .attr(\"cx\", ([, values]) => this.xScale(new Date(values[0].date)))\n      .attr(\"cy\", ([, values]) => this.yScale(values[0].value));\n\n    d3.selectAll(this.container + \" .lines-labels div\").style(\n      \"top\",\n      ([, values]) => this.yScale(values[0].value) + \"px\"\n    );\n\n    this.voronoi.extent([\n      [0, 0],\n      [this.width, this.height]\n    ]);\n\n    this.voronoiGroup\n      .selectAll(\"path\")\n      .data(this.voronoi.polygons(this.data.flatMap(x => x[1])))\n      .attr(\"d\", function(d) {\n        return d ? \"M\" + d.join(\"L\") + \"Z\" : null;\n      });\n  }\n}\n", "import * as d3 from 'd3';\nimport { voronoi } from 'd3-voronoi';\nimport { d3locale, groupBy } from '../../../lib/shared';\n\nexport class VisUnemploymentSex {\n  constructor(divId, city_id) {\n    this.container = divId;\n    this.data = null;\n    this.tbiToken = window.populateData.token;\n\n    this.url =\n      window.populateData.endpoint +\n      `\n      WITH pob_activa AS\n        (SELECT year,\n                SUM(total::integer) AS value\n        FROM poblacion_edad_sexo\n        WHERE place_id = ${city_id}\n          AND sex = 'Total'\n          AND age BETWEEN 16 AND 65\n        GROUP BY year\n        ORDER BY 1 DESC)\n      SELECT paro.year,\n            month,\n            CONCAT(paro.year, '-', month, '-', 1) AS date,\n            paro.sex as key,\n            SUM(paro.value::decimal) / COALESCE(pob_activa.value, (SELECT value FROM pob_activa LIMIT 1)) AS value\n      FROM paro_personas paro\n      LEFT JOIN pob_activa ON paro.year = pob_activa.year\n      WHERE place_id = ${city_id}\n      GROUP BY paro.year,\n              month,\n              paro.sex,\n              pob_activa.value\n      ORDER BY year DESC, month DESC\n      `;\n\n    d3.timeFormatDefaultLocale(d3locale[I18n.locale]);\n\n    this.isMobile = window.innerWidth <= 768;\n\n    // Chart dimensions\n    this.margin = { top: 25, right: 50, bottom: 25, left: 20 };\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    // Scales & Ranges\n    this.xScale = d3.scaleTime();\n    this.yScale = d3.scaleLinear();\n    this.color = d3.scaleOrdinal();\n\n    // Create axes\n    this.xAxis = d3.axisBottom();\n    this.yAxis = d3.axisLeft();\n\n    // Chart objects\n    this.svg = null;\n\n    // Create main elements\n    this.svg = d3.select(this.container)\n      .append(\"svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom)\n      .append(\"g\")\n      .attr(\"class\", \"chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    // Append axes containers\n    this.svg.append(\"g\").attr(\"class\", \"x axis\");\n    this.svg.append(\"g\").attr(\"class\", \"y axis\");\n\n    d3.select(window).on(\"resize.\" + this.container, () => {\n      if (this.data) {\n        this._resize();\n      }\n    });\n  }\n\n  handlePromise(url, opts = {}) {\n    return d3.json(url, {\n      headers: new Headers({ authorization: \"Bearer \" + this.tbiToken }),\n      ...opts\n    });\n  }\n\n  getData() {\n    var data = this.handlePromise(this.url);\n\n    data.then(json => {\n      this.data = Object.entries(groupBy(json.data, \"key\"));\n\n      this.updateRender();\n      this._renderLines();\n      this._renderVoronoi();\n    });\n  }\n\n  render() {\n    if (this.data === null) {\n      this.getData();\n    } else {\n      this.updateRender();\n    }\n  }\n\n  updateRender() {\n    const values = this.data.flatMap(x => x[1]);\n\n    this.xScale\n      .rangeRound([0, this.width])\n      .domain(d3.extent(values, d => new Date(d.date)));\n\n    this.yScale\n      .rangeRound([this.height, 0])\n      .domain([0, d3.max(values, d => d.value)]);\n\n    this.color\n      .domain([...new Set(values.map(x => x.key))])\n      .range([\"#F6B128\", \"#007382\"]);\n\n    this._renderAxis();\n  }\n\n  _renderLines() {\n    this.line = d3.line()\n      .x(d => this.xScale(new Date(d.date)))\n      .y(d => this.yScale(+d.value));\n\n    var lines = this.svg\n      .append(\"g\")\n      .attr(\"class\", \"lines\")\n      .selectAll(\"path\")\n      .data(this.data, ([key]) => key)\n      .enter();\n\n    var linesGroup = lines.append(\"g\").attr(\"class\", \"line\");\n\n    linesGroup\n      .append(\"path\")\n      .attr(\"d\", ([, values]) => this.line(values))\n      .attr(\"stroke\", ([key]) => this.color(key));\n\n    linesGroup\n      .append(\"circle\")\n      .attr(\"cx\", ([, values]) => this.xScale(new Date(values[0].date)))\n      .attr(\"cy\", ([, values]) => this.yScale(values[0].value))\n      .attr(\"r\", 5)\n      .attr(\"fill\", ([key]) => this.color(key));\n\n    var linesText = d3.select(this.container)\n      .append(\"div\")\n      .attr(\"class\", \"lines-labels\")\n      .selectAll(\"p\")\n      .data(this.data, ([key]) => key)\n      .enter();\n\n    linesText\n      .append(\"div\")\n      .style(\"right\", \"1px\")\n      .style(\"top\", ([, values]) => this.yScale(values[0].value) + \"px\")\n      .text(([key]) => this._getLabel(key));\n  }\n\n  _renderVoronoi() {\n    // Voronoi\n    this.focus = this.svg\n      .append(\"g\")\n      .attr(\"transform\", \"translate(-100,-100)\")\n      .attr(\"class\", \"focus\");\n\n    this.focus\n      .append(\"circle\")\n      .attr(\"fill\", \"white\")\n      .attr(\"r\", 5);\n\n    this.text = this.focus.append(\"text\");\n\n    this.text\n      .append(\"tspan\")\n      .attr(\"y\", -10)\n      .attr(\"x\", 0);\n\n    this.voronoi = voronoi()\n      .x(d => this.xScale(new Date(d.date)))\n      .y(d => this.yScale(+d.value))\n      .extent([\n        [0, 0],\n        [this.width, this.height]\n      ]);\n\n    this.voronoiGroup = this.svg.append(\"g\").attr(\"class\", \"voronoi\");\n\n    this.voronoiGroup\n      .selectAll(\"path\")\n      .data(this.voronoi.polygons(this.data.flatMap(x => x[1])))\n      .enter()\n      .append(\"path\")\n      .attr(\"d\", function(d) {\n        return d ? \"M\" + d.join(\"L\") + \"Z\" : null;\n      })\n      .on(\"mouseover\", this._mouseover.bind(this))\n      .on(\"mouseout\", this._mouseout.bind(this));\n  }\n\n  _mouseover(_, d) {\n    this.focus.select(\"circle\").attr(\"stroke\", this.color(d.data.key));\n\n    this.focus.attr(\n      \"transform\",\n      \"translate(\" +\n        this.xScale(new Date(d.data.date)) +\n        \",\" +\n        this.yScale(+d.data.value) +\n        \")\"\n    );\n\n    const [startDate, endDate] = this.xScale.domain()\n    const middleDate = new Date((startDate.getTime() + endDate.getTime()) / 2);\n\n    this.focus\n      .select(\"text\")\n      .attr(\n        \"text-anchor\",\n        new Date(d.data.date) >= middleDate ? \"end\" : \"start\"\n      );\n\n    const month = d3.timeFormat(\"%b %Y\")(new Date(d.data.date));\n    const value = Number(d.data.value).toLocaleString(I18n.locale, {\n      style: \"percent\",\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2\n    });\n\n    this.focus\n      .select(\"tspan\")\n      .text(`${this._getLabel(d.data.key)}: ${value} (${month})`);\n  }\n\n  _mouseout() {\n    this.focus.attr(\"transform\", \"translate(-100,-100)\");\n  }\n\n  _getLabel(sex) {\n    switch (sex) {\n      case \"H\":\n        return I18n.t(\"gobierto_common.visualizations.men\");\n      case \"M\":\n        return I18n.t(\"gobierto_common.visualizations.women\");\n    }\n  }\n\n  _renderAxis() {\n    // X axis\n    this.svg\n      .select(\".x.axis\")\n      .attr(\"transform\", \"translate(0,\" + this.height + \")\");\n\n    this.xAxis\n      .tickPadding(5)\n      .tickSize(0, 0)\n      .ticks(4)\n      .scale(this.xScale);\n\n    this.svg.select(\".x.axis\").call(this.xAxis);\n\n    // Y axis\n    this.yAxis\n      .ticks(3)\n      .tickSize(-this.width)\n      .tickFormat(d => d.toLocaleString(I18n.locale, { style: \"percent\" }))\n      .scale(this.yScale);\n\n    this.svg.select(\".y.axis\").call(this.yAxis);\n\n    // Remove the zero\n    this.svg\n      .selectAll(\".y.axis .tick\")\n      .filter(function(d) {\n        return d === 0;\n      })\n      .remove();\n\n    // Move y axis ticks on top of the chart\n    this.svg\n      .selectAll(\".y.axis .tick text\")\n      .attr(\"text-anchor\", \"start\")\n      .attr(\"dx\", \"0.25em\")\n      .attr(\"dy\", \"-0.55em\");\n  }\n\n  _width() {\n    return d3.select(this.container).node()\n      ? parseInt(d3.select(this.container).style(\"width\"))\n      : 0;\n  }\n\n  _height() {\n    return this.isMobile ? 200 : 250;\n  }\n\n  _resize() {\n    this.isMobile = window.innerWidth <= 768;\n\n    this.width = this._width() - this.margin.left - this.margin.right;\n    this.height = this._height() - this.margin.top - this.margin.bottom;\n\n    this.updateRender();\n\n    d3.select(this.container + \" svg\")\n      .attr(\"width\", this.width + this.margin.left + this.margin.right)\n      .attr(\"height\", this.height + this.margin.top + this.margin.bottom);\n\n    this.svg\n      .select(\".chart-container\")\n      .attr(\n        \"transform\",\n        \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\"\n      );\n\n    this.svg\n      .selectAll(\".lines path\")\n      .attr(\"d\", ([, values]) => this.line(values));\n\n    this.svg\n      .selectAll(\".lines circle\")\n      .attr(\"cx\", ([, values]) => this.xScale(new Date(values[0].date)))\n      .attr(\"cy\", ([, values]) => this.yScale(values[0].value));\n\n    d3.selectAll(this.container + \" .lines-labels div\").style(\n      \"top\",\n      ([, values]) => this.yScale(values[0].value) + \"px\"\n    );\n\n    this.voronoi.extent([\n      [0, 0],\n      [this.width, this.height]\n    ]);\n\n    this.voronoiGroup\n      .selectAll(\"path\")\n      .data(this.voronoi.polygons(this.data.flatMap(x => x[1])))\n      .attr(\"d\", function(d) {\n        return d ? \"M\" + d.join(\"L\") + \"Z\" : null;\n      });\n  }\n}\n", "window.GobiertoAdmin.ContentBlocksController = (function() {\n  function ContentBlocksController() {}\n\n  ContentBlocksController.prototype.edit = function(wrapper, namespace) {\n    GobiertoAdmin.dynamic_content_component.handle(wrapper, namespace);\n  };\n\n  return ContentBlocksController;\n})();\n\nwindow.GobiertoAdmin.content_blocks_controller = new GobiertoAdmin.ContentBlocksController;\n", "window.GobiertoAdmin.DirtyFormsComponent = (function() {\n  var isDirty;\n  var t1, t2;\n\n  function DirtyFormsComponent() {}\n\n  DirtyFormsComponent.prototype.handle = function(message) {\n    $(document).on(\"turbolinks:load\", _handleDirtyFlag);\n\n    $(document).on(\"turbolinks:before-visit\", function() {\n      if (isDirty) { return confirm(message); }\n    });\n\n    $(window).on(\"beforeunload\", function() {\n      if (isDirty) { return message; }\n    });\n  };\n\n  function _handleDirtyFlag() {\n    isDirty = false;\n    var date = new Date();\n    t1 = date.getTime();\n\n    var checkingForm = $(\"form:not(.skip-dirty-check)\");\n\n    checkingForm.on(\"submit\", _unsetDirty);\n    checkingForm.on(\"change\", \"input, select, textarea\", _setDirty);\n    checkingForm.on(\"datepicker-change\", _setDirty);\n  }\n\n  function _setDirty(e) {\n    var $target = $(e.target);\n    if ($target.data('skip-dirty-check') === undefined){\n      var date = new Date();\n      t2 = date.getTime();\n      // For some reason, when the WYSIWYG has an image, it triggers a trix-change event.\n      // Here, we check if the time difference between the load and the event is big than 1 sec.\n      if (t2 - t1 > 1000) {\n        isDirty = true;\n      }\n    }\n  }\n\n  function _unsetDirty() {\n    isDirty = false;\n  }\n\n  return DirtyFormsComponent;\n})();\n\nwindow.GobiertoAdmin.dirty_forms_component = new GobiertoAdmin.DirtyFormsComponent;\n", "import Cleave from 'cleave.js'\nimport 'geocomplete'\n\nwindow.GobiertoAdmin.DynamicContentComponent = (function() {\n  function DynamicContentComponent() {}\n\n  DynamicContentComponent.prototype.handle = function(wrapper, namespace) {\n    handleAddChild(wrapper, namespace);\n    handleAddRecord(wrapper);\n    handleCancelRecord(wrapper);\n    handleEditRecord(wrapper);\n    handleDeleteRecord(wrapper);\n  };\n\n  function initializeRecordFields(wrapper) {\n    var componentWrapper = $(wrapper || \".dynamic-content-wrapper\");\n    var componentLocale = componentWrapper.data(\"locale\");\n\n    _handleGeocompleteBehavior(componentWrapper.find(\"input[data-behavior=geocomplete]\"));\n    _handleDateType(componentWrapper.find(\"input[data-type=date]\"), componentLocale);\n    _handleCurrencyType(componentWrapper.find(\"input[data-type=currency]\"));\n  }\n\n  function handleAddChild(wrapper, namespace) {\n    var componentWrapper = $(wrapper || \".dynamic-content-wrapper\");\n    var componentLocale = componentWrapper.data(\"locale\");\n\n    componentWrapper.on(\"click\", \"[data-behavior=add_child]\", function(e) {\n      e.preventDefault();\n\n      var eventWrapper = $(this).closest(\".dynamic-content-wrapper\");\n      var recordTemplate = eventWrapper.find(\".dynamic-content-record-wrapper:visible:last\");\n\n      var fieldNameRegExp = new RegExp(\"\\\\[\" + namespace + \"\\\\]\\\\[\\\\d+\\\\]\", \"i\");\n      var fieldIdRegExp = new RegExp(\"_\" + namespace + \"_\\\\d+\", \"i\");\n      var contentBlockRecordRegExp = new RegExp(\"content-block-record-\\\\d+\", \"i\");\n      var randomId = new Date().getTime();\n      var uniqueFieldName = \"[\" + namespace + \"][\" + randomId + \"]\";\n      var uniqueFieldId = \"_\" + namespace + \"_\" + randomId;\n\n      var clonedField = $(recordTemplate)\n        .clone()\n        .addClass(\"cloned-dynamic-content-record-wrapper\")\n        .removeClass(function() {\n          var contentBlockRecordClass;\n\n          $.each($(this).attr(\"class\").split(\" \"), function(_, value) {\n            if (contentBlockRecordRegExp.test(value)) {\n              contentBlockRecordClass = value;\n              return false;\n            }\n          });\n\n          return contentBlockRecordClass;\n        });\n\n      clonedField.find(\"input, textarea, select\").each(function() {\n        var fieldName = $(this).attr(\"name\");\n        var fieldId = $(this).attr(\"id\");\n\n        if (fieldName !== undefined) {\n          $(this).attr(\"name\", fieldName.replace(fieldNameRegExp, uniqueFieldName));\n        }\n\n        if (fieldId !== undefined) {\n          $(this).attr(\"id\", fieldId.replace(fieldIdRegExp, uniqueFieldId));\n        }\n\n        _cleanupRecordField($(this));\n        _initializeRecordField($(this), componentLocale);\n      });\n\n      clonedField.find(\"label\").each(function() {\n        var labelFor = $(this).attr(\"for\");\n\n        $(this).attr(\"for\", labelFor.replace(fieldIdRegExp, uniqueFieldId));\n      });\n\n      $(recordTemplate).after(clonedField);\n      // Display after render\n      _switchToRecordForm(clonedField);\n\n      clonedField.find('[data-remove-component=\"true\"]').remove();\n      clonedField.find('[type=checkbox][data-clear-value=\"true\"]').prop('checked', false);\n      clonedField.find(\"input:visible:first\").focus();\n      clonedField.find('span[data-class=\"attachment_link_placeholder\"]').removeClass('hidden');\n      clonedField.find('span[data-class=\"attachment_link_placeholder\"]').html('-');\n    });\n  }\n\n  function handleCancelRecord(wrapper) {\n    var componentWrapper = $(wrapper || \".dynamic-content-wrapper\");\n\n    componentWrapper.on(\"click\", \"[data-behavior=cancel_record]\", function(e) {\n      e.preventDefault();\n\n      $(this).closest(\".cloned-dynamic-content-record-wrapper\").remove();\n\n      var eventWrapper = $(this).closest(\".dynamic-content-record-wrapper\");\n\n      _setRecordFormState(eventWrapper);\n      _switchToRecordView(eventWrapper);\n    });\n  }\n\n  function handleEditRecord(wrapper) {\n    var componentWrapper = $(wrapper || \".dynamic-content-wrapper\");\n\n    componentWrapper.on(\"click\", \"[data-behavior=edit_record]\", function(e) {\n      e.preventDefault();\n\n      var eventWrapper = $(this).closest(\".dynamic-content-record-wrapper\");\n\n      _switchToRecordForm(eventWrapper);\n    });\n  }\n\n  function handleDeleteRecord(wrapper) {\n    var componentWrapper = $(wrapper || \".dynamic-content-wrapper\");\n\n    componentWrapper.on(\"click\", \"[data-behavior=delete_record]\", function(e) {\n      e.preventDefault();\n\n      var eventWrapper = $(this).closest(\".dynamic-content-record-wrapper\");\n      var deleteFlag = eventWrapper.find(\"input.destroy-content-block-record\");\n\n      deleteFlag.prop(\"checked\", true);\n      eventWrapper.hide();\n    });\n  }\n\n  function handleAddRecord(wrapper) {\n    var componentWrapper = $(wrapper || \".dynamic-content-wrapper\");\n\n    componentWrapper.on(\"click\", \"[data-behavior=add_record]\", function(e) {\n      e.preventDefault();\n\n      var eventWrapper = $(this).closest(\".dynamic-content-record-wrapper\");\n\n      _setRecordViewState(eventWrapper);\n      _switchToRecordView(eventWrapper);\n\n      var attachment_input = eventWrapper.find('input[type=\"file\"]');\n      var delete_attachment = eventWrapper.find('[data-behavior=\"remove_attachment\"]');\n      var attachmentLink = eventWrapper.find('a[data-class=\"attachment_link\"]');\n      var attachmentLinkPlaceholder = eventWrapper.find('span[data-class=\"attachment_link_placeholder\"]');\n\n      if (delete_attachment.is(':checked')) {\n        attachmentLink.hide();\n        attachmentLinkPlaceholder.show();\n      } else if (attachmentLink.length) {\n        attachmentLink.show();\n        attachmentLinkPlaceholder.hide();\n      }\n\n      if (attachment_input.val() !== '' && \"undefined\" !== typeof attachment_input.val()) {\n        var attachment_name = attachment_input.val().replace(/C:\\\\fakepath\\\\/i, '');\n        attachmentLink.hide();\n        attachmentLinkPlaceholder.html(attachment_name);\n      }\n    });\n  }\n\n  function _cleanupRecordField(selector) {\n    if ( (selector.attr(\"type\") === \"hidden\") && !(selector.attr(\"data-clear-value\") === \"true\") ) {\n      return true;\n    }\n\n    if (selector.attr(\"type\") === \"select\") {\n      selector.find(\"option:selected\").prop(\"selected\", false);\n    } else {\n      selector.val(\"\");\n    }\n  }\n\n  function _initializeRecordField(selector, locale) {\n    if (selector.data(\"behavior\") === \"geocomplete\") {\n      _handleGeocompleteBehavior(selector);\n    }\n\n    if (selector.data(\"type\") === \"date\") {\n      _handleDateType(selector, locale);\n    }\n\n    if (selector.data(\"type\") === \"currency\") {\n      _handleCurrencyType(selector);\n    }\n  }\n\n  function _handleGeocompleteBehavior(selector) {\n    if (!selector.length) {\n      return true;\n    }\n\n    selector.geocomplete({\n      details: \".content-block-field\",\n      detailsAttribute: \"data-geo\",\n      componentRestrictions: { country: \"es\" }\n    });\n  }\n\n  function _handleDateType(selector, locale) {\n    if (!selector.length) {\n      return true;\n    }\n\n    selector.datepicker({\n      language: locale,\n      autoClose: true,\n      onSelect: function onSelect(a, b, instance) {\n        $(instance.el).trigger(\"datepicker-change\");\n      }\n    });\n  }\n\n  function _handleCurrencyType(selector) {\n    if (!selector.length) {\n      return true;\n    }\n\n    new Cleave(selector, {\n      numeral: true,\n      numeralThousandsGroupStyle: \"thousand\",\n      numeralDecimalMark: I18n.t('number.currency.format.separator'),\n      delimiter: I18n.t('number.currency.format.delimiter')\n    });\n  }\n\n  function _switchToRecordForm(wrapper) {\n    initializeRecordFields(wrapper);\n\n    wrapper.find(\".dynamic-content-record-view\").hide();\n    wrapper.find(\".dynamic-content-record-form\").show();\n    wrapper.find(\".dynamic-content-record-form input:visible:first\").focus();\n  }\n\n  function _switchToRecordView(wrapper) {\n    wrapper.find(\".dynamic-content-record-form\").hide();\n    wrapper.find(\".dynamic-content-record-view\").show();\n  }\n\n  function _setRecordViewState(wrapper) {\n    var formState = wrapper.find(\".content-block-field input, select option:selected\").map(function() {\n      return $(this).text() || $(this).val();\n    });\n\n    wrapper.find(\".dynamic-content-record-view .content-block-record-value\").each(function(index) {\n      var fieldText = formState[index];\n      var urlPattern = new RegExp('^https?://.*$')\n\n      if (urlPattern.test(fieldText)) {\n        $(this).html('<a href=\"' + fieldText + '\">' + fieldText + '</a>');\n      } else {\n        $(this).html(fieldText);\n      }\n    });\n  }\n\n  function _setRecordFormState(wrapper) {\n    var viewState = wrapper.find(\".dynamic-content-record-view .content-block-record-value\").map(function() {\n      return $(this).html();\n    });\n\n    wrapper.find(\".content-block-field input\").each(function(index) {\n      $(this).val(viewState[index]);\n    });\n  }\n\n  return DynamicContentComponent;\n})();\n\nwindow.GobiertoAdmin.dynamic_content_component = new GobiertoAdmin.DynamicContentComponent;\n", "var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar NumeralFormatter = function (numeralDecimalMark,\n                                 numeralIntegerScale,\n                                 numeralDecimalScale,\n                                 numeralThousandsGroupStyle,\n                                 numeralPositiveOnly,\n                                 stripLeadingZeroes,\n                                 prefix,\n                                 signBeforePrefix,\n                                 tailPrefix,\n                                 delimiter) {\n    var owner = this;\n\n    owner.numeralDecimalMark = numeralDecimalMark || '.';\n    owner.numeralIntegerScale = numeralIntegerScale > 0 ? numeralIntegerScale : 0;\n    owner.numeralDecimalScale = numeralDecimalScale >= 0 ? numeralDecimalScale : 2;\n    owner.numeralThousandsGroupStyle = numeralThousandsGroupStyle || NumeralFormatter.groupStyle.thousand;\n    owner.numeralPositiveOnly = !!numeralPositiveOnly;\n    owner.stripLeadingZeroes = stripLeadingZeroes !== false;\n    owner.prefix = (prefix || prefix === '') ? prefix : '';\n    owner.signBeforePrefix = !!signBeforePrefix;\n    owner.tailPrefix = !!tailPrefix;\n    owner.delimiter = (delimiter || delimiter === '') ? delimiter : ',';\n    owner.delimiterRE = delimiter ? new RegExp('\\\\' + delimiter, 'g') : '';\n};\n\nNumeralFormatter.groupStyle = {\n    thousand: 'thousand',\n    lakh:     'lakh',\n    wan:      'wan',\n    none:     'none'    \n};\n\nNumeralFormatter.prototype = {\n    getRawValue: function (value) {\n        return value.replace(this.delimiterRE, '').replace(this.numeralDecimalMark, '.');\n    },\n\n    format: function (value) {\n        var owner = this, parts, partSign, partSignAndPrefix, partInteger, partDecimal = '';\n\n        // strip alphabet letters\n        value = value.replace(/[A-Za-z]/g, '')\n            // replace the first decimal mark with reserved placeholder\n            .replace(owner.numeralDecimalMark, 'M')\n\n            // strip non numeric letters except minus and \"M\"\n            // this is to ensure prefix has been stripped\n            .replace(/[^\\dM-]/g, '')\n\n            // replace the leading minus with reserved placeholder\n            .replace(/^\\-/, 'N')\n\n            // strip the other minus sign (if present)\n            .replace(/\\-/g, '')\n\n            // replace the minus sign (if present)\n            .replace('N', owner.numeralPositiveOnly ? '' : '-')\n\n            // replace decimal mark\n            .replace('M', owner.numeralDecimalMark);\n\n        // strip any leading zeros\n        if (owner.stripLeadingZeroes) {\n            value = value.replace(/^(-)?0+(?=\\d)/, '$1');\n        }\n\n        partSign = value.slice(0, 1) === '-' ? '-' : '';\n        if (typeof owner.prefix != 'undefined') {\n            if (owner.signBeforePrefix) {\n                partSignAndPrefix = partSign + owner.prefix;\n            } else {\n                partSignAndPrefix = owner.prefix + partSign;\n            }\n        } else {\n            partSignAndPrefix = partSign;\n        }\n        \n        partInteger = value;\n\n        if (value.indexOf(owner.numeralDecimalMark) >= 0) {\n            parts = value.split(owner.numeralDecimalMark);\n            partInteger = parts[0];\n            partDecimal = owner.numeralDecimalMark + parts[1].slice(0, owner.numeralDecimalScale);\n        }\n\n        if(partSign === '-') {\n            partInteger = partInteger.slice(1);\n        }\n\n        if (owner.numeralIntegerScale > 0) {\n          partInteger = partInteger.slice(0, owner.numeralIntegerScale);\n        }\n\n        switch (owner.numeralThousandsGroupStyle) {\n        case NumeralFormatter.groupStyle.lakh:\n            partInteger = partInteger.replace(/(\\d)(?=(\\d\\d)+\\d$)/g, '$1' + owner.delimiter);\n\n            break;\n\n        case NumeralFormatter.groupStyle.wan:\n            partInteger = partInteger.replace(/(\\d)(?=(\\d{4})+$)/g, '$1' + owner.delimiter);\n\n            break;\n\n        case NumeralFormatter.groupStyle.thousand:\n            partInteger = partInteger.replace(/(\\d)(?=(\\d{3})+$)/g, '$1' + owner.delimiter);\n\n            break;\n        }\n\n        if (owner.tailPrefix) {\n            return partSign + partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '') + owner.prefix;\n        }\n\n        return partSignAndPrefix + partInteger.toString() + (owner.numeralDecimalScale > 0 ? partDecimal.toString() : '');\n    }\n};\n\nvar NumeralFormatter_1 = NumeralFormatter;\n\nvar DateFormatter = function (datePattern, dateMin, dateMax) {\n    var owner = this;\n\n    owner.date = [];\n    owner.blocks = [];\n    owner.datePattern = datePattern;\n    owner.dateMin = dateMin\n      .split('-')\n      .reverse()\n      .map(function(x) {\n        return parseInt(x, 10);\n      });\n    if (owner.dateMin.length === 2) owner.dateMin.unshift(0);\n\n    owner.dateMax = dateMax\n      .split('-')\n      .reverse()\n      .map(function(x) {\n        return parseInt(x, 10);\n      });\n    if (owner.dateMax.length === 2) owner.dateMax.unshift(0);\n    \n    owner.initBlocks();\n};\n\nDateFormatter.prototype = {\n    initBlocks: function () {\n        var owner = this;\n        owner.datePattern.forEach(function (value) {\n            if (value === 'Y') {\n                owner.blocks.push(4);\n            } else {\n                owner.blocks.push(2);\n            }\n        });\n    },\n\n    getISOFormatDate: function () {\n        var owner = this,\n            date = owner.date;\n\n        return date[2] ? (\n            date[2] + '-' + owner.addLeadingZero(date[1]) + '-' + owner.addLeadingZero(date[0])\n        ) : '';\n    },\n\n    getBlocks: function () {\n        return this.blocks;\n    },\n\n    getValidatedDate: function (value) {\n        var owner = this, result = '';\n\n        value = value.replace(/[^\\d]/g, '');\n\n        owner.blocks.forEach(function (length, index) {\n            if (value.length > 0) {\n                var sub = value.slice(0, length),\n                    sub0 = sub.slice(0, 1),\n                    rest = value.slice(length);\n\n                switch (owner.datePattern[index]) {\n                case 'd':\n                    if (sub === '00') {\n                        sub = '01';\n                    } else if (parseInt(sub0, 10) > 3) {\n                        sub = '0' + sub0;\n                    } else if (parseInt(sub, 10) > 31) {\n                        sub = '31';\n                    }\n\n                    break;\n\n                case 'm':\n                    if (sub === '00') {\n                        sub = '01';\n                    } else if (parseInt(sub0, 10) > 1) {\n                        sub = '0' + sub0;\n                    } else if (parseInt(sub, 10) > 12) {\n                        sub = '12';\n                    }\n\n                    break;\n                }\n\n                result += sub;\n\n                // update remaining string\n                value = rest;\n            }\n        });\n\n        return this.getFixedDateString(result);\n    },\n\n    getFixedDateString: function (value) {\n        var owner = this, datePattern = owner.datePattern, date = [],\n            dayIndex = 0, monthIndex = 0, yearIndex = 0,\n            dayStartIndex = 0, monthStartIndex = 0, yearStartIndex = 0,\n            day, month, year, fullYearDone = false;\n\n        // mm-dd || dd-mm\n        if (value.length === 4 && datePattern[0].toLowerCase() !== 'y' && datePattern[1].toLowerCase() !== 'y') {\n            dayStartIndex = datePattern[0] === 'd' ? 0 : 2;\n            monthStartIndex = 2 - dayStartIndex;\n            day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);\n            month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n\n            date = this.getFixedDate(day, month, 0);\n        }\n\n        // yyyy-mm-dd || yyyy-dd-mm || mm-dd-yyyy || dd-mm-yyyy || dd-yyyy-mm || mm-yyyy-dd\n        if (value.length === 8) {\n            datePattern.forEach(function (type, index) {\n                switch (type) {\n                case 'd':\n                    dayIndex = index;\n                    break;\n                case 'm':\n                    monthIndex = index;\n                    break;\n                default:\n                    yearIndex = index;\n                    break;\n                }\n            });\n\n            yearStartIndex = yearIndex * 2;\n            dayStartIndex = (dayIndex <= yearIndex) ? dayIndex * 2 : (dayIndex * 2 + 2);\n            monthStartIndex = (monthIndex <= yearIndex) ? monthIndex * 2 : (monthIndex * 2 + 2);\n\n            day = parseInt(value.slice(dayStartIndex, dayStartIndex + 2), 10);\n            month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n            year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);\n\n            fullYearDone = value.slice(yearStartIndex, yearStartIndex + 4).length === 4;\n\n            date = this.getFixedDate(day, month, year);\n        }\n\n        // mm-yy || yy-mm\n        if (value.length === 4 && (datePattern[0] === 'y' || datePattern[1] === 'y')) {\n            monthStartIndex = datePattern[0] === 'm' ? 0 : 2;\n            yearStartIndex = 2 - monthStartIndex;\n            month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n            year = parseInt(value.slice(yearStartIndex, yearStartIndex + 2), 10);\n\n            fullYearDone = value.slice(yearStartIndex, yearStartIndex + 2).length === 2;\n\n            date = [0, month, year];\n        }\n\n        // mm-yyyy || yyyy-mm\n        if (value.length === 6 && (datePattern[0] === 'Y' || datePattern[1] === 'Y')) {\n            monthStartIndex = datePattern[0] === 'm' ? 0 : 4;\n            yearStartIndex = 2 - 0.5 * monthStartIndex;\n            month = parseInt(value.slice(monthStartIndex, monthStartIndex + 2), 10);\n            year = parseInt(value.slice(yearStartIndex, yearStartIndex + 4), 10);\n\n            fullYearDone = value.slice(yearStartIndex, yearStartIndex + 4).length === 4;\n\n            date = [0, month, year];\n        }\n\n        date = owner.getRangeFixedDate(date);\n        owner.date = date;\n\n        var result = date.length === 0 ? value : datePattern.reduce(function (previous, current) {\n            switch (current) {\n            case 'd':\n                return previous + (date[0] === 0 ? '' : owner.addLeadingZero(date[0]));\n            case 'm':\n                return previous + (date[1] === 0 ? '' : owner.addLeadingZero(date[1]));\n            case 'y':\n                return previous + (fullYearDone ? owner.addLeadingZeroForYear(date[2], false) : '');\n            case 'Y':\n                return previous + (fullYearDone ? owner.addLeadingZeroForYear(date[2], true) : '');\n            }\n        }, '');\n\n        return result;\n    },\n\n    getRangeFixedDate: function (date) {\n        var owner = this,\n            datePattern = owner.datePattern,\n            dateMin = owner.dateMin || [],\n            dateMax = owner.dateMax || [];\n\n        if (!date.length || (dateMin.length < 3 && dateMax.length < 3)) return date;\n\n        if (\n          datePattern.find(function(x) {\n            return x.toLowerCase() === 'y';\n          }) &&\n          date[2] === 0\n        ) return date;\n\n        if (dateMax.length && (dateMax[2] < date[2] || (\n          dateMax[2] === date[2] && (dateMax[1] < date[1] || (\n            dateMax[1] === date[1] && dateMax[0] < date[0]\n          ))\n        ))) return dateMax;\n\n        if (dateMin.length && (dateMin[2] > date[2] || (\n          dateMin[2] === date[2] && (dateMin[1] > date[1] || (\n            dateMin[1] === date[1] && dateMin[0] > date[0]\n          ))\n        ))) return dateMin;\n\n        return date;\n    },\n\n    getFixedDate: function (day, month, year) {\n        day = Math.min(day, 31);\n        month = Math.min(month, 12);\n        year = parseInt((year || 0), 10);\n\n        if ((month < 7 && month % 2 === 0) || (month > 8 && month % 2 === 1)) {\n            day = Math.min(day, month === 2 ? (this.isLeapYear(year) ? 29 : 28) : 30);\n        }\n\n        return [day, month, year];\n    },\n\n    isLeapYear: function (year) {\n        return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n    },\n\n    addLeadingZero: function (number) {\n        return (number < 10 ? '0' : '') + number;\n    },\n\n    addLeadingZeroForYear: function (number, fullYearMode) {\n        if (fullYearMode) {\n            return (number < 10 ? '000' : (number < 100 ? '00' : (number < 1000 ? '0' : ''))) + number;\n        }\n\n        return (number < 10 ? '0' : '') + number;\n    }\n};\n\nvar DateFormatter_1 = DateFormatter;\n\nvar TimeFormatter = function (timePattern, timeFormat) {\n    var owner = this;\n\n    owner.time = [];\n    owner.blocks = [];\n    owner.timePattern = timePattern;\n    owner.timeFormat = timeFormat;\n    owner.initBlocks();\n};\n\nTimeFormatter.prototype = {\n    initBlocks: function () {\n        var owner = this;\n        owner.timePattern.forEach(function () {\n            owner.blocks.push(2);\n        });\n    },\n\n    getISOFormatTime: function () {\n        var owner = this,\n            time = owner.time;\n\n        return time[2] ? (\n            owner.addLeadingZero(time[0]) + ':' + owner.addLeadingZero(time[1]) + ':' + owner.addLeadingZero(time[2])\n        ) : '';\n    },\n\n    getBlocks: function () {\n        return this.blocks;\n    },\n\n    getTimeFormatOptions: function () {\n        var owner = this;\n        if (String(owner.timeFormat) === '12') {\n            return {\n                maxHourFirstDigit: 1,\n                maxHours: 12,\n                maxMinutesFirstDigit: 5,\n                maxMinutes: 60\n            };\n        }\n\n        return {\n            maxHourFirstDigit: 2,\n            maxHours: 23,\n            maxMinutesFirstDigit: 5,\n            maxMinutes: 60\n        };\n    },\n\n    getValidatedTime: function (value) {\n        var owner = this, result = '';\n\n        value = value.replace(/[^\\d]/g, '');\n\n        var timeFormatOptions = owner.getTimeFormatOptions();\n\n        owner.blocks.forEach(function (length, index) {\n            if (value.length > 0) {\n                var sub = value.slice(0, length),\n                    sub0 = sub.slice(0, 1),\n                    rest = value.slice(length);\n\n                switch (owner.timePattern[index]) {\n\n                case 'h':\n                    if (parseInt(sub0, 10) > timeFormatOptions.maxHourFirstDigit) {\n                        sub = '0' + sub0;\n                    } else if (parseInt(sub, 10) > timeFormatOptions.maxHours) {\n                        sub = timeFormatOptions.maxHours + '';\n                    }\n\n                    break;\n\n                case 'm':\n                case 's':\n                    if (parseInt(sub0, 10) > timeFormatOptions.maxMinutesFirstDigit) {\n                        sub = '0' + sub0;\n                    } else if (parseInt(sub, 10) > timeFormatOptions.maxMinutes) {\n                        sub = timeFormatOptions.maxMinutes + '';\n                    }\n                    break;\n                }\n\n                result += sub;\n\n                // update remaining string\n                value = rest;\n            }\n        });\n\n        return this.getFixedTimeString(result);\n    },\n\n    getFixedTimeString: function (value) {\n        var owner = this, timePattern = owner.timePattern, time = [],\n            secondIndex = 0, minuteIndex = 0, hourIndex = 0,\n            secondStartIndex = 0, minuteStartIndex = 0, hourStartIndex = 0,\n            second, minute, hour;\n\n        if (value.length === 6) {\n            timePattern.forEach(function (type, index) {\n                switch (type) {\n                case 's':\n                    secondIndex = index * 2;\n                    break;\n                case 'm':\n                    minuteIndex = index * 2;\n                    break;\n                case 'h':\n                    hourIndex = index * 2;\n                    break;\n                }\n            });\n\n            hourStartIndex = hourIndex;\n            minuteStartIndex = minuteIndex;\n            secondStartIndex = secondIndex;\n\n            second = parseInt(value.slice(secondStartIndex, secondStartIndex + 2), 10);\n            minute = parseInt(value.slice(minuteStartIndex, minuteStartIndex + 2), 10);\n            hour = parseInt(value.slice(hourStartIndex, hourStartIndex + 2), 10);\n\n            time = this.getFixedTime(hour, minute, second);\n        }\n\n        if (value.length === 4 && owner.timePattern.indexOf('s') < 0) {\n            timePattern.forEach(function (type, index) {\n                switch (type) {\n                case 'm':\n                    minuteIndex = index * 2;\n                    break;\n                case 'h':\n                    hourIndex = index * 2;\n                    break;\n                }\n            });\n\n            hourStartIndex = hourIndex;\n            minuteStartIndex = minuteIndex;\n\n            second = 0;\n            minute = parseInt(value.slice(minuteStartIndex, minuteStartIndex + 2), 10);\n            hour = parseInt(value.slice(hourStartIndex, hourStartIndex + 2), 10);\n\n            time = this.getFixedTime(hour, minute, second);\n        }\n\n        owner.time = time;\n\n        return time.length === 0 ? value : timePattern.reduce(function (previous, current) {\n            switch (current) {\n            case 's':\n                return previous + owner.addLeadingZero(time[2]);\n            case 'm':\n                return previous + owner.addLeadingZero(time[1]);\n            case 'h':\n                return previous + owner.addLeadingZero(time[0]);\n            }\n        }, '');\n    },\n\n    getFixedTime: function (hour, minute, second) {\n        second = Math.min(parseInt(second || 0, 10), 60);\n        minute = Math.min(minute, 60);\n        hour = Math.min(hour, 60);\n\n        return [hour, minute, second];\n    },\n\n    addLeadingZero: function (number) {\n        return (number < 10 ? '0' : '') + number;\n    }\n};\n\nvar TimeFormatter_1 = TimeFormatter;\n\nvar PhoneFormatter = function (formatter, delimiter) {\n    var owner = this;\n\n    owner.delimiter = (delimiter || delimiter === '') ? delimiter : ' ';\n    owner.delimiterRE = delimiter ? new RegExp('\\\\' + delimiter, 'g') : '';\n\n    owner.formatter = formatter;\n};\n\nPhoneFormatter.prototype = {\n    setFormatter: function (formatter) {\n        this.formatter = formatter;\n    },\n\n    format: function (phoneNumber) {\n        var owner = this;\n\n        owner.formatter.clear();\n\n        // only keep number and +\n        phoneNumber = phoneNumber.replace(/[^\\d+]/g, '');\n\n        // strip non-leading +\n        phoneNumber = phoneNumber.replace(/^\\+/, 'B').replace(/\\+/g, '').replace('B', '+');\n\n        // strip delimiter\n        phoneNumber = phoneNumber.replace(owner.delimiterRE, '');\n\n        var result = '', current, validated = false;\n\n        for (var i = 0, iMax = phoneNumber.length; i < iMax; i++) {\n            current = owner.formatter.inputDigit(phoneNumber.charAt(i));\n\n            // has ()- or space inside\n            if (/[\\s()-]/g.test(current)) {\n                result = current;\n\n                validated = true;\n            } else {\n                if (!validated) {\n                    result = current;\n                }\n                // else: over length input\n                // it turns to invalid number again\n            }\n        }\n\n        // strip ()\n        // e.g. US: 7161234567 returns (716) 123-4567\n        result = result.replace(/[()]/g, '');\n        // replace library delimiter with user customized delimiter\n        result = result.replace(/[\\s-]/g, owner.delimiter);\n\n        return result;\n    }\n};\n\nvar PhoneFormatter_1 = PhoneFormatter;\n\nvar CreditCardDetector = {\n    blocks: {\n        uatp:          [4, 5, 6],\n        amex:          [4, 6, 5],\n        diners:        [4, 6, 4],\n        discover:      [4, 4, 4, 4],\n        mastercard:    [4, 4, 4, 4],\n        dankort:       [4, 4, 4, 4],\n        instapayment:  [4, 4, 4, 4],\n        jcb15:         [4, 6, 5],\n        jcb:           [4, 4, 4, 4],\n        maestro:       [4, 4, 4, 4],\n        visa:          [4, 4, 4, 4],\n        mir:           [4, 4, 4, 4],\n        unionPay:      [4, 4, 4, 4],\n        general:       [4, 4, 4, 4]\n    },\n\n    re: {\n        // starts with 1; 15 digits, not starts with 1800 (jcb card)\n        uatp: /^(?!1800)1\\d{0,14}/,\n\n        // starts with 34/37; 15 digits\n        amex: /^3[47]\\d{0,13}/,\n\n        // starts with 6011/65/644-649; 16 digits\n        discover: /^(?:6011|65\\d{0,2}|64[4-9]\\d?)\\d{0,12}/,\n\n        // starts with 300-305/309 or 36/38/39; 14 digits\n        diners: /^3(?:0([0-5]|9)|[689]\\d?)\\d{0,11}/,\n\n        // starts with 51-55/2221\u20132720; 16 digits\n        mastercard: /^(5[1-5]\\d{0,2}|22[2-9]\\d{0,1}|2[3-7]\\d{0,2})\\d{0,12}/,\n\n        // starts with 5019/4175/4571; 16 digits\n        dankort: /^(5019|4175|4571)\\d{0,12}/,\n\n        // starts with 637-639; 16 digits\n        instapayment: /^63[7-9]\\d{0,13}/,\n\n        // starts with 2131/1800; 15 digits\n        jcb15: /^(?:2131|1800)\\d{0,11}/,\n\n        // starts with 2131/1800/35; 16 digits\n        jcb: /^(?:35\\d{0,2})\\d{0,12}/,\n\n        // starts with 50/56-58/6304/67; 16 digits\n        maestro: /^(?:5[0678]\\d{0,2}|6304|67\\d{0,2})\\d{0,12}/,\n\n        // starts with 22; 16 digits\n        mir: /^220[0-4]\\d{0,12}/,\n\n        // starts with 4; 16 digits\n        visa: /^4\\d{0,15}/,\n\n        // starts with 62/81; 16 digits\n        unionPay: /^(62|81)\\d{0,14}/\n    },\n\n    getStrictBlocks: function (block) {\n      var total = block.reduce(function (prev, current) {\n        return prev + current;\n      }, 0);\n\n      return block.concat(19 - total);\n    },\n\n    getInfo: function (value, strictMode) {\n        var blocks = CreditCardDetector.blocks,\n            re = CreditCardDetector.re;\n\n        // Some credit card can have up to 19 digits number.\n        // Set strictMode to true will remove the 16 max-length restrain,\n        // however, I never found any website validate card number like\n        // this, hence probably you don't want to enable this option.\n        strictMode = !!strictMode;\n\n        for (var key in re) {\n            if (re[key].test(value)) {\n                var matchedBlocks = blocks[key];\n                return {\n                    type: key,\n                    blocks: strictMode ? this.getStrictBlocks(matchedBlocks) : matchedBlocks\n                };\n            }\n        }\n\n        return {\n            type: 'unknown',\n            blocks: strictMode ? this.getStrictBlocks(blocks.general) : blocks.general\n        };\n    }\n};\n\nvar CreditCardDetector_1 = CreditCardDetector;\n\nvar Util = {\n    noop: function () {\n    },\n\n    strip: function (value, re) {\n        return value.replace(re, '');\n    },\n\n    getPostDelimiter: function (value, delimiter, delimiters) {\n        // single delimiter\n        if (delimiters.length === 0) {\n            return value.slice(-delimiter.length) === delimiter ? delimiter : '';\n        }\n\n        // multiple delimiters\n        var matchedDelimiter = '';\n        delimiters.forEach(function (current) {\n            if (value.slice(-current.length) === current) {\n                matchedDelimiter = current;\n            }\n        });\n\n        return matchedDelimiter;\n    },\n\n    getDelimiterREByDelimiter: function (delimiter) {\n        return new RegExp(delimiter.replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1'), 'g');\n    },\n\n    getNextCursorPosition: function (prevPos, oldValue, newValue, delimiter, delimiters) {\n      // If cursor was at the end of value, just place it back.\n      // Because new value could contain additional chars.\n      if (oldValue.length === prevPos) {\n          return newValue.length;\n      }\n\n      return prevPos + this.getPositionOffset(prevPos, oldValue, newValue, delimiter ,delimiters);\n    },\n\n    getPositionOffset: function (prevPos, oldValue, newValue, delimiter, delimiters) {\n        var oldRawValue, newRawValue, lengthOffset;\n\n        oldRawValue = this.stripDelimiters(oldValue.slice(0, prevPos), delimiter, delimiters);\n        newRawValue = this.stripDelimiters(newValue.slice(0, prevPos), delimiter, delimiters);\n        lengthOffset = oldRawValue.length - newRawValue.length;\n\n        return (lengthOffset !== 0) ? (lengthOffset / Math.abs(lengthOffset)) : 0;\n    },\n\n    stripDelimiters: function (value, delimiter, delimiters) {\n        var owner = this;\n\n        // single delimiter\n        if (delimiters.length === 0) {\n            var delimiterRE = delimiter ? owner.getDelimiterREByDelimiter(delimiter) : '';\n\n            return value.replace(delimiterRE, '');\n        }\n\n        // multiple delimiters\n        delimiters.forEach(function (current) {\n            current.split('').forEach(function (letter) {\n                value = value.replace(owner.getDelimiterREByDelimiter(letter), '');\n            });\n        });\n\n        return value;\n    },\n\n    headStr: function (str, length) {\n        return str.slice(0, length);\n    },\n\n    getMaxLength: function (blocks) {\n        return blocks.reduce(function (previous, current) {\n            return previous + current;\n        }, 0);\n    },\n\n    // strip prefix\n    // Before type  |   After type    |     Return value\n    // PEFIX-...    |   PEFIX-...     |     ''\n    // PREFIX-123   |   PEFIX-123     |     123\n    // PREFIX-123   |   PREFIX-23     |     23\n    // PREFIX-123   |   PREFIX-1234   |     1234\n    getPrefixStrippedValue: function (value, prefix, prefixLength, prevResult, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix) {\n        // No prefix\n        if (prefixLength === 0) {\n          return value;\n        }\n\n        // Value is prefix\n        if (value === prefix && value !== '') {\n          return '';\n        }\n\n        if (signBeforePrefix && (value.slice(0, 1) == '-')) {\n            var prev = (prevResult.slice(0, 1) == '-') ? prevResult.slice(1) : prevResult;\n            return '-' + this.getPrefixStrippedValue(value.slice(1), prefix, prefixLength, prev, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix);\n        }\n\n        // Pre result prefix string does not match pre-defined prefix\n        if (prevResult.slice(0, prefixLength) !== prefix && !tailPrefix) {\n            // Check if the first time user entered something\n            if (noImmediatePrefix && !prevResult && value) return value;\n            return '';\n        } else if (prevResult.slice(-prefixLength) !== prefix && tailPrefix) {\n            // Check if the first time user entered something\n            if (noImmediatePrefix && !prevResult && value) return value;\n            return '';\n        }\n\n        var prevValue = this.stripDelimiters(prevResult, delimiter, delimiters);\n\n        // New value has issue, someone typed in between prefix letters\n        // Revert to pre value\n        if (value.slice(0, prefixLength) !== prefix && !tailPrefix) {\n            return prevValue.slice(prefixLength);\n        } else if (value.slice(-prefixLength) !== prefix && tailPrefix) {\n            return prevValue.slice(0, -prefixLength - 1);\n        }\n\n        // No issue, strip prefix for new value\n        return tailPrefix ? value.slice(0, -prefixLength) : value.slice(prefixLength);\n    },\n\n    getFirstDiffIndex: function (prev, current) {\n        var index = 0;\n\n        while (prev.charAt(index) === current.charAt(index)) {\n            if (prev.charAt(index++) === '') {\n                return -1;\n            }\n        }\n\n        return index;\n    },\n\n    getFormattedValue: function (value, blocks, blocksLength, delimiter, delimiters, delimiterLazyShow) {\n        var result = '',\n            multipleDelimiters = delimiters.length > 0,\n            currentDelimiter = '';\n\n        // no options, normal input\n        if (blocksLength === 0) {\n            return value;\n        }\n\n        blocks.forEach(function (length, index) {\n            if (value.length > 0) {\n                var sub = value.slice(0, length),\n                    rest = value.slice(length);\n\n                if (multipleDelimiters) {\n                    currentDelimiter = delimiters[delimiterLazyShow ? (index - 1) : index] || currentDelimiter;\n                } else {\n                    currentDelimiter = delimiter;\n                }\n\n                if (delimiterLazyShow) {\n                    if (index > 0) {\n                        result += currentDelimiter;\n                    }\n\n                    result += sub;\n                } else {\n                    result += sub;\n\n                    if (sub.length === length && index < blocksLength - 1) {\n                        result += currentDelimiter;\n                    }\n                }\n\n                // update remaining string\n                value = rest;\n            }\n        });\n\n        return result;\n    },\n\n    // move cursor to the end\n    // the first time user focuses on an input with prefix\n    fixPrefixCursor: function (el, prefix, delimiter, delimiters) {\n        if (!el) {\n            return;\n        }\n\n        var val = el.value,\n            appendix = delimiter || (delimiters[0] || ' ');\n\n        if (!el.setSelectionRange || !prefix || (prefix.length + appendix.length) <= val.length) {\n            return;\n        }\n\n        var len = val.length * 2;\n\n        // set timeout to avoid blink\n        setTimeout(function () {\n            el.setSelectionRange(len, len);\n        }, 1);\n    },\n\n    // Check if input field is fully selected\n    checkFullSelection: function(value) {\n      try {\n        var selection = window.getSelection() || document.getSelection() || {};\n        return selection.toString().length === value.length;\n      } catch (ex) {\n        // Ignore\n      }\n\n      return false;\n    },\n\n    setSelection: function (element, position, doc) {\n        if (element !== this.getActiveElement(doc)) {\n            return;\n        }\n\n        // cursor is already in the end\n        if (element && element.value.length <= position) {\n          return;\n        }\n\n        if (element.createTextRange) {\n            var range = element.createTextRange();\n\n            range.move('character', position);\n            range.select();\n        } else {\n            try {\n                element.setSelectionRange(position, position);\n            } catch (e) {\n                // eslint-disable-next-line\n                console.warn('The input element type does not support selection');\n            }\n        }\n    },\n\n    getActiveElement: function(parent) {\n        var activeElement = parent.activeElement;\n        if (activeElement && activeElement.shadowRoot) {\n            return this.getActiveElement(activeElement.shadowRoot);\n        }\n        return activeElement;\n    },\n\n    isAndroid: function () {\n        return navigator && /android/i.test(navigator.userAgent);\n    },\n\n    // On Android chrome, the keyup and keydown events\n    // always return key code 229 as a composition that\n    // buffers the user\u2019s keystrokes\n    // see https://github.com/nosir/cleave.js/issues/147\n    isAndroidBackspaceKeydown: function (lastInputValue, currentInputValue) {\n        if (!this.isAndroid() || !lastInputValue || !currentInputValue) {\n            return false;\n        }\n\n        return currentInputValue === lastInputValue.slice(0, -1);\n    }\n};\n\nvar Util_1 = Util;\n\n/**\n * Props Assignment\n *\n * Separate this, so react module can share the usage\n */\nvar DefaultProperties = {\n    // Maybe change to object-assign\n    // for now just keep it as simple\n    assign: function (target, opts) {\n        target = target || {};\n        opts = opts || {};\n\n        // credit card\n        target.creditCard = !!opts.creditCard;\n        target.creditCardStrictMode = !!opts.creditCardStrictMode;\n        target.creditCardType = '';\n        target.onCreditCardTypeChanged = opts.onCreditCardTypeChanged || (function () {});\n\n        // phone\n        target.phone = !!opts.phone;\n        target.phoneRegionCode = opts.phoneRegionCode || 'AU';\n        target.phoneFormatter = {};\n\n        // time\n        target.time = !!opts.time;\n        target.timePattern = opts.timePattern || ['h', 'm', 's'];\n        target.timeFormat = opts.timeFormat || '24';\n        target.timeFormatter = {};\n\n        // date\n        target.date = !!opts.date;\n        target.datePattern = opts.datePattern || ['d', 'm', 'Y'];\n        target.dateMin = opts.dateMin || '';\n        target.dateMax = opts.dateMax || '';\n        target.dateFormatter = {};\n\n        // numeral\n        target.numeral = !!opts.numeral;\n        target.numeralIntegerScale = opts.numeralIntegerScale > 0 ? opts.numeralIntegerScale : 0;\n        target.numeralDecimalScale = opts.numeralDecimalScale >= 0 ? opts.numeralDecimalScale : 2;\n        target.numeralDecimalMark = opts.numeralDecimalMark || '.';\n        target.numeralThousandsGroupStyle = opts.numeralThousandsGroupStyle || 'thousand';\n        target.numeralPositiveOnly = !!opts.numeralPositiveOnly;\n        target.stripLeadingZeroes = opts.stripLeadingZeroes !== false;\n        target.signBeforePrefix = !!opts.signBeforePrefix;\n        target.tailPrefix = !!opts.tailPrefix;\n\n        // others\n        target.swapHiddenInput = !!opts.swapHiddenInput;\n        \n        target.numericOnly = target.creditCard || target.date || !!opts.numericOnly;\n\n        target.uppercase = !!opts.uppercase;\n        target.lowercase = !!opts.lowercase;\n\n        target.prefix = (target.creditCard || target.date) ? '' : (opts.prefix || '');\n        target.noImmediatePrefix = !!opts.noImmediatePrefix;\n        target.prefixLength = target.prefix.length;\n        target.rawValueTrimPrefix = !!opts.rawValueTrimPrefix;\n        target.copyDelimiter = !!opts.copyDelimiter;\n\n        target.initValue = (opts.initValue !== undefined && opts.initValue !== null) ? opts.initValue.toString() : '';\n\n        target.delimiter =\n            (opts.delimiter || opts.delimiter === '') ? opts.delimiter :\n                (opts.date ? '/' :\n                    (opts.time ? ':' :\n                        (opts.numeral ? ',' :\n                            (opts.phone ? ' ' :\n                                ' '))));\n        target.delimiterLength = target.delimiter.length;\n        target.delimiterLazyShow = !!opts.delimiterLazyShow;\n        target.delimiters = opts.delimiters || [];\n\n        target.blocks = opts.blocks || [];\n        target.blocksLength = target.blocks.length;\n\n        target.root = (typeof commonjsGlobal === 'object' && commonjsGlobal) ? commonjsGlobal : window;\n        target.document = opts.document || target.root.document;\n\n        target.maxLength = 0;\n\n        target.backspace = false;\n        target.result = '';\n\n        target.onValueChanged = opts.onValueChanged || (function () {});\n\n        return target;\n    }\n};\n\nvar DefaultProperties_1 = DefaultProperties;\n\n/**\n * Construct a new Cleave instance by passing the configuration object\n *\n * @param {String | HTMLElement} element\n * @param {Object} opts\n */\nvar Cleave = function (element, opts) {\n    var owner = this;\n    var hasMultipleElements = false;\n\n    if (typeof element === 'string') {\n        owner.element = document.querySelector(element);\n        hasMultipleElements = document.querySelectorAll(element).length > 1;\n    } else {\n      if (typeof element.length !== 'undefined' && element.length > 0) {\n        owner.element = element[0];\n        hasMultipleElements = element.length > 1;\n      } else {\n        owner.element = element;\n      }\n    }\n\n    if (!owner.element) {\n        throw new Error('[cleave.js] Please check the element');\n    }\n\n    if (hasMultipleElements) {\n      try {\n        // eslint-disable-next-line\n        console.warn('[cleave.js] Multiple input fields matched, cleave.js will only take the first one.');\n      } catch (e) {\n        // Old IE\n      }\n    }\n\n    opts.initValue = owner.element.value;\n\n    owner.properties = Cleave.DefaultProperties.assign({}, opts);\n\n    owner.init();\n};\n\nCleave.prototype = {\n    init: function () {\n        var owner = this, pps = owner.properties;\n\n        // no need to use this lib\n        if (!pps.numeral && !pps.phone && !pps.creditCard && !pps.time && !pps.date && (pps.blocksLength === 0 && !pps.prefix)) {\n            owner.onInput(pps.initValue);\n\n            return;\n        }\n\n        pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);\n\n        owner.isAndroid = Cleave.Util.isAndroid();\n        owner.lastInputValue = '';\n        owner.isBackward = '';\n\n        owner.onChangeListener = owner.onChange.bind(owner);\n        owner.onKeyDownListener = owner.onKeyDown.bind(owner);\n        owner.onFocusListener = owner.onFocus.bind(owner);\n        owner.onCutListener = owner.onCut.bind(owner);\n        owner.onCopyListener = owner.onCopy.bind(owner);\n\n        owner.initSwapHiddenInput();\n\n        owner.element.addEventListener('input', owner.onChangeListener);\n        owner.element.addEventListener('keydown', owner.onKeyDownListener);\n        owner.element.addEventListener('focus', owner.onFocusListener);\n        owner.element.addEventListener('cut', owner.onCutListener);\n        owner.element.addEventListener('copy', owner.onCopyListener);\n\n\n        owner.initPhoneFormatter();\n        owner.initDateFormatter();\n        owner.initTimeFormatter();\n        owner.initNumeralFormatter();\n\n        // avoid touch input field if value is null\n        // otherwise Firefox will add red box-shadow for <input required />\n        if (pps.initValue || (pps.prefix && !pps.noImmediatePrefix)) {\n            owner.onInput(pps.initValue);\n        }\n    },\n\n    initSwapHiddenInput: function () {\n        var owner = this, pps = owner.properties;\n        if (!pps.swapHiddenInput) return;\n\n        var inputFormatter = owner.element.cloneNode(true);\n        owner.element.parentNode.insertBefore(inputFormatter, owner.element);\n\n        owner.elementSwapHidden = owner.element;\n        owner.elementSwapHidden.type = 'hidden';\n\n        owner.element = inputFormatter;\n        owner.element.id = '';\n    },\n\n    initNumeralFormatter: function () {\n        var owner = this, pps = owner.properties;\n\n        if (!pps.numeral) {\n            return;\n        }\n\n        pps.numeralFormatter = new Cleave.NumeralFormatter(\n            pps.numeralDecimalMark,\n            pps.numeralIntegerScale,\n            pps.numeralDecimalScale,\n            pps.numeralThousandsGroupStyle,\n            pps.numeralPositiveOnly,\n            pps.stripLeadingZeroes,\n            pps.prefix,\n            pps.signBeforePrefix,\n            pps.tailPrefix,\n            pps.delimiter\n        );\n    },\n\n    initTimeFormatter: function() {\n        var owner = this, pps = owner.properties;\n\n        if (!pps.time) {\n            return;\n        }\n\n        pps.timeFormatter = new Cleave.TimeFormatter(pps.timePattern, pps.timeFormat);\n        pps.blocks = pps.timeFormatter.getBlocks();\n        pps.blocksLength = pps.blocks.length;\n        pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);\n    },\n\n    initDateFormatter: function () {\n        var owner = this, pps = owner.properties;\n\n        if (!pps.date) {\n            return;\n        }\n\n        pps.dateFormatter = new Cleave.DateFormatter(pps.datePattern, pps.dateMin, pps.dateMax);\n        pps.blocks = pps.dateFormatter.getBlocks();\n        pps.blocksLength = pps.blocks.length;\n        pps.maxLength = Cleave.Util.getMaxLength(pps.blocks);\n    },\n\n    initPhoneFormatter: function () {\n        var owner = this, pps = owner.properties;\n\n        if (!pps.phone) {\n            return;\n        }\n\n        // Cleave.AsYouTypeFormatter should be provided by\n        // external google closure lib\n        try {\n            pps.phoneFormatter = new Cleave.PhoneFormatter(\n                new pps.root.Cleave.AsYouTypeFormatter(pps.phoneRegionCode),\n                pps.delimiter\n            );\n        } catch (ex) {\n            throw new Error('[cleave.js] Please include phone-type-formatter.{country}.js lib');\n        }\n    },\n\n    onKeyDown: function (event) {\n        var owner = this,\n            charCode = event.which || event.keyCode;\n\n        owner.lastInputValue = owner.element.value;\n        owner.isBackward = charCode === 8;\n    },\n\n    onChange: function (event) {\n        var owner = this, pps = owner.properties,\n            Util = Cleave.Util;\n\n        owner.isBackward = owner.isBackward || event.inputType === 'deleteContentBackward';\n\n        var postDelimiter = Util.getPostDelimiter(owner.lastInputValue, pps.delimiter, pps.delimiters);\n\n        if (owner.isBackward && postDelimiter) {\n            pps.postDelimiterBackspace = postDelimiter;\n        } else {\n            pps.postDelimiterBackspace = false;\n        }\n\n        this.onInput(this.element.value);\n    },\n\n    onFocus: function () {\n        var owner = this,\n            pps = owner.properties;\n        owner.lastInputValue = owner.element.value;\n\n        if (pps.prefix && pps.noImmediatePrefix && !owner.element.value) {\n            this.onInput(pps.prefix);\n        }\n\n        Cleave.Util.fixPrefixCursor(owner.element, pps.prefix, pps.delimiter, pps.delimiters);\n    },\n\n    onCut: function (e) {\n        if (!Cleave.Util.checkFullSelection(this.element.value)) return;\n        this.copyClipboardData(e);\n        this.onInput('');\n    },\n\n    onCopy: function (e) {\n        if (!Cleave.Util.checkFullSelection(this.element.value)) return;\n        this.copyClipboardData(e);\n    },\n\n    copyClipboardData: function (e) {\n        var owner = this,\n            pps = owner.properties,\n            Util = Cleave.Util,\n            inputValue = owner.element.value,\n            textToCopy = '';\n\n        if (!pps.copyDelimiter) {\n            textToCopy = Util.stripDelimiters(inputValue, pps.delimiter, pps.delimiters);\n        } else {\n            textToCopy = inputValue;\n        }\n\n        try {\n            if (e.clipboardData) {\n                e.clipboardData.setData('Text', textToCopy);\n            } else {\n                window.clipboardData.setData('Text', textToCopy);\n            }\n\n            e.preventDefault();\n        } catch (ex) {\n            //  empty\n        }\n    },\n\n    onInput: function (value) {\n        var owner = this, pps = owner.properties,\n            Util = Cleave.Util;\n\n        // case 1: delete one more character \"4\"\n        // 1234*| -> hit backspace -> 123|\n        // case 2: last character is not delimiter which is:\n        // 12|34* -> hit backspace -> 1|34*\n        // note: no need to apply this for numeral mode\n        var postDelimiterAfter = Util.getPostDelimiter(value, pps.delimiter, pps.delimiters);\n        if (!pps.numeral && pps.postDelimiterBackspace && !postDelimiterAfter) {\n            value = Util.headStr(value, value.length - pps.postDelimiterBackspace.length);\n        }\n\n        // phone formatter\n        if (pps.phone) {\n            if (pps.prefix && (!pps.noImmediatePrefix || value.length)) {\n                pps.result = pps.prefix + pps.phoneFormatter.format(value).slice(pps.prefix.length);\n            } else {\n                pps.result = pps.phoneFormatter.format(value);\n            }\n            owner.updateValueState();\n\n            return;\n        }\n\n        // numeral formatter\n        if (pps.numeral) {\n            // Do not show prefix when noImmediatePrefix is specified\n            // This mostly because we need to show user the native input placeholder\n            if (pps.prefix && pps.noImmediatePrefix && value.length === 0) {\n                pps.result = '';\n            } else {\n                pps.result = pps.numeralFormatter.format(value);\n            }\n            owner.updateValueState();\n\n            return;\n        }\n\n        // date\n        if (pps.date) {\n            value = pps.dateFormatter.getValidatedDate(value);\n        }\n\n        // time\n        if (pps.time) {\n            value = pps.timeFormatter.getValidatedTime(value);\n        }\n\n        // strip delimiters\n        value = Util.stripDelimiters(value, pps.delimiter, pps.delimiters);\n\n        // strip prefix\n        value = Util.getPrefixStrippedValue(value, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix);\n\n        // strip non-numeric characters\n        value = pps.numericOnly ? Util.strip(value, /[^\\d]/g) : value;\n\n        // convert case\n        value = pps.uppercase ? value.toUpperCase() : value;\n        value = pps.lowercase ? value.toLowerCase() : value;\n\n        // prevent from showing prefix when no immediate option enabled with empty input value\n        if (pps.prefix) {\n            if (pps.tailPrefix) {\n                value = value + pps.prefix;\n            } else {\n                value = pps.prefix + value;\n            }\n\n\n            // no blocks specified, no need to do formatting\n            if (pps.blocksLength === 0) {\n                pps.result = value;\n                owner.updateValueState();\n\n                return;\n            }\n        }\n\n        // update credit card props\n        if (pps.creditCard) {\n            owner.updateCreditCardPropsByValue(value);\n        }\n\n        // strip over length characters\n        value = Util.headStr(value, pps.maxLength);\n\n        // apply blocks\n        pps.result = Util.getFormattedValue(\n            value,\n            pps.blocks, pps.blocksLength,\n            pps.delimiter, pps.delimiters, pps.delimiterLazyShow\n        );\n\n        owner.updateValueState();\n    },\n\n    updateCreditCardPropsByValue: function (value) {\n        var owner = this, pps = owner.properties,\n            Util = Cleave.Util,\n            creditCardInfo;\n\n        // At least one of the first 4 characters has changed\n        if (Util.headStr(pps.result, 4) === Util.headStr(value, 4)) {\n            return;\n        }\n\n        creditCardInfo = Cleave.CreditCardDetector.getInfo(value, pps.creditCardStrictMode);\n\n        pps.blocks = creditCardInfo.blocks;\n        pps.blocksLength = pps.blocks.length;\n        pps.maxLength = Util.getMaxLength(pps.blocks);\n\n        // credit card type changed\n        if (pps.creditCardType !== creditCardInfo.type) {\n            pps.creditCardType = creditCardInfo.type;\n\n            pps.onCreditCardTypeChanged.call(owner, pps.creditCardType);\n        }\n    },\n\n    updateValueState: function () {\n        var owner = this,\n            Util = Cleave.Util,\n            pps = owner.properties;\n\n        if (!owner.element) {\n            return;\n        }\n\n        var endPos = owner.element.selectionEnd;\n        var oldValue = owner.element.value;\n        var newValue = pps.result;\n\n        endPos = Util.getNextCursorPosition(endPos, oldValue, newValue, pps.delimiter, pps.delimiters);\n\n        // fix Android browser type=\"text\" input field\n        // cursor not jumping issue\n        if (owner.isAndroid) {\n            window.setTimeout(function () {\n                owner.element.value = newValue;\n                Util.setSelection(owner.element, endPos, pps.document, false);\n                owner.callOnValueChanged();\n            }, 1);\n\n            return;\n        }\n\n        owner.element.value = newValue;\n        if (pps.swapHiddenInput) owner.elementSwapHidden.value = owner.getRawValue();\n\n        Util.setSelection(owner.element, endPos, pps.document, false);\n        owner.callOnValueChanged();\n    },\n\n    callOnValueChanged: function () {\n        var owner = this,\n            pps = owner.properties;\n\n        pps.onValueChanged.call(owner, {\n            target: {\n                name: owner.element.name,\n                value: pps.result,\n                rawValue: owner.getRawValue()\n            }\n        });\n    },\n\n    setPhoneRegionCode: function (phoneRegionCode) {\n        var owner = this, pps = owner.properties;\n\n        pps.phoneRegionCode = phoneRegionCode;\n        owner.initPhoneFormatter();\n        owner.onChange();\n    },\n\n    setRawValue: function (value) {\n        var owner = this, pps = owner.properties;\n\n        value = value !== undefined && value !== null ? value.toString() : '';\n\n        if (pps.numeral) {\n            value = value.replace('.', pps.numeralDecimalMark);\n        }\n\n        pps.postDelimiterBackspace = false;\n\n        owner.element.value = value;\n        owner.onInput(value);\n    },\n\n    getRawValue: function () {\n        var owner = this,\n            pps = owner.properties,\n            Util = Cleave.Util,\n            rawValue = owner.element.value;\n\n        if (pps.rawValueTrimPrefix) {\n            rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix);\n        }\n\n        if (pps.numeral) {\n            rawValue = pps.numeralFormatter.getRawValue(rawValue);\n        } else {\n            rawValue = Util.stripDelimiters(rawValue, pps.delimiter, pps.delimiters);\n        }\n\n        return rawValue;\n    },\n\n    getISOFormatDate: function () {\n        var owner = this,\n            pps = owner.properties;\n\n        return pps.date ? pps.dateFormatter.getISOFormatDate() : '';\n    },\n\n    getISOFormatTime: function () {\n        var owner = this,\n            pps = owner.properties;\n\n        return pps.time ? pps.timeFormatter.getISOFormatTime() : '';\n    },\n\n    getFormattedValue: function () {\n        return this.element.value;\n    },\n\n    destroy: function () {\n        var owner = this;\n\n        owner.element.removeEventListener('input', owner.onChangeListener);\n        owner.element.removeEventListener('keydown', owner.onKeyDownListener);\n        owner.element.removeEventListener('focus', owner.onFocusListener);\n        owner.element.removeEventListener('cut', owner.onCutListener);\n        owner.element.removeEventListener('copy', owner.onCopyListener);\n    },\n\n    toString: function () {\n        return '[Cleave Object]';\n    }\n};\n\nCleave.NumeralFormatter = NumeralFormatter_1;\nCleave.DateFormatter = DateFormatter_1;\nCleave.TimeFormatter = TimeFormatter_1;\nCleave.PhoneFormatter = PhoneFormatter_1;\nCleave.CreditCardDetector = CreditCardDetector_1;\nCleave.Util = Util_1;\nCleave.DefaultProperties = DefaultProperties_1;\n\n// for angular directive\n((typeof commonjsGlobal === 'object' && commonjsGlobal) ? commonjsGlobal : window)['Cleave'] = Cleave;\n\n// CommonJS\nvar Cleave_1 = Cleave;\n\nexport default Cleave_1;\n", "/**\n * jQuery Geocoding and Places Autocomplete Plugin - V 1.7.0\n *\n * @author Martin Kleppe <kleppe@ubilabs.net>, 2016\n * @author Ubilabs http://ubilabs.net, 2016\n * @license MIT License <http://www.opensource.org/licenses/mit-license.php>\n */\n\n// # $.geocomplete()\n// ## jQuery Geocoding and Places Autocomplete Plugin\n//\n// * https://github.com/ubilabs/geocomplete/\n// * by Martin Kleppe <kleppe@ubilabs.net>\n\n(function($, window, document, undefined){\n\n  // ## Options\n  // The default options for this plugin.\n  //\n  // * `map` - Might be a selector, an jQuery object or a DOM element. Default is `false` which shows no map.\n  // * `details` - The container that should be populated with data. Defaults to `false` which ignores the setting.\n  // * 'detailsScope' - Allows you to scope the 'details' container and have multiple geocomplete fields on one page. Must be a parent of the input. Default is 'null'\n  // * `location` - Location to initialize the map on. Might be an address `string` or an `array` with [latitude, longitude] or a `google.maps.LatLng`object. Default is `false` which shows a blank map.\n  // * `bounds` - Whether to snap geocode search to map bounds. Default: `true` if false search globally. Alternatively pass a custom `LatLngBounds object.\n  // * `autoselect` - Automatically selects the highlighted item or the first item from the suggestions list on Enter.\n  // * `detailsAttribute` - The attribute's name to use as an indicator. Default: `\"name\"`\n  // * `mapOptions` - Options to pass to the `google.maps.Map` constructor. See the full list [here](http://code.google.com/apis/maps/documentation/javascript/reference.html#MapOptions).\n  // * `mapOptions.zoom` - The inital zoom level. Default: `14`\n  // * `mapOptions.scrollwheel` - Whether to enable the scrollwheel to zoom the map. Default: `false`\n  // * `mapOptions.mapTypeId` - The map type. Default: `\"roadmap\"`\n  // * `markerOptions` - The options to pass to the `google.maps.Marker` constructor. See the full list [here](http://code.google.com/apis/maps/documentation/javascript/reference.html#MarkerOptions).\n  // * `markerOptions.draggable` - If the marker is draggable. Default: `false`. Set to true to enable dragging.\n  // * `markerOptions.disabled` - Do not show marker. Default: `false`. Set to true to disable marker.\n  // * `maxZoom` - The maximum zoom level too zoom in after a geocoding response. Default: `16`\n  // * `types` - An array containing one or more of the supported types for the places request. Default: `['geocode']` See the full list [here](http://code.google.com/apis/maps/documentation/javascript/places.html#place_search_requests).\n  // * `blur` - Trigger geocode when input loses focus.\n  // * `geocodeAfterResult` - If blur is set to true, choose whether to geocode if user has explicitly selected a result before blur.\n  // * `restoreValueAfterBlur` - Restores the input's value upon blurring. Default is `false` which ignores the setting.\n\n  var defaults = {\n    bounds: true,\n    country: null,\n    map: false,\n    details: false,\n    detailsAttribute: \"name\",\n    detailsScope: null,\n    autoselect: true,\n    location: false,\n\n    mapOptions: {\n      zoom: 14,\n      scrollwheel: false,\n      mapTypeId: \"roadmap\"\n    },\n\n    markerOptions: {\n      draggable: false\n    },\n\n    maxZoom: 16,\n    types: ['geocode'],\n    blur: false,\n    geocodeAfterResult: false,\n    restoreValueAfterBlur: false\n  };\n\n  // See: [Geocoding Types](https://developers.google.com/maps/documentation/geocoding/#Types)\n  // on Google Developers.\n  var componentTypes = (\"street_address route intersection political \" +\n    \"country administrative_area_level_1 administrative_area_level_2 \" +\n    \"administrative_area_level_3 colloquial_area locality sublocality \" +\n    \"neighborhood premise subpremise postal_code natural_feature airport \" +\n    \"park point_of_interest post_box street_number floor room \" +\n    \"lat lng viewport location \" +\n    \"formatted_address location_type bounds\").split(\" \");\n\n  // See: [Places Details Responses](https://developers.google.com/maps/documentation/javascript/places#place_details_responses)\n  // on Google Developers.\n  var placesDetails = (\"id place_id url website vicinity reference name rating \" +\n    \"international_phone_number icon formatted_phone_number\").split(\" \");\n\n  // The actual plugin constructor.\n  function GeoComplete(input, options) {\n\n    this.options = $.extend(true, {}, defaults, options);\n\n    // This is a fix to allow types:[] not to be overridden by defaults\n    // so search results includes everything\n    if (options && options.types) {\n      this.options.types = options.types;\n    }\n\n    this.input = input;\n    this.$input = $(input);\n\n    this._defaults = defaults;\n    this._name = 'geocomplete';\n\n    this.init();\n  }\n\n  // Initialize all parts of the plugin.\n  $.extend(GeoComplete.prototype, {\n    init: function(){\n      this.initMap();\n      this.initMarker();\n      this.initGeocoder();\n      this.initDetails();\n      this.initLocation();\n    },\n\n    // Initialize the map but only if the option `map` was set.\n    // This will create a `map` within the given container\n    // using the provided `mapOptions` or link to the existing map instance.\n    initMap: function(){\n      if (!this.options.map){ return; }\n\n      if (typeof this.options.map.setCenter == \"function\"){\n        this.map = this.options.map;\n        return;\n      }\n\n      this.map = new google.maps.Map(\n        $(this.options.map)[0],\n        this.options.mapOptions\n      );\n\n      // add click event listener on the map\n      google.maps.event.addListener(\n        this.map,\n        'click',\n        $.proxy(this.mapClicked, this)\n      );\n\n      // add dragend even listener on the map\n      google.maps.event.addListener(\n        this.map,\n        'dragend',\n        $.proxy(this.mapDragged, this)\n      );\n\n      // add idle even listener on the map\n      google.maps.event.addListener(\n        this.map,\n        'idle',\n        $.proxy(this.mapIdle, this)\n      );\n\n      google.maps.event.addListener(\n        this.map,\n        'zoom_changed',\n        $.proxy(this.mapZoomed, this)\n      );\n    },\n\n    // Add a marker with the provided `markerOptions` but only\n    // if the option was set. Additionally it listens for the `dragend` event\n    // to notify the plugin about changes.\n    initMarker: function(){\n      if (!this.map){ return; }\n      var options = $.extend(this.options.markerOptions, { map: this.map });\n\n      if (options.disabled){ return; }\n\n      this.marker = new google.maps.Marker(options);\n\n      google.maps.event.addListener(\n        this.marker,\n        'dragend',\n        $.proxy(this.markerDragged, this)\n      );\n    },\n\n    // Associate the input with the autocompleter and create a geocoder\n    // to fall back when the autocompleter does not return a value.\n    initGeocoder: function(){\n\n      // Indicates is user did select a result from the dropdown.\n      var selected = false;\n\n      var options = {\n        types: this.options.types,\n        bounds: this.options.bounds === true ? null : this.options.bounds,\n        componentRestrictions: this.options.componentRestrictions\n      };\n\n      if (this.options.country){\n        options.componentRestrictions = {country: this.options.country};\n      }\n\n      this.autocomplete = new google.maps.places.Autocomplete(\n        this.input, options\n      );\n\n      this.geocoder = new google.maps.Geocoder();\n\n      // Bind autocomplete to map bounds but only if there is a map\n      // and `options.bindToMap` is set to true.\n      if (this.map && this.options.bounds === true){\n        this.autocomplete.bindTo('bounds', this.map);\n      }\n\n      // Watch `place_changed` events on the autocomplete input field.\n      google.maps.event.addListener(\n        this.autocomplete,\n        'place_changed',\n        $.proxy(this.placeChanged, this)\n      );\n\n      // Prevent parent form from being submitted if user hit enter.\n      this.$input.on('keypress.' + this._name, function(event){\n        if (event.keyCode === 13){ return false; }\n      });\n\n      // Assume that if user types anything after having selected a result,\n      // the selected location is not valid any more.\n      if (this.options.geocodeAfterResult === true){\n        this.$input.bind('keypress.' + this._name, $.proxy(function(){\n          if (event.keyCode != 9 && this.selected === true){\n              this.selected = false;\n          }\n        }, this));\n      }\n\n      // Listen for \"geocode\" events and trigger find action.\n      this.$input.bind('geocode.' + this._name, $.proxy(function(){\n        this.find();\n      }, this));\n\n      // Saves the previous input value\n      this.$input.bind('geocode:result.' + this._name, $.proxy(function(){\n        this.lastInputVal = this.$input.val();\n      }, this));\n\n      // Trigger find action when input element is blurred out and user has\n      // not explicitly selected a result.\n      // (Useful for typing partial location and tabbing to the next field\n      // or clicking somewhere else.)\n      if (this.options.blur === true){\n        this.$input.on('blur.' + this._name, $.proxy(function(){\n          if (this.options.geocodeAfterResult === true && this.selected === true) { return; }\n\n          if (this.options.restoreValueAfterBlur === true && this.selected === true) {\n            setTimeout($.proxy(this.restoreLastValue, this), 0);\n          } else {\n            this.find();\n          }\n        }, this));\n      }\n    },\n\n    // Prepare a given DOM structure to be populated when we got some data.\n    // This will cycle through the list of component types and map the\n    // corresponding elements.\n    initDetails: function(){\n      if (!this.options.details){ return; }\n\n      if(this.options.detailsScope) {\n        var $details = $(this.input).parents(this.options.detailsScope).find(this.options.details);\n      } else {\n        var $details = $(this.options.details);\n      }\n\n      var attribute = this.options.detailsAttribute,\n        details = {};\n\n      function setDetail(value){\n        details[value] = $details.find(\"[\" +  attribute + \"=\" + value + \"]\");\n      }\n\n      $.each(componentTypes, function(index, key){\n        setDetail(key);\n        setDetail(key + \"_short\");\n      });\n\n      $.each(placesDetails, function(index, key){\n        setDetail(key);\n      });\n\n      this.$details = $details;\n      this.details = details;\n    },\n\n    // Set the initial location of the plugin if the `location` options was set.\n    // This method will care about converting the value into the right format.\n    initLocation: function() {\n\n      var location = this.options.location, latLng;\n\n      if (!location) { return; }\n\n      if (typeof location == 'string') {\n        this.find(location);\n        return;\n      }\n\n      if (location instanceof Array) {\n        latLng = new google.maps.LatLng(location[0], location[1]);\n      }\n\n      if (location instanceof google.maps.LatLng){\n        latLng = location;\n      }\n\n      if (latLng){\n        if (this.map){ this.map.setCenter(latLng); }\n        if (this.marker){ this.marker.setPosition(latLng); }\n      }\n    },\n\n    destroy: function(){\n      if (this.map) {\n        google.maps.event.clearInstanceListeners(this.map);\n        google.maps.event.clearInstanceListeners(this.marker);\n      }\n\n      this.autocomplete.unbindAll();\n      google.maps.event.clearInstanceListeners(this.autocomplete);\n      google.maps.event.clearInstanceListeners(this.input);\n      this.$input.removeData();\n      this.$input.off(this._name);\n      this.$input.unbind('.' + this._name);\n    },\n\n    // Look up a given address. If no `address` was specified it uses\n    // the current value of the input.\n    find: function(address){\n      this.geocode({\n        address: address || this.$input.val()\n      });\n    },\n\n    // Requests details about a given location.\n    // Additionally it will bias the requests to the provided bounds.\n    geocode: function(request){\n      // Don't geocode if the requested address is empty\n      if (!request.address) {\n        return;\n      }\n      if (this.options.bounds && !request.bounds){\n        if (this.options.bounds === true){\n          request.bounds = this.map && this.map.getBounds();\n        } else {\n          request.bounds = this.options.bounds;\n        }\n      }\n\n      if (this.options.country){\n        request.region = this.options.country;\n      }\n\n      this.geocoder.geocode(request, $.proxy(this.handleGeocode, this));\n    },\n\n    // Get the selected result. If no result is selected on the list, then get\n    // the first result from the list.\n    selectFirstResult: function() {\n      //$(\".pac-container\").hide();\n\n      var selected = '';\n      // Check if any result is selected.\n      if ($(\".pac-item-selected\")[0]) {\n        selected = '-selected';\n      }\n\n      // Get the first suggestion's text.\n      var $span1 = $(\".pac-container:visible .pac-item\" + selected + \":first span:nth-child(2)\").text();\n      var $span2 = $(\".pac-container:visible .pac-item\" + selected + \":first span:nth-child(3)\").text();\n\n      // Adds the additional information, if available.\n      var firstResult = $span1;\n      if ($span2) {\n        firstResult += \" - \" + $span2;\n      }\n\n      this.$input.val(firstResult);\n\n      return firstResult;\n    },\n\n    // Restores the input value using the previous value if it exists\n    restoreLastValue: function() {\n      if (this.lastInputVal){ this.$input.val(this.lastInputVal); }\n    },\n\n    // Handles the geocode response. If more than one results was found\n    // it triggers the \"geocode:multiple\" events. If there was an error\n    // the \"geocode:error\" event is fired.\n    handleGeocode: function(results, status){\n      if (status === google.maps.GeocoderStatus.OK) {\n        var result = results[0];\n        this.$input.val(result.formatted_address);\n        this.update(result);\n\n        if (results.length > 1){\n          this.trigger(\"geocode:multiple\", results);\n        }\n\n      } else {\n        this.trigger(\"geocode:error\", status);\n      }\n    },\n\n    // Triggers a given `event` with optional `arguments` on the input.\n    trigger: function(event, argument){\n      this.$input.trigger(event, [argument]);\n    },\n\n    // Set the map to a new center by passing a `geometry`.\n    // If the geometry has a viewport, the map zooms out to fit the bounds.\n    // Additionally it updates the marker position.\n    center: function(geometry){\n      if (geometry.viewport){\n        this.map.fitBounds(geometry.viewport);\n        if (this.map.getZoom() > this.options.maxZoom){\n          this.map.setZoom(this.options.maxZoom);\n        }\n      } else {\n        this.map.setZoom(this.options.maxZoom);\n        this.map.setCenter(geometry.location);\n      }\n\n      if (this.marker){\n        this.marker.setPosition(geometry.location);\n        this.marker.setAnimation(this.options.markerOptions.animation);\n      }\n    },\n\n    // Update the elements based on a single places or geocoding response\n    // and trigger the \"geocode:result\" event on the input.\n    update: function(result){\n\n      if (this.map){\n        this.center(result.geometry);\n      }\n\n      if (this.$details){\n        this.fillDetails(result);\n      }\n\n      this.trigger(\"geocode:result\", result);\n    },\n\n    // Populate the provided elements with new `result` data.\n    // This will lookup all elements that has an attribute with the given\n    // component type.\n    fillDetails: function(result){\n\n      var data = {},\n        geometry = result.geometry,\n        viewport = geometry.viewport,\n        bounds = geometry.bounds;\n\n      // Create a simplified version of the address components.\n      $.each(result.address_components, function(index, object){\n        var name = object.types[0];\n\n        $.each(object.types, function(index, name){\n          data[name] = object.long_name;\n          data[name + \"_short\"] = object.short_name;\n        });\n      });\n\n      // Add properties of the places details.\n      $.each(placesDetails, function(index, key){\n        data[key] = result[key];\n      });\n\n      // Add infos about the address and geometry.\n      $.extend(data, {\n        formatted_address: result.formatted_address,\n        location_type: geometry.location_type || \"PLACES\",\n        viewport: viewport,\n        bounds: bounds,\n        location: geometry.location,\n        lat: geometry.location.lat(),\n        lng: geometry.location.lng()\n      });\n\n      // Set the values for all details.\n      $.each(this.details, $.proxy(function(key, $detail){\n        var value = data[key];\n        this.setDetail($detail, value);\n      }, this));\n\n      this.data = data;\n    },\n\n    // Assign a given `value` to a single `$element`.\n    // If the element is an input, the value is set, otherwise it updates\n    // the text content.\n    setDetail: function($element, value){\n\n      if (value === undefined){\n        value = \"\";\n      } else if (typeof value.toUrlValue == \"function\"){\n        value = value.toUrlValue();\n      }\n\n      if ($element.is(\":input\")){\n        $element.val(value);\n      } else {\n        $element.text(value);\n      }\n    },\n\n    // Fire the \"geocode:dragged\" event and pass the new position.\n    markerDragged: function(event){\n      this.trigger(\"geocode:dragged\", event.latLng);\n    },\n\n    mapClicked: function(event) {\n        this.trigger(\"geocode:click\", event.latLng);\n    },\n\n    // Fire the \"geocode:mapdragged\" event and pass the current position of the map center.\n    mapDragged: function(event) {\n      this.trigger(\"geocode:mapdragged\", this.map.getCenter());\n    },\n\n    // Fire the \"geocode:idle\" event and pass the current position of the map center.\n    mapIdle: function(event) {\n      this.trigger(\"geocode:idle\", this.map.getCenter());\n    },\n\n    mapZoomed: function(event) {\n      this.trigger(\"geocode:zoom\", this.map.getZoom());\n    },\n\n    // Restore the old position of the marker to the last knwon location.\n    resetMarker: function(){\n      this.marker.setPosition(this.data.location);\n      this.setDetail(this.details.lat, this.data.location.lat());\n      this.setDetail(this.details.lng, this.data.location.lng());\n    },\n\n    // Update the plugin after the user has selected an autocomplete entry.\n    // If the place has no geometry it passes it to the geocoder.\n    placeChanged: function(){\n      var place = this.autocomplete.getPlace();\n      this.selected = true;\n\n      if (!place.geometry){\n        if (this.options.autoselect) {\n          // Automatically selects the highlighted item or the first item from the\n          // suggestions list.\n          var autoSelection = this.selectFirstResult();\n          this.find(autoSelection);\n        }\n      } else {\n        // Use the input text if it already gives geometry.\n        this.update(place);\n      }\n    }\n  });\n\n  // A plugin wrapper around the constructor.\n  // Pass `options` with all settings that are different from the default.\n  // The attribute is used to prevent multiple instantiations of the plugin.\n  $.fn.geocomplete = function(options) {\n\n    var attribute = 'plugin_geocomplete';\n\n    // If you call `.geocomplete()` with a string as the first parameter\n    // it returns the corresponding property or calls the method with the\n    // following arguments.\n    if (typeof options == \"string\"){\n\n      var instance = $(this).data(attribute) || $(this).geocomplete().data(attribute),\n        prop = instance[options];\n\n      if (typeof prop == \"function\"){\n        prop.apply(instance, Array.prototype.slice.call(arguments, 1));\n        return $(this);\n      } else {\n        if (arguments.length == 2){\n          prop = arguments[1];\n        }\n        return prop;\n      }\n    } else {\n      return this.each(function() {\n        // Prevent against multiple instantiations.\n        var instance = $.data(this, attribute);\n        if (!instance) {\n          instance = new GeoComplete( this, options );\n          $.data(this, attribute, instance);\n        }\n      });\n    }\n  };\n\n})( jQuery, window, document );\n", "window.GobiertoAdmin.GlobalizedFormsComponent = (function() {\n  function GlobalizedFormsComponent() {}\n\n  GlobalizedFormsComponent.prototype.handle = function() {\n    $(document).on(\"turbolinks:load\", _handleGlobalizedForm);\n  };\n\n  GlobalizedFormsComponent.prototype.handleGlobalizedForm = function() {\n    _handleGlobalizedForm();\n  };\n\n  function _handleGlobalizedForm() {\n    var containers = _findGlobalizedFormContainers();\n    if (!containers.length) return;\n\n    containers.find('[data-toggle-edit-locale]').on(\"click\", _toggleLocaleClickHandler);\n    containers.on(\"change\", \"input, select, textarea\", _changeHandler);\n\n    var currentLocale = containers.find('[data-loaded-locale]').data('loaded-locale');\n\n    if (currentLocale === undefined)\n      currentLocale = I18n.defaultLocale;\n    containers.each(function(index, container) {\n      _activateLocale(currentLocale, container);\n      _checkCompleted(container);\n\n      // Turn locate toggle component into a floating element\n      // It must do after other locale fields have been hidden\n      _toggleFloatingLocaleComponent(container)\n    });\n  }\n\n  function _toggleLocaleClickHandler(e){\n    e.preventDefault();\n\n    var container = $(e.target).closest(\".globalized_fields\");\n\n    // When globalized form is in a popup, previous selector doesn't work\n    if (container === null) {\n      container = $(e.target).parents().filter(\"div .globalized_fields\")\n    }\n\n    _activateLocale($(this).data('toggle-edit-locale'), container);\n  }\n\n  function _changeHandler(){\n    _checkCompleted(_findGlobalizedFormContainers());\n  }\n\n  function _activateLocale(currentLocale, container){\n    $(container).find('[data-toggle-edit-locale]').removeClass('selected');\n    $(container).find('[data-toggle-edit-locale=' + currentLocale + ']').filter('a').addClass('selected');\n\n    $(container).find('[data-locale]').each(function(){\n      $(this).data('locale') !== currentLocale ? $(this).hide() : $(this).show();\n    });\n  }\n\n  function _checkCompleted(container){\n    $(container).find('[data-toggle-edit-locale]').each(function(){\n      var locale = $(this).data('toggle-edit-locale');\n      var completed = true;\n      var $el = $(container).find('[data-locale='+locale+']');\n\n      $el.find(\"input, select, textarea\").each(function(){\n        if ($(this).attr('id') !== undefined && $(this).val() === \"\"){\n          completed = false;\n        }\n      });\n\n      $el = $(container).find('[data-toggle-edit-locale='+locale+']');\n      completed ? $el.addClass('completed') : $el.removeClass('completed');\n    });\n  }\n\n  function _findGlobalizedFormContainers(){\n    return $(\"form[data-globalized-form-container] .globalized_fields\");\n  }\n\n  function _toggleFloatingLocaleComponent(container) {\n    const $container = $(container)\n    const $localizedFields = $container.find(\"[data-locale]\")\n    const amountOfLocales = Object.keys(I18n.translations).length\n\n    // Ignore if the number of fields to be translated is lower than the total of available locales\n    // We want to make a floating locale if there are a few, at least\n    if ($localizedFields.length > amountOfLocales) {\n      const containerHeight = $container.height()\n      const headerHeight = $(\"header\").height()\n      const containerOffsetTop = $container.offset().top - headerHeight\n      // In order to hide before scroll reaches container bottom\n      const decoratorLastItem = $container.find(\"> *:last-of-type\").height() * .4\n      const containerOffsetBottom = containerOffsetTop + containerHeight - decoratorLastItem\n\n      $(window).on(\"scroll resize\", function () {\n        const scroll = $(this).scrollTop()\n\n        if ((scroll > containerOffsetTop) && (scroll < containerOffsetBottom)) {\n          $container.addClass(\"is-floating\")\n\n          const $tool = $container.find(\"> *:first-child\")\n          // JQuery does not accept shorthand properties\n          const horizontalPx = parseInt($tool.css(\"padding-left\")) + parseInt($tool.css(\"padding-right\")) + parseInt($tool.css(\"border-left-width\")) + parseInt($tool.css(\"border-right-width\"))\n\n          $tool.width($container.width() - horizontalPx)\n        } else {\n          $container.removeClass(\"is-floating\")\n        }\n      })\n    }\n  }\n\n  return GlobalizedFormsComponent;\n})();\n\nwindow.GobiertoAdmin.globalized_forms_component = new GobiertoAdmin.GlobalizedFormsComponent;\n", "import Vue from 'vue';\nVue.config.productionTip = false;\n\nwindow.GobiertoAdmin.GobiertoAttachmentsController = (function() {\n  function GobiertoAttachmentsController() {}\n\n  GobiertoAttachmentsController.prototype.index = function(attachmentsCollectionId) {\n    app(attachmentsCollectionId);\n  };\n\n  function onlyUnique(value, index, self) {\n    return self.indexOf(value) === index;\n  }\n\n  function app(attachmentsCollectionId) {\n    var bus = new Vue({});\n\n    var STATUS_INITIAL = 0,\n      STATUS_SAVING = 1,\n      STATUS_SUCCESS = 2,\n      STATUS_FAILED = 3;\n\n    var fileUtils = {\n      methods: {\n        fileExtension: function(name) {\n          return name\n            .split(\".\")\n            .pop()\n            .toUpperCase();\n        },\n        bytesToSize: function(bytes) {\n          var sizes = [\"bytes\", \"Kb\", \"Mb\", \"Gb\", \"Tb\"];\n          if (bytes == 0) return \"0 Byte\";\n          var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));\n          return Math.round(bytes / Math.pow(1024, i), 2) + \" \" + sizes[i];\n        }\n      }\n    };\n\n    var magnificPopup = {\n      methods: {\n        closeModal: function() {\n          if (!$.magnificPopup.instance.isOpen && !this.showModal) {\n            return;\n          }\n          this.showModal = false;\n          $.magnificPopup.close();\n        },\n        openModal: function() {\n          var self = this;\n          self.showModal = true;\n          var config = {\n            mainClass: \"mfp-move-horizontal\",\n            items: {\n              src: $(self.$refs.modal),\n              type: \"inline\"\n            },\n            callbacks: {\n              close: self.closeModal\n            }\n          };\n          $.magnificPopup.open(config);\n          $('input.slim').focus();\n        }\n      }\n    };\n\n    Vue.component(\"FileUpload\", {\n      data: function() {\n        return {\n          fileDragged: false,\n          uploadedFiles: [],\n          uploadError: null,\n          currentStatus: null,\n          uploadFieldName: \"attachment\",\n          attachment: {},\n          errorMessage: null,\n          isDragged: false,\n          collectionId: attachmentsCollectionId\n        };\n      },\n      computed: {\n        isInitial: function() {\n          return this.currentStatus === STATUS_INITIAL;\n        },\n        isSaving: function() {\n          return this.currentStatus === STATUS_SAVING;\n        },\n        isSuccess: function() {\n          return this.currentStatus === STATUS_SUCCESS;\n        },\n        isFailed: function() {\n          return this.currentStatus === STATUS_FAILED;\n        }\n      },\n      mounted: function() {\n        this.reset();\n      },\n      methods: {\n        dragEntered: function() {\n          this.isDragged = true;\n        },\n        dragLeft: function() {\n          this.isDragged = false;\n        },\n        reset: function() {\n          // reset form to initial state\n          this.currentStatus = STATUS_INITIAL;\n          this.uploadedFiles = [];\n          this.uploadError = null;\n          this.attachment = {};\n          this.fileDragged = false;\n        },\n        save: function() {\n          // upload data to the server\n          this.currentStatus = STATUS_SAVING;\n\n          var self = this;\n          this.upload(function(file) {\n            self.uploadedFiles = [file];\n            self.currentStatus = STATUS_SUCCESS;\n          });\n        },\n        upload: function(callback) {\n          var self = this;\n          window.fetch(\"/admin/attachments/api/attachments\", {\n            method: \"POST\",\n            headers: {\n              \"X-CSRF-Token\": $('meta[name=\"csrf-token\"]').attr(\"content\"),\n              \"Content-Type\": \"application/json\",\n               Accept: \"application/json\",\n            },\n            body: JSON.stringify(self.attachment),\n          })\n          .then(() => {\n            bus.$emit(\"site-attachments:load\");\n            self.reset();\n            bus.$emit(\"file-upload:fileDraggedUpdated\", self.fileDragged);\n          })\n          .catch((error) => {\n            console.error(\"Error:\", error);\n          });\n          callback();\n        },\n        filesChange: function(fieldName, fileList) {\n          if (!fileList.length) return;\n\n          this.fileDragged = true;\n          this.attachment.file_name = fileList[0].name;\n          this.attachment.collection_id = this.collectionId;\n          bus.$emit(\"file-upload:fileDraggedUpdated\", this.fileDragged);\n          bus.$emit(\"site-attachments:load\");\n\n          var reader = new FileReader();\n          var self = this;\n          reader.addEventListener(\n            \"load\",\n            function() {\n              self.attachment.file = reader.result.split(\",\")[1];\n            },\n            false\n          );\n          reader.readAsDataURL(fileList[0]);\n        }\n      },\n      template: \"#file-upload\"\n    });\n\n    Vue.component(\"EditAttachment\", {\n      mixins: [fileUtils, magnificPopup],\n      data: function() {\n        return {\n          showModal: false,\n          attachment: null\n        };\n      },\n      mounted: function() {\n        var self = this;\n        bus.$on(\"edit-attachment:load\", function(data) {\n          self.fetchData(data.id);\n        });\n      },\n      methods: {\n        fetchData: function(id) {\n          var self = this;\n          $.ajax({\n            url: \"/admin/attachments/api/attachments/\" + id,\n            dataType: \"json\",\n            beforeSend: function(xhr) {\n              xhr.setRequestHeader(\"X-CSRF-Token\", $('meta[name=\"csrf-token\"]').attr(\"content\"));\n            },\n            success: function(response, textStatus, jqXHR) {\n              if (jqXHR.status == 200) {\n                Vue.set(self, \"attachment\", response.attachment);\n                self.openModal();\n              }\n            }\n          });\n        },\n        updateAttachment: function(id) {\n          var self = this;\n          $.ajax({\n            url: \"/admin/attachments/api/attachments/\" + id,\n            method: \"PATCH\",\n            data: {\n              attachment: {\n                name: self.attachment !== null ? self.attachment.name : \"\",\n                description: self.attachment !== null ? self.attachment.description : \"\"\n              }\n            },\n            dataType: \"json\",\n            cache: false,\n            beforeSend: function(xhr) {\n              xhr.setRequestHeader(\"X-CSRF-Token\", $('meta[name=\"csrf-token\"]').attr(\"content\"));\n            },\n            success: function(response, textStatus, jqXHR) {\n              if (jqXHR.status == 200) {\n                bus.$emit(\"file-popover:load\", { id: self.attachment.id });\n                self.closeModal();\n                bus.$emit(\"file-list:load\");\n              }\n            }\n          });\n        },\n        attachmentDoc: function(attachment) {\n          if (attachment) return attachment.file_name + \" (\" + this.bytesToSize(attachment.file_size) + \")\";\n          else return \"\";\n        }\n      },\n      template: \"#edit-attachment\"\n    });\n\n    Vue.component(\"FilePopover\", {\n      mixins: [fileUtils],\n      props: [\"attachableId\", \"attachableType\"],\n      data: function() {\n        return {\n          show: false,\n          attachment: null,\n          copySuccessful: false\n        };\n      },\n      watch: {\n        copySuccessful: function(newValue) {\n          if (newValue === true) {\n            var that = this;\n            setTimeout(function() {\n              that.copySuccessful = false;\n            }, 2000);\n          }\n        }\n      },\n      mounted: function() {\n        var self = this;\n        bus.$on(\"file-popover:load\", function(data) {\n          self.fetchData(data.id);\n        });\n      },\n      methods: {\n        closePopover: function() {\n          this.show = false;\n        },\n        fetchData: function(id) {\n          var self = this;\n          $.ajax({\n            url: \"/admin/attachments/api/attachments/\" + id,\n            dataType: \"json\",\n            beforeSend: function(xhr) {\n              xhr.setRequestHeader(\"X-CSRF-Token\", $('meta[name=\"csrf-token\"]').attr(\"content\"));\n            },\n            success: function(response, textStatus, jqXHR) {\n              if (jqXHR.status == 200) {\n                Vue.set(self, \"attachment\", response.attachment);\n                Vue.set(self, \"show\", true);\n              }\n            }\n          });\n        },\n        editAttachment: function(id) {\n          bus.$emit(\"edit-attachment:load\", { id: id });\n        },\n        removeAttaching: function() {\n          var self = this;\n          if (self.attachableId === \"\") {\n            bus.$emit(\"file-popover:removeAttaching\", self.attachment);\n            Vue.set(self, \"show\", false);\n            return;\n          }\n\n          $.ajax({\n            url: \"/admin/attachments/api/attachings\",\n            method: \"DELETE\",\n            dataType: \"json\",\n            data: {\n              attachment_id: self.attachment.id,\n              attachable_id: self.attachableId,\n              attachable_type: self.attachableType\n            },\n            beforeSend: function(xhr) {\n              xhr.setRequestHeader(\"X-CSRF-Token\", $('meta[name=\"csrf-token\"]').attr(\"content\"));\n            },\n            success: function(response, textStatus, jqXHR) {\n              if (jqXHR.status == 200) {\n                Vue.set(self, \"show\", false);\n                bus.$emit(\"file-list:load\");\n              }\n            }\n          });\n        },\n        addToEditor: function(attachment) {\n          var locale = $(\"[data-toggle-edit-locale].selected\").data(\"toggle-edit-locale\");\n          var localeSuffix = \"\";\n          if (locale !== undefined) localeSuffix = \"[lang=\" + locale + \"]\";\n          var element = $(\"[data-wysiwyg]\" + localeSuffix);\n          if (element.length) {\n            var html;\n\n            var imageExtensions = [\"JPG\", \"JPEG\", \"PNG\", \"GIF\", \"BMP\", \"TIFF\"];\n            if (imageExtensions.indexOf(this.fileExtension(attachment.file_name)) != -1) {\n              html = \"![](\" + attachment.human_readable_url + \")\";\n            } else {\n              html =\n                '<a href=\"' +\n                attachment.human_readable_url +\n                '\" target=\"_blank\">' +\n                attachment.file_name +\n                ' <span class=\"size\">(' +\n                this.bytesToSize(attachment.file_size) +\n                \")</span></a>\" +\n                \"\\n\";\n            }\n\n            var editor = element.data(\"editor\");\n            var doc = (doc = editor.codemirror.getDoc());\n            var cursor = doc.getCursor();\n            doc.replaceRange(html, cursor);\n          }\n        },\n        copyUrlToClipboard: function(attachment) {\n          var textArea = document.createElement(\"textarea\");\n          textArea.value = attachment.human_readable_url;\n          document.body.appendChild(textArea);\n          textArea.select();\n\n          try {\n            this.copySuccessful = document.execCommand(\"copy\");\n          } catch (err) {\n            this.copySuccessful = false;\n          }\n          document.body.removeChild(textArea);\n        }\n      },\n      template: \"#file-popover\"\n    });\n\n    Vue.component(\"SiteAttachments\", {\n      mixins: [fileUtils, magnificPopup],\n      props: [\"attachableId\", \"attachableType\"],\n      data: function() {\n        return {\n          q: \"\",\n          previousQ: \"\",\n          attachments: [],\n          showModal: false,\n          fileDragged: false\n        };\n      },\n      mounted: function() {\n        var self = this;\n        bus.$on(\"site-attachments:load\", function() {\n          self.fetchData();\n        });\n        bus.$on(\"file-upload:fileDraggedUpdated\", function(value) {\n          self.fileDragged = value;\n        });\n      },\n      methods: {\n        searchStringParameters: function() {\n          if (this.q === \"\") return {};\n          return { search_string: this.q };\n        },\n        formatDate: function(date) {\n          if (date === undefined || date === null) return \"\";\n          return I18n.l(\"date.formats.short\", date);\n        },\n        fetchData: function() {\n          var self = this;\n          $.ajax({\n            url: \"/admin/attachments/api/attachments\",\n            dataType: \"json\",\n            data: self.searchStringParameters(),\n            beforeSend: function(xhr) {\n              xhr.setRequestHeader(\"X-CSRF-Token\", $('meta[name=\"csrf-token\"]').attr(\"content\"));\n            },\n            success: function(response, textStatus, jqXHR) {\n              if (jqXHR.status == 200) {\n                Vue.set(self, \"attachments\", response.attachments);\n                self.openModal();\n              }\n            }\n          });\n        },\n        associateAttachment: function(attachment) {\n          var self = this;\n          if (this.attachableId === \"\") {\n            bus.$emit(\"site-attachments:newAttaching\", attachment);\n            self.closeModal();\n            return;\n          }\n          $.ajax({\n            url: \"/admin/attachments/api/attachings\",\n            dataType: \"json\",\n            method: \"POST\",\n            data: {\n              attachment_id: attachment.id,\n              attachable_id: this.attachableId,\n              attachable_type: this.attachableType\n            },\n            beforeSend: function(xhr) {\n              xhr.setRequestHeader(\"X-CSRF-Token\", $('meta[name=\"csrf-token\"]').attr(\"content\"));\n            },\n            success: function() {\n              bus.$emit(\"file-list:load\");\n            },\n            complete: function() {\n              self.closeModal();\n            }\n          });\n        },\n        search: function() {\n          if (this.q.length > 2) {\n            this.fetchData(this.q);\n          } else if (this.previousQ != this.q) {\n            this.fetchData();\n          }\n          this.previousQ = this.q;\n        }\n      },\n      template: \"#site-attachments\"\n    });\n\n    Vue.component(\"FileList\", {\n      mixins: [fileUtils],\n      props: [\"attachableId\", \"attachableType\"],\n      data: function() {\n        return {\n          attachments: [],\n          showFiles: true\n        };\n      },\n      computed: {\n        fileListClass: function() {\n          if (this.attachments.length == 0) return \"\";\n\n          if (this.showFiles) return \"fa-caret-down\";\n          else return \"fa-caret-right\";\n        }\n      },\n      mounted: function() {\n        var self = this;\n        self.fetchData();\n        bus.$on(\"file-list:load\", function() {\n          self.fetchData();\n          self.showFiles = true;\n        });\n        bus.$on(\"site-attachments:newAttaching\", function(attachment) {\n          self.attachments.push(attachment);\n          self.attachments = self.attachments.filter(onlyUnique);\n          self.showFiles = true;\n        });\n        bus.$on(\"file-popover:removeAttaching\", function(attachment) {\n          var index = -1;\n          self.attachments.forEach(function(a, i) {\n            if (a.id === attachment.id) index = i;\n          });\n          self.attachments.splice(index, 1);\n          self.showFiles = true;\n        });\n      },\n      methods: {\n        popover: function(e) {\n          bus.$emit(\"file-popover:load\", { id: $(e.target).data(\"attachment-id\") });\n        },\n        fetchData: function() {\n          var self = this;\n          if (this.attachableId === \"\") return;\n          $.ajax({\n            url: \"/admin/attachments/api/attachments\",\n            data: {\n              attachable_type: this.attachableType,\n              attachable_id: this.attachableId\n            },\n            dataType: \"json\",\n            beforeSend: function(xhr) {\n              xhr.setRequestHeader(\"X-CSRF-Token\", $('meta[name=\"csrf-token\"]').attr(\"content\"));\n            },\n            success: function(response, textStatus, jqXHR) {\n              if (jqXHR.status == 200) {\n                Vue.set(self, \"attachments\", response.attachments);\n                if (response.attachments.length > 0) {\n                  self.showFiles = true;\n                } else {\n                  self.showFiles = false;\n                }\n              }\n            }\n          });\n        },\n        toggleList: function() {\n          this.showFiles = !this.showFiles;\n        }\n      },\n      template: \"#file-list-template\"\n    });\n\n    // start app\n    var selector = \"#gobierto-attachment\";\n    new Vue({\n      el: selector,\n      data: function() {\nreturn {\n        attachmentsIdsAfterCreated: [],\n        attachmentsIdsAfterCreatedStr: \"\",\n        attachableType: $(selector).data(\"attachable-type\"),\n        attachableId: $(selector).data(\"attachable-id\")\n      };\n},\n      mounted: function() {\n        var self = this;\n        bus.$on(\"site-attachments:newAttaching\", function(attachment) {\n          self.attachmentsIdsAfterCreated.push(attachment.id);\n          self.attachmentsIdsAfterCreatedStr = self.attachmentsIdsAfterCreated.join(\",\");\n          $(\"#attachmentsIdsAfterCreated\").val(self.attachmentsIdsAfterCreatedStr);\n        });\n        bus.$on(\"file-popover:removeAttaching\", function(attachment) {\n          var index = -1;\n          self.attachmentsIdsAfterCreated.forEach(function(a, i) {\n            if (a.id === attachment.id) index = i;\n          });\n          self.attachmentsIdsAfterCreated.splice(index, 1);\n          self.attachmentsIdsAfterCreatedStr = self.attachmentsIdsAfterCreated.join(\",\");\n          $(\"#attachmentsIdsAfterCreated\").val(self.attachmentsIdsAfterCreatedStr);\n        });\n      },\n      methods: {\n        loadAttachments: function() {\n          bus.$emit(\"site-attachments:load\");\n        }\n      }\n    });\n  }\n\n  return GobiertoAttachmentsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_attachments_controller = new GobiertoAdmin.GobiertoAttachmentsController();\n", "window.GobiertoAdmin.GobiertoBudgetsController = (function() {\n  function GobiertoBudgetsController() {}\n\n  GobiertoBudgetsController.prototype.options = function(options) {\n    _handleMunicipalitiesAutocomplete(options);\n    _comparison_tool_checkboxes();\n  };\n\n  function _handleMunicipalitiesAutocomplete(options) {\n    var $field = $(\"#gobierto_budgets_options_comparison_compare_municipalities\");\n    $field.select2({\n      multiple: true,\n      ajax: {\n        url: options.municipalities_suggestion_url,\n        crossDomain: true,\n        dataType: \"json\",\n        method: \"GET\",\n        data: params => ({ query: params.term }),\n        processResults: function(data) {\n          if (data === undefined) return [];\n          var results = $.map(data.suggestions, function (obj) {\n            obj.text = obj.name;\n            obj.id = obj.id;\n            return obj;\n          });\n          return { results: results };\n        },\n      }\n    });\n  }\n\n  function _comparison_tool_checkboxes() {\n    $(\"input[name='gobierto_budgets_options[comparison_tool_enabled]']\").change(function () {\n      if (!($(\"input[name='gobierto_budgets_options[comparison_tool_enabled]']\").is(':checked'))) {\n        $(\"input[name='gobierto_budgets_options[comparison_context_table_enabled]']\").prop('checked', false);\n        $(\"input[name='gobierto_budgets_options[comparison_compare_municipalities_enabled]']\").prop('checked', false);\n        $(\"input[name='gobierto_budgets_options[comparison_show_widget]']\").prop('checked', false);\n      }\n    });\n  }\n\n  return GobiertoBudgetsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_budgets_controller = new GobiertoAdmin.GobiertoBudgetsController;\n", "window.GobiertoAdmin.GobiertoCalendarsEventsController = (function() {\n  function GobiertoCalendarsEventsController() {}\n\n  GobiertoCalendarsEventsController.prototype.index = function() {\n    $('a[data-toggle]').on('click', function(){\n      $('div#archived-list').toggle();\n    });\n  };\n\n  return GobiertoCalendarsEventsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_calendars_events_controller = new GobiertoAdmin.GobiertoCalendarsEventsController;\n", "window.GobiertoAdmin.GobiertoCalendarsCalendarConfigurationsController = (function() {\n  function GobiertoCalendarsCalendarConfigurationsController() {}\n\n  GobiertoCalendarsCalendarConfigurationsController.prototype.edit = function(wrapper, namespace) {\n    GobiertoAdmin.dynamic_content_component.handle(wrapper, namespace);\n    _updateVisibleFields();\n  };\n\n  function _updateVisibleFields() {\n    $('#calendar_configuration_calendar_integration').on('change', function(){\n      _hideAllIntegrationFields();\n\n      var selectedIntegration = $(this).val();\n\n      if (integrationNames().indexOf(selectedIntegration) >= 0) {\n        $('#' + selectedIntegration + '_fields').show('slow');\n      }\n\n      if (selectedIntegration === 'google_calendar' && $(\"[name='google_calendar_invitation_url']\").length) {\n        $('#update_button').hide('fast');\n      } else {\n        $('#update_button').show('fast');\n      }\n    });\n  }\n\n  function _hideAllIntegrationFields() {\n    integrationNames().map(function(integrationName) {\n      $('#' + integrationName + '_fields').hide('slow');\n    })\n  }\n\n  function integrationNames() {\n    return ['ibm_notes', 'microsoft_exchange', 'google_calendar']\n  }\n\n  return GobiertoCalendarsCalendarConfigurationsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_calendars_calendar_configurations_controller = new GobiertoAdmin.GobiertoCalendarsCalendarConfigurationsController;\n", "window.GobiertoAdmin.GobiertoCmsController = (function() {\n  function GobiertoCmsController() {}\n\n  GobiertoCmsController.prototype.edit = function(sectionId, parentId, sectionItemId) {\n    _sections(sectionId, parentId, sectionItemId);\n\n    if (sectionId != \"null\") {\n      $(\"#permission_1\").prop(\"checked\", true);\n      $(\".open_level_1\").trigger(\"change\");\n      $(\"#page_section\").val(sectionId);\n    }\n  };\n\n  GobiertoCmsController.prototype.loadSections = function(sectionSelected) {\n    _populateSection(sectionSelected);\n    $(\"#page_parent\").empty();\n    $(\".level_2\").show();\n    populateParent(sectionSelected, null);\n  };\n\n  function _sections(sectionId, parentId, sectionItemId) {\n    var $level1 = $(\".level_1\");\n    var $level2 = $(\".level_2\");\n    var $section = $(\"#page_section\");\n    var $parent = $(\"#page_parent\");\n\n    $(\".open_level_1\").on(\"change\", function(e) {\n      e.preventDefault();\n\n      if ($(\"#permission_1\").prop(\"checked\"))\n        if (sectionId != \"null\") {\n          getSections(sectionId);\n          $level1.show();\n          $level2.show();\n          populateParent(sectionId, parentId, sectionItemId);\n        } else {\n          // Sections\n          $level1.show();\n          getSections(sectionId);\n          // parent\n          if ($section.val() == \"\") {\n            $level2.hide();\n          } else {\n            $parent.empty();\n            $level2.show();\n            populateParent(sectionId, parentId, sectionItemId);\n          }\n        }\n      else {\n        $section.val(\"\");\n        $level1.hide();\n        $level2.hide();\n        $parent.empty();\n      }\n    });\n\n    $(\"#page_section\").change(function(e) {\n      e.preventDefault();\n      var section = $(this).val();\n\n      if (section == \"0\") {\n        // open the new ajax popup\n        $.magnificPopup.open({\n          closeOnBgClick: false,\n          closeBtnInside: true,\n          enableEscapeKey: true,\n          removalDelay: 65,\n          mainClass: \"mfp-move-horizontal\",\n          items: {},\n          type: \"ajax\",\n          ajax: {\n            settings: {\n              url: \"/admin/cms/sections/new?remote=true&from_page_widget=true\",\n              type: \"GET\",\n              data: {\n                \"globalized-form-container\": \"true\"\n              }\n            }\n          },\n          callbacks: {\n            ajaxContentAdded: function() {\n              window.GobiertoAdmin.globalized_forms_component.handleGlobalizedForm();\n            }\n          }\n        });\n      } else if (section == \"\") {\n        $level2.hide();\n        $section.removeAttr(\"selected\");\n        $parent.removeAttr(\"selected\");\n      } else {\n        $level2.show();\n        $parent.empty();\n        populateParent(section);\n      }\n    });\n  }\n\n  function _populateSection(sectionSelected) {\n    // Get sections\n    getSections(sectionSelected);\n  }\n\n  function getSections(sectionSelected) {\n    // Get sections\n    $.getJSON(\"/admin/cms/sections\", function(data) {\n      appendSections(data[\"sections\"], sectionSelected);\n    });\n  }\n\n  function appendSections(sections, sectionSelected) {\n    var $section = $(\"#page_section\");\n\n    $section.empty();\n    var numOptions = sections.length;\n    var anOption;\n    $section.prepend(\"<option value='' selected='selected'></option>\");\n    for (var i = 0; i < numOptions; i++) {\n      anOption = document.createElement(\"option\");\n      anOption.value = sections[i][\"id\"];\n      anOption.innerHTML = sections[i][\"title\"];\n\n      $section.append(anOption);\n    }\n    $section.append('<option value=\"0\">' + I18n.t(\"gobierto_admin.gobierto_cms.pages.form.new_section\") + \"</option>\");\n\n    if (\"null\" != sectionSelected) {\n      $section.val(sectionSelected);\n    } else {\n      $section.val($(\"#page_section option:first\").val());\n    }\n  }\n\n  function populateParent(section, parentId, sectionItemId) {\n    var $parent = $(\"#page_parent\");\n\n    if (!(section == \"null\")) {\n      // Get children\n      $.getJSON(\"/admin/cms/sections/\" + section + \"/section_items/\", function(data) {\n        var theOptions;\n        theOptions = data[\"section_items\"];\n\n        $parent.append('<option value=\"0\">' + I18n.t(\"gobierto_admin.gobierto_cms.pages.form.without_parent\") + \"</option>\");\n\n        if (theOptions.length >= 1) {\n          // Create the container <div>\n          appendParents($parent, theOptions, 0);\n\n          if (typeof parentId != \"undefined\" && parentId != \"null\") {\n            $parent.val(parentId);\n            $('#page_parent option[value=\"' + sectionItemId + '\"]').attr(\"disabled\", \"disabled\");\n          } else {\n            $parent.val($(\"#page_parent option:first\").val());\n            if (typeof parentId != \"undefined\" && parentId != \"null\") {\n              $(\"#page_parent option:last\").attr(\"disabled\", \"disabled\");\n            }\n          }\n        }\n      });\n    }\n  }\n\n  function appendParents(parent, nodes, level) {\n    var anOption;\n    // Add some <option>s\n    for (var i in nodes) {\n      anOption = document.createElement(\"option\");\n      anOption.value = nodes[i][\"id\"];\n      anOption.innerHTML = \"-\".repeat(level) + \" \" + nodes[i][\"name\"];\n      parent.append(anOption);\n      if (nodes[i] && nodes[i].children && nodes[i].children.length >= 1) {\n        appendParents(parent, nodes[i].children, level + 1);\n      }\n    }\n  }\n\n  return GobiertoCmsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_cms_controller = new GobiertoAdmin.GobiertoCmsController();\n", "import CodeMirror from 'codemirror'\n\nwindow.GobiertoAdmin.GobiertoCoreController = (function() {\n  function GobiertoCoreController() {}\n\n  GobiertoCoreController.prototype.index = function() {\n    _loadCodeMirror();\n  };\n\n  function _loadCodeMirror() {\n    var te_html = document.getElementById(\"code\");\n\n    window.editor_html = CodeMirror.fromTextArea(te_html, {\n      mode: \"text/html\",\n      lineNumbers: true,\n      lineWrapping: true,\n      viewportMargin: Infinity,\n      extraKeys: { \"Ctrl-Q\": function(cm){ cm.foldCode(cm.getCursor()); } },\n      foldGutter: true,\n      gutters: [\"CodeMirror-linenumbers\", \"CodeMirror-foldgutter\"]\n    });\n  }\n\n  return GobiertoCoreController;\n})();\n\nwindow.GobiertoAdmin.gobierto_core_controller = new GobiertoAdmin.GobiertoCoreController;\n", "import { SlickGrid, Editors, SlickCellSelectionModel } from 'slickgrid';\n\nwindow.GobiertoAdmin.GobiertoPlansIndicatorsController = (function() {\n  function GobiertoPlansIndicatorsController() {}\n\n  GobiertoPlansIndicatorsController.prototype.form = function() {\n    _handleGroupsList();\n  };\n\n  function _handleGroupsList() {\n\n    // Toggle selected element child\n    $('.v_container .v_el .icon-caret').click(function(e) {\n      e.preventDefault();\n\n      // ToDo: Don't relay on icon specific names\n      if ($(this).is('.fa-caret-right')) {\n        $(this).removeClass('fa-caret-right');\n        $(this).addClass('fa-caret-down');\n      }\n      else {\n        $(this).removeClass('fa-caret-down');\n        $(this).addClass('fa-caret-right');\n      }\n\n      let vElement = $(this).parent().parent().parent().parent().find('> .v_el')\n      vElement.toggleClass('el-opened');\n      if (vElement.hasClass('el-opened')) {\n        let id = vElement.attr('id');\n        let data = JSON.parse($(`#${id}`).find(\"input\").val())\n        _slickGrid(id, data);\n      }\n\n    });\n\n    // show only action buttons (edit, delete) when hovering an item\n    // ToDo: Control that only elements for the item are shown, not for it's parents\n    $('.v_el').hover(\n      function(e) {\n        $(this).first('.v_el_actions').addClass('v_el_active');\n      },\n      function(e) {\n        $(this).first('.v_el_actions').removeClass('v_el_active');\n      }\n    );\n\n    $(\"form\").submit(\n      function() {\n        $(\".v_container .v_el .v_el_content.el-opened\").each(function(i) {\n          let id = $(this).attr(\"id\").replace(/[^\\d]+/, \"\");\n          $(`input[name='project[indicators][${id}]']`).val(JSON.stringify($(this).data(\"slickGrid\").getData()));\n        });\n      }\n    );\n  }\n\n  function _slickGrid(id, data) {\n    function requiredFieldValidator(value) {\n      if (value == null || value == undefined || !value.length) {\n        return { valid: false, msg: \"This is a required field\" };\n      } else {\n        return { valid: true, msg: null };\n      }\n    }\n\n    function _headerDateName(startYear, startMonth, offset) {\n      return `${startYear + Math.floor((startMonth - 1 + offset)/12)}-${((startMonth - 1 + offset) % 12 + 1).toString().padStart(2, '0')}`;\n    }\n\n    function _dateColumn(startYear, startMonth, offset) {\n      let headerName = _headerDateName(startYear, startMonth, offset);\n      return { id: headerName, name: headerName, field: headerName, width: 100, editor: Editors.Float };\n    }\n\n    function _dateColumnsFromData(data) {\n      let columns = [];\n      let firstRow = Object.assign({}, data[0]);\n      delete firstRow.indicator\n      let rowKeys = Object.keys(firstRow).sort();\n      let lastDateValues = rowKeys[rowKeys.length - 1].split(\"-\");\n      for (let i = 0; i < rowKeys.length; i++) {\n        let dateValues = rowKeys[i].split(\"-\");\n          columns.push(_dateColumn(parseInt(dateValues[0]), parseInt(dateValues[1]), 0));\n      }\n      return {\n        lastYear: parseInt(lastDateValues[0]),\n        lastMonth: parseInt(lastDateValues[1]),\n        columns: columns\n      };\n    }\n\n    let new_column_id = `new_column_${id}`\n    let dateColumnsCount = 5;\n    let startYear = 2018;\n    let startMonth = 12;\n    let grid;\n    let columns = [{\n      id: \"indicator\",\n      name: \"\",\n      field: \"indicator\",\n      width: 120,\n      cssClass: \"cell-title\",\n      editor: Editors.Text,\n      validator: requiredFieldValidator\n    }];\n\n    let options = {\n      editable: true,\n      enableAddRow: true,\n      enableCellNavigation: true,\n      asyncEditorLoading: false,\n      enableColumnReorder: false,\n      autoEdit: true,\n      itemsCountId: `${id}_items`\n    };\n\n    $(function () {\n      if (data.length === 0) {\n        for (let i = 0; i < 10; i++) {\n          let d = (data[i] = {});\n\n          d[\"indicator\"] = \"indicator \" + i;\n          for (let o = 0; o < dateColumnsCount; o++) {\n            d[_headerDateName(startYear, startMonth, o)] = Math.round(Math.random() * 100);\n          }\n        }\n\n        for (let i = 0; i < dateColumnsCount; i++) {\n          columns.push(_dateColumn(startYear, startMonth, i));\n        }\n      } else {\n        let dateColumns = _dateColumnsFromData(data);\n        columns = columns.concat(dateColumns.columns);\n        startYear = dateColumns.lastYear;\n        startMonth = dateColumns.lastMonth;\n        dateColumnsCount = 1;\n      }\n\n      columns.push({\n        id: new_column_id,\n        name: \"Add\",\n        field: new_column_id,\n        witdh: 50,\n        headerCssClass: `add-${new_column_id}`,\n        sortable: false,\n        headerDateNameFunction: _headerDateName,\n        startYear: startYear,\n        startMonth: startMonth,\n        offset: dateColumnsCount });\n\n      grid = new SlickGrid(`#${id} .slickgrid-container`, data, columns, options);\n      $(`#${id}`).data('slickGrid', grid);\n\n      grid.setSelectionModel(new SlickCellSelectionModel());\n\n      grid.onHeaderClick.subscribe(function (e, args) {\n        let item = args.column;\n        if (item.name === \"Add\"){\n          let columns = args.grid.getColumns();\n          let lastColumn = columns.pop();\n          let lastYear = lastColumn.headerDateNameFunction(lastColumn.startYear, lastColumn.startMonth, lastColumn.offset)\n          let columnDefinition = { id: lastYear, name: lastYear, field: lastYear, width: 100, editor: Editors.Integer };\n          lastColumn.offset++;\n          columns.push(columnDefinition);\n          columns.push(lastColumn);\n          args.grid.setColumns(columns);\n          args.grid.render();\n        }\n      });\n\n      grid.onAddNewRow.subscribe(function (e, args) {\n        let item = args.item;\n        grid.invalidateRow(data.length);\n        data.push(item);\n        grid.updateRowCount();\n        grid.invalidate();\n        grid.render();\n        $(`#${grid.getOptions().itemsCountId}`).html(data.length);\n      });\n    })\n\n  }\n\n  return GobiertoPlansIndicatorsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_plans_indicators_controller = new GobiertoAdmin.GobiertoPlansIndicatorsController;\n", "/**\n * Contains core SlickGrid classes.\n * @module Core\n * @namespace Slick\n */\n\nimport type {\n  AnyFunction,\n  CSSStyleDeclarationWritable,\n  EditController,\n  ElementEventListener,\n  Handler,\n  InferDOMType,\n  MergeTypes\n} from './models/index';\n\nexport interface BasePubSub {\n  publish<ArgType = any>(_eventName: string | any, _data?: ArgType): any;\n  subscribe<ArgType = any>(_eventName: string | Function, _callback: (data: ArgType) => void): any;\n}\n\n/**\n * An event object for passing data to event handlers and letting them control propagation.\n * <p>This is pretty much identical to how W3C and jQuery implement events.</p>\n * @class EventData\n * @constructor\n */\nexport class SlickEventData<ArgType = any> {\n  protected _isPropagationStopped = false;\n  protected _isImmediatePropagationStopped = false;\n  protected _isDefaultPrevented = false;\n  protected returnValues: string[] = [];\n  protected returnValue: any = undefined;\n  protected _eventTarget?: EventTarget | null;\n  protected nativeEvent?: Event | null;\n  protected arguments_?: ArgType;\n\n  // public props that can be optionally pulled from the provided Event in constructor\n  // they are all optional props because it really depends on the type of Event provided (KeyboardEvent, MouseEvent, ...)\n  readonly altKey?: boolean;\n  readonly ctrlKey?: boolean;\n  readonly metaKey?: boolean;\n  readonly shiftKey?: boolean;\n  readonly key?: string;\n  readonly keyCode?: number;\n  readonly clientX?: number;\n  readonly clientY?: number;\n  readonly offsetX?: number;\n  readonly offsetY?: number;\n  readonly pageX?: number;\n  readonly pageY?: number;\n  readonly bubbles?: boolean;\n  readonly target?: HTMLElement;\n  readonly type?: string;\n  readonly which?: number;\n  readonly x?: number;\n  readonly y?: number;\n\n  get defaultPrevented() {\n    return this._isDefaultPrevented;\n  }\n\n  constructor(protected event?: Event | null, protected args?: ArgType) {\n    this.nativeEvent = event;\n    this.arguments_ = args;\n\n    // when we already have an event, we want to keep some of the event properties\n    // looping through some props is the only way to keep and sync these properties to the returned EventData\n    if (event) {\n      [\n        'altKey', 'ctrlKey', 'metaKey', 'shiftKey', 'key', 'keyCode',\n        'clientX', 'clientY', 'offsetX', 'offsetY', 'pageX', 'pageY',\n        'bubbles', 'target', 'type', 'which', 'x', 'y'\n      ].forEach(key => (this as any)[key] = event[key as keyof Event]);\n    }\n    this._eventTarget = this.nativeEvent ? this.nativeEvent.target : undefined;\n  }\n\n  /**\n   * Stops event from propagating up the DOM tree.\n   * @method stopPropagation\n   */\n  stopPropagation() {\n    this._isPropagationStopped = true;\n    this.nativeEvent?.stopPropagation();\n  }\n\n  /**\n   * Returns whether stopPropagation was called on this event object.\n   * @method isPropagationStopped\n   * @return {Boolean}\n   */\n  isPropagationStopped() {\n    return this._isPropagationStopped;\n  }\n\n  /**\n   * Prevents the rest of the handlers from being executed.\n   * @method stopImmediatePropagation\n   */\n  stopImmediatePropagation() {\n    this._isImmediatePropagationStopped = true;\n    if (this.nativeEvent) {\n      this.nativeEvent.stopImmediatePropagation();\n    }\n  };\n\n  /**\n   * Returns whether stopImmediatePropagation was called on this event object.\\\n   * @method isImmediatePropagationStopped\n   * @return {Boolean}\n   */\n  isImmediatePropagationStopped() {\n    return this._isImmediatePropagationStopped;\n  };\n\n  getNativeEvent<E extends Event>() {\n    return this.nativeEvent as E;\n  }\n\n  preventDefault() {\n    if (this.nativeEvent) {\n      this.nativeEvent.preventDefault();\n    }\n    this._isDefaultPrevented = true;\n  }\n\n  isDefaultPrevented() {\n    if (this.nativeEvent) {\n      return this.nativeEvent.defaultPrevented;\n    }\n    return this._isDefaultPrevented;\n  }\n\n  addReturnValue(value: any) {\n    this.returnValues.push(value);\n    if (this.returnValue === undefined && value !== undefined) {\n      this.returnValue = value;\n    }\n  }\n\n  getReturnValue() {\n    return this.returnValue;\n  }\n\n  getArguments() {\n    return this.arguments_;\n  }\n}\n\n/**\n * A simple publisher-subscriber implementation.\n * @class Event\n * @constructor\n */\nexport class SlickEvent<ArgType = any> {\n  protected _handlers: Handler<ArgType>[] = [];\n  protected _pubSubService?: BasePubSub;\n\n  get subscriberCount() {\n    return this._handlers.length;\n  }\n\n  /**\n   * Constructor\n   * @param {String} [eventName] - event name that could be used for dispatching CustomEvent (when enabled)\n   * @param {BasePubSub} [pubSubService] - event name that could be used for dispatching CustomEvent (when enabled)\n   */\n  constructor(protected readonly eventName?: string, protected readonly pubSub?: BasePubSub) {\n    this._pubSubService = pubSub;\n  }\n\n  /**\n   * Adds an event handler to be called when the event is fired.\n   * <p>Event handler will receive two arguments - an <code>EventData</code> and the <code>data</code>\n   * object the event was fired with.<p>\n   * @method subscribe\n   * @param {Function} fn - Event handler.\n   */\n  subscribe(fn: Handler<ArgType>) {\n    this._handlers.push(fn);\n  }\n\n  /**\n   * Removes an event handler added with <code>subscribe(fn)</code>.\n   * @method unsubscribe\n   * @param {Function} [fn] - Event handler to be removed.\n   */\n  unsubscribe(fn?: Handler<ArgType>) {\n    for (let i = this._handlers.length - 1; i >= 0; i--) {\n      if (this._handlers[i] === fn) {\n        this._handlers.splice(i, 1);\n      }\n    }\n  }\n\n  /**\n   * Fires an event notifying all subscribers.\n   * @method notify\n   * @param {Object} args Additional data object to be passed to all handlers.\n   * @param {EventData} [event] - An <code>EventData</code> object to be passed to all handlers.\n   *      For DOM events, an existing W3C event object can be passed in.\n   * @param {Object} [scope] - The scope (\"this\") within which the handler will be executed.\n   *      If not specified, the scope will be set to the <code>Event</code> instance.\n   */\n  notify(args: ArgType, evt?: SlickEventData<ArgType> | Event | MergeTypes<SlickEventData<ArgType>, Event> | null, scope?: any) {\n    const sed: SlickEventData = evt instanceof SlickEventData\n      ? evt\n      : new SlickEventData(evt, args);\n    scope = scope || this;\n\n    for (let i = 0; i < this._handlers.length && !(sed.isPropagationStopped() || sed.isImmediatePropagationStopped()); i++) {\n      const returnValue = this._handlers[i].call(scope, sed, args);\n      sed.addReturnValue(returnValue);\n    }\n\n    // user can optionally add a global PubSub Service which makes it easy to publish/subscribe to events\n    if (typeof this._pubSubService?.publish === 'function' && this.eventName) {\n      const ret = this._pubSubService.publish<{ args: ArgType; eventData?: SlickEventData<ArgType>; nativeEvent?: Event; }>(this.eventName, { args, eventData: sed });\n      sed.addReturnValue(ret);\n    }\n    return sed;\n  }\n\n  setPubSubService(pubSub: BasePubSub) {\n    this._pubSubService = pubSub;\n  }\n}\n\nexport class SlickEventHandler {\n  protected handlers: Array<{ event: SlickEvent; handler: Handler<any>; }> = [];\n\n  subscribe<T = any>(event: SlickEvent<T>, handler: Handler<T>) {\n    this.handlers.push({ event, handler });\n    event.subscribe(handler);\n\n    return this as SlickEventHandler;  // allow chaining\n  }\n\n  unsubscribe<T = any>(event: SlickEvent<T>, handler: Handler<T>) {\n    let i = this.handlers.length;\n    while (i--) {\n      if (this.handlers[i].event === event &&\n        this.handlers[i].handler === handler) {\n        this.handlers.splice(i, 1);\n        event.unsubscribe(handler);\n        return;\n      }\n    }\n\n    return this as SlickEventHandler;  // allow chaining\n  }\n\n  unsubscribeAll() {\n    let i = this.handlers.length;\n    while (i--) {\n      this.handlers[i].event.unsubscribe(this.handlers[i].handler);\n    }\n    this.handlers = [];\n\n    return this as SlickEventHandler;  // allow chaining\n  }\n}\n\n/**\n * A structure containing a range of cells.\n * @class Range\n * @constructor\n * @param fromRow {Integer} Starting row.\n * @param fromCell {Integer} Starting cell.\n * @param toRow {Integer} Optional. Ending row. Defaults to <code>fromRow</code>.\n * @param toCell {Integer} Optional. Ending cell. Defaults to <code>fromCell</code>.\n */\nexport class SlickRange {\n  fromRow: number;\n  fromCell: number;\n  toCell: number;\n  toRow: number;\n\n  constructor(fromRow: number, fromCell: number, toRow?: number, toCell?: number) {\n    if (toRow === undefined && toCell === undefined) {\n      toRow = fromRow;\n      toCell = fromCell;\n    }\n\n    /**\n     * @property fromRow\n     * @type {Integer}\n     */\n    this.fromRow = Math.min(fromRow, toRow as number);\n\n    /**\n     * @property fromCell\n     * @type {Integer}\n     */\n    this.fromCell = Math.min(fromCell, toCell as number);\n\n    /**\n     * @property toCell\n     * @type {Integer}\n     */\n    this.toCell = Math.max(fromCell, toCell as number);\n\n    /**\n     * @property toRow\n     * @type {Integer}\n     */\n    this.toRow = Math.max(fromRow, toRow as number);\n  }\n\n\n  /**\n   * Returns whether a range represents a single row.\n   * @method isSingleRow\n   * @return {Boolean}\n   */\n  isSingleRow() {\n    return this.fromRow === this.toRow;\n  }\n\n  /**\n   * Returns whether a range represents a single cell.\n   * @method isSingleCell\n   * @return {Boolean}\n   */\n  isSingleCell() {\n    return this.fromRow === this.toRow && this.fromCell === this.toCell;\n  }\n\n  /**\n   * Returns whether a range contains a given cell.\n   * @method contains\n   * @param row {Integer}\n   * @param cell {Integer}\n   * @return {Boolean}\n   */\n  contains(row: number, cell: number) {\n    return row >= this.fromRow && row <= this.toRow &&\n      cell >= this.fromCell && cell <= this.toCell;\n  }\n\n  /**\n   * Returns a readable representation of a range.\n   * @method toString\n   * @return {String}\n   */\n  toString() {\n    if (this.isSingleCell()) {\n      return `(${this.fromRow}:${this.fromCell})`;\n    }\n    else {\n      return `(${this.fromRow}:${this.fromCell} - ${this.toRow}:${this.toCell})`;\n    }\n  };\n}\n\n\n/**\n * A base class that all special / non-data rows (like Group and GroupTotals) derive from.\n * @class NonDataItem\n * @constructor\n */\nexport class SlickNonDataItem {\n  __nonDataRow = true;\n}\n\n\n/**\n * Information about a group of rows.\n * @class Group\n * @extends Slick.NonDataItem\n * @constructor\n */\nexport class SlickGroup extends SlickNonDataItem {\n  __group = true;\n\n  /**\n   * Grouping level, starting with 0.\n   * @property level\n   * @type {Number}\n   */\n  level = 0;\n\n  /**\n   * Number of rows in the group.\n   * @property count\n   * @type {Integer}\n   */\n  count = 0;\n\n  /**\n   * Grouping value.\n   * @property value\n   * @type {Object}\n   */\n  value = null;\n\n  /**\n   * Formatted display value of the group.\n   * @property title\n   * @type {String}\n   */\n  title: string | null = null;\n\n  /**\n   * Whether a group is collapsed.\n   * @property collapsed\n   * @type {Boolean}\n   */\n  collapsed: boolean | number = false;\n\n  /**\n   * Whether a group selection checkbox is checked.\n   * @property selectChecked\n   * @type {Boolean}\n   */\n  selectChecked = false;\n\n  /**\n   * GroupTotals, if any.\n   * @property totals\n   * @type {GroupTotals}\n   */\n  totals: SlickGroupTotals = null as any;\n\n  /**\n   * Rows that are part of the group.\n   * @property rows\n   * @type {Array}\n   */\n  rows: number[] = [];\n\n  /**\n   * Sub-groups that are part of the group.\n   * @property groups\n   * @type {Array}\n   */\n  groups: any[] = null as any;\n\n  /**\n   * A unique key used to identify the group.  This key can be used in calls to DataView\n   * collapseGroup() or expandGroup().\n   * @property groupingKey\n   * @type {Object}\n   */\n  groupingKey: any = null;\n\n  constructor() {\n    super();\n  }\n  /**\n   * Compares two Group instances.\n   * @method equals\n   * @return {Boolean}\n   * @param group {Group} Group instance to compare to.\n   */\n  equals(group: SlickGroup): boolean {\n    return this.value === group.value &&\n      this.count === group.count &&\n      this.collapsed === group.collapsed &&\n      this.title === group.title;\n  };\n}\n\n/**\n * Information about group totals.\n * An instance of GroupTotals will be created for each totals row and passed to the aggregators\n * so that they can store arbitrary data in it.  That data can later be accessed by group totals\n * formatters during the display.\n * @class GroupTotals\n * @extends Slick.NonDataItem\n * @constructor\n */\nexport class SlickGroupTotals extends SlickNonDataItem {\n  __groupTotals = true;\n\n  /**\n   * Parent Group.\n   * @param group\n   * @type {Group}\n   */\n  group: SlickGroup = null as any;\n\n  /**\n   * Whether the totals have been fully initialized / calculated.\n   * Will be set to false for lazy-calculated group totals.\n   * @param initialized\n   * @type {Boolean}\n   */\n  initialized = false;\n\n  constructor() {\n    super();\n  }\n}\n\n/**\n * A locking helper to track the active edit controller and ensure that only a single controller\n * can be active at a time.  This prevents a whole class of state and validation synchronization\n * issues.  An edit controller (such as SlickGrid) can query if an active edit is in progress\n * and attempt a commit or cancel before proceeding.\n * @class EditorLock\n * @constructor\n */\nexport class SlickEditorLock {\n  activeEditController: any = null;\n\n  /**\n   * Returns true if a specified edit controller is active (has the edit lock).\n   * If the parameter is not specified, returns true if any edit controller is active.\n   * @method isActive\n   * @param editController {EditController}\n   * @return {Boolean}\n   */\n  isActive(editController?: EditController): boolean {\n    return (editController ? this.activeEditController === editController : this.activeEditController !== null);\n  };\n\n  /**\n   * Sets the specified edit controller as the active edit controller (acquire edit lock).\n   * If another edit controller is already active, and exception will be throw new Error(.\n   * @method activate\n   * @param editController {EditController} edit controller acquiring the lock\n   */\n  activate(editController: EditController) {\n    if (editController === this.activeEditController) { // already activated?\n      return;\n    }\n    if (this.activeEditController !== null) {\n      throw new Error(`Slick.EditorLock.activate: an editController is still active, can't activate another editController`);\n    }\n    if (!editController.commitCurrentEdit) {\n      throw new Error('Slick.EditorLock.activate: editController must implement .commitCurrentEdit()');\n    }\n    if (!editController.cancelCurrentEdit) {\n      throw new Error('Slick.EditorLock.activate: editController must implement .cancelCurrentEdit()');\n    }\n    this.activeEditController = editController;\n  };\n\n  /**\n   * Unsets the specified edit controller as the active edit controller (release edit lock).\n   * If the specified edit controller is not the active one, an exception will be throw new Error(.\n   * @method deactivate\n   * @param editController {EditController} edit controller releasing the lock\n   */\n  deactivate(editController: EditController) {\n    if (!this.activeEditController) {\n      return;\n    }\n    if (this.activeEditController !== editController) {\n      throw new Error('Slick.EditorLock.deactivate: specified editController is not the currently active one');\n    }\n    this.activeEditController = null;\n  };\n\n  /**\n   * Attempts to commit the current edit by calling \"commitCurrentEdit\" method on the active edit\n   * controller and returns whether the commit attempt was successful (commit may fail due to validation\n   * errors, etc.).  Edit controller's \"commitCurrentEdit\" must return true if the commit has succeeded\n   * and false otherwise.  If no edit controller is active, returns true.\n   * @method commitCurrentEdit\n   * @return {Boolean}\n   */\n  commitCurrentEdit(): boolean {\n    return (this.activeEditController ? this.activeEditController.commitCurrentEdit() : true);\n  };\n\n  /**\n   * Attempts to cancel the current edit by calling \"cancelCurrentEdit\" method on the active edit\n   * controller and returns whether the edit was successfully cancelled.  If no edit controller is\n   * active, returns true.\n   * @method cancelCurrentEdit\n   * @return {Boolean}\n   */\n  cancelCurrentEdit(): boolean {\n    return (this.activeEditController ? this.activeEditController.cancelCurrentEdit() : true);\n  };\n}\n\nfunction regexSanitizer(dirtyHtml: string) {\n  return dirtyHtml.replace(/(\\b)(on[a-z]+)(\\s*)=|javascript:([^>]*)[^>]*|(<\\s*)(\\/*)script([<>]*).*(<\\s*)(\\/*)script(>*)|(&lt;)(\\/*)(script|script defer)(.*)(&gt;|&gt;\">)/gi, '');\n}\n\n/**\n * A simple binding event service to keep track of all JavaScript events with callback listeners,\n * it allows us to unbind event(s) and their listener(s) by calling a simple unbind method call.\n * Unbinding is a necessary step to make sure that all event listeners are removed to avoid memory leaks when destroing the grid\n */\nexport class BindingEventService {\n  protected _boundedEvents: ElementEventListener[] = [];\n\n  getBoundedEvents() {\n    return this._boundedEvents;\n  }\n\n  destroy() {\n    this.unbindAll();\n  }\n\n  /** Bind an event listener to any element */\n  bind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions, groupName = '') {\n    element.addEventListener(eventName, listener, options);\n    this._boundedEvents.push({ element, eventName, listener, groupName });\n  }\n\n  /** Unbind all will remove every every event handlers that were bounded earlier */\n  unbind(element: Element | Window, eventName: string, listener: EventListenerOrEventListenerObject) {\n    if (element?.removeEventListener) {\n      element.removeEventListener(eventName, listener);\n    }\n  }\n\n  unbindByEventName(element: Element | Window, eventName: string) {\n    const boundedEvent = this._boundedEvents.find(e => e.element === element && e.eventName === eventName);\n    if (boundedEvent) {\n      this.unbind(boundedEvent.element, boundedEvent.eventName, boundedEvent.listener);\n    }\n  }\n\n  /**\n   * Unbind all event listeners that were bounded, optionally provide a group name to unbind all listeners assigned to that specific group only.\n   */\n  unbindAll(groupName?: string | string[]) {\n    if (groupName) {\n      const groupNames = Array.isArray(groupName) ? groupName : [groupName];\n\n      // unbind only the bounded event with a specific group\n      // Note: we need to loop in reverse order to avoid array reindexing (causing index offset) after a splice is called\n      for (let i = this._boundedEvents.length - 1; i >= 0; --i) {\n        const boundedEvent = this._boundedEvents[i];\n        if (groupNames.some(g => g === boundedEvent.groupName)) {\n          const { element, eventName, listener } = boundedEvent;\n          this.unbind(element, eventName, listener);\n          this._boundedEvents.splice(i, 1);\n        }\n      }\n    } else {\n      // unbind everything\n      while (this._boundedEvents.length > 0) {\n        const boundedEvent = this._boundedEvents.pop() as ElementEventListener;\n        const { element, eventName, listener } = boundedEvent;\n        this.unbind(element, eventName, listener);\n      }\n    }\n  }\n}\n\nexport class Utils {\n  // jQuery's extend\n  private static getProto = Object.getPrototypeOf;\n  private static class2type: any = {};\n  private static toString = Utils.class2type.toString;\n  private static hasOwn = Utils.class2type.hasOwnProperty;\n  private static fnToString = Utils.hasOwn.toString;\n  private static ObjectFunctionString = Utils.fnToString.call(Object);\n  public static storage = {\n    // https://stackoverflow.com/questions/29222027/vanilla-alternative-to-jquery-data-function-any-native-javascript-alternati\n    _storage: new WeakMap(),\n    // eslint-disable-next-line object-shorthand\n    put: function (element: any, key: string, obj: any) {\n      if (!this._storage.has(element)) {\n        this._storage.set(element, new Map());\n      }\n      this._storage.get(element).set(key, obj);\n    },\n    // eslint-disable-next-line object-shorthand\n    get: function (element: any, key: string) {\n      const el = this._storage.get(element);\n      if (el) {\n        return el.get(key);\n      }\n      return null;\n    },\n    // eslint-disable-next-line object-shorthand\n    remove: function (element: any, key: string) {\n      const ret = this._storage.get(element).delete(key);\n      if (!(this._storage.get(element).size === 0)) {\n        this._storage.delete(element);\n      }\n      return ret;\n    }\n  };\n\n  public static isFunction(obj: any) {\n    return typeof obj === 'function' && typeof obj.nodeType !== 'number' && typeof obj.item !== 'function';\n  }\n\n  public static isPlainObject(obj: any) {\n    if (!obj || Utils.toString.call(obj) !== '[object Object]') {\n      return false;\n    }\n\n    const proto = Utils.getProto(obj);\n    if (!proto) {\n      return true;\n    }\n    const Ctor = Utils.hasOwn.call(proto, 'constructor') && proto.constructor;\n    return typeof Ctor === 'function' && Utils.fnToString.call(Ctor) === Utils.ObjectFunctionString;\n  }\n\n  public static calculateAvailableSpace(element: HTMLElement) {\n    let bottom = 0, top = 0, left = 0, right = 0;\n\n    const windowHeight = window.innerHeight || 0;\n    const windowWidth = window.innerWidth || 0;\n    const scrollPosition = Utils.windowScrollPosition();\n    const pageScrollTop = scrollPosition.top;\n    const pageScrollLeft = scrollPosition.left;\n    const elmOffset = Utils.offset(element);\n\n    if (elmOffset) {\n      const elementOffsetTop = elmOffset.top || 0;\n      const elementOffsetLeft = elmOffset.left || 0;\n      top = elementOffsetTop - pageScrollTop;\n      bottom = windowHeight - (elementOffsetTop - pageScrollTop);\n      left = elementOffsetLeft - pageScrollLeft;\n      right = windowWidth - (elementOffsetLeft - pageScrollLeft);\n    }\n\n    return { top, bottom, left, right };\n  }\n\n  public static extend<T = any>(...args: any[]): T {\n    let options, name, src, copy, copyIsArray, clone,\n      target = args[0],\n      i = 1,\n      deep = false;\n    const length = args.length;\n\n    if (typeof target === 'boolean') {\n      deep = target;\n      target = args[i] || {};\n      i++;\n    } else {\n      target = target || {};\n    }\n    if (typeof target !== 'object' && !Utils.isFunction(target)) {\n      target = {};\n    }\n    if (i === length) {\n      // @ts-ignore\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      target = this;\n      i--;\n    }\n    for (; i < length; i++) {\n      if (Utils.isDefined(options = args[i])) {\n        for (name in options) {\n          copy = options[name];\n          if (name === '__proto__' || target === copy) {\n            continue;\n          }\n          if (deep && copy && (Utils.isPlainObject(copy) ||\n            (copyIsArray = Array.isArray(copy)))) {\n            src = target[name];\n            if (copyIsArray && !Array.isArray(src)) {\n              clone = [];\n            } else if (!copyIsArray && !Utils.isPlainObject(src)) {\n              clone = {};\n            } else {\n              clone = src;\n            }\n            copyIsArray = false;\n            target[name] = Utils.extend(deep, clone, copy);\n          } else if (copy !== undefined) {\n            target[name] = copy;\n          }\n        }\n      }\n    }\n    return target as T;\n  }\n\n  /**\n   * Create a DOM Element with any optional attributes or properties.\n   * It will only accept valid DOM element properties that `createElement` would accept.\n   * For example: `createDomElement('div', { className: 'my-css-class' })`,\n   * for style or dataset you need to use nested object `{ style: { display: 'none' }}\n   * The last argument is to optionally append the created element to a parent container element.\n   * @param {String} tagName - html tag\n   * @param {Object} options - element properties\n   * @param {[HTMLElement]} appendToParent - parent element to append to\n   */\n  public static createDomElement<T extends keyof HTMLElementTagNameMap, K extends keyof HTMLElementTagNameMap[T]>(\n    tagName: T,\n    elementOptions?: null | { [P in K]: InferDOMType<HTMLElementTagNameMap[T][P]> },\n    appendToParent?: Element\n  ): HTMLElementTagNameMap[T] {\n    const elm = document.createElement<T>(tagName);\n\n    if (elementOptions) {\n      Object.keys(elementOptions).forEach((elmOptionKey) => {\n        if (elmOptionKey === 'innerHTML') {\n          console.warn(`[SlickGrid] For better CSP (Content Security Policy) support, do not use \"innerHTML\" directly in \"createDomElement('${tagName}', { innerHTML: 'some html'})\"` +\n            `, it is better as separate assignment: \"const elm = createDomElement('span'); elm.innerHTML = 'some html';\"`);\n        }\n\n        const elmValue = elementOptions[elmOptionKey as keyof typeof elementOptions];\n        if (typeof elmValue === 'object') {\n          Object.assign(elm[elmOptionKey as K] as object, elmValue);\n        } else {\n          elm[elmOptionKey as K] = (elementOptions as any)[elmOptionKey as keyof typeof elementOptions];\n        }\n      });\n    }\n    if (appendToParent?.appendChild) {\n      appendToParent.appendChild(elm);\n    }\n    return elm;\n  }\n\n  /**\n   * From any input provided, return the HTML string (when a string is provided, it will be returned \"as is\" but when it's a number it will be converted to string)\n   * When detecting HTMLElement/DocumentFragment, we can also specify which HTML type to retrieve innerHTML or outerHTML.\n   * We can get the HTML by looping through all fragment `childNodes`\n   * @param {DocumentFragment | HTMLElement | string | number} input\n   * @param {'innerHTML' | 'outerHTML'} [type] - when the input is a DocumentFragment or HTMLElement, which type of HTML do you want to return? 'innerHTML' or 'outerHTML'\n   * @returns {String}\n   */\n  public static getHtmlStringOutput(input: DocumentFragment | HTMLElement | string | number, type: 'innerHTML' | 'outerHTML' = 'innerHTML'): string {\n    if (input instanceof DocumentFragment) {\n      // a DocumentFragment doesn't have innerHTML/outerHTML, but we can loop through all children and concatenate them all to an HTML string\n      return [].map.call(input.childNodes, (x: HTMLElement) => x[type]).join('') || input.textContent || '';\n    } else if (input instanceof HTMLElement) {\n      return input[type];\n    }\n    return String(input) ?? ''; // reaching this line means it's already a string (or number) so just return it as string\n  }\n\n  public static emptyElement<T extends Element = Element>(element?: T | null): T | undefined | null {\n    while (element?.firstChild) {\n      element.removeChild(element.firstChild);\n    }\n    return element;\n  }\n\n  /**\n   * Accepts string containing the class or space-separated list of classes, and\n   * returns list of individual classes.\n   * Method properly takes into account extra whitespaces in the `className`\n   * e.g.: \" class1    class2   \" => will result in `['class1', 'class2']`.\n   * @param {String} className - space separated list of class names\n   */\n  public static classNameToList(className = ''): string[] {\n    return className.split(' ').filter(cls => cls);\n  }\n\n  public static innerSize(elm: HTMLElement, type: 'height' | 'width') {\n    let size = 0;\n\n    if (elm) {\n      const clientSize = type === 'height' ? 'clientHeight' : 'clientWidth';\n      const sides = type === 'height' ? ['top', 'bottom'] : ['left', 'right'];\n      size = elm[clientSize];\n      for (const side of sides) {\n        const sideSize = (parseFloat(Utils.getElementProp(elm, `padding-${side}`) || '') || 0);\n        size -= sideSize;\n      }\n    }\n    return size;\n  }\n\n  public static isDefined<T>(value: T | undefined | null): value is T {\n    return <T>value !== undefined && <T>value !== null && <T>value !== '';\n  }\n\n  public static getElementProp(elm: HTMLElement & { getComputedStyle?: () => CSSStyleDeclaration }, property: string) {\n    if (elm?.getComputedStyle) {\n      return window.getComputedStyle(elm, null).getPropertyValue(property);\n    }\n    return null;\n  }\n\n  /**\n   * Get the function details (param & body) of a function.\n   * It supports regular function and also ES6 arrow functions\n   * @param {Function} fn - function to analyze\n   * @param {Boolean} [addReturn] - when using ES6 function as single liner, we could add the missing `return ...`\n   * @returns\n   */\n  public static getFunctionDetails(fn: AnyFunction, addReturn = true) {\n    let isAsyncFn = false;\n\n    const getFunctionBody = (func: AnyFunction) => {\n      const fnStr = func.toString();\n      isAsyncFn = fnStr.includes('async ');\n\n      // when fn is one liner arrow fn returning an object in brackets e.g. `() => ({ hello: 'world' })`\n      if ((fnStr.replaceAll(' ', '').includes('=>({'))) {\n        const matches = fnStr.match(/(({.*}))/g) || [];\n        return matches.length >= 1 ? `return ${matches[0]!.trimStart()}` : fnStr;\n      }\n      const isOneLinerArrowFn = (!fnStr.includes('{') && fnStr.includes('=>'));\n      const body = fnStr.substring(\n        (fnStr.indexOf('{') + 1) || (fnStr.indexOf('=>') + 2),\n        fnStr.includes('}') ? fnStr.lastIndexOf('}') : fnStr.length\n      );\n      if (addReturn && isOneLinerArrowFn && !body.startsWith('return')) {\n        return 'return ' + body.trimStart(); // add the `return ...` to the body for ES6 arrow fn\n      }\n      return body;\n    };\n\n    const getFunctionParams = (func: AnyFunction): string[] => {\n      const STRIP_COMMENTS = /(\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/)|(\\s*=[^,\\)]*(('(?:\\\\'|[^'\\r\\n])*')|(\"(?:\\\\\"|[^\"\\r\\n])*\"))|(\\s*=[^,\\)]*))/mg;\n      const ARG_NAMES = /([^\\s,]+)/g;\n      const fnStr = func.toString().replace(STRIP_COMMENTS, '');\n      return fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(ARG_NAMES) ?? [];\n    };\n\n    return {\n      params: getFunctionParams(fn),\n      body: getFunctionBody(fn),\n      isAsync: isAsyncFn,\n    };\n  }\n\n  public static insertAfterElement(referenceNode: HTMLElement, newNode: HTMLElement) {\n    referenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\n  }\n\n  public static isEmptyObject(obj: any) {\n    if (obj === null || obj === undefined) {\n      return true;\n    }\n    return Object.entries(obj).length === 0;\n  }\n\n  public static noop() { }\n\n  public static offset(el: HTMLElement | null) {\n    if (!el || !el.getBoundingClientRect) {\n      return undefined;\n    }\n    const box = el.getBoundingClientRect();\n    const docElem = document.documentElement;\n\n    return {\n      top: box.top + window.pageYOffset - docElem.clientTop,\n      left: box.left + window.pageXOffset - docElem.clientLeft\n    };\n  }\n\n  public static windowScrollPosition() {\n    return {\n      left: window.pageXOffset || document.documentElement.scrollLeft || 0,\n      top: window.pageYOffset || document.documentElement.scrollTop || 0,\n    };\n  }\n\n  public static width(el: HTMLElement, value?: number | string): number | void {\n    if (!el || !el.getBoundingClientRect) { return; }\n    if (value === undefined) {\n      return el.getBoundingClientRect().width;\n    }\n    Utils.setStyleSize(el, 'width', value);\n  }\n\n  public static height(el: HTMLElement, value?: number | string): number | void {\n    if (!el) { return; }\n    if (value === undefined) {\n      return el.getBoundingClientRect().height;\n    }\n    Utils.setStyleSize(el, 'height', value);\n  }\n\n  public static setStyleSize(el: HTMLElement, style: string, val?: number | string | Function) {\n    if (typeof val === 'function') {\n      val = val();\n    } else if (typeof val === 'string') {\n      el.style[style as CSSStyleDeclarationWritable] = val;\n    } else {\n      el.style[style as CSSStyleDeclarationWritable] = val + 'px';\n    }\n  }\n\n  public static contains(parent: HTMLElement, child: HTMLElement) {\n    if (!parent || !child) {\n      return false;\n    }\n\n    const parentList = Utils.parents(child);\n    return !parentList.every((p) => {\n      if (parent === p) {\n        return false;\n      }\n      return true;\n    });\n  }\n\n  public static isHidden(el: HTMLElement) {\n    return el.offsetWidth === 0 && el.offsetHeight === 0;\n  }\n\n  public static parents(el: HTMLElement | ParentNode, selector?: string) {\n    const parents: Array<HTMLElement | ParentNode> = [];\n    const visible = selector === ':visible';\n    const hidden = selector === ':hidden';\n\n    while ((el = el.parentNode as ParentNode) && el !== document) {\n      if (!el || !el.parentNode) {\n        break;\n      }\n      if (hidden) {\n        if (Utils.isHidden(el as HTMLElement)) {\n          parents.push(el);\n        }\n      } else if (visible) {\n        if (!Utils.isHidden(el as HTMLElement)) {\n          parents.push(el);\n        }\n      } else if (!selector || (el as any).matches(selector)) {\n        parents.push(el);\n      }\n    }\n    return parents;\n  }\n\n  public static toFloat(value: string | number) {\n    const x = parseFloat(value as string);\n    if (isNaN(x)) {\n      return 0;\n    }\n    return x;\n  }\n\n  public static show(el: HTMLElement | HTMLElement[], type = '') {\n    if (Array.isArray(el)) {\n      el.forEach((e) => e.style.display = type);\n    } else {\n      el.style.display = type;\n    }\n  }\n\n  public static hide(el: HTMLElement | HTMLElement[]) {\n    if (Array.isArray(el)) {\n      el.forEach((e) => e.style.display = 'none');\n    } else {\n      el.style.display = 'none';\n    }\n  }\n\n  public static slideUp(el: HTMLElement | HTMLElement[], callback: Function) {\n    return Utils.slideAnimation(el, 'slideUp', callback);\n  }\n\n  public static slideDown(el: HTMLElement | HTMLElement[], callback: Function) {\n    return Utils.slideAnimation(el, 'slideDown', callback);\n  }\n\n  public static slideAnimation(el: HTMLElement | HTMLElement[], slideDirection: 'slideDown' | 'slideUp', callback: Function) {\n    if ((window as any).jQuery !== undefined) {\n      (window as any).jQuery(el)[slideDirection]('fast', callback);\n      return;\n    }\n    (slideDirection === 'slideUp') ? Utils.hide(el) : Utils.show(el);\n    callback();\n  }\n\n  public static applyDefaults(targetObj: any, srcObj: any) {\n    if (typeof srcObj === 'object') {\n      Object.keys(srcObj).forEach(key => {\n        if (srcObj.hasOwnProperty(key) && !targetObj.hasOwnProperty(key)) {\n          targetObj[key] = srcObj[key];\n        }\n      });\n    }\n  }\n\n  /**\n   * User could optionally add PubSub Service to SlickEvent\n   * When it is defined then a SlickEvent `notify()` call will also dispatch it by using the PubSub publish() method\n   * @param {BasePubSub} [pubSubService]\n   * @param {*} scope\n   */\n  public static addSlickEventPubSubWhenDefined<T = any>(pubSub?: BasePubSub, scope?: T) {\n    if (pubSub) {\n      for (const prop in scope) {\n        if (scope[prop] instanceof SlickEvent && typeof (scope[prop] as SlickEvent).setPubSubService === 'function') {\n          (scope[prop] as SlickEvent).setPubSubService(pubSub);\n        }\n      }\n    }\n  }\n}\n\nexport const SlickGlobalEditorLock = new SlickEditorLock();\n\n// export Slick namespace on both global & window objects\nconst SlickCore = {\n  Event: SlickEvent,\n  EventData: SlickEventData,\n  EventHandler: SlickEventHandler,\n  Range: SlickRange,\n  NonDataRow: SlickNonDataItem,\n  Group: SlickGroup,\n  GroupTotals: SlickGroupTotals,\n  EditorLock: SlickEditorLock,\n  RegexSanitizer: regexSanitizer,\n\n  /**\n   * A global singleton editor lock.\n   * @class GlobalEditorLock\n   * @static\n   * @constructor\n   */\n  GlobalEditorLock: SlickGlobalEditorLock,\n\n  keyCode: {\n    SPACE: 8,\n    BACKSPACE: 8,\n    DELETE: 46,\n    DOWN: 40,\n    END: 35,\n    ENTER: 13,\n    ESCAPE: 27,\n    HOME: 36,\n    INSERT: 45,\n    LEFT: 37,\n    PAGE_DOWN: 34,\n    PAGE_UP: 33,\n    RIGHT: 39,\n    TAB: 9,\n    UP: 38,\n    A: 65\n  },\n  preClickClassName: 'slick-edit-preclick',\n\n  GridAutosizeColsMode: {\n    None: 'NOA',\n    LegacyOff: 'LOF',\n    LegacyForceFit: 'LFF',\n    IgnoreViewport: 'IGV',\n    FitColsToViewport: 'FCV',\n    FitViewportToCols: 'FVC'\n  },\n\n  'ColAutosizeMode': {\n    Locked: 'LCK',\n    Guide: 'GUI',\n    Content: 'CON',\n    ContentExpandOnly: 'CXO',\n    ContentIntelligent: 'CTI'\n  },\n\n  'RowSelectionMode': {\n    FirstRow: 'FS1',\n    FirstNRows: 'FSN',\n    AllRows: 'ALL',\n    LastRow: 'LS1'\n  },\n\n  'ValueFilterMode': {\n    None: 'NONE',\n    DeDuplicate: 'DEDP',\n    GetGreatestAndSub: 'GR8T',\n    GetLongestTextAndSub: 'LNSB',\n    GetLongestText: 'LNSC'\n  },\n\n  WidthEvalMode: {\n    Auto: 'AUTO',\n    TextOnly: 'CANV',\n    HTML: 'HTML'\n  }\n};\n\nexport const {\n  EditorLock, Event, EventData, EventHandler, Group, GroupTotals, NonDataRow, Range,\n  RegexSanitizer, GlobalEditorLock, keyCode, preClickClassName, GridAutosizeColsMode, ColAutosizeMode,\n  RowSelectionMode, ValueFilterMode, WidthEvalMode\n} = SlickCore;\n\n/*  eslint-disable no-undef */\n// also add to global object when exist\nif (IIFE_ONLY && typeof global !== 'undefined' && window.Slick) {\n  global.Slick = window.Slick;\n}\n/*  eslint-enable no-undef */\n", "import { BindingEventService as BindingEventService_, Event as SlickEvent_, type SlickEventData, Utils as Utils_ } from '../slick.core';\nimport type { Column, ColumnPickerOption, DOMMouseOrTouchEvent, GridOption, OnColumnsChangedArgs } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * A control to add a Column Picker (right+click on any column header to reveal the column picker)\n * NOTE: this a simplified and updated version of slick.columnpicker.js\n *\n * USAGE:\n *\n * Add the slick.columnpicker.(js|css) files and register it with the grid.\n *\n * Available options, by defining a columnPicker object:\n *\n *  let options = {\n *    enableCellNavigation: true,\n *    columnPicker: {\n *      columnTitle: \"Columns\",                 // default to empty string\n *\n *      // the last 2 checkboxes titles\n *      hideForceFitButton: false,              // show/hide checkbox near the end \"Force Fit Columns\" (default:false)\n *      hideSyncResizeButton: false,            // show/hide checkbox near the end \"Synchronous Resize\" (default:false)\n *      forceFitTitle: \"Force fit columns\",     // default to \"Force fit columns\"\n *      headerColumnValueExtractor: \"Extract the column label\" // default to column.name\n *      syncResizeTitle: \"Synchronous resize\",  // default to \"Synchronous resize\"\n *    }\n *  };\n */\n\nexport class SlickColumnMenu {\n  // --\n  // public API\n  onColumnsChanged = new SlickEvent<OnColumnsChangedArgs>('onColumnsChanged');\n\n  // --\n  // protected props\n  protected _gridUid: string;\n  protected _columnTitleElm!: HTMLElement;\n  protected _listElm!: HTMLElement;\n  protected _menuElm!: HTMLElement;\n  protected _columnCheckboxes: HTMLInputElement[] = [];\n  protected _bindingEventService = new BindingEventService();\n  protected _options: GridOption;\n  protected _defaults: ColumnPickerOption = {\n    fadeSpeed: 250,\n\n    // the last 2 checkboxes titles\n    hideForceFitButton: false,\n    hideSyncResizeButton: false,\n    forceFitTitle: 'Force fit columns',\n    syncResizeTitle: 'Synchronous resize',\n    headerColumnValueExtractor: (columnDef: Column) => Utils.getHtmlStringOutput(columnDef.name || '', 'innerHTML'),\n  };\n\n  constructor(protected columns: Column[], protected readonly grid: SlickGrid, options: GridOption) {\n    this._gridUid = grid.getUID();\n    this._options = Utils.extend({}, this._defaults, options);\n    this.init(this.grid);\n  }\n\n  init(grid: SlickGrid) {\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    grid.onHeaderContextMenu.subscribe(this.handleHeaderContextMenu.bind(this));\n    grid.onColumnsReordered.subscribe(this.updateColumnOrder.bind(this));\n\n    this._menuElm = document.createElement('div');\n    this._menuElm.className = `slick-columnpicker ${this._gridUid}`;\n    this._menuElm.style.display = 'none';\n    document.body.appendChild(this._menuElm);\n\n    const buttonElm = document.createElement('button');\n    buttonElm.type = 'button';\n    buttonElm.className = 'close';\n    buttonElm.dataset.dismiss = 'slick-columnpicker';\n    buttonElm.ariaLabel = 'Close';\n\n    const spanCloseElm = document.createElement('span');\n    spanCloseElm.className = 'close';\n    spanCloseElm.ariaHidden = 'true';\n    spanCloseElm.textContent = '\u00D7';\n    buttonElm.appendChild(spanCloseElm);\n    this._menuElm.appendChild(buttonElm);\n\n    // user could pass a title on top of the columns list\n    if (this._options.columnPickerTitle || (this._options.columnPicker?.columnTitle)) {\n      const columnTitle = this._options.columnPickerTitle || this._options.columnPicker?.columnTitle;\n      this._columnTitleElm = document.createElement('div');\n      this._columnTitleElm.className = 'slick-gridmenu-custom';\n      this._columnTitleElm.textContent = columnTitle || '';\n      this._menuElm.appendChild(this._columnTitleElm);\n    }\n\n    this._bindingEventService.bind(this._menuElm, 'click', this.updateColumn.bind(this) as EventListener);\n\n    this._listElm = document.createElement('span');\n    this._listElm.className = 'slick-columnpicker-list';\n\n    // Hide the menu on outside click.\n    this._bindingEventService.bind(document.body, 'mousedown', this.handleBodyMouseDown.bind(this) as EventListener);\n\n    // destroy the picker if user leaves the page\n    this._bindingEventService.bind(document.body, 'beforeunload', this.destroy.bind(this));\n  }\n\n  destroy() {\n    this.grid.onHeaderContextMenu.unsubscribe(this.handleHeaderContextMenu.bind(this));\n    this.grid.onColumnsReordered.unsubscribe(this.updateColumnOrder.bind(this));\n    this._bindingEventService.unbindAll();\n    this._listElm?.remove();\n    this._menuElm?.remove();\n  }\n\n  handleBodyMouseDown(e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    if ((this._menuElm !== e.target && !(this._menuElm && this._menuElm.contains(e.target))) || e.target.className === 'close') {\n      this._menuElm.setAttribute('aria-expanded', 'false');\n      this._menuElm.style.display = 'none';\n    }\n  }\n\n  handleHeaderContextMenu(e: SlickEventData) {\n    e.preventDefault();\n    Utils.emptyElement(this._listElm);\n    this.updateColumnOrder();\n    this._columnCheckboxes = [];\n\n    let columnId, columnLabel, excludeCssClass;\n    for (let i = 0; i < this.columns.length; i++) {\n      columnId = this.columns[i].id;\n      const colName: string = this.columns[i].name instanceof HTMLElement\n        ? (this.columns[i].name as HTMLElement).innerHTML\n        : (this.columns[i].name || '') as string;\n      excludeCssClass = this.columns[i].excludeFromColumnPicker ? 'hidden' : '';\n\n      const liElm = document.createElement('li');\n      liElm.className = excludeCssClass;\n      liElm.ariaLabel = colName;\n\n      const checkboxElm = document.createElement('input');\n      checkboxElm.type = 'checkbox';\n      checkboxElm.id = `${this._gridUid}colpicker-${columnId}`;\n      checkboxElm.dataset.columnid = String(this.columns[i].id);\n      liElm.appendChild(checkboxElm);\n\n      this._columnCheckboxes.push(checkboxElm);\n\n      if (Utils.isDefined(this.grid.getColumnIndex(columnId)) && !this.columns[i].hidden) {\n        checkboxElm.checked = true;\n      }\n\n      columnLabel = (this._options?.columnPicker?.headerColumnValueExtractor)\n        ? this._options.columnPicker.headerColumnValueExtractor(this.columns[i], this._options)\n        : this._defaults.headerColumnValueExtractor!(this.columns[i], this._options);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}colpicker-${columnId}`;\n      this.grid.applyHtmlCode(labelElm, columnLabel);\n      liElm.appendChild(labelElm);\n      this._listElm.appendChild(liElm);\n    }\n\n    if (this._options.columnPicker && (!this._options.columnPicker.hideForceFitButton || !this._options.columnPicker.hideSyncResizeButton)) {\n      this._listElm.appendChild(document.createElement('hr'));\n    }\n\n    if (!this._options.columnPicker?.hideForceFitButton) {\n      const forceFitTitle = this._options.columnPicker?.forceFitTitle || this._options.forceFitTitle;\n\n      const liElm = document.createElement('li');\n      liElm.ariaLabel = forceFitTitle || '';\n      this._listElm.appendChild(liElm);\n\n      const forceFitCheckboxElm = document.createElement('input');\n      forceFitCheckboxElm.type = 'checkbox';\n      forceFitCheckboxElm.id = `${this._gridUid}colpicker-forcefit`;\n      forceFitCheckboxElm.dataset.option = 'autoresize';\n      liElm.appendChild(forceFitCheckboxElm);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}colpicker-forcefit`;\n      labelElm.textContent = forceFitTitle || '';\n      liElm.appendChild(labelElm);\n\n      if (this.grid.getOptions().forceFitColumns) {\n        forceFitCheckboxElm.checked = true;\n      }\n    }\n\n    if (!this._options.columnPicker?.hideSyncResizeButton) {\n      const syncResizeTitle = this._options.columnPicker?.syncResizeTitle || this._options.syncResizeTitle;\n\n      const liElm = document.createElement('li');\n      liElm.ariaLabel = syncResizeTitle || '';\n      this._listElm.appendChild(liElm);\n\n      const syncResizeCheckboxElm = document.createElement('input');\n      syncResizeCheckboxElm.type = 'checkbox';\n      syncResizeCheckboxElm.id = `${this._gridUid}colpicker-syncresize`;\n      syncResizeCheckboxElm.dataset.option = 'syncresize';\n      liElm.appendChild(syncResizeCheckboxElm);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}colpicker-syncresize`;\n      labelElm.textContent = syncResizeTitle || '';\n      liElm.appendChild(labelElm);\n\n      if (this.grid.getOptions().syncColumnCellResize) {\n        syncResizeCheckboxElm.checked = true;\n      }\n    }\n\n    this.repositionMenu(e);\n  }\n\n  repositionMenu(event: DOMMouseOrTouchEvent<HTMLDivElement> | SlickEventData) {\n    const targetEvent = (event as TouchEvent)?.touches?.[0] || event;\n    this._menuElm.style.top = `${targetEvent.pageY - 10}px`;\n    this._menuElm.style.left = `${targetEvent.pageX - 10}px`;\n    this._menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY}px`;\n    this._menuElm.style.display = 'block';\n    this._menuElm.setAttribute('aria-expanded', 'true');\n    this._menuElm.appendChild(this._listElm);\n  }\n\n  updateColumnOrder() {\n    // Because columns can be reordered, we have to update the `columns`\n    // to reflect the new order, however we can't just take `grid.getColumns()`,\n    // as it does not include columns currently hidden by the picker.\n    // We create a new `columns` structure by leaving currently-hidden\n    // columns in their original ordinal position and interleaving the results\n    // of the current column sort.\n    const current = this.grid.getColumns().slice(0);\n    const ordered = new Array(this.columns.length);\n    for (let i = 0; i < ordered.length; i++) {\n      if (this.grid.getColumnIndex(this.columns[i].id) === undefined) {\n        // If the column doesn't return a value from getColumnIndex,\n        // it is hidden. Leave it in this position.\n        ordered[i] = this.columns[i];\n      } else {\n        // Otherwise, grab the next visible column.\n        ordered[i] = current.shift();\n      }\n    }\n    this.columns = ordered;\n  }\n\n  /** Update the Titles of each sections (command, customTitle, ...) */\n  updateAllTitles(pickerOptions: { columnTitle: string; }) {\n    this.grid.applyHtmlCode(this._columnTitleElm, pickerOptions.columnTitle);\n  }\n\n  updateColumn(e: DOMMouseOrTouchEvent<HTMLInputElement>) {\n    if (e.target.dataset.option === 'autoresize') {\n      // when calling setOptions, it will resize with ALL Columns (even the hidden ones)\n      // we can avoid this problem by keeping a reference to the visibleColumns before setOptions and then setColumns after\n      const previousVisibleColumns = this.getVisibleColumns();\n      const isChecked = e.target.checked;\n      this.grid.setOptions({ forceFitColumns: isChecked });\n      this.grid.setColumns(previousVisibleColumns);\n      return;\n    }\n\n    if (e.target.dataset.option === 'syncresize') {\n      if (e.target.checked) {\n        this.grid.setOptions({ syncColumnCellResize: true });\n      } else {\n        this.grid.setOptions({ syncColumnCellResize: false });\n      }\n      return;\n    }\n\n    if (e.target.type === 'checkbox') {\n      const isChecked = e.target.checked;\n      const columnId = e.target.dataset.columnid || '';\n      const visibleColumns: Column[] = [];\n      this._columnCheckboxes.forEach((columnCheckbox, idx) => {\n        if (this.columns[idx].hidden !== undefined) { this.columns[idx].hidden = !columnCheckbox.checked; }\n        if (columnCheckbox.checked) {\n          visibleColumns.push(this.columns[idx]);\n        }\n      });\n\n      if (!visibleColumns.length) {\n        e.target.checked = true;\n        return;\n      }\n\n      this.grid.setColumns(visibleColumns);\n      this.onColumnsChanged.notify({ columnId, showing: isChecked, allColumns: this.columns, columns: this.columns, visibleColumns, grid: this.grid });\n    }\n  }\n\n  setColumnVisibiliy(idxOrId: number | string, show: boolean) {\n    const idx = typeof idxOrId === 'number' ? idxOrId : this.getColumnIndexbyId(idxOrId);\n    let visibleColumns: Column[] = this.getVisibleColumns();\n    const col = this.columns[idx];\n    if (show) {\n      col.hidden = false;\n      visibleColumns.splice(idx, 0, col);\n    } else {\n      const newVisibleColumns: Column[] = [];\n      for (let i = 0; i < visibleColumns.length; i++) {\n        if (visibleColumns[i].id !== col.id) { newVisibleColumns.push(visibleColumns[i]); }\n      }\n      visibleColumns = newVisibleColumns;\n    }\n\n    this.grid.setColumns(visibleColumns);\n    this.onColumnsChanged.notify({ columnId: col.id, showing: show, allColumns: this.columns, columns: this.columns, visibleColumns, grid: this.grid });\n  }\n\n  getAllColumns() {\n    return this.columns;\n  }\n\n  getColumnbyId(id: number | string) {\n    for (let i = 0; i < this.columns.length; i++) {\n      if (this.columns[i].id === id) { return this.columns[i]; }\n    }\n    return null;\n  }\n\n  getColumnIndexbyId(id: number | string) {\n    for (let i = 0; i < this.columns.length; i++) {\n      if (this.columns[i].id === id) { return i; }\n    }\n    return -1;\n  }\n\n  /** visible columns, we can simply get them directly from the grid */\n  getVisibleColumns() {\n    return this.grid.getColumns();\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Controls = window.Slick.Controls || {};\n  window.Slick.Controls.ColumnPicker = SlickColumnMenu;\n}\n", "import { BindingEventService as BindingEventService_, Event as SlickEvent_, type SlickEventData, Utils as Utils_ } from '../slick.core';\nimport type { Column, ColumnPickerOption, DOMMouseOrTouchEvent, GridOption, OnColumnsChangedArgs } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * A control to add a Column Picker (right+click on any column header to reveal the column picker)\n * NOTE: this is the old 'complex' column pciker that hides columns by removing them from the grid\n *        for a more modern version that uses the column.hidden property and is a lot simpler, use slick.columnmenu.js\n *\n * USAGE:\n *\n * Add the slick.columnpicker.(js|css) files and register it with the grid.\n *\n * Available options, by defining a columnPicker object:\n *\n *  let options = {\n *    enableCellNavigation: true,\n *    columnPicker: {\n *      columnTitle: \"Columns\",                 // default to empty string\n *\n *      // the last 2 checkboxes titles\n *      hideForceFitButton: false,              // show/hide checkbox near the end \"Force Fit Columns\" (default:false)\n *      hideSyncResizeButton: false,            // show/hide checkbox near the end \"Synchronous Resize\" (default:false)\n *      forceFitTitle: \"Force fit columns\",     // default to \"Force fit columns\"\n *      headerColumnValueExtractor: \"Extract the column label\" // default to column.name\n *      syncResizeTitle: \"Synchronous resize\",  // default to \"Synchronous resize\"\n *    }\n *  };\n */\n\nexport class SlickColumnPicker {\n  // --\n  // public API\n  onColumnsChanged = new SlickEvent<OnColumnsChangedArgs>('onColumnsChanged');\n\n  // --\n  // protected props\n  protected _gridUid: string;\n  protected _columnTitleElm!: HTMLElement;\n  protected _listElm!: HTMLElement;\n  protected _menuElm!: HTMLElement;\n  protected _columnCheckboxes: HTMLInputElement[] = [];\n  protected _bindingEventService = new BindingEventService();\n  protected _gridOptions: GridOption;\n  protected _defaults: ColumnPickerOption = {\n    fadeSpeed: 250,\n\n    // the last 2 checkboxes titles\n    hideForceFitButton: false,\n    hideSyncResizeButton: false,\n    forceFitTitle: 'Force fit columns',\n    syncResizeTitle: 'Synchronous resize',\n    headerColumnValueExtractor: (columnDef: Column) => Utils.getHtmlStringOutput(columnDef.name || '', 'innerHTML'),\n  };\n\n  constructor(protected columns: Column[], protected readonly grid: SlickGrid, gridOptions: GridOption) {\n    this._gridUid = grid.getUID();\n    this._gridOptions = Utils.extend({}, this._defaults, gridOptions);\n    this.init(this.grid);\n  }\n\n  init(grid: SlickGrid) {\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    grid.onHeaderContextMenu.subscribe(this.handleHeaderContextMenu.bind(this));\n    grid.onColumnsReordered.subscribe(this.updateColumnOrder.bind(this));\n\n    this._menuElm = document.createElement('div');\n    this._menuElm.className = `slick-columnpicker ${this._gridUid}`;\n    this._menuElm.style.display = 'none';\n    document.body.appendChild(this._menuElm);\n\n    const buttonElm = document.createElement('button');\n    buttonElm.type = 'button';\n    buttonElm.className = 'close';\n    buttonElm.dataset.dismiss = 'slick-columnpicker';\n    buttonElm.ariaLabel = 'Close';\n\n    const spanCloseElm = document.createElement('span');\n    spanCloseElm.className = 'close';\n    spanCloseElm.ariaHidden = 'true';\n    spanCloseElm.textContent = '\u00D7';\n    buttonElm.appendChild(spanCloseElm);\n    this._menuElm.appendChild(buttonElm);\n\n    // user could pass a title on top of the columns list\n    if (this._gridOptions.columnPickerTitle || (this._gridOptions.columnPicker?.columnTitle)) {\n      const columnTitle = this._gridOptions.columnPickerTitle || this._gridOptions.columnPicker?.columnTitle;\n      this._columnTitleElm = document.createElement('div');\n      this._columnTitleElm.className = 'slick-gridmenu-custom';\n      this._columnTitleElm.textContent = columnTitle || '';\n      this._menuElm.appendChild(this._columnTitleElm);\n    }\n\n    this._bindingEventService.bind(this._menuElm, 'click', this.updateColumn.bind(this) as EventListener);\n\n    this._listElm = document.createElement('span');\n    this._listElm.className = 'slick-columnpicker-list';\n\n    // Hide the menu on outside click.\n    this._bindingEventService.bind(document.body, 'mousedown', this.handleBodyMouseDown.bind(this) as EventListener);\n\n    // destroy the picker if user leaves the page\n    this._bindingEventService.bind(document.body, 'beforeunload', this.destroy.bind(this));\n  }\n\n  destroy() {\n    this.grid.onHeaderContextMenu.unsubscribe(this.handleHeaderContextMenu.bind(this));\n    this.grid.onColumnsReordered.unsubscribe(this.updateColumnOrder.bind(this));\n    this._bindingEventService.unbindAll();\n    this._listElm?.remove();\n    this._menuElm?.remove();\n  }\n\n  protected handleBodyMouseDown(e: DOMMouseOrTouchEvent<HTMLElement>) {\n    if ((this._menuElm !== e.target && !this._menuElm?.contains(e.target)) || e.target.className === 'close') {\n      this._menuElm.setAttribute('aria-expanded', 'false');\n      this._menuElm.style.display = 'none';\n    }\n  }\n\n  protected handleHeaderContextMenu(e: SlickEventData) {\n    e.preventDefault();\n    Utils.emptyElement(this._listElm);\n    this.updateColumnOrder();\n    this._columnCheckboxes = [];\n\n    let columnId, columnLabel, excludeCssClass;\n    for (let i = 0; i < this.columns.length; i++) {\n      columnId = this.columns[i].id;\n      const colName: string = this.columns[i].name instanceof HTMLElement\n        ? (this.columns[i].name as HTMLElement).innerHTML\n        : (this.columns[i].name || '') as string;\n      excludeCssClass = this.columns[i].excludeFromColumnPicker ? 'hidden' : '';\n\n      const liElm = document.createElement('li');\n      liElm.className = excludeCssClass;\n      liElm.ariaLabel = colName;\n\n      const checkboxElm = document.createElement('input');\n      checkboxElm.type = 'checkbox';\n      checkboxElm.id = `${this._gridUid}colpicker-${columnId}`;\n      checkboxElm.dataset.columnid = String(this.columns[i].id);\n      liElm.appendChild(checkboxElm);\n\n      this._columnCheckboxes.push(checkboxElm);\n\n      if (Utils.isDefined(this.grid.getColumnIndex(columnId)) && !this.columns[i].hidden) {\n        checkboxElm.checked = true;\n      }\n\n      columnLabel = (this._gridOptions?.columnPicker?.headerColumnValueExtractor)\n        ? this._gridOptions.columnPicker.headerColumnValueExtractor(this.columns[i], this._gridOptions)\n        : this._defaults.headerColumnValueExtractor!(this.columns[i], this._gridOptions);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}colpicker-${columnId}`;\n      this.grid.applyHtmlCode(labelElm, columnLabel);\n      liElm.appendChild(labelElm);\n      this._listElm.appendChild(liElm);\n    }\n\n    if (this._gridOptions.columnPicker && (!this._gridOptions.columnPicker.hideForceFitButton || !this._gridOptions.columnPicker.hideSyncResizeButton)) {\n      this._listElm.appendChild(document.createElement('hr'));\n    }\n\n    if (!(this._gridOptions.columnPicker?.hideForceFitButton)) {\n      const forceFitTitle = this._gridOptions.columnPicker?.forceFitTitle || this._gridOptions.forceFitTitle;\n\n      const liElm = document.createElement('li');\n      liElm.ariaLabel = forceFitTitle || '';\n      this._listElm.appendChild(liElm);\n\n      const forceFitCheckboxElm = document.createElement('input');\n      forceFitCheckboxElm.type = 'checkbox';\n      forceFitCheckboxElm.id = `${this._gridUid}colpicker-forcefit`;\n      forceFitCheckboxElm.dataset.option = 'autoresize';\n      liElm.appendChild(forceFitCheckboxElm);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}colpicker-forcefit`;\n      labelElm.textContent = forceFitTitle || '';\n      liElm.appendChild(labelElm);\n\n      if (this.grid.getOptions().forceFitColumns) {\n        forceFitCheckboxElm.checked = true;\n      }\n    }\n\n    if (!(this._gridOptions.columnPicker?.hideSyncResizeButton)) {\n      const syncResizeTitle = (this._gridOptions.columnPicker?.syncResizeTitle) || this._gridOptions.syncResizeTitle;\n\n      const liElm = document.createElement('li');\n      liElm.ariaLabel = syncResizeTitle || '';\n      this._listElm.appendChild(liElm);\n\n      const syncResizeCheckboxElm = document.createElement('input');\n      syncResizeCheckboxElm.type = 'checkbox';\n      syncResizeCheckboxElm.id = `${this._gridUid}colpicker-syncresize`;\n      syncResizeCheckboxElm.dataset.option = 'syncresize';\n      liElm.appendChild(syncResizeCheckboxElm);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}colpicker-syncresize`;\n      labelElm.textContent = syncResizeTitle || '';\n      liElm.appendChild(labelElm);\n\n      if (this.grid.getOptions().syncColumnCellResize) {\n        syncResizeCheckboxElm.checked = true;\n      }\n    }\n\n    this.repositionMenu(e);\n  }\n\n  protected repositionMenu(event: DOMMouseOrTouchEvent<HTMLDivElement> | SlickEventData) {\n    const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\n    this._menuElm.style.top = `${targetEvent.pageY - 10}px`;\n    this._menuElm.style.left = `${targetEvent.pageX - 10}px`;\n    this._menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY}px`;\n    this._menuElm.style.display = 'block';\n    this._menuElm.setAttribute('aria-expanded', 'true');\n    this._menuElm.appendChild(this._listElm);\n  }\n\n  protected updateColumnOrder() {\n    // Because columns can be reordered, we have to update the `columns`\n    // to reflect the new order, however we can't just take `grid.getColumns()`,\n    // as it does not include columns currently hidden by the picker.\n    // We create a new `columns` structure by leaving currently-hidden\n    // columns in their original ordinal position and interleaving the results\n    // of the current column sort.\n    const current = this.grid.getColumns().slice(0);\n    const ordered = new Array(this.columns.length);\n    for (let i = 0; i < ordered.length; i++) {\n      if (this.grid.getColumnIndex(this.columns[i].id) === undefined) {\n        // If the column doesn't return a value from getColumnIndex,\n        // it is hidden. Leave it in this position.\n        ordered[i] = this.columns[i];\n      } else {\n        // Otherwise, grab the next visible column.\n        ordered[i] = current.shift();\n      }\n    }\n    this.columns = ordered;\n  }\n\n  /** Update the Titles of each sections (command, customTitle, ...) */\n  updateAllTitles(pickerOptions: { columnTitle: string; }) {\n    this.grid.applyHtmlCode(this._columnTitleElm, pickerOptions.columnTitle);\n  }\n\n  protected updateColumn(e: DOMMouseOrTouchEvent<HTMLInputElement>) {\n    if (e.target.dataset.option === 'autoresize') {\n      // when calling setOptions, it will resize with ALL Columns (even the hidden ones)\n      // we can avoid this problem by keeping a reference to the visibleColumns before setOptions and then setColumns after\n      const previousVisibleColumns = this.getVisibleColumns();\n      const isChecked: boolean = e.target.checked || false;\n      this.grid.setOptions({ forceFitColumns: isChecked });\n      this.grid.setColumns(previousVisibleColumns);\n      return;\n    }\n\n    if (e.target.dataset.option === 'syncresize') {\n      if (e.target.checked) {\n        this.grid.setOptions({ syncColumnCellResize: true });\n      } else {\n        this.grid.setOptions({ syncColumnCellResize: false });\n      }\n      return;\n    }\n\n    if (e.target.type === 'checkbox') {\n      const isChecked = e.target.checked;\n      const columnId = e.target.dataset.columnid || '';\n      const visibleColumns: Column[] = [];\n      this._columnCheckboxes.forEach((columnCheckbox, idx) => {\n        if (this.columns[idx].hidden !== undefined) { this.columns[idx].hidden = !columnCheckbox.checked; }\n        if (columnCheckbox.checked) {\n          visibleColumns.push(this.columns[idx]);\n        }\n      });\n\n      if (!visibleColumns.length) {\n        e.target.checked = true;\n        return;\n      }\n\n      this.grid.setColumns(visibleColumns);\n      this.onColumnsChanged.notify({ columnId, showing: isChecked, allColumns: this.columns, columns: this.columns, visibleColumns, grid: this.grid });\n    }\n  }\n\n  setColumnVisibiliy(idxOrId: number | string, show: boolean) {\n    const idx = typeof idxOrId === 'number' ? idxOrId : this.getColumnIndexbyId(idxOrId);\n    let visibleColumns = this.getVisibleColumns();\n    const col = this.columns[idx];\n    if (show) {\n      col.hidden = false;\n      visibleColumns.splice(idx, 0, col);\n    } else {\n      const newVisibleColumns: Column[] = [];\n      for (let i = 0; i < visibleColumns.length; i++) {\n        if (visibleColumns[i].id !== col.id) { newVisibleColumns.push(visibleColumns[i]); }\n      }\n      visibleColumns = newVisibleColumns;\n    }\n\n    this.grid.setColumns(visibleColumns);\n    this.onColumnsChanged.notify({ columnId: col.id, showing: show, allColumns: this.columns, columns: this.columns, visibleColumns, grid: this.grid });\n  }\n\n  getAllColumns() {\n    return this.columns;\n  }\n\n  getColumnbyId(id: number | string) {\n    for (let i = 0; i < this.columns.length; i++) {\n      if (this.columns[i].id === id) { return this.columns[i]; }\n    }\n    return null;\n  }\n\n  getColumnIndexbyId(id: number | string) {\n    for (let i = 0; i < this.columns.length; i++) {\n      if (this.columns[i].id === id) { return i; }\n    }\n    return -1;\n  }\n\n  /** visible columns, we can simply get them directly from the grid */\n  getVisibleColumns() {\n    return this.grid.getColumns();\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Controls = window.Slick.Controls || {};\n  window.Slick.Controls.ColumnPicker = SlickColumnPicker;\n}\n", "import type {\n  Column,\n  DOMMouseOrTouchEvent,\n  GridMenuCommandItemCallbackArgs,\n  GridMenuEventWithElementCallbackArgs,\n  GridMenuItem,\n  GridMenuOption,\n  GridOption,\n  MenuCommandItem,\n  onGridMenuColumnsChangedCallbackArgs\n} from '../models/index';\nimport { BindingEventService as BindingEventService_, SlickEvent as SlickEvent_, Utils as Utils_ } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * A control to add a Grid Menu (hambuger menu on top-right of the grid)\n *\n * USAGE:\n *\n * Add the slick.gridmenu.(js|css) files and register it with the grid.\n *\n * To specify a menu in a column header, extend the column definition like so:\n * let gridMenuControl = new Slick.Controls.GridMenu(columns, grid, options);\n *\n * Available grid options, by defining a gridMenu object:\n *\n *  let options = {\n *    enableCellNavigation: true,\n *    gridMenu: {\n *      commandTitle: \"Command List\",                // default to empty string\n *      columnTitle: \"Columns\",                     // default to empty string\n *      iconImage: \"some-image.png\",                // this is the Grid Menu icon (hamburger icon)\n *      iconCssClass: \"fa fa-bars\",                 // you can provide iconImage OR iconCssClass\n *      leaveOpen: false,                           // do we want to leave the Grid Menu open after a command execution? (false by default)\n *      menuWidth: 18,                              // width (icon) that will be use to resize the column header container (18 by default)\n *      contentMinWidth: 0,\t\t\t\t\t\t\t            // defaults to 0 (auto), minimum width of grid menu content (command, column list)\n *      marginBottom: 15,                           // defaults to 15, margin to use at the bottom of the grid when using max-height (default)\n *      resizeOnShowHeaderRow: false,               // false by default\n *      showButton: true,                           // true by default - it allows the user to control if the\n *                                                          // default gridMenu button (located on the top right corner by default CSS)\n *                                                          // should be created or omitted\n *      useClickToRepositionMenu: true,             // true by default\n *\n *      // the last 2 checkboxes titles\n *      hideForceFitButton: false,                  // show/hide checkbox near the end \"Force Fit Columns\"\n *      hideSyncResizeButton: false,                // show/hide checkbox near the end \"Synchronous Resize\"\n *      forceFitTitle: \"Force fit columns\",         // default to \"Force fit columns\"\n *      syncResizeTitle: \"Synchronous resize\",      // default to \"Synchronous resize\"\n *\n *      commandItems: [\n *        {\n *          // command menu item options\n *        },\n *        {\n *          // command menu item options\n *        }\n *      ]\n *    }\n *  };\n *\n *\n * Available menu options:\n *    hideForceFitButton:         Hide the \"Force fit columns\" button (defaults to false)\n *    hideSyncResizeButton:       Hide the \"Synchronous resize\" button (defaults to false)\n *    forceFitTitle:              Text of the title \"Force fit columns\"\n *    contentMinWidth:\t\t\t\t\t\tminimum width of grid menu content (command, column list), defaults to 0 (auto)\n *    height:                     Height of the Grid Menu content, when provided it will be used instead of the max-height (defaults to undefined)\n *    menuWidth:                  Grid menu button width (defaults to 18)\n *    resizeOnShowHeaderRow:      Do we want to resize on the show header row event\n *    syncResizeTitle:            Text of the title \"Synchronous resize\"\n *    useClickToRepositionMenu:   Use the Click offset to reposition the Grid Menu (defaults to true), when set to False it will use the icon offset to reposition the grid menu\n *    menuUsabilityOverride:      Callback method that user can override the default behavior of enabling/disabling the menu from being usable (must be combined with a custom formatter)\n *    marginBottom:               Margin to use at the bottom of the grid menu, only in effect when height is undefined (defaults to 15)\n *    subItemChevronClass:        CSS class that can be added on the right side of a sub-item parent (typically a chevron-right icon)\n *    subMenuOpenByEvent:         defaults to \"mouseover\", what event type shoud we use to open sub-menu(s), 2 options are available: \"mouseover\" or \"click\"\n *\n * Available command menu item options:\n *    action:                     Optionally define a callback function that gets executed when item is chosen (and/or use the onCommand event)\n *    title:                      Menu item text.\n *    divider:                    Whether the current item is a divider, not an actual command.\n *    disabled:                   Whether the item/command is disabled.\n *    hidden:                     Whether the item/command is hidden.\n *    tooltip:                    Item tooltip.\n *    command:                    A command identifier to be passed to the onCommand event handlers.\n *    cssClass:                   A CSS class to be added to the menu item container.\n *    iconCssClass:               A CSS class to be added to the menu item icon.\n *    iconImage:                  A url to the icon image.\n *    textCssClass:               A CSS class to be added to the menu item text.\n *    subMenuTitle:               Optional sub-menu title that will shows up when sub-menu commmands/options list is opened\n *    subMenuTitleCssClass:       Optional sub-menu title CSS class to use with `subMenuTitle`\n *    itemVisibilityOverride:     Callback method that user can override the default behavior of showing/hiding an item from the list\n *    itemUsabilityOverride:      Callback method that user can override the default behavior of enabling/disabling an item from the list\n *\n *\n * The plugin exposes the following events:\n *\n *    onAfterMenuShow:   Fired after the menu is shown.  You can customize the menu or dismiss it by returning false.\n *      * ONLY works with a JS event (as per slick.core code), so we cannot notify when it's a button event (when grid menu is attached to an external button, not the hamburger menu)\n *        Event args:\n *            grid:     Reference to the grid.\n *            column:   Column definition.\n *            menu:     Menu options.  Note that you can change the menu items here.\n *\n *    onBeforeMenuShow:   Fired before the menu is shown.  You can customize the menu or dismiss it by returning false.\n *      * ONLY works with a JS event (as per slick.core code), so we cannot notify when it's a button event (when grid menu is attached to an external button, not the hamburger menu)\n *        Event args:\n *            grid:     Reference to the grid.\n *            column:   Column definition.\n *            menu:     Menu options.  Note that you can change the menu items here.\n *\n *    onMenuClose:      Fired when the menu is closing.\n *        Event args:\n *            grid:     Reference to the grid.\n *            column:   Column definition.\n *            menu:     Menu options.  Note that you can change the menu items here.\n *\n *    onCommand:    Fired on menu item click for buttons with 'command' specified.\n *        Event args:\n *            grid:     Reference to the grid.\n *            column:   Column definition.\n *            command:  Button command identified.\n *            button:   Button options.  Note that you can change the button options in your\n *                      event handler, and the column header will be automatically updated to\n *                      reflect them.  This is useful if you want to implement something like a\n *                      toggle button.\n */\n\nexport class SlickGridMenu {\n  // --\n  // public API\n  onAfterMenuShow = new SlickEvent<GridMenuEventWithElementCallbackArgs>('onAfterMenuShow');\n  onBeforeMenuShow = new SlickEvent<GridMenuEventWithElementCallbackArgs>('onBeforeMenuShow');\n  onMenuClose = new SlickEvent<GridMenuEventWithElementCallbackArgs>('onMenuClose');\n  onCommand = new SlickEvent<GridMenuCommandItemCallbackArgs>('onCommand');\n  onColumnsChanged = new SlickEvent<onGridMenuColumnsChangedCallbackArgs>('onColumnsChanged');\n\n  // --\n  // protected props\n  protected _bindingEventService: BindingEventService_;\n  protected _gridOptions: GridOption;\n  protected _gridUid: string;\n  protected _isMenuOpen = false;\n  protected _columnCheckboxes: HTMLInputElement[] = [];\n  protected _columnTitleElm!: HTMLElement;\n  protected _commandTitleElm!: HTMLElement;\n  protected _commandListElm!: HTMLDivElement;\n  protected _headerElm: HTMLDivElement | null = null;\n  protected _listElm!: HTMLElement;\n  protected _buttonElm!: HTMLElement;\n  protected _menuElm!: HTMLElement;\n  protected _subMenuParentId = '';\n  protected _gridMenuOptions: GridMenuOption | null = null;\n  protected _defaults: GridMenuOption = {\n    showButton: true,\n    hideForceFitButton: false,\n    hideSyncResizeButton: false,\n    forceFitTitle: 'Force fit columns',\n    marginBottom: 15,\n    menuWidth: 18,\n    contentMinWidth: 0,\n    resizeOnShowHeaderRow: false,\n    subMenuOpenByEvent: 'mouseover',\n    syncResizeTitle: 'Synchronous resize',\n    useClickToRepositionMenu: true,\n    headerColumnValueExtractor: (columnDef: Column) => Utils.getHtmlStringOutput(columnDef.name || '', 'innerHTML'),\n  };\n\n  constructor(protected columns: Column[], protected readonly grid: SlickGrid, gridOptions: GridOption) {\n    this._gridUid = grid.getUID();\n    this._gridOptions = gridOptions;\n    this._gridMenuOptions = Utils.extend({}, this._defaults, gridOptions.gridMenu);\n    this._bindingEventService = new BindingEventService();\n\n    // when a grid optionally changes from a regular grid to a frozen grid, we need to destroy & recreate the grid menu\n    // we do this change because the Grid Menu is on the left container for a regular grid, it is however on the right container for a frozen grid\n    grid.onSetOptions.subscribe((_e, args) => {\n      if (args && args.optionsBefore && args.optionsAfter) {\n        const switchedFromRegularToFrozen = args.optionsBefore.frozenColumn! >= 0 && args.optionsAfter.frozenColumn === -1;\n        const switchedFromFrozenToRegular = args.optionsBefore.frozenColumn === -1 && args.optionsAfter.frozenColumn! >= 0;\n        if (switchedFromRegularToFrozen || switchedFromFrozenToRegular) {\n          this.recreateGridMenu();\n        }\n      }\n    });\n    this.init(this.grid);\n  }\n\n  init(grid: SlickGrid) {\n    this._gridOptions = grid.getOptions();\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this.createGridMenu();\n\n    if (this._gridMenuOptions?.customItems || this._gridMenuOptions?.customTitle) {\n      console.warn('[SlickGrid] Grid Menu \"customItems\" and \"customTitle\" were deprecated to align with other Menu plugins, please use \"commandItems\" and \"commandTitle\" instead.');\n    }\n\n    // subscribe to the grid, when it's destroyed, we should also destroy the Grid Menu\n    grid.onBeforeDestroy.subscribe(this.destroy.bind(this));\n  }\n\n  setOptions(newOptions: GridMenuOption) {\n    this._gridMenuOptions = Utils.extend({}, this._gridMenuOptions, newOptions);\n  }\n\n  protected createGridMenu() {\n    const gridMenuWidth = (this._gridMenuOptions?.menuWidth) || this._defaults.menuWidth;\n    if (this._gridOptions && this._gridOptions.hasOwnProperty('frozenColumn') && this._gridOptions.frozenColumn! >= 0) {\n      this._headerElm = document.querySelector(`.${this._gridUid} .slick-header-right`);\n    } else {\n      this._headerElm = document.querySelector(`.${this._gridUid} .slick-header-left`);\n    }\n    this._headerElm!.style.width = `calc(100% - ${gridMenuWidth}px)`;\n\n    // if header row is enabled, we need to resize its width also\n    const enableResizeHeaderRow = (Utils.isDefined(this._gridMenuOptions?.resizeOnShowHeaderRow)) ? this._gridMenuOptions!.resizeOnShowHeaderRow : this._defaults.resizeOnShowHeaderRow;\n    if (enableResizeHeaderRow && this._gridOptions.showHeaderRow) {\n      const headerRow = document.querySelector<HTMLDivElement>(`.${this._gridUid}.slick-headerrow`);\n      if (headerRow) {\n        headerRow.style.width = `calc(100% - ${gridMenuWidth}px)`;\n      }\n    }\n\n    const showButton = (this._gridMenuOptions?.showButton !== undefined) ? this._gridMenuOptions.showButton : this._defaults.showButton;\n    if (showButton) {\n      this._buttonElm = document.createElement('button');\n      this._buttonElm.className = 'slick-gridmenu-button';\n      this._buttonElm.ariaLabel = 'Grid Menu';\n\n      if (this._gridMenuOptions?.iconCssClass) {\n        this._buttonElm.classList.add(...Utils.classNameToList(this._gridMenuOptions.iconCssClass));\n      } else {\n        const iconImageElm = document.createElement('img');\n        iconImageElm.src = (this._gridMenuOptions?.iconImage) ? this._gridMenuOptions.iconImage : '../images/drag-handle.png';\n        this._buttonElm.appendChild(iconImageElm);\n      }\n\n      this._headerElm!.parentElement!.insertBefore(this._buttonElm, this._headerElm!.parentElement!.firstChild);\n\n      // add on click handler for the Grid Menu itself\n      this._bindingEventService.bind(this._buttonElm, 'click', this.showGridMenu.bind(this) as EventListener);\n    }\n\n    this._menuElm = this.createMenu(0);\n    this.populateColumnPicker();\n    document.body.appendChild(this._menuElm);\n\n    // Hide the menu on outside click.\n    this._bindingEventService.bind(document.body, 'mousedown', this.handleBodyMouseDown.bind(this) as EventListener);\n\n    // destroy the picker if user leaves the page\n    this._bindingEventService.bind(document.body, 'beforeunload', this.destroy.bind(this));\n  }\n\n  /** Create the menu or sub-menu(s) but without the column picker which is a separate single process */\n  createMenu(level = 0, item?: GridMenuItem | MenuCommandItem | 'divider') {\n    // create a new cell menu\n    const maxHeight = isNaN(this._gridMenuOptions?.maxHeight as number) ? this._gridMenuOptions?.maxHeight : `${this._gridMenuOptions?.maxHeight ?? 0}px`;\n    const width = isNaN(this._gridMenuOptions?.width as number) ? this._gridMenuOptions?.width : `${this._gridMenuOptions?.maxWidth ?? 0}px`;\n\n    // to avoid having multiple sub-menu trees opened,\n    // we need to somehow keep trace of which parent menu the tree belongs to\n    // and we should keep ref of only the first sub-menu parent, we can use the command name (remove any whitespaces though)\n    const subMenuCommand = (item as GridMenuItem)?.command;\n    let subMenuId = (level === 1 && subMenuCommand) ? subMenuCommand.replaceAll(' ', '') : '';\n    if (subMenuId) {\n      this._subMenuParentId = subMenuId;\n    }\n    if (level > 1) {\n      subMenuId = this._subMenuParentId;\n    }\n\n    const menuClasses = `slick-gridmenu slick-menu-level-${level} ${this._gridUid}`;\n    const bodyMenuElm = document.body.querySelector<HTMLDivElement>(`.slick-gridmenu.slick-menu-level-${level}${this.getGridUidSelector()}`);\n\n    // return menu/sub-menu if it's already opened unless we are on different sub-menu tree if so close them all\n    if (bodyMenuElm) {\n      if (bodyMenuElm.dataset.subMenuParent === subMenuId) {\n        return bodyMenuElm;\n      }\n      this.destroySubMenus();\n    }\n\n    const menuElm = document.createElement('div');\n    menuElm.role = 'menu';\n    menuElm.className = menuClasses;\n    if (level > 0) {\n      menuElm.classList.add('slick-submenu');\n      if (subMenuId) {\n        menuElm.dataset.subMenuParent = subMenuId;\n      }\n    }\n    menuElm.ariaLabel = level > 1 ? 'SubMenu' : 'Grid Menu';\n\n    if (width) {\n      menuElm.style.width = width as string;\n    }\n    if (maxHeight) {\n      menuElm.style.maxHeight = maxHeight as string;\n    }\n\n    menuElm.style.display = 'none';\n\n    let closeButtonElm: HTMLButtonElement | null = null;\n    if (level === 0) {\n      closeButtonElm = document.createElement('button');\n      closeButtonElm.type = 'button';\n      closeButtonElm.className = 'close';\n      closeButtonElm.dataset.dismiss = 'slick-gridmenu';\n      closeButtonElm.ariaLabel = 'Close';\n\n      const spanCloseElm = document.createElement('span');\n      spanCloseElm.className = 'close';\n      spanCloseElm.ariaHidden = 'true';\n      spanCloseElm.textContent = '\u00D7';\n      closeButtonElm.appendChild(spanCloseElm);\n      menuElm.appendChild(closeButtonElm);\n    }\n\n    // -- Command List section\n    this._commandListElm = document.createElement('div');\n    this._commandListElm.className = `slick-gridmenu-custom slick-gridmenu-command-list slick-menu-level-${level}`;\n    this._commandListElm.role = 'menu';\n    menuElm.appendChild(this._commandListElm);\n\n    const commandItems =\n      (item as GridMenuItem)?.commandItems\n      ?? (item as GridMenuItem)?.customItems\n      ?? this._gridMenuOptions?.commandItems\n      ?? this._gridMenuOptions?.customItems\n      ?? [];\n\n    if (commandItems.length > 0) {\n\n      // when creating sub-menu add its sub-menu title when exists\n      if (item && level > 0) {\n        this.addSubMenuTitleWhenExists(item, this._commandListElm); // add sub-menu title when exists\n      }\n    }\n    this.populateCommandsMenu(commandItems, this._commandListElm, { grid: this.grid, level });\n\n    // increment level for possible next sub-menus if exists\n    level++;\n\n    return menuElm;\n  }\n\n  /** Destroy the plugin by unsubscribing every events & also delete the menu DOM elements */\n  destroy() {\n    this.onAfterMenuShow.unsubscribe();\n    this.onBeforeMenuShow.unsubscribe();\n    this.onMenuClose.unsubscribe();\n    this.onCommand.unsubscribe();\n    this.onColumnsChanged.unsubscribe();\n    this.grid.onColumnsReordered.unsubscribe(this.updateColumnOrder.bind(this));\n    this.grid.onBeforeDestroy.unsubscribe();\n    this.grid.onSetOptions.unsubscribe();\n    this._bindingEventService.unbindAll();\n    this._menuElm?.remove();\n    this.deleteMenu();\n  }\n\n  /** Delete the menu DOM element but without unsubscribing any events */\n  deleteMenu() {\n    this._bindingEventService.unbindAll();\n    const gridMenuElm = document.querySelector<HTMLDivElement>(`div.slick-gridmenu.${this._gridUid}`);\n    if (gridMenuElm) {\n      gridMenuElm.style.display = 'none';\n    }\n    if (this._headerElm) {\n      // put back original width (fixes width and frozen+gridMenu on left header)\n      this._headerElm.style.width = '100%';\n    }\n    this._buttonElm?.remove();\n    this._menuElm?.remove();\n  }\n\n  /** Close and destroy all previously opened sub-menus */\n  destroySubMenus() {\n    this._bindingEventService.unbindAll('sub-menu');\n    document.querySelectorAll(`.slick-gridmenu.slick-submenu${this.getGridUidSelector()}`)\n      .forEach(subElm => subElm.remove());\n  }\n\n  /** Construct the custom command menu items. */\n  protected populateCommandsMenu(commandItems: Array<GridMenuItem | MenuCommandItem | 'divider'>, commandListElm: HTMLElement, args: { grid: SlickGrid, level: number }) {\n    // user could pass a title on top of the custom section\n    const level = args?.level || 0;\n    const isSubMenu = level > 0;\n    if (!isSubMenu && (this._gridMenuOptions?.commandTitle || this._gridMenuOptions?.customTitle)) {\n      this._commandTitleElm = document.createElement('div');\n      this._commandTitleElm.className = 'title';\n      this.grid.applyHtmlCode(this._commandTitleElm, this.grid.sanitizeHtmlString((this._gridMenuOptions.commandTitle || this._gridMenuOptions.customTitle) as string));\n      commandListElm.appendChild(this._commandTitleElm);\n    }\n\n    for (let i = 0, ln = commandItems.length; i < ln; i++) {\n      let addClickListener = true;\n      const item = commandItems[i];\n      const callbackArgs = {\n        grid: this.grid,\n        menu: this._menuElm,\n        columns: this.columns,\n        visibleColumns: this.getVisibleColumns()\n      };\n\n      // run each override functions to know if the item is visible and usable\n      const isItemVisible = this.runOverrideFunctionWhenExists<typeof callbackArgs>((item as GridMenuItem).itemVisibilityOverride, callbackArgs);\n      const isItemUsable = this.runOverrideFunctionWhenExists<typeof callbackArgs>((item as GridMenuItem).itemUsabilityOverride, callbackArgs);\n\n      // if the result is not visible then there's no need to go further\n      if (!isItemVisible) {\n        continue;\n      }\n\n      // when the override is defined, we need to use its result to update the disabled property\n      // so that \"handleMenuItemClick\" has the correct flag and won't trigger a command clicked event\n      if (Object.prototype.hasOwnProperty.call(item, 'itemUsabilityOverride')) {\n        (item as GridMenuItem).disabled = isItemUsable ? false : true;\n      }\n\n      const liElm = document.createElement('div');\n      liElm.className = 'slick-gridmenu-item';\n      liElm.role = 'menuitem';\n\n      if ((item as GridMenuItem).divider || item === 'divider') {\n        liElm.classList.add('slick-gridmenu-item-divider');\n        addClickListener = false;\n      }\n      if ((item as GridMenuItem).disabled) {\n        liElm.classList.add('slick-gridmenu-item-disabled');\n      }\n\n      if ((item as GridMenuItem).hidden) {\n        liElm.classList.add('slick-gridmenu-item-hidden');\n      }\n\n      if ((item as GridMenuItem).cssClass) {\n        liElm.classList.add(...Utils.classNameToList((item as GridMenuItem).cssClass));\n      }\n\n      if ((item as GridMenuItem).tooltip) {\n        liElm.title = (item as GridMenuItem).tooltip || '';\n      }\n\n      const iconElm = document.createElement('div');\n      iconElm.className = 'slick-gridmenu-icon';\n\n      liElm.appendChild(iconElm);\n\n      if ((item as GridMenuItem).iconCssClass) {\n        iconElm.classList.add(...Utils.classNameToList((item as GridMenuItem).iconCssClass));\n      }\n\n      if ((item as GridMenuItem).iconImage) {\n        iconElm.style.backgroundImage = `url(${(item as GridMenuItem).iconImage})`;\n      }\n\n      const textElm = document.createElement('span');\n      textElm.className = 'slick-gridmenu-content';\n      this.grid.applyHtmlCode(textElm, this.grid.sanitizeHtmlString((item as GridMenuItem).title || ''));\n\n      liElm.appendChild(textElm);\n\n      if ((item as GridMenuItem).textCssClass) {\n        textElm.classList.add(...Utils.classNameToList((item as GridMenuItem).textCssClass));\n      }\n\n      commandListElm.appendChild(liElm);\n\n      if (addClickListener) {\n        const eventGroup = isSubMenu ? 'sub-menu' : 'parent-menu';\n        this._bindingEventService.bind(liElm, 'click', this.handleMenuItemClick.bind(this, item, level) as EventListener, undefined, eventGroup);\n      }\n\n      // optionally open sub-menu(s) by mouseover\n      if (this._gridMenuOptions?.subMenuOpenByEvent === 'mouseover') {\n        this._bindingEventService.bind(liElm, 'mouseover', ((e: DOMMouseOrTouchEvent<HTMLDivElement>) => {\n          if ((item as GridMenuItem).commandItems || (item as GridMenuItem).customItems) {\n            this.repositionSubMenu(item, level, e);\n          } else if (!isSubMenu) {\n            this.destroySubMenus();\n          }\n        }) as EventListener);\n      }\n\n      // the option/command item could be a sub-menu if it has another list of commands/options\n      if ((item as GridMenuItem).commandItems || (item as GridMenuItem).customItems) {\n        const chevronElm = document.createElement('span');\n        chevronElm.className = 'sub-item-chevron';\n        if (this._gridMenuOptions?.subItemChevronClass) {\n          chevronElm.classList.add(...Utils.classNameToList(this._gridMenuOptions.subItemChevronClass));\n        } else {\n          chevronElm.textContent = '\u2B9E'; // \u2B9E or \u25B8\n        }\n\n        liElm.classList.add('slick-submenu-item');\n        liElm.appendChild(chevronElm);\n        continue;\n      }\n    }\n  }\n\n  /** Build the column picker, the code comes almost untouched from the file \"slick.columnpicker.js\" */\n  protected populateColumnPicker() {\n    this.grid.onColumnsReordered.subscribe(this.updateColumnOrder.bind(this));\n\n    // user could pass a title on top of the columns list\n    if (this._gridMenuOptions?.columnTitle) {\n      this._columnTitleElm = document.createElement('div');\n      this._columnTitleElm.className = 'title';\n      this.grid.applyHtmlCode(this._columnTitleElm, this.grid.sanitizeHtmlString(this._gridMenuOptions.columnTitle));\n      this._menuElm.appendChild(this._columnTitleElm);\n    }\n\n    this._bindingEventService.bind(this._menuElm, 'click', this.updateColumn.bind(this) as EventListener);\n    this._listElm = document.createElement('span');\n    this._listElm.className = 'slick-gridmenu-list';\n    this._listElm.role = 'menu';\n  }\n\n  /** Delete and then Recreate the Grid Menu (for example when we switch from regular to a frozen grid) */\n  recreateGridMenu() {\n    this.deleteMenu();\n    this.init(this.grid);\n  }\n\n  showGridMenu(e: DOMMouseOrTouchEvent<HTMLButtonElement>) {\n    const targetEvent = e.touches ? e.touches[0] : e;\n    e.preventDefault();\n\n    // empty both the picker list & the command list\n    Utils.emptyElement(this._listElm);\n    Utils.emptyElement(this._commandListElm);\n\n    const commandItems = this._gridMenuOptions?.commandItems ?? this._gridMenuOptions?.customItems ?? [];\n    this.populateCommandsMenu(commandItems, this._commandListElm, { grid: this.grid, level: 0 });\n    this.updateColumnOrder();\n    this._columnCheckboxes = [];\n\n    const callbackArgs = {\n      grid: this.grid,\n      menu: this._menuElm,\n      allColumns: this.columns,\n      visibleColumns: this.getVisibleColumns()\n    };\n\n    // run the override function (when defined), if the result is false it won't go further\n    if (this._gridMenuOptions && !this.runOverrideFunctionWhenExists<typeof callbackArgs>(this._gridMenuOptions.menuUsabilityOverride, callbackArgs)) {\n      return;\n    }\n\n    // notify of the onBeforeMenuShow only works when\n    // this mean that we cannot notify when the grid menu is attach to a button event\n    if (typeof e.stopPropagation === 'function') {\n      if (this.onBeforeMenuShow.notify(callbackArgs, e, this).getReturnValue() === false) {\n        return;\n      }\n    }\n\n    let columnId, columnLabel, excludeCssClass;\n    for (let i = 0; i < this.columns.length; i++) {\n      columnId = this.columns[i].id;\n      excludeCssClass = this.columns[i].excludeFromGridMenu ? 'hidden' : '';\n      const colName: string = this.columns[i].name instanceof HTMLElement\n        ? (this.columns[i].name as HTMLElement).innerHTML\n        : (this.columns[i].name || '') as string;\n\n      const liElm = document.createElement('li');\n      liElm.className = excludeCssClass;\n      liElm.ariaLabel = colName;\n\n      const checkboxElm = document.createElement('input');\n      checkboxElm.type = 'checkbox';\n      checkboxElm.id = `${this._gridUid}-gridmenu-colpicker-${columnId}`;\n      checkboxElm.dataset.columnid = String(this.columns[i].id);\n      liElm.appendChild(checkboxElm);\n\n      if (Utils.isDefined(this.grid.getColumnIndex(this.columns[i].id)) && !this.columns[i].hidden) {\n        checkboxElm.checked = true;\n      }\n\n      this._columnCheckboxes.push(checkboxElm);\n\n      // get the column label from the picker value extractor (user can optionally provide a custom extractor)\n      columnLabel = (this._gridMenuOptions?.headerColumnValueExtractor)\n        ? this._gridMenuOptions.headerColumnValueExtractor(this.columns[i], this._gridOptions)\n        : this._defaults.headerColumnValueExtractor!(this.columns[i]);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}-gridmenu-colpicker-${columnId}`;\n      this.grid.applyHtmlCode(labelElm, this.grid.sanitizeHtmlString(Utils.getHtmlStringOutput(columnLabel || '')));\n      liElm.appendChild(labelElm);\n      this._listElm.appendChild(liElm);\n    }\n\n    if (this._gridMenuOptions && (!this._gridMenuOptions.hideForceFitButton || !this._gridMenuOptions.hideSyncResizeButton)) {\n      this._listElm.appendChild(document.createElement('hr'));\n    }\n\n    if (!(this._gridMenuOptions?.hideForceFitButton)) {\n      const forceFitTitle = (this._gridMenuOptions?.forceFitTitle) || this._defaults.forceFitTitle as string;\n\n      const liElm = document.createElement('li');\n      liElm.ariaLabel = forceFitTitle;\n      liElm.role = 'menuitem';\n      this._listElm.appendChild(liElm);\n\n      const forceFitCheckboxElm = document.createElement('input');\n      forceFitCheckboxElm.type = 'checkbox';\n      forceFitCheckboxElm.id = `${this._gridUid}-gridmenu-colpicker-forcefit`;\n      forceFitCheckboxElm.dataset.option = 'autoresize';\n      liElm.appendChild(forceFitCheckboxElm);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}-gridmenu-colpicker-forcefit`;\n      labelElm.textContent = forceFitTitle;\n      liElm.appendChild(labelElm);\n\n      if (this.grid.getOptions().forceFitColumns) {\n        forceFitCheckboxElm.checked = true;\n      }\n    }\n\n    if (!(this._gridMenuOptions?.hideSyncResizeButton)) {\n      const syncResizeTitle = (this._gridMenuOptions?.syncResizeTitle) || this._defaults.syncResizeTitle as string;\n\n      const liElm = document.createElement('li');\n      liElm.ariaLabel = syncResizeTitle;\n      this._listElm.appendChild(liElm);\n\n      const syncResizeCheckboxElm = document.createElement('input');\n      syncResizeCheckboxElm.type = 'checkbox';\n      syncResizeCheckboxElm.id = `${this._gridUid}-gridmenu-colpicker-syncresize`;\n      syncResizeCheckboxElm.dataset.option = 'syncresize';\n      liElm.appendChild(syncResizeCheckboxElm);\n\n      const labelElm = document.createElement('label');\n      labelElm.htmlFor = `${this._gridUid}-gridmenu-colpicker-syncresize`;\n      labelElm.textContent = syncResizeTitle;\n      liElm.appendChild(labelElm);\n\n      if (this.grid.getOptions().syncColumnCellResize) {\n        syncResizeCheckboxElm.checked = true;\n      }\n    }\n\n    let buttonElm = (e.target.nodeName === 'BUTTON' ? e.target : e.target.querySelector('button')) as HTMLButtonElement; // get button element\n    if (!buttonElm) {\n      buttonElm = e.target.parentElement as HTMLButtonElement; // external grid menu might fall in this last case if wrapped in a span/div\n    }\n\n    // we need to display the menu to properly calculate its width but we can however make it invisible\n    this._menuElm.style.display = 'block';\n    this._menuElm.style.opacity = '0';\n\n    this.repositionMenu(e, this._menuElm, buttonElm);\n\n    // set \"height\" when defined OR ELSE use the \"max-height\" with available window size and optional margin bottom\n    const menuMarginBottom = (this._gridMenuOptions?.marginBottom !== undefined) ? this._gridMenuOptions.marginBottom : this._defaults.marginBottom as number;\n    if (this._gridMenuOptions?.height !== undefined) {\n      this._menuElm.style.height = `${this._gridMenuOptions.height}px`;\n    } else {\n      this._menuElm.style.maxHeight = `${window.innerHeight - targetEvent.clientY - menuMarginBottom}px`;\n    }\n\n    this._menuElm.style.display = 'block';\n    this._menuElm.style.opacity = '1'; // restore menu visibility\n    this._menuElm.appendChild(this._listElm);\n    this._isMenuOpen = true;\n\n    if (typeof e.stopPropagation === 'function') {\n      if (this.onAfterMenuShow.notify(callbackArgs, e, this).getReturnValue() === false) {\n        return;\n      }\n    }\n  }\n\n  protected getGridUidSelector() {\n    const gridUid = this.grid.getUID() || '';\n    return gridUid ? `.${gridUid}` : '';\n  }\n\n  protected handleBodyMouseDown(e: DOMMouseOrTouchEvent<HTMLElement>) {\n    // did we click inside the menu or any of its sub-menu(s)\n    let isMenuClicked = false;\n    if (this._menuElm?.contains(e.target)) {\n      isMenuClicked = true;\n    }\n    if (!isMenuClicked) {\n      document\n        .querySelectorAll(`.slick-gridmenu.slick-submenu${this.getGridUidSelector()}`)\n        .forEach(subElm => {\n          if (subElm.contains(e.target)) {\n            isMenuClicked = true;\n          }\n        });\n    }\n\n    if ((this._menuElm !== e.target && !isMenuClicked && !e.defaultPrevented && this._isMenuOpen) || e.target.className === 'close') {\n      this.hideMenu(e);\n    }\n  }\n\n  protected handleMenuItemClick(item: GridMenuItem | MenuCommandItem | 'divider', level = 0, e: DOMMouseOrTouchEvent<HTMLButtonElement | HTMLDivElement>) {\n    if (item !== 'divider' && !item.disabled && !item.divider) {\n      const command = item.command || '';\n\n      if (Utils.isDefined(command) && !item.commandItems && !(item as GridMenuItem).customItems) {\n        const callbackArgs: GridMenuCommandItemCallbackArgs = {\n          grid: this.grid,\n          command,\n          item,\n          allColumns: this.columns,\n          visibleColumns: this.getVisibleColumns()\n        };\n        this.onCommand.notify(callbackArgs, e, this);\n\n        // execute action callback when defined\n        if (typeof item.action === 'function') {\n          (item as MenuCommandItem).action!.call(this, e, callbackArgs);\n        }\n\n        // does the user want to leave open the Grid Menu after executing a command?\n        const leaveOpen = !!(this._gridMenuOptions?.leaveOpen);\n        if (!leaveOpen && !e.defaultPrevented) {\n          this.hideMenu(e);\n        }\n\n        // Stop propagation so that it doesn't register as a header click event.\n        e.preventDefault();\n        e.stopPropagation();\n      } else if (item.commandItems || (item as GridMenuItem).customItems) {\n        this.repositionSubMenu(item, level, e);\n      } else {\n        this.destroySubMenus();\n      }\n    }\n  }\n\n  hideMenu(e: DOMMouseOrTouchEvent<HTMLElement>) {\n    if (this._menuElm) {\n      const callbackArgs = {\n        grid: this.grid,\n        menu: this._menuElm,\n        allColumns: this.columns,\n        visibleColumns: this.getVisibleColumns()\n      };\n      if (this._isMenuOpen && this.onMenuClose.notify(callbackArgs, e, this).getReturnValue() === false) {\n        return;\n      }\n      this._isMenuOpen = false;\n      Utils.hide(this._menuElm);\n    }\n    this.destroySubMenus();\n  }\n\n  /** Update the Titles of each sections (command, commandTitle, ...) */\n  updateAllTitles(gridMenuOptions: GridMenuOption) {\n    if (this._commandTitleElm) {\n      this.grid.applyHtmlCode(this._commandTitleElm, this.grid.sanitizeHtmlString(gridMenuOptions.commandTitle || gridMenuOptions.customTitle || ''));\n    }\n    if (this._columnTitleElm) {\n      this.grid.applyHtmlCode(this._columnTitleElm, this.grid.sanitizeHtmlString(gridMenuOptions.columnTitle || ''));\n    }\n  }\n\n  protected addSubMenuTitleWhenExists(item: GridMenuItem | MenuCommandItem | 'divider', commandOrOptionMenu: HTMLDivElement) {\n    if (item !== 'divider' && item?.subMenuTitle) {\n      const subMenuTitleElm = document.createElement('div');\n      subMenuTitleElm.className = 'slick-menu-title';\n      subMenuTitleElm.textContent = item.subMenuTitle as string;\n      const subMenuTitleClass = item.subMenuTitleCssClass as string;\n      if (subMenuTitleClass) {\n        subMenuTitleElm.classList.add(...Utils.classNameToList(subMenuTitleClass));\n      }\n\n      commandOrOptionMenu.appendChild(subMenuTitleElm);\n    }\n  }\n\n  protected repositionSubMenu(item: GridMenuItem | MenuCommandItem | 'divider', level: number, e: DOMMouseOrTouchEvent<HTMLButtonElement | HTMLDivElement>) {\n    // when we're clicking a grid cell OR our last menu type (command/option) differs then we know that we need to start fresh and close any sub-menus that might still be open\n    if (e.target.classList.contains('slick-cell')) {\n      this.destroySubMenus();\n    }\n\n    // creating sub-menu, we'll also pass level & the item object since we might have \"subMenuTitle\" to show\n    const subMenuElm = this.createMenu(level + 1, item);\n    subMenuElm.style.display = 'block';\n    document.body.appendChild(subMenuElm);\n    this.repositionMenu(e, subMenuElm);\n  }\n\n  /**\n   * Reposition the menu drop (up/down) and the side (left/right)\n   * @param {*} event\n   */\n  protected repositionMenu(e: DOMMouseOrTouchEvent<HTMLButtonElement | HTMLDivElement>, menuElm: HTMLElement, buttonElm?: HTMLButtonElement) {\n    const targetEvent = e.touches ? e.touches[0] : e;\n    const isSubMenu = menuElm.classList.contains('slick-submenu');\n    const parentElm = isSubMenu\n      ? e.target.closest('.slick-gridmenu-item') as HTMLDivElement\n      : targetEvent.target as HTMLElement;\n\n    const menuIconOffset = Utils.offset(buttonElm || this._buttonElm); // get button offset position\n    const menuWidth = menuElm.offsetWidth;\n    const useClickToRepositionMenu = (this._gridMenuOptions?.useClickToRepositionMenu !== undefined) ? this._gridMenuOptions.useClickToRepositionMenu : this._defaults.useClickToRepositionMenu;\n    const contentMinWidth = (this._gridMenuOptions?.contentMinWidth) ? this._gridMenuOptions.contentMinWidth : this._defaults.contentMinWidth as number;\n    const currentMenuWidth = (contentMinWidth > menuWidth) ? contentMinWidth : menuWidth + 5;\n    let menuOffsetTop = (useClickToRepositionMenu && targetEvent.pageY > 0) ? targetEvent.pageY : menuIconOffset!.top + 10;\n    let menuOffsetLeft = (useClickToRepositionMenu && targetEvent.pageX > 0) ? targetEvent.pageX : menuIconOffset!.left + 10;\n\n    if (isSubMenu && parentElm) {\n      const parentOffset = Utils.offset(parentElm);\n      menuOffsetLeft = parentOffset?.left ?? 0;\n      menuOffsetTop = parentOffset?.top ?? 0;\n      const gridPos = this.grid.getGridPosition();\n      let subMenuPosCalc = menuOffsetLeft + Number(menuWidth); // calculate coordinate at caller element far right\n      if (isSubMenu) {\n        subMenuPosCalc += parentElm.clientWidth;\n      }\n      const browserWidth = document.documentElement.clientWidth;\n      const dropSide = (subMenuPosCalc >= gridPos.width || subMenuPosCalc >= browserWidth) ? 'left' : 'right';\n      if (dropSide === 'left') {\n        menuElm.classList.remove('dropright');\n        menuElm.classList.add('dropleft');\n        menuOffsetLeft -= menuWidth;\n      } else {\n        menuElm.classList.remove('dropleft');\n        menuElm.classList.add('dropright');\n        if (isSubMenu) {\n          menuOffsetLeft += parentElm.offsetWidth;\n        }\n      }\n    } else {\n      menuOffsetTop += 10;\n      menuOffsetLeft = menuOffsetLeft - currentMenuWidth + 10;\n    }\n\n    menuElm.style.top = `${menuOffsetTop}px`;\n    menuElm.style.left = `${menuOffsetLeft}px`;\n\n    if (contentMinWidth > 0) {\n      this._menuElm.style.minWidth = `${contentMinWidth}px`;\n    }\n  }\n\n  protected updateColumnOrder() {\n    // Because columns can be reordered, we have to update the `columns`\n    // to reflect the new order, however we can't just take `grid.getColumns()`,\n    // as it does not include columns currently hidden by the picker.\n    // We create a new `columns` structure by leaving currently-hidden\n    // columns in their original ordinal position and interleaving the results\n    // of the current column sort.\n    const current = this.grid.getColumns().slice(0);\n    const ordered = new Array(this.columns.length);\n    for (let i = 0; i < ordered.length; i++) {\n      if (this.grid.getColumnIndex(this.columns[i].id) === undefined) {\n        // If the column doesn't return a value from getColumnIndex,\n        // it is hidden. Leave it in this position.\n        ordered[i] = this.columns[i];\n      } else {\n        // Otherwise, grab the next visible column.\n        ordered[i] = current.shift();\n      }\n    }\n    this.columns = ordered;\n  }\n\n  protected updateColumn(e: DOMMouseOrTouchEvent<HTMLInputElement>) {\n    if (e.target.dataset.option === 'autoresize') {\n      // when calling setOptions, it will resize with ALL Columns (even the hidden ones)\n      // we can avoid this problem by keeping a reference to the visibleColumns before setOptions and then setColumns after\n      const previousVisibleColumns = this.getVisibleColumns();\n      const isChecked = e.target.checked;\n      this.grid.setOptions({ forceFitColumns: isChecked });\n      this.grid.setColumns(previousVisibleColumns);\n      return;\n    }\n\n    if (e.target.dataset.option === 'syncresize') {\n      this.grid.setOptions({ syncColumnCellResize: !!(e.target.checked) });\n      return;\n    }\n\n    if (e.target.type === 'checkbox') {\n      const isChecked = e.target.checked;\n      const columnId = e.target.dataset.columnid || '';\n      const visibleColumns: Column[] = [];\n      this._columnCheckboxes.forEach((columnCheckbox, idx) => {\n        if (columnCheckbox.checked) {\n          if (this.columns[idx].hidden) { this.columns[idx].hidden = false; }\n          visibleColumns.push(this.columns[idx]);\n        }\n      });\n\n      if (!visibleColumns.length) {\n        e.target.checked = true;\n        return;\n      }\n\n      const callbackArgs = {\n        columnId,\n        showing: isChecked,\n        grid: this.grid,\n        allColumns: this.columns,\n        columns: visibleColumns,\n        visibleColumns: this.getVisibleColumns()\n      };\n      this.grid.setColumns(visibleColumns);\n      this.onColumnsChanged.notify(callbackArgs, e, this);\n    }\n  }\n\n  getAllColumns() {\n    return this.columns;\n  }\n\n  /** visible columns, we can simply get them directly from the grid */\n  getVisibleColumns() {\n    return this.grid.getColumns();\n  }\n\n  /**\n   * Method that user can pass to override the default behavior.\n   * In order word, user can choose or an item is (usable/visible/enable) by providing his own logic.\n   * @param overrideFn: override function callback\n   * @param args: multiple arguments provided to the override (cell, row, columnDef, dataContext, grid)\n   */\n  protected runOverrideFunctionWhenExists<T = any>(overrideFn: ((args: any) => boolean) | undefined, args: T): boolean {\n    if (typeof overrideFn === 'function') {\n      return overrideFn.call(this, args);\n    }\n    return true;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Controls = window.Slick.Controls || {};\n  window.Slick.Controls.GridMenu = SlickGridMenu;\n}\n", "import type { PagingInfo } from '../models/index';\nimport { BindingEventService as BindingEventService_, SlickGlobalEditorLock as SlickGlobalEditorLock_, Utils as Utils_ } from '../slick.core';\nimport type { SlickDataView } from '../slick.dataview';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickGlobalEditorLock = IIFE_ONLY ? Slick.GlobalEditorLock : SlickGlobalEditorLock_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport interface GridPagerOption {\n  showAllText: string;\n  showPageText: string;\n  showCountText: string;\n  showCount: boolean;\n  pagingOptions: Array<{ data: number; name: string; ariaLabel: string; }>;\n  showPageSizes: boolean;\n}\n\nexport class SlickGridPager {\n  // --\n  // public API\n\n  // --\n  // protected props\n  protected _container: HTMLElement; // the container might be a string, a jQuery object or a native element\n  protected _statusElm!: HTMLElement;\n  protected _bindingEventService: BindingEventService_;\n  protected _options: GridPagerOption;\n  protected _defaults: GridPagerOption = {\n    showAllText: 'Showing all {rowCount} rows',\n    showPageText: 'Showing page {pageNum} of {pageCount}',\n    showCountText: 'From {countBegin} to {countEnd} of {rowCount} rows',\n    showCount: false,\n    pagingOptions: [\n      { data: 0, name: 'All', ariaLabel: 'Show All Pages' },\n      { data: -1, name: 'Auto', ariaLabel: 'Auto Page Size' },\n      { data: 25, name: '25', ariaLabel: 'Show 25 rows per page' },\n      { data: 50, name: '50', ariaLabel: 'Show 50 rows per page' },\n      { data: 100, name: '100', ariaLabel: 'Show 100 rows per page' },\n    ],\n    showPageSizes: false\n  };\n\n  constructor(protected readonly dataView: SlickDataView, protected readonly grid: SlickGrid, selectorOrElm: HTMLElement | string, options?: Partial<GridPagerOption>) {\n    this._container = this.getContainerElement(selectorOrElm) as HTMLElement;\n    this._options = Utils.extend(true, {}, this._defaults, options);\n    this._bindingEventService = new BindingEventService();\n    this.init();\n  }\n\n  init() {\n    this.constructPagerUI();\n    this.updatePager(this.dataView.getPagingInfo());\n    this.dataView.onPagingInfoChanged.subscribe((_e, pagingInfo) => {\n      this.updatePager(pagingInfo);\n    });\n  }\n\n  /** Destroy function when element is destroyed */\n  destroy() {\n    this.setPageSize(0);\n    this._bindingEventService.unbindAll();\n    Utils.emptyElement(this._container);\n  }\n\n  protected getNavState() {\n    const cannotLeaveEditMode = !SlickGlobalEditorLock.commitCurrentEdit();\n    const pagingInfo = this.dataView.getPagingInfo();\n    const lastPage = pagingInfo.totalPages - 1;\n\n    return {\n      canGotoFirst: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,\n      canGotoLast: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum !== lastPage,\n      canGotoPrev: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum > 0,\n      canGotoNext: !cannotLeaveEditMode && pagingInfo.pageSize !== 0 && pagingInfo.pageNum < lastPage,\n      pagingInfo\n    };\n  }\n\n  protected setPageSize(n: number) {\n    this.dataView.setRefreshHints({\n      isFilterUnchanged: true\n    });\n    this.dataView.setPagingOptions({ pageSize: n });\n  }\n\n  protected gotoFirst() {\n    if (this.getNavState().canGotoFirst) {\n      this.dataView.setPagingOptions({ pageNum: 0 });\n    }\n  }\n\n  protected gotoLast() {\n    const state = this.getNavState();\n    if (state.canGotoLast) {\n      this.dataView.setPagingOptions({ pageNum: state.pagingInfo.totalPages - 1 });\n    }\n  }\n\n  protected gotoPrev() {\n    const state = this.getNavState();\n    if (state.canGotoPrev) {\n      this.dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum - 1 });\n    }\n  }\n\n  protected gotoNext() {\n    const state = this.getNavState();\n    if (state.canGotoNext) {\n      this.dataView.setPagingOptions({ pageNum: state.pagingInfo.pageNum + 1 });\n    }\n  }\n\n  protected getContainerElement(selectorOrElm: object | HTMLElement | string) {\n    // the container might be a string, a jQuery object or a native element\n    return typeof selectorOrElm === 'string'\n      ? document.querySelector(selectorOrElm)\n      : typeof selectorOrElm === 'object' && (selectorOrElm as any)[0]\n        ? (selectorOrElm as any)[0] as HTMLElement\n        : selectorOrElm;\n  }\n\n  protected constructPagerUI() {\n    // the container might be a string, a jQuery object or a native element\n    const container = this.getContainerElement(this._container) as HTMLElement | HTMLElement[];\n    if (!container || ((container as any).jquery && !(container as HTMLElement[])[0])) { return; }\n\n    const navElm = document.createElement('span');\n    navElm.className = 'slick-pager-nav';\n\n    const settingsElm = document.createElement('span');\n    settingsElm.className = 'slick-pager-settings';\n\n    this._statusElm = document.createElement('span');\n    this._statusElm.className = 'slick-pager-status';\n\n    const pagerSettingsElm = document.createElement('span');\n    pagerSettingsElm.className = 'slick-pager-settings-expanded';\n    pagerSettingsElm.textContent = 'Show: ';\n\n    for (let o = 0; o < this._options.pagingOptions.length; o++) {\n      const p = this._options.pagingOptions[o];\n\n      const anchorElm = document.createElement('a');\n      anchorElm.textContent = p.name;\n      anchorElm.ariaLabel = p.ariaLabel;\n      anchorElm.dataset.val = String(p.data);\n      pagerSettingsElm.appendChild(anchorElm);\n\n      this._bindingEventService.bind(anchorElm, 'click', ((e: any) => {\n        const pagesize = e.target.dataset.val;\n        if (pagesize !== undefined) {\n          if (Number(pagesize) === -1) {\n            const vp = this.grid.getViewport();\n            this.setPageSize(vp.bottom - vp.top);\n          } else {\n            this.setPageSize(parseInt(pagesize));\n          }\n        }\n      }));\n    }\n\n    pagerSettingsElm.style.display = this._options.showPageSizes ? 'block' : 'none';\n\n    settingsElm.appendChild(pagerSettingsElm);\n\n    // light bulb icon\n    const displayPaginationContainer = document.createElement('span');\n    const displayIconElm = document.createElement('span');\n    displayPaginationContainer.className = 'sgi-container';\n    displayIconElm.ariaLabel = 'Show Pagination Options';\n    displayIconElm.role = 'button';\n    displayIconElm.className = 'sgi sgi-lightbulb';\n    displayPaginationContainer.appendChild(displayIconElm);\n\n    this._bindingEventService.bind(displayIconElm, 'click', () => {\n      const styleDisplay = pagerSettingsElm.style.display;\n      pagerSettingsElm.style.display = styleDisplay === 'none' ? 'inline-flex' : 'none';\n    });\n    settingsElm.appendChild(displayPaginationContainer);\n\n    const pageButtons = [\n      { key: 'start', ariaLabel: 'First Page', callback: this.gotoFirst },\n      { key: 'left', ariaLabel: 'Previous Page', callback: this.gotoPrev },\n      { key: 'right', ariaLabel: 'Next Page', callback: this.gotoNext },\n      { key: 'end', ariaLabel: 'Last Page', callback: this.gotoLast },\n    ];\n\n    pageButtons.forEach(pageBtn => {\n      const iconElm = document.createElement('span');\n      iconElm.className = 'sgi-container';\n\n      const innerIconElm = document.createElement('span');\n      innerIconElm.role = 'button';\n      innerIconElm.ariaLabel = pageBtn.ariaLabel;\n      innerIconElm.className = `sgi sgi-chevron-${pageBtn.key}`;\n      this._bindingEventService.bind(innerIconElm, 'click', pageBtn.callback.bind(this));\n\n      iconElm.appendChild(innerIconElm);\n      navElm.appendChild(iconElm);\n    });\n\n    const slickPagerElm = document.createElement('div');\n    slickPagerElm.className = 'slick-pager';\n\n    slickPagerElm.appendChild(navElm);\n    slickPagerElm.appendChild(this._statusElm);\n    slickPagerElm.appendChild(settingsElm);\n\n    (container as HTMLElement).appendChild(slickPagerElm);\n  }\n\n  protected updatePager(pagingInfo: PagingInfo) {\n    if (!this._container || ((this._container as any).jquery && !(this._container as any)[0])) { return; }\n    const state = this.getNavState();\n\n    // remove disabled class on all icons\n    this._container.querySelectorAll('.slick-pager-nav span')\n      .forEach(pagerIcon => pagerIcon.classList.remove('sgi-state-disabled'));\n\n    // add back disabled class to only necessary icons\n    if (!state.canGotoFirst) {\n      this._container!.querySelector('.sgi-chevron-start')!.classList.add('sgi-state-disabled');\n    }\n    if (!state.canGotoLast) {\n      this._container!.querySelector('.sgi-chevron-end')!.classList.add('sgi-state-disabled');\n    }\n    if (!state.canGotoNext) {\n      this._container!.querySelector('.sgi-chevron-right')!.classList.add('sgi-state-disabled');\n    }\n    if (!state.canGotoPrev) {\n      this._container!.querySelector('.sgi-chevron-left')!.classList.add('sgi-state-disabled');\n    }\n\n    if (pagingInfo.pageSize === 0) {\n      this._statusElm.textContent = (this._options.showAllText.replace('{rowCount}', pagingInfo.totalRows + '').replace('{pageCount}', pagingInfo.totalPages + ''));\n    } else {\n      this._statusElm.textContent = (this._options.showPageText.replace('{pageNum}', pagingInfo.pageNum + 1 + '').replace('{pageCount}', pagingInfo.totalPages + ''));\n    }\n\n    if (this._options.showCount && pagingInfo.pageSize !== 0) {\n      const pageBegin = pagingInfo.pageNum * pagingInfo.pageSize;\n      let currentText = this._statusElm.textContent;\n\n      if (currentText) {\n        currentText += ' - ';\n      }\n\n      this._statusElm.textContent =\n        currentText +\n        this._options.showCountText\n          .replace('{rowCount}', String(pagingInfo.totalRows))\n          .replace('{countBegin}', String(pageBegin + 1))\n          .replace('{countEnd}', String(Math.min(pageBegin + pagingInfo.pageSize, pagingInfo.totalRows)));\n    }\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Controls = window.Slick.Controls || {};\n  window.Slick.Controls.Pager = SlickGridPager;\n}\n\n", "export const FieldType = {\n  /** unknown type */\n  unknown: 'unknown',\n\n  /** string type */\n  string: 'string',\n\n  /** boolean type (true/false) */\n  boolean: 'boolean',\n\n  /** integer number type (1,2,99) */\n  integer: 'integer',\n\n  /** float number (with decimal) type */\n  float: 'float',\n\n  /** number includes Integer and Float */\n  number: 'number',\n\n  /** new Date(), javascript Date object */\n  date: 'date',\n\n  /** Format: 'YYYY-MM-DD' <=> 2001-02-28 */\n  dateIso: 'dateIso',\n\n  /** Format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' <=> 2001-02-28T14:00:00.123Z */\n  dateUtc: 'dateUtc',\n\n  /** new Date(), javacript Date Object with Time */\n  dateTime: 'dateTime',\n\n  /** Format: 'YYYY-MM-DD HH:mm:ss' <=> 2001-02-28 14:01:01 */\n  dateTimeIso: 'dateTimeIso',\n\n  /** Format: 'YYYY-MM-DD hh:mm:ss a' <=> 2001-02-28 11:01:01 pm */\n  dateTimeIsoAmPm: 'dateTimeIsoAmPm',\n\n  /** Format: 'YYYY-MM-DD hh:mm:ss A' <=> 2001-02-28 11:01:01 PM */\n  dateTimeIsoAM_PM: 'dateTimeIsoAM_PM',\n\n  /** Format: 'YYYY-MM-DD HH:mm' <=> 2001-02-28 14:01 */\n  dateTimeShortIso: 'dateTimeShortIso',\n\n  /** Format (Euro): 'DD/MM/YYYY' <=> 28/02/2001 */\n  dateEuro: 'dateEuro',\n\n  /** Format (Euro): 'D/M/YY' <=> 28/2/12 */\n  dateEuroShort: 'dateEuroShort',\n\n  /** Format (Euro): 'DD/MM/YYYY HH:mm' <=> 28/02/2001 13:01 */\n  dateTimeShortEuro: 'dateTimeShortEuro',\n\n  /** Format (Euro): 'DD/MM/YYYY HH:mm:ss' <=> 02/28/2001 13:01:01 */\n  dateTimeEuro: 'dateTimeEuro',\n\n  /** Format (Euro): 'DD/MM/YYYY hh:mm:ss a' <=> 28/02/2001 11:01:01 pm */\n  dateTimeEuroAmPm: 'dateTimeEuroAmPm',\n\n  /** Format (Euro): 'DD/MM/YYYY hh:mm:ss A' <=> 28/02/2001 11:01:01 PM */\n  dateTimeEuroAM_PM: 'dateTimeEuroAM_PM',\n\n  /** Format (Euro): 'D/M/YY H:m:s' <=> 28/2/14 14:1:2 */\n  dateTimeEuroShort: 'dateTimeEuroShort',\n\n  /** Format (Euro): 'D/M/YY h:m:s a' <=> 28/2/14 1:2:10 pm */\n  dateTimeEuroShortAmPm: 'dateTimeEuroShortAmPm',\n\n  /** Format (Euro): 'D/M/YY h:m:s A' <=> 28/2/14 14:1:1 PM */\n  dateTimeEuroShortAM_PM: 'dateTimeEuroShortAM_PM',\n\n  /** Format: 'MM/DD/YYYY' <=> 02/28/2001 */\n  dateUs: 'dateUs',\n\n  /** Format: 'M/D/YY' <=> 2/28/12 */\n  dateUsShort: 'dateUsShort',\n\n  /** Format: 'MM/DD/YYYY HH:mm' <=> 02/28/2001 13:01 */\n  dateTimeShortUs: 'dateTimeShortUs',\n\n  /** Format: 'MM/DD/YYYY HH:mm:ss' <=> 02/28/2001 13:01:01 */\n  dateTimeUs: 'dateTimeUs',\n\n  /** Format: 'MM/DD/YYYY hh:mm:ss a' <=> 02/28/2001 11:01:01 pm */\n  dateTimeUsAmPm: 'dateTimeUsAmPm',\n\n  /** Format: 'MM/DD/YYYY hh:mm:ss A' <=> 02/28/2001 11:01:01 PM */\n  dateTimeUsAM_PM: 'dateTimeUsAM_PM',\n\n  /** Format: 'M/D/YY H:m:s' <=> 2/28/14 14:1:2 */\n  dateTimeUsShort: 'dateTimeUsShort',\n\n  /** Format: 'M/D/YY h:m:s a' <=> 2/28/14 1:2:10 pm */\n  dateTimeUsShortAmPm: 'dateTimeUsShortAmPm',\n\n  /** Format: 'M/D/YY h:m:s A' <=> 2/28/14 14:1:1 PM */\n  dateTimeUsShortAM_PM: 'dateTimeUsShortAM_PM',\n\n  /** complex object with various properties */\n  object: 'object',\n\n  /** password text string */\n  password: 'password',\n\n  /** alias to string */\n  text: 'text',\n\n  /** readonly text string */\n  readonly: 'readonly',\n} as const;\n", "export enum SortDirectionNumber {\n  asc = 1,\n  desc = -1,\n  neutral = 0,\n}\n", "import type { AutoTooltipOption, Column, SlickPlugin } from '../models/index';\nimport { type SlickEventData, Utils as Utils_ } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * AutoTooltips plugin to show/hide tooltips when columns are too narrow to fit content.\n */\nexport class SlickAutoTooltips implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'AutoTooltips' as const;\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _options?: AutoTooltipOption;\n  protected _defaults: AutoTooltipOption = {\n    enableForCells: true,\n    enableForHeaderCells: false,\n    maxToolTipLength: undefined,\n    replaceExisting: true\n  };\n\n  /**\n   * Constructor of the SlickGrid 3rd party plugin, it can optionally receive options\n   * @param {boolean} [options.enableForCells=true]        - Enable tooltip for grid cells\n   * @param {boolean} [options.enableForHeaderCells=false] - Enable tooltip for header cells\n   * @param {number}  [options.maxToolTipLength=null]      - The maximum length for a tooltip\n   * @param {boolean} [options.replaceExisting=null]       - Allow preventing custom tooltips from being overwritten by auto tooltips\n   */\n  constructor(options?: AutoTooltipOption) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  /**\n   * Initialize plugin.\n   */\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    if (this._options?.enableForCells) {\n      this._grid.onMouseEnter.subscribe(this.handleMouseEnter.bind(this));\n    }\n    if (this._options?.enableForHeaderCells) {\n      this._grid.onHeaderMouseEnter.subscribe(this.handleHeaderMouseEnter.bind(this));\n    }\n  }\n\n  /**\n   * Destroy plugin.\n   */\n  destroy() {\n    if (this._options?.enableForCells) {\n      this._grid.onMouseEnter.unsubscribe(this.handleMouseEnter.bind(this));\n    }\n    if (this._options?.enableForHeaderCells) {\n      this._grid.onHeaderMouseEnter.unsubscribe(this.handleHeaderMouseEnter.bind(this));\n    }\n  }\n\n  /**\n   * Handle mouse entering grid cell to add/remove tooltip.\n   * @param {SlickEventData} event - The event\n   */\n  protected handleMouseEnter(event: SlickEventData) {\n    const cell = this._grid.getCellFromEvent(event);\n    if (cell) {\n      let node: HTMLElement | null = this._grid.getCellNode(cell.row, cell.cell);\n      let text;\n      if (this._options && node && (!node.title || this._options?.replaceExisting)) {\n        if (node.clientWidth < node.scrollWidth) {\n          text = node.textContent?.trim() ?? '';\n          if (this._options?.maxToolTipLength && text.length > this._options?.maxToolTipLength) {\n            text = text.substring(0, this._options.maxToolTipLength - 3) + '...';\n          }\n        } else {\n          text = '';\n        }\n        node.title = text;\n      }\n      node = null;\n    }\n  }\n\n  /**\n   * Handle mouse entering header cell to add/remove tooltip.\n   * @param {SlickEventData} event   - The event\n   * @param {object} args.column - The column definition\n   */\n  protected handleHeaderMouseEnter(event: SlickEventData, args: { column: Column; }) {\n    const column = args.column;\n    let node: HTMLDivElement | null;\n    const targetElm = (event.target as HTMLDivElement);\n\n    if (targetElm) {\n      node = targetElm.closest<HTMLDivElement>('.slick-header-column');\n      if (node && !(column?.toolTip)) {\n        const titleVal = (targetElm.clientWidth < node.clientWidth) ? column?.name ?? '' : '';\n        node.title = Utils.getHtmlStringOutput(titleVal, 'innerHTML');\n      }\n    }\n    node = null;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      AutoTooltips: SlickAutoTooltips\n    }\n  });\n}\n", "import type { CssStyleHash, SlickPlugin } from '../models/index';\nimport { keyCode as keyCode_, SlickEvent as SlickEvent_, type SlickEventData, Utils as Utils_, type SlickRange } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * This manager enables users to copy/paste cell data\n */\nexport class SlickCellCopyManager implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CellCopyManager' as const;\n  onCopyCells = new SlickEvent<{ ranges: SlickRange[] | null; }>('onCopyCells');\n  onCopyCancelled = new SlickEvent<{ ranges: SlickRange[] | null; }>('onCopyCancelled');\n  onPasteCells = new SlickEvent<{ from: SlickRange[] | undefined; to: SlickRange[] | undefined; }>('onPasteCells');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _copiedRanges?: SlickRange[] | null = null;\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._grid.onKeyDown.subscribe(this.handleKeyDown.bind(this));\n  }\n\n  destroy() {\n    this._grid.onKeyDown.unsubscribe(this.handleKeyDown.bind(this));\n  }\n\n  protected handleKeyDown(e: SlickEventData) {\n    let ranges: SlickRange[] | undefined;\n    if (!this._grid.getEditorLock().isActive()) {\n      if (e.which === keyCode.ESCAPE) {\n        if (this._copiedRanges) {\n          e.preventDefault();\n          this.clearCopySelection();\n          this.onCopyCancelled.notify({ ranges: this._copiedRanges });\n          this._copiedRanges = null;\n        }\n      }\n\n      if (e.which === 67 && (e.ctrlKey || e.metaKey)) {\n        ranges = this._grid.getSelectionModel()?.getSelectedRanges() ?? [];\n        if (ranges.length !== 0) {\n          e.preventDefault();\n          this._copiedRanges = ranges;\n          this.markCopySelection(ranges);\n          this.onCopyCells.notify({ ranges });\n        }\n      }\n\n      if (e.which === 86 && (e.ctrlKey || e.metaKey)) {\n        if (this._copiedRanges) {\n          e.preventDefault();\n          ranges = this._grid.getSelectionModel()?.getSelectedRanges();\n          this.onPasteCells.notify({ from: this._copiedRanges, to: ranges });\n          if (!this._grid.getOptions().preserveCopiedSelectionOnPaste) {\n            this.clearCopySelection();\n            this._copiedRanges = null;\n          }\n        }\n      }\n    }\n  }\n\n  protected markCopySelection(ranges: SlickRange[]) {\n    const columns = this._grid.getColumns();\n    const hash: CssStyleHash = {};\n    for (let i = 0; i < ranges.length; i++) {\n      for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n        hash[j] = {};\n        for (let k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\n          hash[j][columns[k].id] = 'copied';\n        }\n      }\n    }\n    this._grid.setCellCssStyles('copy-manager', hash);\n  }\n\n  protected clearCopySelection() {\n    this._grid.removeCellCssStyles('copy-manager');\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      CellCopyManager: SlickCellCopyManager\n    }\n  });\n}\n", "import type { Column, CssStyleHash, ExcelCopyBufferOption, ExternalCopyClipCommand, SlickPlugin } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\nimport { SlickEvent as SlickEvent_, type SlickEventData, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nconst CLEAR_COPY_SELECTION_DELAY = 2000;\nconst CLIPBOARD_PASTE_DELAY = 100;\n\n/***\n  This manager enables users to copy/paste data from/to an external Spreadsheet application\n  such as MS-Excel\u00AE or OpenOffice-Spreadsheet.\n\n  Since it is not possible to access directly the clipboard in javascript, the plugin uses\n  a trick to do it's job. After detecting the keystroke, we dynamically create a textarea\n  where the browser copies/pastes the serialized data.\n\n  options:\n    copiedCellStyle : sets the css className used for copied cells. default : \"copied\"\n    copiedCellStyleLayerKey : sets the layer key for setting css values of copied cells. default : \"copy-manager\"\n    dataItemColumnValueExtractor : option to specify a custom column value extractor function\n    dataItemColumnValueSetter : option to specify a custom column value setter function\n    clipboardCommandHandler : option to specify a custom handler for paste actions\n    includeHeaderWhenCopying : set to true and the plugin will take the name property from each column (which is usually what appears in your header) and put that as the first row of the text that's copied to the clipboard\n    bodyElement: option to specify a custom DOM element which to will be added the hidden textbox. It's useful if the grid is inside a modal dialog.\n    onCopyInit: optional handler to run when copy action initializes\n    onCopySuccess: optional handler to run when copy action is complete\n    newRowCreator: function to add rows to table if paste overflows bottom of table, if this function is not provided new rows will be ignored.\n    readOnlyMode: suppresses paste\n    headerColumnValueExtractor : option to specify a custom column header value extractor function\n*/\nexport class SlickCellExternalCopyManager implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CellExternalCopyManager' as const;\n  onCopyCells = new SlickEvent<{ ranges: SlickRange_[]; }>('onCopyCells');\n  onCopyCancelled = new SlickEvent<{ ranges: SlickRange_[]; }>('onCopyCancelled');\n  onPasteCells = new SlickEvent<{ ranges: SlickRange_[]; }>('onPasteCells');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _bodyElement: HTMLElement;\n  protected _copiedRanges: SlickRange_[] | null = null;\n  protected _clearCopyTI?: NodeJS.Timeout;\n  protected _copiedCellStyle: string;\n  protected _copiedCellStyleLayerKey: string;\n  protected _onCopyInit?: () => void;\n  protected _onCopySuccess?: (rowCount: number) => void;\n  protected _options: ExcelCopyBufferOption;\n\n  protected keyCodes = {\n    'C': 67,\n    'V': 86,\n    'ESC': 27,\n    'INSERT': 45\n  };\n\n  constructor(options: ExcelCopyBufferOption) {\n    this._options = options || {};\n    this._copiedCellStyleLayerKey = this._options.copiedCellStyleLayerKey || 'copy-manager';\n    this._copiedCellStyle = this._options.copiedCellStyle || 'copied';\n    this._bodyElement = this._options.bodyElement || document.body;\n    this._onCopyInit = this._options.onCopyInit || undefined;\n    this._onCopySuccess = this._options.onCopySuccess || undefined;\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._grid.onKeyDown.subscribe(this.handleKeyDown.bind(this));\n\n    // we need a cell selection model\n    const cellSelectionModel = grid.getSelectionModel();\n    if (!cellSelectionModel) {\n      throw new Error('Selection model is mandatory for this plugin. Please set a selection model on the grid before adding this plugin: grid.setSelectionModel(new Slick.CellSelectionModel())');\n    }\n    // we give focus on the grid when a selection is done on it.\n    // without this, if the user selects a range of cell without giving focus on a particular cell, the grid doesn't get the focus and key stroke handles (ctrl+c) don't work\n    cellSelectionModel.onSelectedRangesChanged.subscribe(() => {\n      if (!this._grid.getEditorLock().isActive()) {\n        this._grid.focus();\n      }\n    });\n  }\n\n  destroy() {\n    this._grid.onKeyDown.unsubscribe(this.handleKeyDown.bind(this));\n  }\n\n  protected getHeaderValueForColumn(columnDef: Column): string {\n    if (this._options.headerColumnValueExtractor) {\n      const val = Utils.getHtmlStringOutput(this._options.headerColumnValueExtractor(columnDef));\n      if (val) {\n        return val;\n      }\n    }\n\n    return Utils.getHtmlStringOutput(columnDef.name || '');\n  }\n\n  protected getDataItemValueForColumn(item: any, columnDef: Column, event: SlickEventData): string {\n    if (typeof this._options.dataItemColumnValueExtractor === 'function') {\n      const val = this._options.dataItemColumnValueExtractor(item, columnDef) as string | null;\n      if (val) {\n        return val;\n      }\n    }\n\n    let retVal = '';\n\n    // if a custom getter is not defined, we call serializeValue of the editor to serialize\n    if (columnDef?.editor) {\n      const tmpP = document.createElement('p');\n      const editor = new (columnDef.editor as any)({\n        container: tmpP,  // a dummy container\n        column: columnDef,\n        event,\n        position: { top: 0, left: 0 },  // a dummy position required by some editors\n        grid: this._grid,\n      });\n      editor.loadValue(item);\n      retVal = editor.serializeValue();\n      editor.destroy();\n      tmpP.remove();\n    } else {\n      retVal = item[columnDef.field || ''];\n    }\n\n    return retVal;\n  }\n\n  protected setDataItemValueForColumn(item: any, columnDef: Column, value: string): null | string | void {\n    if (columnDef.denyPaste) {\n      return null;\n    }\n\n    if (this._options.dataItemColumnValueSetter) {\n      return this._options.dataItemColumnValueSetter(item, columnDef, value) as string;\n    }\n\n    // if a custom setter is not defined, we call applyValue of the editor to unserialize\n    if (columnDef.editor) {\n      const tmpDiv = document.createElement('div');\n      const editor = new (columnDef.editor as any)({\n        container: tmpDiv, // a dummy container\n        column: columnDef,\n        position: { top: 0, left: 0 },  // a dummy position required by some editors\n        grid: this._grid\n      });\n      editor.loadValue(item);\n      editor.applyValue(item, value);\n      editor.destroy();\n      tmpDiv.remove();\n    } else {\n      item[columnDef.field] = value;\n    }\n  }\n\n\n  protected _createTextBox(innerText: string) {\n    const ta = document.createElement('textarea');\n    ta.style.position = 'absolute';\n    ta.style.left = '-1000px';\n    ta.style.top = document.body.scrollTop + 'px';\n    ta.value = innerText;\n    this._bodyElement.appendChild(ta);\n    ta.select();\n\n    return ta;\n  }\n\n  protected _decodeTabularData(grid: SlickGrid, ta: HTMLTextAreaElement) {\n    const columns = grid.getColumns();\n    const clipText = ta.value;\n    const clipRows = clipText.split(/[\\n\\f\\r]/);\n    // trim trailing CR if present\n    if (clipRows[clipRows.length - 1] === '') {\n      clipRows.pop();\n    }\n\n    let j = 0;\n    const clippedRange: any[] = [];\n\n    this._bodyElement.removeChild(ta);\n    for (let i = 0; i < clipRows.length; i++) {\n      if (clipRows[i] !== '') {\n        clippedRange[j++] = clipRows[i].split('\\t');\n      } else {\n        clippedRange[j++] = [''];\n      }\n    }\n    const selectedCell = grid.getActiveCell();\n    const ranges = grid.getSelectionModel()?.getSelectedRanges();\n    const selectedRange = ranges && ranges.length ? ranges[0] : null;   // pick only one selection\n    let activeRow: number;\n    let activeCell: number;\n\n    if (selectedRange) {\n      activeRow = selectedRange.fromRow;\n      activeCell = selectedRange.fromCell;\n    } else if (selectedCell) {\n      activeRow = selectedCell.row;\n      activeCell = selectedCell.cell;\n    } else {\n      // we don't know where to paste\n      return;\n    }\n\n    let oneCellToMultiple = false;\n    let destH = clippedRange.length;\n    let destW = clippedRange.length ? clippedRange[0].length : 0;\n    if (clippedRange.length === 1 && clippedRange[0].length === 1 && selectedRange) {\n      oneCellToMultiple = true;\n      destH = selectedRange.toRow - selectedRange.fromRow + 1;\n      destW = selectedRange.toCell - selectedRange.fromCell + 1;\n    }\n    const availableRows = (grid.getData() as any[]).length - (activeRow || 0);\n    let addRows = 0;\n\n    // ignore new rows if we don't have a \"newRowCreator\"\n    if (availableRows < destH && typeof this._options.newRowCreator === 'function') {\n      const d = grid.getData<any[]>();\n      for (addRows = 1; addRows <= destH - availableRows; addRows++) {\n        d.push({});\n      }\n      grid.setData(d);\n      grid.render();\n    }\n\n    const overflowsBottomOfGrid = (activeRow || 0) + destH > grid.getDataLength();\n    if (this._options.newRowCreator && overflowsBottomOfGrid) {\n      const newRowsNeeded = (activeRow || 0) + destH - grid.getDataLength();\n      this._options.newRowCreator(newRowsNeeded);\n    }\n\n    const clipCommand: ExternalCopyClipCommand = {\n      isClipboardCommand: true,\n      clippedRange,\n      oldValues: [],\n      cellExternalCopyManager: this,\n      _options: this._options,\n      setDataItemValueForColumn: this.setDataItemValueForColumn.bind(this),\n      markCopySelection: this.markCopySelection.bind(this),\n      oneCellToMultiple,\n      activeRow,\n      activeCell,\n      destH,\n      destW,\n      maxDestY: grid.getDataLength(),\n      maxDestX: grid.getColumns().length,\n      h: 0,\n      w: 0,\n\n      execute: () => {\n        clipCommand.h = 0;\n        for (let y = 0; y < clipCommand.destH; y++) {\n          clipCommand.oldValues[y] = [];\n          clipCommand.w = 0;\n          clipCommand.h++;\n          for (let x = 0; x < clipCommand.destW; x++) {\n            clipCommand.w++;\n            const desty = activeRow + y;\n            const destx = activeCell + x;\n\n            if (desty < clipCommand.maxDestY && destx < clipCommand.maxDestX) {\n              const dt = grid.getDataItem(desty);\n              clipCommand.oldValues[y][x] = dt[columns[destx]['field']];\n              if (oneCellToMultiple) {\n                clipCommand.setDataItemValueForColumn(dt, columns[destx], clippedRange[0][0]);\n              } else {\n                clipCommand.setDataItemValueForColumn(dt, columns[destx], clippedRange[y] ? clippedRange[y][x] : '');\n              }\n              grid.updateCell(desty, destx);\n              grid.onCellChange.notify({\n                row: desty,\n                cell: destx,\n                item: dt,\n                grid,\n                column: {} as Column\n              });\n            }\n          }\n        }\n\n        const bRange = new SlickRange(\n          activeRow,\n          activeCell,\n          activeRow + clipCommand.h - 1,\n          activeCell + clipCommand.w - 1\n        );\n\n        this.markCopySelection([bRange]);\n        grid.getSelectionModel()?.setSelectedRanges([bRange]);\n        this.onPasteCells.notify({ ranges: [bRange] });\n      },\n\n      undo: () => {\n        for (let y = 0; y < clipCommand.destH; y++) {\n          for (let x = 0; x < clipCommand.destW; x++) {\n            const desty = activeRow + y;\n            const destx = activeCell + x;\n\n            if (desty < clipCommand.maxDestY && destx < clipCommand.maxDestX) {\n              const dt = grid.getDataItem(desty);\n              if (oneCellToMultiple) {\n                clipCommand.setDataItemValueForColumn(dt, columns[destx], clipCommand.oldValues[0][0]);\n              } else {\n                clipCommand.setDataItemValueForColumn(dt, columns[destx], clipCommand.oldValues[y][x]);\n              }\n              grid.updateCell(desty, destx);\n              grid.onCellChange.notify({\n                row: desty,\n                cell: destx,\n                item: dt,\n                grid,\n                column: {} as Column\n              });\n            }\n          }\n        }\n\n        const bRange = new SlickRange(\n          activeRow,\n          activeCell,\n          activeRow + clipCommand.h - 1,\n          activeCell + clipCommand.w - 1\n        );\n\n        this.markCopySelection([bRange]);\n        grid.getSelectionModel()?.setSelectedRanges([bRange]);\n        if (typeof this._options.onPasteCells === 'function') {\n          this.onPasteCells.notify({ ranges: [bRange] });\n        }\n\n        if (addRows > 1) {\n          const d = grid.getData<any[]>();\n          for (; addRows > 1; addRows--) {\n            d.splice(d.length - 1, 1);\n          }\n          grid.setData(d);\n          grid.render();\n        }\n      }\n    };\n\n    if (typeof this._options.clipboardCommandHandler === 'function') {\n      this._options.clipboardCommandHandler(clipCommand);\n    } else {\n      clipCommand.execute();\n    }\n  }\n\n  protected handleKeyDown(e: SlickEventData): boolean | void {\n    let ranges: SlickRange_[];\n    if (!this._grid.getEditorLock().isActive() || this._grid.getOptions().autoEdit) {\n      if (e.which === this.keyCodes.ESC) {\n        if (this._copiedRanges) {\n          e.preventDefault();\n          this.clearCopySelection();\n          this.onCopyCancelled.notify({ ranges: this._copiedRanges });\n          this._copiedRanges = null;\n        }\n      }\n\n      if ((e.which === this.keyCodes.C || e.which === this.keyCodes.INSERT) && (e.ctrlKey || e.metaKey) && !e.shiftKey) {    // CTRL+C or CTRL+INS\n        if (typeof this._onCopyInit === 'function') {\n          this._onCopyInit.call(this);\n        }\n        ranges = this._grid.getSelectionModel()?.getSelectedRanges() ?? [];\n        if (ranges.length !== 0) {\n          this._copiedRanges = ranges;\n          this.markCopySelection(ranges);\n          this.onCopyCells.notify({ ranges });\n\n          const columns = this._grid.getColumns();\n          let clipText = '';\n\n          for (let rg = 0; rg < ranges.length; rg++) {\n            const range = ranges[rg];\n            const clipTextRows: string[] = [];\n            for (let i = range.fromRow; i < range.toRow + 1; i++) {\n              const clipTextCells: string[] = [];\n              const dt = this._grid.getDataItem(i);\n\n              if (clipTextRows.length === 0 && this._options.includeHeaderWhenCopying) {\n                const clipTextHeaders: string[] = [];\n                for (let j = range.fromCell; j < range.toCell + 1; j++) {\n                  const colName: string = columns[j].name instanceof HTMLElement\n                    ? (columns[j].name as HTMLElement).innerHTML\n                    : columns[j].name as string;\n                  if (colName.length > 0 && !columns[j].hidden) {\n                    clipTextHeaders.push(this.getHeaderValueForColumn(columns[j]) || '');\n                  }\n                }\n                clipTextRows.push(clipTextHeaders.join('\\t'));\n              }\n\n              for (let j = range.fromCell; j < range.toCell + 1; j++) {\n                const colName: string = columns[j].name instanceof HTMLElement\n                  ? (columns[j].name as HTMLElement).innerHTML\n                  : columns[j].name as string;\n                if (colName.length > 0 && !columns[j].hidden) {\n                  clipTextCells.push(this.getDataItemValueForColumn(dt, columns[j], e));\n                }\n              }\n              clipTextRows.push(clipTextCells.join('\\t'));\n            }\n            clipText += clipTextRows.join('\\r\\n') + '\\r\\n';\n          }\n\n          if ((window as any).clipboardData) {\n            (window as any).clipboardData.setData('Text', clipText);\n            return true;\n          }\n          else {\n            const focusEl = document.activeElement as HTMLElement;\n            const ta = this._createTextBox(clipText);\n            ta.focus();\n\n            setTimeout(() => {\n              this._bodyElement.removeChild(ta);\n              // restore focus when possible\n              focusEl\n                ? focusEl.focus()\n                : console.log('No element to restore focus to after copy?');\n            }, this._options?.clipboardPasteDelay ?? CLIPBOARD_PASTE_DELAY);\n\n            if (typeof this._onCopySuccess === 'function') {\n              let rowCount = 0;\n              // If it's cell selection, use the toRow/fromRow fields\n              if (ranges.length === 1) {\n                rowCount = (ranges[0].toRow + 1) - ranges[0].fromRow;\n              } else {\n                rowCount = ranges.length;\n              }\n              this._onCopySuccess(rowCount);\n            }\n\n            return false;\n          }\n        }\n      }\n\n      if (!this._options.readOnlyMode && (\n        (e.which === this.keyCodes.V && (e.ctrlKey || e.metaKey) && !e.shiftKey)\n        || (e.which === this.keyCodes.INSERT && e.shiftKey && !e.ctrlKey)\n      )) {    // CTRL+V or Shift+INS\n        const focusEl = document.activeElement as HTMLElement;\n        const ta = this._createTextBox('');\n        setTimeout(() => {\n            this._decodeTabularData(this._grid, ta);\n            // restore focus when possible\n            focusEl?.focus();\n        }, this._options?.clipboardPasteDelay ?? CLIPBOARD_PASTE_DELAY);\n        return false;\n      }\n    }\n  }\n\n  protected markCopySelection(ranges: SlickRange_[]) {\n    this.clearCopySelection();\n\n    const columns = this._grid.getColumns();\n    const hash: CssStyleHash = {};\n    for (let i = 0; i < ranges.length; i++) {\n      for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n        hash[j] = {};\n        for (let k = ranges[i].fromCell; k <= ranges[i].toCell && k < columns.length; k++) {\n          hash[j][columns[k].id] = this._copiedCellStyle;\n        }\n      }\n    }\n    this._grid.setCellCssStyles(this._copiedCellStyleLayerKey, hash);\n    clearTimeout(this._clearCopyTI as NodeJS.Timeout);\n    this._clearCopyTI = setTimeout(() => {\n      this.clearCopySelection();\n    }, this._options?.clearCopySelectionDelay || CLEAR_COPY_SELECTION_DELAY);\n  }\n\n  clearCopySelection() {\n    this._grid.removeCellCssStyles(this._copiedCellStyleLayerKey);\n  }\n\n  setIncludeHeaderWhenCopying(includeHeaderWhenCopying: boolean) {\n    this._options.includeHeaderWhenCopying = includeHeaderWhenCopying;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      CellExternalCopyManager: SlickCellExternalCopyManager\n    }\n  });\n}\n", "import {\n  BindingEventService as BindingEventService_,\n  SlickEvent as SlickEvent_,\n  SlickEventData as SlickEventData_,\n  SlickEventHandler as SlickEventHandler_,\n  Utils as Utils_\n} from '../slick.core';\nimport type {\n  CellMenuOption,\n  Column,\n  DOMMouseOrTouchEvent,\n  GridOption,\n  MenuCommandItem,\n  MenuCommandItemCallbackArgs,\n  MenuFromCellCallbackArgs,\n  MenuOptionItem,\n  MenuOptionItemCallbackArgs,\n  MenuType,\n  SlickPlugin\n} from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst EventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * A plugin to add Menu on a Cell click (click on the cell that has the cellMenu object defined)\n * The \"cellMenu\" is defined in a Column Definition object\n * Similar to the ContextMenu plugin (could be used in combo),\n * except that it subscribes to the cell \"onClick\" event (regular mouse click or touch).\n *\n * A general use of this plugin is for an Action Dropdown Menu to do certain things on the row that was clicked\n * You can use it to change the cell data property through a list of Options AND/OR through a list of Commands.\n *\n * USAGE:\n *\n * Add the slick.cellMenu.(js|css) files and register it with the grid.\n *\n * To specify a menu in a column header, extend the column definition like so:\n * var cellMenuPlugin = new Slick.Plugins.CellMenu(columns, grid, options);\n *\n * Available cellMenu options, by defining a cellMenu object:\n *\n *  var columns = [\n *    {\n *      id: \"action\", name: \"Action\", field: \"action\", formatter: fakeButtonFormatter,\n *      cellMenu: {\n *        optionTitle: \"Change Effort Driven\",\n *        optionItems: [\n *          { option: true, title: \"True\", iconCssClass: 'checkmark' },\n *          { option: false, title: \"False\" }\n *        ],\n *        commandTitle: \"Commands\",\n *        commandItems: [\n *          { command: \"delete-row\", title: \"Delete Row\", iconCssClass: \"sgi sgi-close\", cssClass: 'bold', textCssClass: \"red\" },\n *          { divider: true },\n *          \"divider\" // you can pass \"divider\" as a string or an object\n *          { command: \"help\", title: \"Help\", iconCssClass: \"icon-help\" },\n *          { command: \"help\", title: \"Disabled Command\", disabled: true },\n *        ],\n *      }\n *    }\n *  ];\n *\n *\n * Available cellMenu properties:\n *    commandTitle:               Title of the Command section (optional)\n *    commandItems:               Array of Command item objects (command/title pair)\n *    optionTitle:                Title of the Option section (optional)\n *    optionItems:                Array of Options item objects (option/title pair)\n *    hideCloseButton:            Hide the Close button on top right (defaults to false)\n *    hideCommandSection:         Hide the Commands section even when the commandItems array is filled (defaults to false)\n *    hideMenuOnScroll:           Do we want to hide the Cell Menu when a scrolling event occurs (defaults to true)?\n *    hideOptionSection:          Hide the Options section even when the optionItems array is filled (defaults to false)\n *    maxHeight:                  Maximum height that the drop menu will have, can be a number (250) or text (\"none\")\n *    width:                      Width that the drop menu will have, can be a number (250) or text (defaults to \"auto\")\n *    autoAdjustDrop:             Auto-align dropup or dropdown menu to the left or right depending on grid viewport available space (defaults to true)\n *    autoAdjustDropOffset:       Optionally add an offset to the auto-align of the drop menu (defaults to 0)\n *    autoAlignSide:              Auto-align drop menu to the left or right depending on grid viewport available space (defaults to true)\n *    autoAlignSideOffset:        Optionally add an offset to the left/right side auto-align (defaults to 0)\n *    menuUsabilityOverride:      Callback method that user can override the default behavior of enabling/disabling the menu from being usable (must be combined with a custom formatter)\n *    subItemChevronClass:        CSS class that can be added on the right side of a sub-item parent (typically a chevron-right icon)\n *    subMenuOpenByEvent:         defaults to \"mouseover\", what event type shoud we use to open sub-menu(s), 2 options are available: \"mouseover\" or \"click\"\n *\n *\n * Available menu Command/Option item properties:\n *    action:                     Optionally define a callback function that gets executed when item is chosen (and/or use the onCommand event)\n *    command:                    A command identifier to be passed to the onCommand event handlers (when using \"commandItems\").\n *    option:                     An option to be passed to the onOptionSelected event handlers (when using \"optionItems\").\n *    title:                      Menu item text label.\n *    divider:                    Boolean which tells if the current item is a divider, not an actual command. You could also pass \"divider\" instead of an object\n *    disabled:                   Whether the item/command is disabled.\n *    hidden:                     Whether the item/command is hidden.\n *    subMenuTitle:               Optional sub-menu title that will shows up when sub-menu commmands/options list is opened\n *    subMenuTitleCssClass:       Optional sub-menu title CSS class to use with `subMenuTitle`\n *    tooltip:                    Item tooltip.\n *    cssClass:                   A CSS class to be added to the menu item container.\n *    iconCssClass:               A CSS class to be added to the menu item icon.\n *    textCssClass:               A CSS class to be added to the menu item text.\n *    iconImage:                  A url to the icon image.\n *    itemVisibilityOverride:     Callback method that user can override the default behavior of showing/hiding an item from the list\n *    itemUsabilityOverride:      Callback method that user can override the default behavior of enabling/disabling an item from the list\n *\n *\n * The plugin exposes the following events:\n *\n *    onAfterMenuShow: Fired after the menu is shown.  You can customize the menu or dismiss it by returning false.\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *\n *    onBeforeMenuShow: Fired before the menu is shown.  You can customize the menu or dismiss it by returning false.\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *\n *    onBeforeMenuClose: Fired when the menu is closing.\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *            menu:         Menu DOM element\n *\n *    onCommand: Fired on menu option clicked from the Command items list\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *            command:      Menu command identified.\n *            item:         Menu item selected\n *            column:    Cell Column definition\n *            dataContext:  Cell Data Context (data object)\n *\n *    onOptionSelected: Fired on menu option clicked from the Option items list\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *            option:       Menu option selected.\n *            item:         Menu item selected\n *            column:    Cell Column definition\n *            dataContext:  Cell Data Context (data object)\n *\n *\n * @param options {Object} Cell Menu Options\n * @class Slick.Plugins.CellMenu\n */\nexport class SlickCellMenu implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CellMenu' as const;\n  onAfterMenuShow = new SlickEvent<MenuFromCellCallbackArgs>('onAfterMenuShow');\n  onBeforeMenuShow = new SlickEvent<MenuFromCellCallbackArgs>('onBeforeMenuShow');\n  onBeforeMenuClose = new SlickEvent<MenuFromCellCallbackArgs>('onBeforeMenuClose');\n  onCommand = new SlickEvent<MenuCommandItemCallbackArgs>('onCommand');\n  onOptionSelected = new SlickEvent<MenuOptionItemCallbackArgs>('onOptionSelected');\n\n  // --\n  // protected props\n  protected _bindingEventService = new BindingEventService();\n  protected _cellMenuProperties: CellMenuOption;\n  protected _currentCell = -1;\n  protected _currentRow = -1;\n  protected _grid!: SlickGrid;\n  protected _gridOptions!: GridOption;\n  protected _gridUid = '';\n  protected _handler = new EventHandler();\n  protected _commandTitleElm?: HTMLSpanElement;\n  protected _optionTitleElm?: HTMLSpanElement;\n  protected _lastMenuTypeClicked = '';\n  protected _menuElm?: HTMLDivElement | null;\n  protected _subMenuParentId = '';\n  protected _defaults: CellMenuOption = {\n    autoAdjustDrop: true,     // dropup/dropdown\n    autoAlignSide: true,      // left/right\n    autoAdjustDropOffset: 0,\n    autoAlignSideOffset: 0,\n    hideMenuOnScroll: true,\n    maxHeight: 'none',\n    width: 'auto',\n    subMenuOpenByEvent: 'mouseover',\n  };\n\n  constructor(optionProperties: Partial<CellMenuOption>) {\n    this._cellMenuProperties = Utils.extend({}, this._defaults, optionProperties);\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._gridOptions = grid.getOptions();\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._gridUid = grid?.getUID() || '';\n    this._handler.subscribe(this._grid.onClick as any, this.handleCellClick.bind(this));\n    if (this._cellMenuProperties.hideMenuOnScroll) {\n      this._handler.subscribe(this._grid.onScroll, this.closeMenu.bind(this));\n    }\n  }\n\n  setOptions(newOptions: Partial<CellMenuOption>) {\n    this._cellMenuProperties = Utils.extend({}, this._cellMenuProperties, newOptions);\n  }\n\n  destroy() {\n    this.onAfterMenuShow.unsubscribe();\n    this.onBeforeMenuShow.unsubscribe();\n    this.onBeforeMenuClose.unsubscribe();\n    this.onCommand.unsubscribe();\n    this.onOptionSelected.unsubscribe();\n    this._handler.unsubscribeAll();\n    this._bindingEventService.unbindAll();\n    this._menuElm?.remove();\n    this._commandTitleElm = null as any;\n    this._optionTitleElm = null as any;\n    this._menuElm = null as any;\n  }\n\n  protected createParentMenu(e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    const cell = this._grid.getCellFromEvent(e);\n    this._currentCell = cell?.cell ?? 0;\n    this._currentRow = cell?.row ?? 0;\n    const columnDef = this._grid.getColumns()[this._currentCell];\n\n    const commandItems = this._cellMenuProperties.commandItems || [];\n    const optionItems = this._cellMenuProperties.optionItems || [];\n\n    // make sure there's at least something to show before creating the Cell Menu\n    if (!columnDef || !columnDef.cellMenu || (!commandItems.length && !optionItems.length)) {\n      return;\n    }\n\n    // delete any prior Cell Menu\n    this.closeMenu();\n\n    // Let the user modify the menu or cancel altogether,\n    // or provide alternative menu implementation.\n    if (this.onBeforeMenuShow.notify({\n      cell: this._currentCell,\n      row: this._currentRow,\n      grid: this._grid\n    }, e, this).getReturnValue() === false) {\n      return;\n    }\n\n    // create 1st parent menu container & reposition it\n    this._menuElm = this.createMenu(commandItems, optionItems);\n    this._menuElm.style.top = `${e.pageY + 5}px`;\n    this._menuElm.style.left = `${e.pageX}px`;\n    this._menuElm.style.display = 'block';\n    document.body.appendChild(this._menuElm);\n\n    if (this.onAfterMenuShow.notify({\n      cell: this._currentCell,\n      row: this._currentRow,\n      grid: this._grid\n    }, e, this).getReturnValue() === false) {\n      return;\n    }\n\n    return this._menuElm;\n  }\n\n  /**\n   * Create parent menu or sub-menu(s), a parent menu will start at level 0 while sub-menu(s) will be incremented\n   * @param commandItems - array of optional commands or dividers\n   * @param optionItems - array of optional options or dividers\n   * @param level - menu level\n   * @param item - command, option or divider\n   * @returns menu DOM element\n   */\n  protected createMenu(commandItems: Array<MenuCommandItem | 'divider'>, optionItems: Array<MenuOptionItem | 'divider'>, level = 0, item?: MenuCommandItem | MenuOptionItem | 'divider') {\n    const columnDef = this._grid.getColumns()[this._currentCell];\n    const dataContext = this._grid.getDataItem(this._currentRow);\n\n    // create a new cell menu\n    const maxHeight = isNaN(this._cellMenuProperties.maxHeight as number) ? this._cellMenuProperties.maxHeight : `${this._cellMenuProperties.maxHeight ?? 0}px`;\n    const width = isNaN(this._cellMenuProperties.width as number) ? this._cellMenuProperties.width : `${this._cellMenuProperties.maxWidth ?? 0}px`;\n\n    // to avoid having multiple sub-menu trees opened,\n    // we need to somehow keep trace of which parent menu the tree belongs to\n    // and we should keep ref of only the first sub-menu parent, we can use the command name (remove any whitespaces though)\n    const subMenuCommand = (item as MenuCommandItem)?.command;\n    let subMenuId = (level === 1 && subMenuCommand) ? subMenuCommand.replaceAll(' ', '') : '';\n    if (subMenuId) {\n      this._subMenuParentId = subMenuId;\n    }\n    if (level > 1) {\n      subMenuId = this._subMenuParentId;\n    }\n\n    const menuClasses = `slick-cell-menu slick-menu-level-${level} ${this._gridUid}`;\n    const bodyMenuElm = document.body.querySelector<HTMLDivElement>(`.slick-cell-menu.slick-menu-level-${level}${this.getGridUidSelector()}`);\n\n    // return menu/sub-menu if it's already opened unless we are on different sub-menu tree if so close them all\n    if (bodyMenuElm) {\n      if (bodyMenuElm.dataset.subMenuParent === subMenuId) {\n        return bodyMenuElm;\n      }\n      this.destroySubMenus();\n    }\n\n    const menuElm = document.createElement('div');\n    menuElm.className = menuClasses;\n    if (level > 0) {\n      menuElm.classList.add('slick-submenu');\n      if (subMenuId) {\n        menuElm.dataset.subMenuParent = subMenuId;\n      }\n    }\n    menuElm.ariaLabel = level > 1 ? 'SubMenu' : 'Cell Menu';\n    menuElm.role = 'menu';\n    if (width) {\n      menuElm.style.width = width as string;\n    }\n    if (maxHeight) {\n      menuElm.style.maxHeight = maxHeight as string;\n    }\n\n    menuElm.style.display = 'none';\n\n    let closeButtonElm: HTMLButtonElement | null = null;\n    if (level === 0) {\n      closeButtonElm = document.createElement('button');\n      closeButtonElm.type = 'button';\n      closeButtonElm.className = 'close';\n      closeButtonElm.dataset.dismiss = 'slick-cell-menu';\n      closeButtonElm.ariaLabel = 'Close';\n\n      const spanCloseElm = document.createElement('span');\n      spanCloseElm.className = 'close';\n      spanCloseElm.ariaHidden = 'true';\n      spanCloseElm.textContent = '\u00D7';\n      closeButtonElm.appendChild(spanCloseElm);\n    }\n\n    // -- Option List section\n    if (!this._cellMenuProperties.hideOptionSection && optionItems.length > 0) {\n      const optionMenuElm = document.createElement('div');\n      optionMenuElm.className = 'slick-cell-menu-option-list';\n      optionMenuElm.role = 'menu';\n\n      // when creating sub-menu add its sub-menu title when exists\n      if (item && level > 0) {\n        this.addSubMenuTitleWhenExists(item, optionMenuElm); // add sub-menu title when exists\n      }\n\n      if (closeButtonElm && !this._cellMenuProperties.hideCloseButton) {\n        this._bindingEventService.bind(closeButtonElm, 'click', this.handleCloseButtonClicked.bind(this) as EventListener);\n        menuElm.appendChild(closeButtonElm);\n      }\n      menuElm.appendChild(optionMenuElm);\n\n      this.populateCommandOrOptionItems(\n        'option',\n        this._cellMenuProperties,\n        optionMenuElm,\n        optionItems,\n        { cell: this._currentCell, row: this._currentRow, column: columnDef, dataContext, grid: this._grid, level }\n      );\n    }\n\n    // -- Command List section\n    if (!this._cellMenuProperties.hideCommandSection && commandItems.length > 0) {\n      const commandMenuElm = document.createElement('div');\n      commandMenuElm.className = 'slick-cell-menu-command-list';\n      commandMenuElm.role = 'menu';\n\n      // when creating sub-menu add its sub-menu title when exists\n      if (item && level > 0) {\n        this.addSubMenuTitleWhenExists(item, commandMenuElm); // add sub-menu title when exists\n      }\n\n      if (closeButtonElm && !this._cellMenuProperties.hideCloseButton && (optionItems.length === 0 || this._cellMenuProperties.hideOptionSection)) {\n        this._bindingEventService.bind(closeButtonElm, 'click', this.handleCloseButtonClicked.bind(this) as EventListener);\n        menuElm.appendChild(closeButtonElm);\n      }\n      menuElm.appendChild(commandMenuElm);\n\n      this.populateCommandOrOptionItems(\n        'command',\n        this._cellMenuProperties,\n        commandMenuElm,\n        commandItems,\n        { cell: this._currentCell, row: this._currentRow, column: columnDef, dataContext, grid: this._grid, level }\n      );\n    }\n\n    // increment level for possible next sub-menus if exists\n    level++;\n\n    return menuElm;\n  }\n\n  protected addSubMenuTitleWhenExists(item: MenuCommandItem | MenuOptionItem | 'divider', commandOrOptionMenu: HTMLDivElement) {\n    if (item !== 'divider' && item?.subMenuTitle) {\n      const subMenuTitleElm = document.createElement('div');\n      subMenuTitleElm.className = 'slick-menu-title';\n      subMenuTitleElm.textContent = item.subMenuTitle as string;\n      const subMenuTitleClass = item.subMenuTitleCssClass as string;\n      if (subMenuTitleClass) {\n        subMenuTitleElm.classList.add(...Utils.classNameToList(subMenuTitleClass));\n      }\n\n      commandOrOptionMenu.appendChild(subMenuTitleElm);\n    }\n  }\n\n  protected handleCloseButtonClicked(e: DOMMouseOrTouchEvent<HTMLButtonElement>) {\n    if (!e.defaultPrevented) {\n      this.closeMenu(e);\n    }\n  }\n\n  /** Close and destroy Cell Menu */\n  closeMenu(e?: DOMMouseOrTouchEvent<HTMLButtonElement | HTMLDivElement> | SlickEventData_, args?: MenuFromCellCallbackArgs) {\n    if (this._menuElm) {\n      if (this.onBeforeMenuClose.notify({\n        cell: args?.cell ?? 0,\n        row: args?.row ?? 0,\n        grid: this._grid,\n      }, e, this).getReturnValue() === false) {\n        return;\n      }\n      this._menuElm.remove();\n      this._menuElm = null;\n    }\n    this.destroySubMenus();\n  }\n\n  /** Destroy all parent menus and any sub-menus */\n  destroyAllMenus() {\n    this.destroySubMenus();\n\n    // remove all parent menu listeners before removing them from the DOM\n    this._bindingEventService.unbindAll('parent-menu');\n    document.querySelectorAll(`.slick-cell-menu${this.getGridUidSelector()}`)\n      .forEach(subElm => subElm.remove());\n  }\n\n  /** Close and destroy all previously opened sub-menus */\n  destroySubMenus() {\n    this._bindingEventService.unbindAll('sub-menu');\n    document.querySelectorAll(`.slick-cell-menu.slick-submenu${this.getGridUidSelector()}`)\n      .forEach(subElm => subElm.remove());\n  }\n\n  protected repositionSubMenu(item: MenuCommandItem | MenuOptionItem | 'divider', type: MenuType, level: number, e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    // when we're clicking a grid cell OR our last menu type (command/option) differs then we know that we need to start fresh and close any sub-menus that might still be open\n    if (e.target.classList.contains('slick-cell') || this._lastMenuTypeClicked !== type) {\n      this.destroySubMenus();\n    }\n\n    // creating sub-menu, we'll also pass level & the item object since we might have \"subMenuTitle\" to show\n    const subMenuElm = this.createMenu((item as MenuCommandItem)?.commandItems || [], (item as MenuOptionItem)?.optionItems || [], level + 1, item);\n    subMenuElm.style.display = 'block';\n    document.body.appendChild(subMenuElm);\n    this.repositionMenu(e, subMenuElm);\n  }\n\n  /**\n   * Reposition the menu drop (up/down) and the side (left/right)\n   * @param {*} event\n   */\n  repositionMenu(e: DOMMouseOrTouchEvent<HTMLDivElement>, menuElm: HTMLElement) {\n    const isSubMenu = menuElm.classList.contains('slick-submenu');\n    const parentElm = isSubMenu\n      ? e.target.closest('.slick-cell-menu-item') as HTMLDivElement\n      : e.target.closest('.slick-cell') as HTMLDivElement;\n\n    if (menuElm && parentElm) {\n      const parentOffset = Utils.offset(parentElm);\n      let menuOffsetLeft = parentElm ? parentOffset?.left ?? 0 : e?.pageX ?? 0;\n      let menuOffsetTop = parentElm ? parentOffset?.top ?? 0 : e?.pageY ?? 0;\n      const parentCellWidth = parentElm?.offsetWidth || 0;\n      const menuHeight = menuElm?.offsetHeight ?? 0;\n      const menuWidth = Number(menuElm?.offsetWidth ?? this._cellMenuProperties.width ?? 0);\n      const rowHeight = this._gridOptions.rowHeight;\n      const dropOffset = Number(this._cellMenuProperties.autoAdjustDropOffset || 0);\n      const sideOffset = Number(this._cellMenuProperties.autoAlignSideOffset || 0);\n\n      // if autoAdjustDrop is enable, we first need to see what position the drop will be located (defaults to bottom)\n      // without necessary toggling it's position just yet, we just want to know the future position for calculation\n      if (this._cellMenuProperties.autoAdjustDrop) {\n        // since we reposition menu below slick cell, we need to take it in consideration and do our calculation from that element\n        const spaceBottom = Utils.calculateAvailableSpace(parentElm).bottom;\n        const spaceTop = Utils.calculateAvailableSpace(parentElm).top;\n        const spaceBottomRemaining = spaceBottom + dropOffset - rowHeight!;\n        const spaceTopRemaining = spaceTop - dropOffset + rowHeight!;\n        const dropPosition = (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining) ? 'top' : 'bottom';\n        if (dropPosition === 'top') {\n          menuElm.classList.remove('dropdown');\n          menuElm.classList.add('dropup');\n          if (isSubMenu) {\n            menuOffsetTop -= (menuHeight - dropOffset - parentElm.clientHeight);\n          } else {\n            menuOffsetTop -= menuHeight - dropOffset;\n          }\n        } else {\n          menuElm.classList.remove('dropup');\n          menuElm.classList.add('dropdown');\n          if (isSubMenu) {\n            menuOffsetTop += dropOffset;\n          } else {\n            menuOffsetTop += rowHeight! + dropOffset;\n          }\n        }\n      }\n\n      // when auto-align is set, it will calculate whether it has enough space in the viewport to show the drop menu on the right (default)\n      // if there isn't enough space on the right, it will automatically align the drop menu to the left (defaults to the right)\n      // to simulate an align left, we actually need to know the width of the drop menu\n      if (this._cellMenuProperties.autoAlignSide) {\n        const gridPos = this._grid.getGridPosition();\n        let subMenuPosCalc = menuOffsetLeft + Number(menuWidth); // calculate coordinate at caller element far right\n        if (isSubMenu) {\n          subMenuPosCalc += parentElm.clientWidth;\n        }\n        const browserWidth = document.documentElement.clientWidth;\n        const dropSide = (subMenuPosCalc >= gridPos.width || subMenuPosCalc >= browserWidth) ? 'left' : 'right';\n        if (dropSide === 'left') {\n          menuElm.classList.remove('dropright');\n          menuElm.classList.add('dropleft');\n          if (isSubMenu) {\n            menuOffsetLeft -= menuWidth - sideOffset;\n          } else {\n            menuOffsetLeft -= menuWidth - parentCellWidth - sideOffset;\n          }\n        } else {\n          menuElm.classList.remove('dropleft');\n          menuElm.classList.add('dropright');\n          if (isSubMenu) {\n            menuOffsetLeft += sideOffset + parentElm.offsetWidth;\n          } else {\n            menuOffsetLeft += sideOffset;\n          }\n        }\n      }\n\n      // ready to reposition the menu\n      menuElm.style.top = `${menuOffsetTop}px`;\n      menuElm.style.left = `${menuOffsetLeft}px`;\n    }\n  }\n\n  protected getGridUidSelector() {\n    const gridUid = this._grid.getUID() || '';\n    return gridUid ? `.${gridUid}` : '';\n  }\n\n  protected handleCellClick(evt: SlickEventData_ | DOMMouseOrTouchEvent<HTMLDivElement>, args: MenuCommandItemCallbackArgs) {\n    this.destroyAllMenus(); // make there's only 1 parent menu opened at a time\n    const e = (evt instanceof SlickEventData) ? evt.getNativeEvent<DOMMouseOrTouchEvent<HTMLDivElement>>() : evt;\n    const cell = this._grid.getCellFromEvent(e);\n\n    if (cell) {\n      const dataContext = this._grid.getDataItem(cell.row);\n      const columnDef = this._grid.getColumns()[cell.cell];\n\n      // prevent event from bubbling but only on column that has a cell menu defined\n      if (columnDef?.cellMenu) {\n        e.preventDefault();\n      }\n\n      // merge the cellMenu of the column definition with the default properties\n      this._cellMenuProperties = Utils.extend({}, this._cellMenuProperties, columnDef.cellMenu);\n\n      // run the override function (when defined), if the result is false it won't go further\n      args = args || {};\n      args.column = columnDef;\n      args.dataContext = dataContext;\n      args.grid = this._grid;\n      if (!this.runOverrideFunctionWhenExists<typeof args>(this._cellMenuProperties.menuUsabilityOverride, args)) {\n        return;\n      }\n\n      // create the DOM element\n      this._menuElm = this.createParentMenu(e);\n\n      // reposition the menu to where the user clicked\n      if (this._menuElm) {\n        this.repositionMenu(e, this._menuElm);\n        this._menuElm.setAttribute('aria-expanded', 'true');\n        this._menuElm.style.display = 'block';\n      }\n\n      // Hide the menu on outside click.\n      this._bindingEventService.bind(document.body, 'mousedown', this.handleBodyMouseDown.bind(this) as EventListener);\n    }\n  }\n\n  /** When users click outside the Cell Menu, we will typically close the Cell Menu (and any sub-menus) */\n  protected handleBodyMouseDown(e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    // did we click inside the menu or any of its sub-menu(s)\n    let isMenuClicked = false;\n    if (this._menuElm?.contains(e.target)) {\n      isMenuClicked = true;\n    }\n    if (!isMenuClicked) {\n      document\n        .querySelectorAll(`.slick-cell-menu.slick-submenu${this.getGridUidSelector()}`)\n        .forEach(subElm => {\n          if (subElm.contains(e.target)) {\n            isMenuClicked = true;\n          }\n        });\n    }\n\n    if (this._menuElm !== e.target && !isMenuClicked && !e.defaultPrevented) {\n      this.closeMenu(e, { cell: this._currentCell, row: this._currentRow, grid: this._grid });\n    }\n  }\n\n  /** Build the Command Items section. */\n  protected populateCommandOrOptionItems(\n    itemType: MenuType,\n    cellMenu: CellMenuOption,\n    commandOrOptionMenuElm: HTMLElement,\n    commandOrOptionItems: Array<MenuCommandItem | 'divider'> | Array<MenuOptionItem | 'divider'>,\n    args: { cell: number, row: number, column: Column, dataContext: any, grid: SlickGrid, level: number }\n  ) {\n    if (!args || !commandOrOptionItems || !cellMenu) {\n      return;\n    }\n\n    // user could pass a title on top of the Commands/Options section\n    const level = args?.level || 0;\n    const isSubMenu = level > 0;\n    if (cellMenu?.[`${itemType}Title`] && !isSubMenu) {\n      this[`_${itemType}TitleElm`] = document.createElement('div');\n      this[`_${itemType}TitleElm`]!.className = 'slick-menu-title';\n      this[`_${itemType}TitleElm`]!.textContent = cellMenu[`${itemType}Title`] as string;\n      commandOrOptionMenuElm.appendChild(this[`_${itemType}TitleElm`]!);\n    }\n\n    for (let i = 0, ln = commandOrOptionItems.length; i < ln; i++) {\n      let addClickListener = true;\n      const item = commandOrOptionItems[i];\n\n      // run each override functions to know if the item is visible and usable\n      const isItemVisible = this.runOverrideFunctionWhenExists<typeof args>((item as MenuCommandItem | MenuOptionItem).itemVisibilityOverride, args);\n      const isItemUsable = this.runOverrideFunctionWhenExists<typeof args>((item as MenuCommandItem | MenuOptionItem).itemUsabilityOverride, args);\n\n      // if the result is not visible then there's no need to go further\n      if (!isItemVisible) {\n        continue;\n      }\n\n      // when the override is defined, we need to use its result to update the disabled property\n      // so that \"handleMenuItemClick\" has the correct flag and won't trigger a command/option clicked event\n      if (Object.prototype.hasOwnProperty.call(item, 'itemUsabilityOverride')) {\n        (item as MenuCommandItem | MenuOptionItem).disabled = isItemUsable ? false : true;\n      }\n\n      const liElm = document.createElement('div');\n      liElm.className = 'slick-cell-menu-item';\n      liElm.role = 'menuitem';\n\n      if ((item as MenuCommandItem | MenuOptionItem).divider || item === 'divider') {\n        liElm.classList.add('slick-cell-menu-item-divider');\n        addClickListener = false;\n      }\n\n      // if the item is disabled then add the disabled css class\n      if ((item as MenuCommandItem | MenuOptionItem).disabled || !isItemUsable) {\n        liElm.classList.add('slick-cell-menu-item-disabled');\n      }\n\n      // if the item is hidden then add the hidden css class\n      if ((item as MenuCommandItem | MenuOptionItem).hidden) {\n        liElm.classList.add('slick-cell-menu-item-hidden');\n      }\n\n      if ((item as MenuCommandItem | MenuOptionItem).cssClass) {\n        liElm.classList.add(...Utils.classNameToList((item as MenuCommandItem | MenuOptionItem).cssClass));\n      }\n\n      if ((item as MenuCommandItem | MenuOptionItem).tooltip) {\n        liElm.title = (item as MenuCommandItem | MenuOptionItem).tooltip || '';\n      }\n\n      const iconElm = document.createElement('div');\n      iconElm.className = 'slick-cell-menu-icon';\n\n      liElm.appendChild(iconElm);\n\n      if ((item as MenuCommandItem | MenuOptionItem).iconCssClass) {\n        iconElm.classList.add(...Utils.classNameToList((item as MenuCommandItem | MenuOptionItem).iconCssClass));\n      }\n\n      if ((item as MenuCommandItem | MenuOptionItem).iconImage) {\n        iconElm.style.backgroundImage = `url(${(item as MenuCommandItem | MenuOptionItem).iconImage})`;\n      }\n\n      const textElm = document.createElement('span');\n      textElm.className = 'slick-cell-menu-content';\n      textElm.textContent = (item as MenuCommandItem | MenuOptionItem).title || '';\n\n      liElm.appendChild(textElm);\n\n      if ((item as MenuCommandItem | MenuOptionItem).textCssClass) {\n        textElm.classList.add(...Utils.classNameToList((item as MenuCommandItem | MenuOptionItem).textCssClass));\n      }\n\n      commandOrOptionMenuElm.appendChild(liElm);\n\n      if (addClickListener) {\n        const eventGroup = isSubMenu ? 'sub-menu' : 'parent-menu';\n        this._bindingEventService.bind(liElm, 'click', this.handleMenuItemClick.bind(this, item, itemType, level) as EventListener, undefined, eventGroup);\n      }\n\n      // optionally open sub-menu(s) by mouseover\n      if (this._cellMenuProperties.subMenuOpenByEvent === 'mouseover') {\n        this._bindingEventService.bind(liElm, 'mouseover', ((e: DOMMouseOrTouchEvent<HTMLDivElement>) => {\n          if ((item as MenuCommandItem).commandItems || (item as MenuOptionItem).optionItems) {\n            this.repositionSubMenu(item, itemType, level, e);\n            this._lastMenuTypeClicked = itemType;\n          } else if (!isSubMenu) {\n            this.destroySubMenus();\n          }\n        }) as EventListener);\n      }\n\n      // the option/command item could be a sub-menu if it has another list of commands/options\n      if ((item as MenuCommandItem).commandItems || (item as MenuOptionItem).optionItems) {\n        const chevronElm = document.createElement('span');\n        chevronElm.className = 'sub-item-chevron';\n        if (this._cellMenuProperties.subItemChevronClass) {\n          chevronElm.classList.add(...Utils.classNameToList(this._cellMenuProperties.subItemChevronClass));\n        } else {\n          chevronElm.textContent = '\u2B9E'; // \u2B9E or \u25B8\n        }\n\n        liElm.classList.add('slick-submenu-item');\n        liElm.appendChild(chevronElm);\n        continue;\n      }\n    }\n  }\n\n  protected handleMenuItemClick(item: MenuCommandItem | MenuOptionItem | 'divider', type: MenuType, level = 0, e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    if ((item as never)?.[type] !== undefined && item !== 'divider' && !item.disabled && !(item as MenuCommandItem | MenuOptionItem).divider && this._currentCell !== undefined && this._currentRow !== undefined) {\n      if (type === 'option' && !this._grid.getEditorLock().commitCurrentEdit()) {\n        return;\n      }\n      const optionOrCommand = (item as any)[type] !== undefined ? (item as any)[type] : '';\n      const row = this._currentRow;\n      const cell = this._currentCell;\n      const columnDef = this._grid.getColumns()[cell];\n      const dataContext = this._grid.getDataItem(row);\n\n      if (optionOrCommand !== undefined && !(item as any)[`${type}Items`]) {\n        // user could execute a callback through 2 ways\n        // via the onCommand/onOptionSelected event and/or an action callback\n        const callbackArgs = {\n          cell,\n          row,\n          grid: this._grid,\n          [type]: optionOrCommand,\n          item,\n          column: columnDef,\n          dataContext,\n        };\n        const eventType = type === 'command' ? 'onCommand' : 'onOptionSelected';\n        this[eventType].notify(callbackArgs as any, e, this);\n\n        // execute action callback when defined\n        if (typeof item.action === 'function') {\n          (item as any).action.call(this, e, callbackArgs);\n        }\n\n        // unless prevented, close the menu\n        if (!e.defaultPrevented) {\n          this.closeMenu(e, { cell, row, grid: this._grid });\n        }\n      } else if ((item as MenuCommandItem).commandItems || (item as MenuOptionItem).optionItems) {\n        this.repositionSubMenu(item, type, level, e);\n      } else {\n        this.destroySubMenus();\n      }\n      this._lastMenuTypeClicked = type;\n    }\n  }\n\n  /**\n   * Method that user can pass to override the default behavior.\n   * In order word, user can choose or an item is (usable/visible/enable) by providing his own logic.\n   * @param overrideFn: override function callback\n   * @param args: multiple arguments provided to the override (cell, row, columnDef, dataContext, grid)\n   */\n  protected runOverrideFunctionWhenExists<T = any>(overrideFn: ((args: any) => boolean) | undefined, args: T): boolean {\n    if (typeof overrideFn === 'function') {\n      return overrideFn.call(this, args);\n    }\n    return true;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      Plugins: {\n        CellMenu: SlickCellMenu\n      }\n    }\n  });\n}\n", "import type { CSSStyleDeclarationWritable, CellRangeDecoratorOption, SlickPlugin } from '../models/index';\nimport { Utils as Utils_, type SlickRange } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n   * Displays an overlay on top of a given cell range.\n   *\n   * TODO:\n   * Currently, it blocks mouse events to DOM nodes behind it.\n   * Use FF and WebKit-specific \"pointer-events\" CSS style, or some kind of event forwarding.\n   * Could also construct the borders separately using 4 individual DIVs.\n   *\n   * @param {Grid} grid\n   * @param {Object} options\n   */\nexport class SlickCellRangeDecorator implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CellRangeDecorator' as const;\n\n  // --\n  // protected props\n  protected _options: CellRangeDecoratorOption;\n  protected _elem?: HTMLDivElement | null;\n  protected _defaults = {\n    selectionCssClass: 'slick-range-decorator',\n    selectionCss: {\n      zIndex: '9999',\n      border: '2px dashed red'\n    },\n    offset: { top: -1, left: -1, height: -2, width: -2 }\n  } as CellRangeDecoratorOption;\n\n  constructor(protected readonly grid: SlickGrid, options?: Partial<CellRangeDecoratorOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  destroy() {\n    this.hide();\n  }\n\n  init() { }\n\n  hide() {\n    this._elem?.remove();\n    this._elem = null;\n  }\n\n  show(range: SlickRange) {\n    if (!this._elem) {\n      this._elem = document.createElement('div');\n      this._elem.className = this._options.selectionCssClass;\n      Object.keys(this._options.selectionCss as CSSStyleDeclaration).forEach((cssStyleKey) => {\n        this._elem!.style[cssStyleKey as CSSStyleDeclarationWritable] = this._options.selectionCss[cssStyleKey as CSSStyleDeclarationWritable];\n      });\n      this._elem.style.position = 'absolute';\n      const canvasNode = this.grid.getActiveCanvasNode();\n      if (canvasNode) {\n        canvasNode.appendChild(this._elem);\n      }\n    }\n\n    const from = this.grid.getCellNodeBox(range.fromRow, range.fromCell);\n    const to = this.grid.getCellNodeBox(range.toRow, range.toCell);\n\n    if (from && to && this._options?.offset) {\n      this._elem.style.top = `${from.top + this._options.offset.top}px`;\n      this._elem.style.left = `${from.left + this._options.offset.left}px`;\n      this._elem.style.height = `${to.bottom - from.top + this._options.offset.height}px`;\n      this._elem.style.width = `${to.right - from.left + this._options.offset.width}px`;\n    }\n\n    return this._elem;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      CellRangeDecorator: SlickCellRangeDecorator\n    }\n  });\n}\n", "import type { DragItem, DragPosition, DraggableOption, MouseWheelOption, ResizableOption } from './models/index';\nimport { Utils as Utils_ } from './slick.core';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * Interactions, add basic behaviors to any element.\n * All the packages are written in pure vanilla JS and supports both mouse & touch events.\n * @module Interactions\n * @namespace Slick\n */\n\n/**\n * Draggable Class, enables dragging functionality for any element for example cell & row selections.\n * Note that mouse/touch start is on the specified container element but all other events are on the document body.\n * code refs:\n *   https://betterprogramming.pub/perfecting-drag-and-drop-in-pure-vanilla-javascript-a761184b797a\n * available optional options:\n *   - containerElement: container DOM element, defaults to \"document\"\n *   - allowDragFrom: when defined, only allow dragging from an element that matches a specific query selector\n *   - allowDragFromClosest: when defined, only allow dragging from an element or its parent matching a specific .closest() query selector\n *   - onDragInit: drag initialized callback\n *   - onDragStart: drag started callback\n *   - onDrag: drag callback\n *   - onDragEnd: drag ended callback\n * @param {Object} options\n * @returns - Draggable instance which includes destroy method\n * @class Draggable\n */\nexport function Draggable(options: DraggableOption) {\n  let { containerElement } = options;\n  const { onDragInit, onDragStart, onDrag, onDragEnd } = options;\n  let element: HTMLElement | null;\n  let startX: number;\n  let startY: number;\n  let deltaX: number;\n  let deltaY: number;\n  let dragStarted: boolean;\n\n  if (!containerElement) {\n    containerElement = document.body;\n  }\n\n  let originaldd: Partial<DragItem> = {\n    dragSource: containerElement,\n    dragHandle: null,\n  };\n\n  function init() {\n    if (containerElement) {\n      containerElement.addEventListener('mousedown', userPressed as EventListener);\n      containerElement.addEventListener('touchstart', userPressed as EventListener);\n    }\n  }\n\n  function executeDragCallbackWhenDefined(callback?: (e: DragEvent, dd: DragItem) => boolean | void, evt?: MouseEvent | Touch | TouchEvent, dd?: DragItem) {\n    if (typeof callback === 'function') {\n      return callback(evt as DragEvent, dd as DragItem);\n    }\n  }\n\n  function destroy() {\n    if (containerElement) {\n      containerElement.removeEventListener('mousedown', userPressed as EventListener);\n      containerElement.removeEventListener('touchstart', userPressed as EventListener);\n    }\n  }\n\n  function userPressed(event: MouseEvent | TouchEvent) {\n    element = event.target as HTMLElement;\n    const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\n    const { target } = targetEvent;\n\n    if (!options.allowDragFrom || (options.allowDragFrom && (element.matches(options.allowDragFrom)) || (options.allowDragFromClosest && element.closest(options.allowDragFromClosest)))) {\n      originaldd.dragHandle = element as HTMLElement;\n      const winScrollPos = Utils.windowScrollPosition();\n      startX = winScrollPos.left + targetEvent.clientX;\n      startY = winScrollPos.top + targetEvent.clientY;\n      deltaX = targetEvent.clientX - targetEvent.clientX;\n      deltaY = targetEvent.clientY - targetEvent.clientY;\n      originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\n      const result = executeDragCallbackWhenDefined(onDragInit as (e: DragEvent, dd: DragPosition) => boolean | void, event, originaldd as DragItem);\n\n      if (result !== false) {\n        document.body.addEventListener('mousemove', userMoved);\n        document.body.addEventListener('touchmove', userMoved);\n        document.body.addEventListener('mouseup', userReleased);\n        document.body.addEventListener('touchend', userReleased);\n        document.body.addEventListener('touchcancel', userReleased);\n      }\n    }\n  }\n\n  function userMoved(event: MouseEvent | TouchEvent) {\n    const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\n    deltaX = targetEvent.clientX - startX;\n    deltaY = targetEvent.clientY - startY;\n    const { target } = targetEvent;\n\n    if (!dragStarted) {\n      originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\n      executeDragCallbackWhenDefined(onDragStart, event, originaldd as DragItem);\n      dragStarted = true;\n    }\n\n    originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target });\n    executeDragCallbackWhenDefined(onDrag, event, originaldd as DragItem);\n  }\n\n  function userReleased(event: MouseEvent | TouchEvent) {\n    document.body.removeEventListener('mousemove', userMoved);\n    document.body.removeEventListener('touchmove', userMoved);\n    document.body.removeEventListener('mouseup', userReleased);\n    document.body.removeEventListener('touchend', userReleased);\n    document.body.removeEventListener('touchcancel', userReleased);\n\n    // trigger a dragEnd event only after dragging started and stopped\n    if (dragStarted) {\n      const { target } = event;\n      originaldd = Object.assign(originaldd, { target });\n      executeDragCallbackWhenDefined(onDragEnd, event, originaldd as DragItem);\n      dragStarted = false;\n    }\n  }\n\n  // initialize Slick.MouseWheel by attaching mousewheel event\n  init();\n\n  // public API\n  return { destroy };\n}\n\n/**\n * MouseWheel Class, add mousewheel listeners and calculate delta values and return them in the callback function.\n * available optional options:\n *   - element: optional DOM element to attach mousewheel values, if undefined we'll attach it to the \"window\" object\n *   - onMouseWheel: mousewheel callback\n * @param {Object} options\n * @returns - MouseWheel instance which includes destroy method\n * @class MouseWheel\n */\nexport function MouseWheel(options: MouseWheelOption) {\n  const { element, onMouseWheel } = options;\n\n  function destroy() {\n    element.removeEventListener('wheel', wheelHandler as EventListener);\n    element.removeEventListener('mousewheel', wheelHandler as EventListener);\n  }\n\n  function init() {\n    element.addEventListener('wheel', wheelHandler as EventListener);\n    element.addEventListener('mousewheel', wheelHandler as EventListener);\n  }\n\n  // copy over the same event handler code used in jquery.mousewheel\n  function wheelHandler(event: WheelEvent & { axis: number; wheelDelta: number; wheelDeltaX: number; wheelDeltaY: number; HORIZONTAL_AXIS: number; }) {\n    const orgEvent = event || window.event;\n    let delta = 0;\n    let deltaX = 0;\n    let deltaY = 0;\n\n    // Old school scrollwheel delta\n    if (orgEvent.wheelDelta) {\n      delta = orgEvent.wheelDelta / 120;\n    }\n    if (orgEvent.detail) {\n      delta = -orgEvent.detail / 3;\n    }\n\n    // New school multidimensional scroll (touchpads) deltas\n    deltaY = delta;\n\n    // Gecko\n    if (orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) {\n      deltaY = 0;\n      deltaX = -1 * delta;\n    }\n\n    // WebKit\n    if (orgEvent.wheelDeltaY !== undefined) {\n      deltaY = orgEvent.wheelDeltaY / 120;\n    }\n    if (orgEvent.wheelDeltaX !== undefined) {\n      deltaX = -1 * orgEvent.wheelDeltaX / 120;\n    }\n\n    if (typeof onMouseWheel === 'function') {\n      onMouseWheel(event, delta, deltaX, deltaY);\n    }\n  }\n\n  // initialize Slick.MouseWheel by attaching mousewheel event\n  init();\n\n  // public API\n  return { destroy };\n}\n\n/**\n * Resizable Class, enables resize functionality for any element\n * Code mostly comes from these 2 resources:\n *   https://spin.atomicobject.com/2019/11/21/creating-a-resizable-html-element/\n *   https://htmldom.dev/make-a-resizable-element/\n * available optional options:\n *   - resizeableElement: resizable DOM element\n *   - resizeableHandleElement: resizable DOM element\n *   - onResizeStart: resize start callback\n *   - onResize: resizing callback\n *   - onResizeEnd: resize ended callback\n * @param {Object} options\n * @returns - Resizable instance which includes destroy method\n * @class Resizable\n */\nexport function Resizable(options: ResizableOption) {\n  const { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;\n  if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener !== 'function') {\n    throw new Error('[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.');\n  }\n\n  function init() {\n    // add event listeners on the draggable element\n    resizeableHandleElement.addEventListener('mousedown', resizeStartHandler);\n    resizeableHandleElement.addEventListener('touchstart', resizeStartHandler);\n  }\n\n  function destroy() {\n    if (typeof resizeableHandleElement?.removeEventListener === 'function') {\n      resizeableHandleElement.removeEventListener('mousedown', resizeStartHandler);\n      resizeableHandleElement.removeEventListener('touchstart', resizeStartHandler);\n    }\n  }\n\n  function executeResizeCallbackWhenDefined(callback?: Function, e?: MouseEvent | TouchEvent | Touch) {\n    if (typeof callback === 'function') {\n      return callback(e, { resizeableElement, resizeableHandleElement });\n    }\n  }\n\n  function resizeStartHandler(e: MouseEvent | TouchEvent) {\n    e.preventDefault();\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\n    const result = executeResizeCallbackWhenDefined(onResizeStart, event);\n    if (result !== false) {\n      document.body.addEventListener('mousemove', resizingHandler);\n      document.body.addEventListener('mouseup', resizeEndHandler);\n      document.body.addEventListener('touchmove', resizingHandler);\n      document.body.addEventListener('touchend', resizeEndHandler);\n    }\n  }\n\n  function resizingHandler(e: MouseEvent | TouchEvent) {\n    if (e.preventDefault && e.type !== 'touchmove') {\n      e.preventDefault();\n    }\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\n    if (typeof onResize === 'function') {\n      onResize(event, { resizeableElement, resizeableHandleElement });\n    }\n  }\n\n  /** Remove all mouse/touch handlers */\n  function resizeEndHandler(e: MouseEvent | TouchEvent) {\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\n    executeResizeCallbackWhenDefined(onResizeEnd, event);\n    document.body.removeEventListener('mousemove', resizingHandler);\n    document.body.removeEventListener('mouseup', resizeEndHandler);\n    document.body.removeEventListener('touchmove', resizingHandler);\n    document.body.removeEventListener('touchend', resizeEndHandler);\n  }\n\n  init();\n\n  // public API\n  return { destroy };\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(Slick, {\n    Draggable,\n    MouseWheel,\n    Resizable,\n  });\n}\n", "import { SlickEvent as SlickEvent_, type SlickEventData, SlickEventHandler as SlickEventHandler_, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\nimport { Draggable as Draggable_ } from '../slick.interactions';\nimport { SlickCellRangeDecorator as SlickCellRangeDecorator_ } from './slick.cellrangedecorator';\nimport type { CellRangeSelectorOption, DragPosition, DragRange, DragRowMove, GridOption, MouseOffsetViewport, OnScrollEventArgs, SlickPlugin } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\nconst SlickCellRangeDecorator = IIFE_ONLY ? Slick.CellRangeDecorator : SlickCellRangeDecorator_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickCellRangeSelector implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CellRangeSelector' as const;\n  onBeforeCellRangeSelected = new SlickEvent<{ row: number; cell: number; }>('onBeforeCellRangeSelected');\n  onCellRangeSelected = new SlickEvent<{ range: SlickRange_; }>('onCellRangeSelected');\n  onCellRangeSelecting = new SlickEvent<{ range: SlickRange_; }>('onCellRangeSelecting');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _currentlySelectedRange: DragRange | null = null;\n  protected _canvas: HTMLElement | null = null;\n  protected _decorator!: SlickCellRangeDecorator_;\n  protected _gridOptions!: GridOption;\n  protected _activeCanvas!: HTMLElement;\n  protected _dragging = false;\n  protected _handler = new SlickEventHandler();\n  protected _options: CellRangeSelectorOption;\n  protected _defaults = {\n    autoScroll: true,\n    minIntervalToShowNextCell: 30,\n    maxIntervalToShowNextCell: 600, // better to a multiple of minIntervalToShowNextCell\n    accelerateInterval: 5,          // increase 5ms when cursor 1px outside the viewport.\n    selectionCss: {\n      border: '2px dashed blue'\n    }\n  } as CellRangeSelectorOption;\n\n  // Frozen row & column variables\n  protected _rowOffset = 0;\n  protected _columnOffset = 0;\n  protected _isRightCanvas = false;\n  protected _isBottomCanvas = false;\n\n  // autoScroll related constiables\n  protected _activeViewport!: HTMLElement;\n  protected _autoScrollTimerId?: NodeJS.Timeout;\n  protected _draggingMouseOffset!: MouseOffsetViewport;\n  protected _moveDistanceForOneCell!: { x: number; y: number; };\n  protected _xDelayForNextCell = 0;\n  protected _yDelayForNextCell = 0;\n  protected _viewportHeight = 0;\n  protected _viewportWidth = 0;\n  protected _isRowMoveRegistered = false;\n\n  // Scrollings\n  protected _scrollLeft = 0;\n  protected _scrollTop = 0;\n\n  constructor(options?: Partial<CellRangeSelectorOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  init(grid: SlickGrid) {\n    if (Draggable === undefined) {\n      throw new Error('Slick.Draggable is undefined, make sure to import \"slick.interactions.js\"');\n    }\n\n    this._decorator = this._options.cellDecorator || new SlickCellRangeDecorator(grid, this._options);\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._canvas = this._grid.getCanvasNode();\n    this._gridOptions = this._grid.getOptions();\n    this._handler\n      .subscribe(this._grid.onScroll, this.handleScroll.bind(this))\n      .subscribe(this._grid.onDragInit, this.handleDragInit.bind(this))\n      .subscribe(this._grid.onDragStart, this.handleDragStart.bind(this))\n      .subscribe(this._grid.onDrag, this.handleDrag.bind(this))\n      .subscribe(this._grid.onDragEnd, this.handleDragEnd.bind(this));\n  }\n\n  destroy() {\n    this._handler.unsubscribeAll();\n    this._activeCanvas = null as any;\n    this._activeViewport = null as any;\n    this._canvas = null;\n    this._decorator?.destroy();\n  }\n\n  getCellDecorator() {\n    return this._decorator;\n  }\n\n  protected handleScroll(_e: SlickEventData, args: OnScrollEventArgs) {\n    this._scrollTop = args.scrollTop;\n    this._scrollLeft = args.scrollLeft;\n  }\n\n  protected handleDragInit(e: SlickEventData) {\n    // Set the active canvas node because the decorator needs to append its\n    // box to the correct canvas\n    this._activeCanvas = this._grid.getActiveCanvasNode(e);\n    this._activeViewport = this._grid.getActiveViewportNode(e);\n\n    const scrollbarDimensions = this._grid.getDisplayedScrollbarDimensions();\n    this._viewportWidth = this._activeViewport.offsetWidth - scrollbarDimensions.width;\n    this._viewportHeight = this._activeViewport.offsetHeight - scrollbarDimensions.height;\n\n    this._moveDistanceForOneCell = {\n      x: this._grid.getAbsoluteColumnMinWidth() / 2,\n      y: this._grid.getOptions().rowHeight! / 2\n    };\n    this._isRowMoveRegistered = this.hasRowMoveManager();\n\n    this._rowOffset = 0;\n    this._columnOffset = 0;\n    this._isBottomCanvas = this._activeCanvas.classList.contains('grid-canvas-bottom');\n\n    if (this._gridOptions.frozenRow! > -1 && this._isBottomCanvas) {\n      const canvasSelector = `.${this._grid.getUID()} .grid-canvas-${this._gridOptions.frozenBottom ? 'bottom' : 'top'}`;\n      const canvasElm = document.querySelector(canvasSelector);\n      if (canvasElm) {\n        this._rowOffset = canvasElm.clientHeight || 0;\n      }\n    }\n\n    this._isRightCanvas = this._activeCanvas.classList.contains('grid-canvas-right');\n\n    if (this._gridOptions.frozenColumn! > -1 && this._isRightCanvas) {\n      const canvasLeftElm = document.querySelector(`.${this._grid.getUID()} .grid-canvas-left`);\n      if (canvasLeftElm) {\n        this._columnOffset = canvasLeftElm.clientWidth || 0;\n      }\n    }\n\n    // prevent the grid from cancelling drag'n'drop by default\n    e.stopImmediatePropagation();\n    e.preventDefault();\n  }\n\n  protected handleDragStart(e: SlickEventData, dd: DragRowMove) {\n    const cell = this._grid.getCellFromEvent(e);\n    if (cell && this.onBeforeCellRangeSelected.notify(cell).getReturnValue() !== false && this._grid.canCellBeSelected(cell.row, cell.cell)) {\n      this._dragging = true;\n      e.stopImmediatePropagation();\n    }\n    if (!this._dragging) {\n      return;\n    }\n\n    this._grid.focus();\n\n    const canvasOffset = Utils.offset(this._canvas);\n\n    let startX = dd.startX - (canvasOffset?.left ?? 0);\n    if (this._gridOptions.frozenColumn! >= 0 && this._isRightCanvas) {\n      startX += this._scrollLeft;\n    }\n\n    let startY = dd.startY - (canvasOffset?.top ?? 0);\n    if (this._gridOptions.frozenRow! >= 0 && this._isBottomCanvas) {\n      startY += this._scrollTop;\n    }\n\n    const start = this._grid.getCellFromPoint(startX, startY);\n\n    dd.range = { start, end: {} };\n    this._currentlySelectedRange = dd.range;\n    return this._decorator.show(new SlickRange(start.row, start.cell));\n  }\n\n  protected handleDrag(evt: SlickEventData, dd: DragRowMove) {\n    if (!this._dragging && !this._isRowMoveRegistered) {\n      return;\n    }\n    if (!this._isRowMoveRegistered) {\n      evt.stopImmediatePropagation();\n    }\n\n    const e = evt.getNativeEvent<MouseEvent>();\n    if (this._options.autoScroll) {\n      this._draggingMouseOffset = this.getMouseOffsetViewport(e, dd);\n      if (this._draggingMouseOffset.isOutsideViewport) {\n        return this.handleDragOutsideViewport();\n      }\n    }\n    this.stopIntervalTimer();\n    this.handleDragTo(e, dd);\n  }\n\n  protected getMouseOffsetViewport(e: MouseEvent | TouchEvent, dd: DragRowMove): MouseOffsetViewport {\n    const targetEvent: MouseEvent | Touch = (e as TouchEvent)?.touches?.[0] ?? e;\n    const viewportLeft = this._activeViewport.scrollLeft;\n    const viewportTop = this._activeViewport.scrollTop;\n    const viewportRight = viewportLeft + this._viewportWidth;\n    const viewportBottom = viewportTop + this._viewportHeight;\n\n    const viewportOffset = Utils.offset(this._activeViewport);\n    const viewportOffsetLeft = viewportOffset?.left ?? 0;\n    const viewportOffsetTop = viewportOffset?.top ?? 0;\n    const viewportOffsetRight = viewportOffsetLeft + this._viewportWidth;\n    const viewportOffsetBottom = viewportOffsetTop + this._viewportHeight;\n\n    const result = {\n      e,\n      dd,\n      viewport: {\n        left: viewportLeft,\n        top: viewportTop,\n        right: viewportRight,\n        bottom: viewportBottom,\n        offset: {\n          left: viewportOffsetLeft,\n          top: viewportOffsetTop,\n          right: viewportOffsetRight,\n          bottom: viewportOffsetBottom\n        }\n      },\n      // Consider the viewport as the origin, the `offset` is based on the coordinate system:\n      // the cursor is on the viewport's left/bottom when it is less than 0, and on the right/top when greater than 0.\n      offset: {\n        x: 0,\n        y: 0\n      },\n      isOutsideViewport: false\n    };\n    // ... horizontal\n    if (targetEvent.pageX < viewportOffsetLeft) {\n      result.offset.x = targetEvent.pageX - viewportOffsetLeft;\n    } else if (targetEvent.pageX > viewportOffsetRight) {\n      result.offset.x = targetEvent.pageX - viewportOffsetRight;\n    }\n    // ... vertical\n    if (targetEvent.pageY < viewportOffsetTop) {\n      result.offset.y = viewportOffsetTop - targetEvent.pageY;\n    } else if (targetEvent.pageY > viewportOffsetBottom) {\n      result.offset.y = viewportOffsetBottom - targetEvent.pageY;\n    }\n    result.isOutsideViewport = !!result.offset.x || !!result.offset.y;\n    return result;\n  }\n\n  protected handleDragOutsideViewport() {\n    this._xDelayForNextCell = this._options.maxIntervalToShowNextCell - Math.abs(this._draggingMouseOffset.offset.x) * this._options.accelerateInterval;\n    this._yDelayForNextCell = this._options.maxIntervalToShowNextCell - Math.abs(this._draggingMouseOffset.offset.y) * this._options.accelerateInterval;\n    // only one timer is created to handle the case that cursor outside the viewport\n    if (!this._autoScrollTimerId) {\n      let xTotalDelay = 0;\n      let yTotalDelay = 0;\n      this._autoScrollTimerId = setInterval(() => {\n        let xNeedUpdate = false;\n        let yNeedUpdate = false;\n        // ... horizontal\n        if (this._draggingMouseOffset.offset.x) {\n          xTotalDelay += this._options.minIntervalToShowNextCell;\n          xNeedUpdate = xTotalDelay >= this._xDelayForNextCell;\n        } else {\n          xTotalDelay = 0;\n        }\n        // ... vertical\n        if (this._draggingMouseOffset.offset.y) {\n          yTotalDelay += this._options.minIntervalToShowNextCell;\n          yNeedUpdate = yTotalDelay >= this._yDelayForNextCell;\n        } else {\n          yTotalDelay = 0;\n        }\n        if (xNeedUpdate || yNeedUpdate) {\n          if (xNeedUpdate) {\n            xTotalDelay = 0;\n          }\n          if (yNeedUpdate) {\n            yTotalDelay = 0;\n          }\n          this.handleDragToNewPosition(xNeedUpdate, yNeedUpdate);\n        }\n      }, this._options.minIntervalToShowNextCell);\n    }\n  }\n\n  protected handleDragToNewPosition(xNeedUpdate: boolean, yNeedUpdate: boolean) {\n    let pageX = this._draggingMouseOffset.e.pageX;\n    let pageY = this._draggingMouseOffset.e.pageY;\n    const mouseOffsetX = this._draggingMouseOffset.offset.x;\n    const mouseOffsetY = this._draggingMouseOffset.offset.y;\n    const viewportOffset = this._draggingMouseOffset.viewport.offset;\n    // ... horizontal\n    if (xNeedUpdate && mouseOffsetX) {\n      if (mouseOffsetX > 0) {\n        pageX = viewportOffset.right + this._moveDistanceForOneCell.x;\n      } else {\n        pageX = viewportOffset.left - this._moveDistanceForOneCell.x;\n      }\n    }\n    // ... vertical\n    if (yNeedUpdate && mouseOffsetY) {\n      if (mouseOffsetY > 0) {\n        pageY = viewportOffset.top - this._moveDistanceForOneCell.y;\n      } else {\n        pageY = viewportOffset.bottom + this._moveDistanceForOneCell.y;\n      }\n    }\n    this.handleDragTo({ pageX, pageY }, this._draggingMouseOffset.dd);\n  }\n\n  protected stopIntervalTimer() {\n    if (this._autoScrollTimerId) {\n      clearInterval(this._autoScrollTimerId);\n      this._autoScrollTimerId = undefined;\n    }\n  }\n\n  protected handleDragTo(e: { pageX: number; pageY: number; }, dd: DragPosition) {\n    const targetEvent: MouseEvent | Touch = (e as unknown as TouchEvent)?.touches?.[0] ?? e;\n    const canvasOffset = Utils.offset(this._activeCanvas);\n    const end = this._grid.getCellFromPoint(\n      targetEvent.pageX - (canvasOffset?.left ?? 0) + this._columnOffset,\n      targetEvent.pageY - (canvasOffset?.top ?? 0) + this._rowOffset\n    );\n\n    // ... frozen column(s),\n    if (this._gridOptions.frozenColumn! >= 0 && (!this._isRightCanvas && (end.cell > this._gridOptions.frozenColumn!)) || (this._isRightCanvas && (end.cell <= this._gridOptions.frozenColumn!))) {\n      return;\n    }\n\n    // ... or frozen row(s)\n    if (this._gridOptions.frozenRow! >= 0 && (!this._isBottomCanvas && (end.row >= this._gridOptions.frozenRow!)) || (this._isBottomCanvas && (end.row < this._gridOptions.frozenRow!))) {\n      return;\n    }\n\n    // scrolling the viewport to display the target `end` cell if it is not fully displayed\n    if (this._options.autoScroll && this._draggingMouseOffset) {\n      const endCellBox = this._grid.getCellNodeBox(end.row, end.cell);\n      if (!endCellBox) {\n        return;\n      }\n      const viewport = this._draggingMouseOffset.viewport;\n      if (endCellBox.left < viewport.left || endCellBox.right > viewport.right\n        || endCellBox.top < viewport.top || endCellBox.bottom > viewport.bottom) {\n        this._grid.scrollCellIntoView(end.row, end.cell);\n      }\n    }\n\n    // ... or regular grid (without any frozen options)\n    if (!this._grid.canCellBeSelected(end.row, end.cell)) {\n      return;\n    }\n\n    if (dd?.range) {\n      dd.range.end = end;\n\n      const range = new SlickRange(dd.range.start.row ?? 0, dd.range.start.cell ?? 0, end.row, end.cell);\n      this._decorator.show(range);\n      this.onCellRangeSelecting.notify({\n        range\n      });\n    }\n  }\n\n  protected hasRowMoveManager() {\n    return !!(this._grid.getPluginByName('RowMoveManager') || this._grid.getPluginByName('CrossGridRowMoveManager'));\n  }\n\n  protected handleDragEnd(e: SlickEventData, dd: DragPosition) {\n    this._decorator.hide();\n    if (!this._dragging) {\n      return;\n    }\n\n    this._dragging = false;\n    e.stopImmediatePropagation();\n\n    this.stopIntervalTimer();\n    this.onCellRangeSelected.notify({\n      range: new SlickRange(\n        dd.range.start.row ?? 0,\n        dd.range.start.cell ?? 0,\n        dd.range.end.row,\n        dd.range.end.cell\n      )\n    });\n  }\n\n  getCurrentRange() {\n    return this._currentlySelectedRange;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(Slick, {\n    CellRangeSelector: SlickCellRangeSelector\n  });\n}\n", "import { SlickEvent as SlickEvent_, SlickEventData as SlickEventData_, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\nimport { SlickCellRangeSelector as SlickCellRangeSelector_ } from './slick.cellrangeselector';\nimport type { CustomDataView, OnActiveCellChangedEventArgs } from '../models/index';\nimport type { SlickDataView } from '../slick.dataview';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst SlickCellRangeSelector = IIFE_ONLY ? Slick.CellRangeSelector : SlickCellRangeSelector_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport interface CellSelectionModelOption {\n  selectActiveCell: boolean;\n  cellRangeSelector?: SlickCellRangeSelector_;\n}\n\nexport class SlickCellSelectionModel {\n  // --\n  // public API\n  pluginName = 'CellSelectionModel' as const;\n  onSelectedRangesChanged = new SlickEvent<SlickRange_[]>('onSelectedRangesChanged');\n\n  // --\n  // protected props\n  protected _cachedPageRowCount = 0;\n  protected _dataView?: CustomDataView | SlickDataView;\n  protected _grid!: SlickGrid;\n  protected _prevSelectedRow?: number;\n  protected _prevKeyDown = '';\n  protected _ranges: SlickRange_[] = [];\n  protected _selector: SlickCellRangeSelector_;\n  protected _options?: CellSelectionModelOption;\n  protected _defaults: CellSelectionModelOption = {\n    selectActiveCell: true\n  };\n\n  constructor(options?: { selectActiveCell: boolean; cellRangeSelector: SlickCellRangeSelector_; }) {\n    if (options === undefined || options.cellRangeSelector === undefined) {\n      this._selector = new SlickCellRangeSelector({ selectionCss: { border: '2px solid black' } as CSSStyleDeclaration });\n    } else {\n      this._selector = options.cellRangeSelector;\n    }\n  }\n\n  init(grid: SlickGrid) {\n    this._options = Utils.extend(true, {}, this._defaults, this._options);\n    this._grid = grid;\n    if (grid.hasDataView()) {\n      this._dataView = grid.getData<CustomDataView | SlickDataView>();\n    }\n    this._grid.onActiveCellChanged.subscribe(this.handleActiveCellChange.bind(this));\n    this._grid.onKeyDown.subscribe(this.handleKeyDown.bind(this));\n    grid.registerPlugin(this._selector);\n    this._selector.onCellRangeSelected.subscribe(this.handleCellRangeSelected.bind(this));\n    this._selector.onBeforeCellRangeSelected.subscribe(this.handleBeforeCellRangeSelected.bind(this));\n  }\n\n  destroy() {\n    this._grid.onActiveCellChanged.unsubscribe(this.handleActiveCellChange.bind(this));\n    this._grid.onKeyDown.unsubscribe(this.handleKeyDown.bind(this));\n    this._selector.onCellRangeSelected.unsubscribe(this.handleCellRangeSelected.bind(this));\n    this._selector.onBeforeCellRangeSelected.unsubscribe(this.handleBeforeCellRangeSelected.bind(this));\n    this._grid.unregisterPlugin(this._selector);\n    this._selector?.destroy();\n  }\n\n  protected removeInvalidRanges(ranges: SlickRange_[]) {\n    const result: SlickRange_[] = [];\n\n    for (let i = 0; i < ranges.length; i++) {\n      const r = ranges[i];\n      if (this._grid.canCellBeSelected(r.fromRow, r.fromCell) && this._grid.canCellBeSelected(r.toRow, r.toCell)) {\n        result.push(r);\n      }\n    }\n\n    return result;\n  }\n\n  protected rangesAreEqual(range1: SlickRange_[], range2: SlickRange_[]) {\n    let areDifferent = (range1.length !== range2.length);\n    if (!areDifferent) {\n      for (let i = 0; i < range1.length; i++) {\n        if (\n          range1[i].fromCell !== range2[i].fromCell\n          || range1[i].fromRow !== range2[i].fromRow\n          || range1[i].toCell !== range2[i].toCell\n          || range1[i].toRow !== range2[i].toRow\n        ) {\n          areDifferent = true;\n          break;\n        }\n      }\n    }\n    return !areDifferent;\n  }\n\n  /** Provide a way to force a recalculation of page row count (for example on grid resize) */\n  resetPageRowCount() {\n    this._cachedPageRowCount = 0;\n  }\n\n  setSelectedRanges(ranges: SlickRange_[], caller = 'SlickCellSelectionModel.setSelectedRanges') {\n    // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\n    if ((!this._ranges || this._ranges.length === 0) && (!ranges || ranges.length === 0)) { return; }\n\n    // if range has not changed, don't fire onSelectedRangesChanged\n    const rangeHasChanged = !this.rangesAreEqual(this._ranges, ranges);\n\n    this._ranges = this.removeInvalidRanges(ranges);\n    if (rangeHasChanged) {\n      // provide extra \"caller\" argument through SlickEventData event to avoid breaking the previous pubsub event structure\n      // that only accepts an array of selected range `SlickRange[]`, the SlickEventData args will be merged and used later by `onSelectedRowsChanged`\n      const eventData = new SlickEventData(new CustomEvent('click', { detail: { caller } }), this._ranges);\n      this.onSelectedRangesChanged.notify(this._ranges, eventData);\n    }\n  }\n\n  getSelectedRanges() {\n    return this._ranges;\n  }\n\n  refreshSelections() {\n    this.setSelectedRanges(this.getSelectedRanges());\n  }\n\n  protected handleBeforeCellRangeSelected(e: SlickEventData_): boolean | void {\n    if (this._grid.getEditorLock().isActive()) {\n      e.stopPropagation();\n      return false;\n    }\n  }\n\n  protected handleCellRangeSelected(_e: SlickEventData_, args: { range: SlickRange_; }) {\n    this._grid.setActiveCell(args.range.fromRow, args.range.fromCell, false, false, true);\n    this.setSelectedRanges([args.range]);\n  }\n\n  protected handleActiveCellChange(_e: SlickEventData_, args: OnActiveCellChangedEventArgs) {\n    this._prevSelectedRow = undefined;\n    const isCellDefined = Utils.isDefined(args.cell);\n    const isRowDefined = Utils.isDefined(args.row);\n\n    if (this._options?.selectActiveCell && isRowDefined && isCellDefined) {\n      this.setSelectedRanges([new SlickRange(args.row, args.cell)]);\n    } else if (!this._options?.selectActiveCell || (!isRowDefined && !isCellDefined)) {\n      // clear the previous selection once the cell changes\n      this.setSelectedRanges([]);\n    }\n  }\n\n  protected isKeyAllowed(key: string) {\n    return ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'PageDown', 'PageUp', 'Home', 'End'].some(k => k === key);\n  }\n\n  protected handleKeyDown(e: SlickEventData_) {\n    let ranges: SlickRange_[], last: SlickRange_;\n    const colLn = this._grid.getColumns().length;\n    const active = this._grid.getActiveCell();\n    let dataLn = 0;\n    if (this._dataView && 'getPagingInfo' in this._dataView) {\n      dataLn = this._dataView?.getPagingInfo().pageSize || this._dataView.getLength();\n    } else {\n      dataLn = this._grid.getDataLength();\n    }\n\n    if (active && (e.shiftKey || e.ctrlKey) && !e.altKey && this.isKeyAllowed(e.key as string)) {\n      ranges = this.getSelectedRanges().slice();\n      if (!ranges.length) {\n        ranges.push(new SlickRange(active.row, active.cell));\n      }\n      // keyboard can work with last range only\n      last = ranges.pop() as SlickRange_;\n\n      // can't handle selection out of active cell\n      if (!last.contains(active.row, active.cell)) {\n        last = new SlickRange(active.row, active.cell);\n      }\n\n      let dRow = last.toRow - last.fromRow;\n      let dCell = last.toCell - last.fromCell;\n\n      // walking direction\n      const dirRow = active.row === last.fromRow ? 1 : -1;\n      const dirCell = active.cell === last.fromCell ? 1 : -1;\n      const isSingleKeyMove = e.key!.startsWith('Arrow');\n      let toCell: undefined | number = undefined;\n      let toRow = 0;\n\n      if (isSingleKeyMove && !e.ctrlKey) {\n        // single cell move: (Arrow{Up/ArrowDown/ArrowLeft/ArrowRight})\n        if (e.key === 'ArrowLeft') {\n          dCell -= dirCell;\n        } else if (e.key === 'ArrowRight') {\n          dCell += dirCell;\n        } else if (e.key === 'ArrowUp') {\n          dRow -= dirRow;\n        } else if (e.key === 'ArrowDown') {\n          dRow += dirRow;\n        }\n        toRow = active.row + dirRow * dRow;\n      } else {\n        // multiple cell moves: (Home, End, Page{Up/Down})\n        if (this._cachedPageRowCount < 1) {\n          this._cachedPageRowCount = this._grid.getViewportRowCount();\n        }\n        if (this._prevSelectedRow === undefined) {\n          this._prevSelectedRow = active.row;\n        }\n\n        if (e.shiftKey && !e.ctrlKey && e.key === 'Home') {\n          toCell = 0;\n          toRow = active.row;\n        } else if (e.shiftKey && !e.ctrlKey && e.key === 'End') {\n          toCell = colLn - 1;\n          toRow = active.row;\n        } else if (e.ctrlKey && e.shiftKey && e.key === 'Home') {\n          toCell = 0;\n          toRow = 0;\n        } else if (e.ctrlKey && e.shiftKey && e.key === 'End') {\n          toCell = colLn - 1;\n          toRow = dataLn - 1;\n        } else if (e.key === 'PageUp') {\n          if (this._prevSelectedRow >= 0) {\n            toRow = this._prevSelectedRow - this._cachedPageRowCount;\n          }\n          if (toRow < 0) {\n            toRow = 0;\n          }\n        } else if (e.key === 'PageDown') {\n          if (this._prevSelectedRow <= dataLn - 1) {\n            toRow = this._prevSelectedRow + this._cachedPageRowCount;\n          }\n          if (toRow > dataLn - 1) {\n            toRow = dataLn - 1;\n          }\n        }\n        this._prevSelectedRow = toRow;\n      }\n\n      // define new selection range\n      toCell ??= active.cell + dirCell * dCell;\n      const new_last = new SlickRange(active.row, active.cell, toRow, toCell);\n      if (this.removeInvalidRanges([new_last]).length) {\n        ranges.push(new_last);\n        const viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow;\n        const viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;\n\n        if (isSingleKeyMove) {\n          this._grid.scrollRowIntoView(viewRow);\n          this._grid.scrollCellIntoView(viewRow, viewCell);\n        } else {\n          this._grid.scrollRowIntoView(toRow);\n          this._grid.scrollCellIntoView(toRow, viewCell);\n        }\n      } else {\n        ranges.push(last);\n      }\n\n      this.setSelectedRanges(ranges);\n\n      e.preventDefault();\n      e.stopPropagation();\n      this._prevKeyDown = e.key as string;\n    }\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      CellSelectionModel: SlickCellSelectionModel\n    }\n  });\n}\n", "import type { CheckboxSelectorOption, Column, DOMEvent, SlickPlugin, SelectableOverrideCallback, OnHeaderClickEventArgs } from '../models/index';\nimport { BindingEventService as BindingEventService_, type SlickEventData, SlickEventHandler as SlickEventHandler_, Utils as Utils_ } from '../slick.core';\nimport type { SlickDataView } from '../slick.dataview';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickCheckboxSelectColumn<T = any> implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'CheckboxSelectColumn' as const;\n\n  // --\n  // protected props\n  protected _dataView!: SlickDataView<T>;\n  protected _grid!: SlickGrid;\n  protected _isUsingDataView = false;\n  protected _selectableOverride: SelectableOverrideCallback<T> | null = null;\n  protected _headerRowNode?: HTMLElement;\n  protected _selectAll_UID: number;\n  protected _handler = new SlickEventHandler();\n  protected _selectedRowsLookup: any = {};\n  protected _checkboxColumnCellIndex: number | null = null;\n  protected _options: CheckboxSelectorOption;\n  protected _defaults: CheckboxSelectorOption = {\n    columnId: '_checkbox_selector',\n    cssClass: undefined,\n    hideSelectAllCheckbox: false,\n    name: '',\n    toolTip: 'Select/Deselect All',\n    width: 30,\n    reorderable: false,\n    applySelectOnAllPages: false, // defaults to false, when that is enabled the \"Select All\" will be applied to all pages (when using Pagination)\n    hideInColumnTitleRow: false,\n    hideInFilterHeaderRow: true\n  };\n  protected _isSelectAllChecked = false;\n  protected _bindingEventService: BindingEventService_;\n\n  constructor(options?: Partial<CheckboxSelectorOption>) {\n    this._bindingEventService = new BindingEventService();\n    this._options = Utils.extend(true, {}, this._defaults, options);\n    this._selectAll_UID = this.createUID();\n\n    // user could override the checkbox icon logic from within the options or after instantiating the plugin\n    if (typeof this._options.selectableOverride === 'function') {\n      this.selectableOverride(this._options.selectableOverride);\n    }\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._isUsingDataView = !Array.isArray(grid.getData());\n    if (this._isUsingDataView) {\n      this._dataView = grid.getData();\n    }\n    this._handler\n      .subscribe(this._grid.onSelectedRowsChanged, this.handleSelectedRowsChanged.bind(this))\n      .subscribe(this._grid.onClick, this.handleClick.bind(this))\n      .subscribe(this._grid.onKeyDown, this.handleKeyDown.bind(this));\n\n    if (this._isUsingDataView && this._dataView && this._options.applySelectOnAllPages) {\n      this._handler\n        .subscribe(this._dataView.onSelectedRowIdsChanged, this.handleDataViewSelectedIdsChanged.bind(this))\n        .subscribe(this._dataView.onPagingInfoChanged, this.handleDataViewSelectedIdsChanged.bind(this));\n    }\n\n    if (!this._options.hideInFilterHeaderRow) {\n      this.addCheckboxToFilterHeaderRow(grid);\n    }\n    if (!this._options.hideInColumnTitleRow) {\n      this._handler.subscribe(this._grid.onHeaderClick, this.handleHeaderClick.bind(this));\n    }\n  }\n\n  destroy() {\n    this._handler.unsubscribeAll();\n    this._bindingEventService.unbindAll();\n  }\n\n  getOptions() {\n    return this._options;\n  }\n\n  setOptions(options: Partial<CheckboxSelectorOption>) {\n    this._options = Utils.extend(true, {}, this._options, options);\n\n    if (this._options.hideSelectAllCheckbox) {\n      this.hideSelectAllFromColumnHeaderTitleRow();\n      this.hideSelectAllFromColumnHeaderFilterRow();\n    } else {\n      if (!this._options.hideInColumnTitleRow) {\n        this.renderSelectAllCheckbox(this._isSelectAllChecked);\n        this._handler.subscribe(this._grid.onHeaderClick, this.handleHeaderClick.bind(this));\n      } else {\n        this.hideSelectAllFromColumnHeaderTitleRow();\n        if (this._options.name) {\n          this._grid.updateColumnHeader(this._options.columnId || '', this._options.name, '');\n        }\n      }\n\n      if (!this._options.hideInFilterHeaderRow) {\n        const selectAllContainerElm = this._headerRowNode?.querySelector<HTMLSpanElement>('#filter-checkbox-selectall-container');\n        if (selectAllContainerElm) {\n          selectAllContainerElm.style.display = 'flex';\n          const selectAllInputElm = selectAllContainerElm.querySelector<HTMLInputElement>('input[type=\"checkbox\"]');\n          if (selectAllInputElm) {\n            selectAllInputElm.checked = this._isSelectAllChecked;\n          }\n        }\n      } else {\n        this.hideSelectAllFromColumnHeaderFilterRow();\n      }\n    }\n  }\n\n  protected hideSelectAllFromColumnHeaderTitleRow() {\n    this._grid.updateColumnHeader(this._options.columnId || '', this._options.name || '', '');\n  }\n\n  protected hideSelectAllFromColumnHeaderFilterRow() {\n    const selectAllContainerElm = this._headerRowNode?.querySelector<HTMLSpanElement>('#filter-checkbox-selectall-container');\n    if (selectAllContainerElm) {\n      selectAllContainerElm.style.display = 'none';\n    }\n  }\n\n  protected handleSelectedRowsChanged() {\n    const selectedRows = this._grid.getSelectedRows();\n    const lookup: any = {};\n    let row = 0, i = 0, k = 0;\n    let disabledCount = 0;\n    if (typeof this._selectableOverride === 'function') {\n      for (k = 0; k < this._grid.getDataLength(); k++) {\n        // If we are allowed to select the row\n        const dataItem = this._grid.getDataItem(k);\n        if (!this.checkSelectableOverride(i, dataItem, this._grid)) {\n          disabledCount++;\n        }\n      }\n    }\n\n    const removeList: number[] = [];\n    for (i = 0; i < selectedRows.length; i++) {\n      row = selectedRows[i];\n\n      // If we are allowed to select the row\n      const rowItem = this._grid.getDataItem(row);\n      if (this.checkSelectableOverride(i, rowItem, this._grid)) {\n        lookup[row] = true;\n        if (lookup[row] !== this._selectedRowsLookup[row]) {\n          this._grid.invalidateRow(row);\n          delete this._selectedRowsLookup[row];\n        }\n      }\n      else {\n        removeList.push(row);\n      }\n    }\n    if (typeof this._selectedRowsLookup === 'object') {\n      Object.keys(this._selectedRowsLookup).forEach(selectedRow => {\n        if (selectedRow !== undefined) {\n          this._grid.invalidateRow(+selectedRow);\n        }\n      });\n    }\n    this._selectedRowsLookup = lookup;\n    this._grid.render();\n    this._isSelectAllChecked = (selectedRows?.length ?? 0) + disabledCount >= this._grid.getDataLength();\n\n    if (!this._isUsingDataView || !this._options.applySelectOnAllPages) {\n      if (!this._options.hideInColumnTitleRow && !this._options.hideSelectAllCheckbox) {\n        this.renderSelectAllCheckbox(this._isSelectAllChecked);\n      }\n      if (!this._options.hideInFilterHeaderRow) {\n        const selectAllElm = this._headerRowNode?.querySelector<HTMLInputElement>(`#header-filter-selector${this._selectAll_UID}`);\n        if (selectAllElm) {\n          selectAllElm.checked = this._isSelectAllChecked;\n        }\n      }\n    }\n\n    // Remove items that shouln't of been selected in the first place (Got here Ctrl + click)\n    if (removeList.length > 0) {\n      for (i = 0; i < removeList.length; i++) {\n        const remIdx = selectedRows.indexOf(removeList[i]);\n        selectedRows.splice(remIdx, 1);\n      }\n      this._grid.setSelectedRows(selectedRows, 'click.cleanup');\n    }\n  }\n\n  protected handleDataViewSelectedIdsChanged() {\n    const selectedIds = this._dataView.getAllSelectedFilteredIds();\n    const filteredItems = this._dataView.getFilteredItems();\n    let disabledCount = 0;\n\n    if (typeof this._selectableOverride === 'function' && selectedIds.length > 0) {\n      for (let k = 0; k < this._dataView.getItemCount(); k++) {\n        // If we are allowed to select the row\n        const dataItem: T = this._dataView.getItemByIdx(k);\n        const idProperty = this._dataView.getIdPropertyName();\n        const dataItemId = dataItem[idProperty as keyof T];\n        const foundItemIdx = filteredItems.findIndex(function (item) {\n          return item[idProperty as keyof T] === dataItemId;\n        });\n        if (foundItemIdx >= 0 && !this.checkSelectableOverride(k, dataItem, this._grid)) {\n          disabledCount++;\n        }\n      }\n    }\n    this._isSelectAllChecked = (selectedIds && selectedIds.length) + disabledCount >= filteredItems.length;\n\n    if (!this._options.hideInColumnTitleRow && !this._options.hideSelectAllCheckbox) {\n      this.renderSelectAllCheckbox(this._isSelectAllChecked);\n    }\n    if (!this._options.hideInFilterHeaderRow) {\n      const selectAllElm = this._headerRowNode?.querySelector<HTMLInputElement>(`#header-filter-selector${this._selectAll_UID}`);\n      if (selectAllElm) {\n        selectAllElm.checked = this._isSelectAllChecked;\n      }\n    }\n  }\n\n  protected handleKeyDown(e: SlickEventData, args: any) {\n    if (e.which === 32) {\n      if (this._grid.getColumns()[args.cell].id === this._options.columnId) {\n        // if editing, try to commit\n        if (!this._grid.getEditorLock().isActive() || this._grid.getEditorLock().commitCurrentEdit()) {\n          this.toggleRowSelection(args.row);\n        }\n        e.preventDefault();\n        e.stopImmediatePropagation();\n      }\n    }\n  }\n\n  protected handleClick(e: SlickEventData, args: { row: number; cell: number; }) {\n    // clicking on a row select checkbox\n    if (this._grid.getColumns()[args.cell].id === this._options.columnId && (e.target as HTMLInputElement).type === 'checkbox') {\n      // if editing, try to commit\n      if (this._grid.getEditorLock().isActive() && !this._grid.getEditorLock().commitCurrentEdit()) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        return;\n      }\n\n      this.toggleRowSelection(args.row);\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n\n  protected toggleRowSelection(row: number) {\n    const dataContext = this._grid.getDataItem(row);\n    if (!this.checkSelectableOverride(row, dataContext, this._grid)) {\n      return;\n    }\n\n    if (this._selectedRowsLookup[row]) {\n      const newSelectedRows = this._grid.getSelectedRows().filter((n) => n !== row);\n      this._grid.setSelectedRows(newSelectedRows, 'click.toggle');\n    } else {\n      this._grid.setSelectedRows(this._grid.getSelectedRows().concat(row), 'click.toggle');\n    }\n    this._grid.setActiveCell(row, this.getCheckboxColumnCellIndex());\n  }\n\n  selectRows(rowArray: number[]) {\n    const addRows: number[] = [];\n    for (let i = 0, l = rowArray.length; i < l; i++) {\n      if (!this._selectedRowsLookup[rowArray[i]]) {\n        addRows[addRows.length] = rowArray[i];\n      }\n    }\n    this._grid.setSelectedRows(this._grid.getSelectedRows().concat(addRows), 'SlickCheckboxSelectColumn.selectRows');\n  }\n\n  deSelectRows(rowArray: number[]) {\n    const removeRows: number[] = [];\n    for (let i = 0, l = rowArray.length; i < l; i++) {\n      if (this._selectedRowsLookup[rowArray[i]]) {\n        removeRows[removeRows.length] = rowArray[i];\n      }\n    }\n\n    this._grid.setSelectedRows(this._grid.getSelectedRows().filter((n) => removeRows.indexOf(n) < 0), 'SlickCheckboxSelectColumn.deSelectRows');\n  }\n\n  protected handleHeaderClick(e: DOMEvent<HTMLInputElement> | SlickEventData, args: OnHeaderClickEventArgs) {\n    if (args.column.id === this._options.columnId && (e.target as HTMLInputElement).type === 'checkbox') {\n      // if editing, try to commit\n      if (this._grid.getEditorLock().isActive() && !this._grid.getEditorLock().commitCurrentEdit()) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        return;\n      }\n\n      let isAllSelected = (e.target as HTMLInputElement).checked;\n      const caller = isAllSelected ? 'click.selectAll' : 'click.unselectAll';\n      const rows: number[] = [];\n\n      if (isAllSelected) {\n        for (let i = 0; i < this._grid.getDataLength(); i++) {\n          // Get the row and check it's a selectable row before pushing it onto the stack\n          const rowItem = this._grid.getDataItem(i);\n          if (!rowItem.__group && !rowItem.__groupTotals && this.checkSelectableOverride(i, rowItem, this._grid)) {\n            rows.push(i);\n          }\n        }\n        isAllSelected = true;\n      }\n      if (this._isUsingDataView && this._dataView && this._options.applySelectOnAllPages) {\n        const ids: Array<number | string> = [];\n        const filteredItems = this._dataView.getFilteredItems();\n        for (let j = 0; j < filteredItems.length; j++) {\n          // Get the row and check it's a selectable ID (it could be in a different page) before pushing it onto the stack\n          const dataviewRowItem: T = filteredItems[j];\n          if (this.checkSelectableOverride(j, dataviewRowItem, this._grid)) {\n            ids.push(dataviewRowItem[this._dataView.getIdPropertyName() as keyof T] as number | string);\n          }\n        }\n        this._dataView.setSelectedIds(ids, { isRowBeingAdded: isAllSelected });\n      }\n      this._grid.setSelectedRows(rows, caller);\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n\n  protected getCheckboxColumnCellIndex() {\n    if (this._checkboxColumnCellIndex === null) {\n      this._checkboxColumnCellIndex = 0;\n      const colArr = this._grid.getColumns();\n      for (let i = 0; i < colArr.length; i++) {\n        if (colArr[i].id === this._options.columnId) {\n          this._checkboxColumnCellIndex = i;\n        }\n      }\n    }\n    return this._checkboxColumnCellIndex;\n  }\n\n  /**\n   * use a DocumentFragment to return a fragment including an <input> then a <label> as siblings,\n   * the label is using `for` to link it to the input `id`\n   * @param {String} inputId - id to link the label\n   * @param {Boolean} [checked] - is the input checkbox checked? (defaults to false)\n   * @returns\n   */\n  createCheckboxElement(inputId: string, checked = false) {\n    const fragmentElm = new DocumentFragment();\n    fragmentElm.appendChild(\n      Utils.createDomElement('input', { id: inputId, type: 'checkbox', checked, ariaChecked: String(checked) })\n    );\n    fragmentElm.appendChild(\n      Utils.createDomElement('label', { htmlFor: inputId })\n    );\n\n    return fragmentElm;\n  }\n\n  getColumnDefinition() {\n    return {\n      id: this._options.columnId,\n      reorderable: this._options.reorderable,\n      name: (this._options.hideSelectAllCheckbox || this._options.hideInColumnTitleRow)\n        ? this._options.name || ''\n        : this.createCheckboxElement(`header-selector${this._selectAll_UID}`),\n      toolTip: (this._options.hideSelectAllCheckbox || this._options.hideInColumnTitleRow) ? '' : this._options.toolTip,\n      field: 'sel',\n      width: this._options.width,\n      resizable: false,\n      sortable: false,\n      cssClass: this._options.cssClass,\n      hideSelectAllCheckbox: this._options.hideSelectAllCheckbox,\n      formatter: this.checkboxSelectionFormatter.bind(this),\n      // exclude from all menus, defaults to true unless the option is provided differently by the user\n      excludeFromColumnPicker: this._options.excludeFromColumnPicker ?? true,\n      excludeFromGridMenu: this._options.excludeFromGridMenu ?? true,\n      excludeFromHeaderMenu: this._options.excludeFromHeaderMenu ?? true,\n    };\n  }\n\n  protected addCheckboxToFilterHeaderRow(grid: SlickGrid) {\n    this._handler.subscribe(grid.onHeaderRowCellRendered, (_e: any, args: any) => {\n      if (args.column.field === 'sel') {\n        Utils.emptyElement(args.node);\n        const spanElm = Utils.createDomElement('span', { id: 'filter-checkbox-selectall-container', ariaChecked: 'false' });\n        spanElm.appendChild(\n          Utils.createDomElement('input', { type: 'checkbox', id: `header-filter-selector${this._selectAll_UID}` })\n        );\n        spanElm.appendChild(\n          Utils.createDomElement('label', { htmlFor: `header-filter-selector${this._selectAll_UID}` })\n        );\n\n        args.node.appendChild(spanElm);\n        this._headerRowNode = args.node;\n\n        this._bindingEventService.bind(spanElm, 'click', ((e: DOMEvent<HTMLInputElement>) => this.handleHeaderClick(e, args)) as EventListener);\n      }\n    });\n  }\n\n  protected createUID() {\n    return Math.round(10000000 * Math.random());\n  }\n\n  protected checkboxSelectionFormatter(row: number, _cell: number, _val: any, _columnDef: Column, dataContext: any, grid: SlickGrid) {\n    if (dataContext && this.checkSelectableOverride(row, dataContext, grid)) {\n      const UID = this.createUID() + row;\n      return this.createCheckboxElement(`selector${UID}`, !!this._selectedRowsLookup[row]);\n    }\n    return null;\n  }\n\n  protected checkSelectableOverride(row: number, dataContext: any, grid: SlickGrid) {\n    if (typeof this._selectableOverride === 'function') {\n      return this._selectableOverride(row, dataContext, grid);\n    }\n    return true;\n  }\n\n  protected renderSelectAllCheckbox(isSelectAllChecked?: boolean) {\n    this._grid.updateColumnHeader(\n      this._options.columnId || '',\n      this.createCheckboxElement(`header-selector${this._selectAll_UID}`, !!isSelectAllChecked),\n      this._options.toolTip\n    );\n  }\n\n  /**\n   * Method that user can pass to override the default behavior or making every row a selectable row.\n   * In order word, user can choose which rows to be selectable or not by providing his own logic.\n   * @param overrideFn: override function callback\n   */\n  selectableOverride(overrideFn: SelectableOverrideCallback<T>) {\n    this._selectableOverride = overrideFn;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      CheckboxSelectColumn: SlickCheckboxSelectColumn\n    }\n  });\n}\n\n", "import {\n  BindingEventService as BindingEventService_,\n  SlickEvent as SlickEvent_,\n  SlickEventData as SlickEventData_,\n  SlickEventHandler as SlickEventHandler_,\n  Utils as Utils_\n} from '../slick.core';\nimport type {\n  Column,\n  ContextMenuOption,\n  DOMMouseOrTouchEvent,\n  GridOption,\n  MenuCommandItem,\n  MenuCommandItemCallbackArgs,\n  MenuFromCellCallbackArgs,\n  MenuOptionItem,\n  MenuOptionItemCallbackArgs,\n  MenuType,\n  SlickPlugin\n} from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst EventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * A plugin to add Context Menu (mouse right+click), it subscribes to the cell \"onContextMenu\" event.\n * The \"contextMenu\" is defined in the Grid Options object\n * You can use it to change a data property (only 1) through a list of Options AND/OR through a list of Commands.\n * A good example of a Command would be an Export to CSV, that can be run from anywhere in the grid by doing a mouse right+click\n *\n * Note:\n *   There is only 1 list of Options, so typically that would be use for 1 column\n *   if you plan to use different Options for different columns, then the CellMenu plugin might be better suited.\n *\n * USAGE:\n *\n * Add the slick.contextmenu.(js|css) files and register it with the grid.\n *\n * To specify a menu in a column header, extend the column definition like so:\n * var contextMenuPlugin = new Slick.Plugins.ContextMenu(columns, grid, options);\n *\n * Available grid options, by defining a contextMenu object:\n *\n *  var options = {\n *    enableCellNavigation: true,\n *    contextMenu: {\n *      optionTitle: 'Change Priority',\n *      optionShownOverColumnIds: [\"priority\"],\n *      optionItems: [\n *        { option: 0, title: 'none', cssClass: 'italic' },\n *        { divider: true },\n *        \"divider\" // just the string is also accepted\n *        { option: 1, iconCssClass: 'fa fa-fire grey', title: 'Low' },\n *        { option: 3, iconCssClass: 'fa fa-fire red', title: 'High' },\n *        { option: 2, iconCssClass: 'fa fa-fire orange', title: 'Medium' },\n *        { option: 4, iconCssClass: 'fa fa-fire', title: 'Extreme', disabled: true },\n *      ],\n *      commandTitle: 'Commands',\n *      commandShownOverColumnIds: [\"title\", \"complete\", \"start\", \"finish\", \"effortDriven\"],\n *      commandItems: [\n *        { command: 'export-excel', title: 'Export to CSV', iconCssClass: 'fa fa-file-excel-o', cssClass: '' },\n *        { command: 'delete-row', title: 'Delete Row', cssClass: 'bold', textCssClass: 'red' },\n *        { command: 'help', title: 'Help', iconCssClass: 'fa fa-question-circle',},\n *        { divider: true },\n *      ],\n *    }\n *  };\n *\n *\n * Available contextMenu properties:\n *    commandTitle:               Title of the Command section (optional)\n *    commandItems:               Array of Command item objects (command/title pair)\n *    commandShownOverColumnIds:  Define which column to show the Commands list. If not defined (defaults), the menu will be shown over all columns\n *    optionTitle:                Title of the Option section (optional)\n *    optionItems:                Array of Options item objects (option/title pair)\n *    optionShownOverColumnIds:   Define which column to show the Options list. If not defined (defaults), the menu will be shown over all columns\n *    hideCloseButton:            Hide the Close button on top right (defaults to false)\n *    hideCommandSection:         Hide the Commands section even when the commandItems array is filled (defaults to false)\n *    hideMenuOnScroll:           Do we want to hide the Cell Menu when a scrolling event occurs (defaults to false)?\n *    hideOptionSection:          Hide the Options section even when the optionItems array is filled (defaults to false)\n *    maxHeight:                  Maximum height that the drop menu will have, can be a number (250) or text (\"none\")\n *    width:                      Width that the drop menu will have, can be a number (250) or text (defaults to \"auto\")\n *    autoAdjustDrop:             Auto-align dropup or dropdown menu to the left or right depending on grid viewport available space (defaults to true)\n *    autoAdjustDropOffset:       Optionally add an offset to the auto-align of the drop menu (defaults to -4)\n *    autoAlignSide:              Auto-align drop menu to the left or right depending on grid viewport available space (defaults to true)\n *    autoAlignSideOffset:        Optionally add an offset to the left/right side auto-align (defaults to 0)\n *    menuUsabilityOverride:      Callback method that user can override the default behavior of enabling/disabling the menu from being usable (must be combined with a custom formatter)\n *    subItemChevronClass:        CSS class that can be added on the right side of a sub-item parent (typically a chevron-right icon)\n *    subMenuOpenByEvent:         defaults to \"mouseover\", what event type shoud we use to open sub-menu(s), 2 options are available: \"mouseover\" or \"click\"\n *\n *\n * Available menu Command/Option item properties:\n *    action:                     Optionally define a callback function that gets executed when item is chosen (and/or use the onCommand event)\n *    command:                    A command identifier to be passed to the onCommand event handlers (when using \"commandItems\").\n *    option:                     An option to be passed to the onOptionSelected event handlers (when using \"optionItems\").\n *    title:                      Menu item text.\n *    divider:                    Boolean which tell if the current item is a divider, not an actual command. You could also pass \"divider\" instead of an object\n *    disabled:                   Whether the item/command is disabled.\n *    hidden:                     Whether the item/command is hidden.\n *    subMenuTitle:               Optional sub-menu title that will shows up when sub-menu commmands/options list is opened\n *    subMenuTitleCssClass:       Optional sub-menu title CSS class to use with `subMenuTitle`\n *    tooltip:                    Item tooltip.\n *    cssClass:                   A CSS class to be added to the menu item container.\n *    iconCssClass:               A CSS class to be added to the menu item icon.\n *    textCssClass:               A CSS class to be added to the menu item text.\n *    iconImage:                  A url to the icon image.\n *    itemVisibilityOverride:     Callback method that user can override the default behavior of showing/hiding an item from the list\n *    itemUsabilityOverride:      Callback method that user can override the default behavior of enabling/disabling an item from the list\n *\n * The plugin exposes the following events:\n *\n *    onAfterMenuShow: Fired after the menu is shown.  You can customize the menu or dismiss it by returning false.\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *\n *    onBeforeMenuShow: Fired before the menu is shown.  You can customize the menu or dismiss it by returning false.\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *\n *    onBeforeMenuClose: Fired when the menu is closing.\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *            menu:         Menu DOM element\n *\n *    onCommand: Fired on menu option clicked from the Command items list\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *            command:      Menu command identified.\n *            item:         Menu item selected\n *            column:    Cell Column definition\n *            dataContext:  Cell Data Context (data object)\n *            value:        Value of the cell we triggered the context menu from\n *\n *    onOptionSelected: Fired on menu option clicked from the Option items list\n *        Event args:\n *            cell:         Cell or column index\n *            row:          Row index\n *            grid:         Reference to the grid.\n *            option:       Menu option selected.\n *            item:         Menu item selected\n *            column:    Cell Column definition\n *            dataContext:  Cell Data Context (data object)\n *\n *\n * @param options {Object} Context Menu Options\n * @class Slick.Plugins.ContextMenu\n */\nexport class SlickContextMenu implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'ContextMenu' as const;\n  onAfterMenuShow = new SlickEvent<MenuFromCellCallbackArgs>('onAfterMenuShow');\n  onBeforeMenuShow = new SlickEvent<MenuFromCellCallbackArgs>('onBeforeMenuShow');\n  onBeforeMenuClose = new SlickEvent<MenuFromCellCallbackArgs>('onBeforeMenuClose');\n  onCommand = new SlickEvent<MenuCommandItemCallbackArgs>('onCommand');\n  onOptionSelected = new SlickEvent<MenuOptionItemCallbackArgs>('onOptionSelected');\n\n  // --\n  // protected props\n  protected _bindingEventService = new BindingEventService();\n  protected _contextMenuProperties: ContextMenuOption;\n  protected _currentCell = -1;\n  protected _currentRow = -1;\n  protected _grid!: SlickGrid;\n  protected _gridOptions!: GridOption;\n  protected _gridUid = '';\n  protected _handler = new EventHandler();\n  protected _commandTitleElm?: HTMLSpanElement;\n  protected _optionTitleElm?: HTMLSpanElement;\n  protected _lastMenuTypeClicked = '';\n  protected _menuElm?: HTMLDivElement | null;\n  protected _subMenuParentId = '';\n  protected _defaults: ContextMenuOption = {\n    autoAdjustDrop: true,     // dropup/dropdown\n    autoAlignSide: true,      // left/right\n    autoAdjustDropOffset: -4,\n    autoAlignSideOffset: 0,\n    hideMenuOnScroll: false,\n    maxHeight: 'none',\n    width: 'auto',\n    optionShownOverColumnIds: [],\n    commandShownOverColumnIds: [],\n    subMenuOpenByEvent: 'mouseover',\n  };\n\n  constructor(optionProperties: Partial<ContextMenuOption>) {\n    this._contextMenuProperties = Utils.extend({}, this._defaults, optionProperties);\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._gridOptions = grid.getOptions();\n    this._gridUid = grid.getUID() || '';\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._handler.subscribe(this._grid.onContextMenu, this.handleOnContextMenu.bind(this));\n    if (this._contextMenuProperties.hideMenuOnScroll) {\n      this._handler.subscribe(this._grid.onScroll, this.destroyMenu.bind(this));\n    }\n  }\n\n  setOptions(newOptions: Partial<ContextMenuOption>) {\n    this._contextMenuProperties = Utils.extend({}, this._contextMenuProperties, newOptions);\n\n    // on the array properties, we want to make sure to overwrite them and not just extending them\n    if (newOptions.commandShownOverColumnIds) {\n      this._contextMenuProperties.commandShownOverColumnIds = newOptions.commandShownOverColumnIds;\n    }\n    if (newOptions.optionShownOverColumnIds) {\n      this._contextMenuProperties.optionShownOverColumnIds = newOptions.optionShownOverColumnIds;\n    }\n  }\n\n  destroy() {\n    this.onAfterMenuShow.unsubscribe();\n    this.onBeforeMenuShow.unsubscribe();\n    this.onBeforeMenuClose.unsubscribe();\n    this.onCommand.unsubscribe();\n    this.onOptionSelected.unsubscribe();\n    this._handler.unsubscribeAll();\n    this._bindingEventService.unbindAll();\n    this._menuElm?.remove();\n    this._commandTitleElm = null as any;\n    this._optionTitleElm = null as any;\n    this._menuElm = null as any;\n  }\n\n  protected createParentMenu(evt: SlickEventData_ | MouseEvent) {\n    const e = evt instanceof SlickEventData ? evt.getNativeEvent<MouseEvent | TouchEvent>() : evt;\n    const targetEvent = (e as TouchEvent).touches?.[0] ?? e;\n    const cell = this._grid.getCellFromEvent(e);\n    this._currentCell = cell?.cell ?? 0;\n    this._currentRow = cell?.row ?? 0;\n    const columnDef = this._grid.getColumns()[this._currentCell];\n\n    const isColumnOptionAllowed = this.checkIsColumnAllowed(this._contextMenuProperties.optionShownOverColumnIds ?? [], columnDef.id);\n    const isColumnCommandAllowed = this.checkIsColumnAllowed(this._contextMenuProperties.commandShownOverColumnIds ?? [], columnDef.id);\n    const commandItems = this._contextMenuProperties.commandItems || [];\n    const optionItems = this._contextMenuProperties.optionItems || [];\n\n    // make sure there's at least something to show before creating the Context Menu\n    if (!columnDef || (!isColumnCommandAllowed && !isColumnOptionAllowed) || (!commandItems.length && !optionItems.length)) {\n      return;\n    }\n\n    // delete any prior context menu\n    this.destroyMenu(e);\n\n    // Let the user modify the menu or cancel altogether,\n    // or provide alternative menu implementation.\n    if (this.onBeforeMenuShow.notify({\n      cell: this._currentCell,\n      row: this._currentRow,\n      grid: this._grid\n    }, e, this).getReturnValue() === false) {\n      return;\n    }\n\n    // create 1st parent menu container & reposition it\n    this._menuElm = this.createMenu(commandItems, optionItems);\n    this._menuElm.style.top = `${targetEvent.pageY}px`;\n    this._menuElm.style.left = `${targetEvent.pageX}px`;\n    this._menuElm.style.display = 'block';\n    document.body.appendChild(this._menuElm);\n\n    if (this.onAfterMenuShow.notify({\n      cell: this._currentCell,\n      row: this._currentRow,\n      grid: this._grid\n    }, e, this).getReturnValue() === false) {\n      return;\n    }\n\n    return this._menuElm;\n  }\n\n  protected createMenu(commandItems: Array<MenuCommandItem | 'divider'>, optionItems: Array<MenuOptionItem | 'divider'>, level = 0, item?: MenuCommandItem | MenuOptionItem | 'divider') {\n    const columnDef = this._grid.getColumns()[this._currentCell];\n    const dataContext = this._grid.getDataItem(this._currentRow);\n    const isColumnOptionAllowed = this.checkIsColumnAllowed(this._contextMenuProperties.optionShownOverColumnIds ?? [], columnDef.id);\n    const isColumnCommandAllowed = this.checkIsColumnAllowed(this._contextMenuProperties.commandShownOverColumnIds ?? [], columnDef.id);\n\n    // create a new context menu\n    const maxHeight = isNaN(this._contextMenuProperties.maxHeight as number) ? this._contextMenuProperties.maxHeight : `${this._contextMenuProperties.maxHeight ?? 0}px`;\n    const width = isNaN(this._contextMenuProperties.width as number) ? this._contextMenuProperties.width : `${this._contextMenuProperties.maxWidth ?? 0}px`;\n\n    // to avoid having multiple sub-menu trees opened,\n    // we need to somehow keep trace of which parent menu the tree belongs to\n    // and we should keep ref of only the first sub-menu parent, we can use the command name (remove any whitespaces though)\n    const subMenuCommand = (item as MenuCommandItem)?.command;\n    let subMenuId = (level === 1 && subMenuCommand) ? subMenuCommand.replaceAll(' ', '') : '';\n    if (subMenuId) {\n      this._subMenuParentId = subMenuId;\n    }\n    if (level > 1) {\n      subMenuId = this._subMenuParentId;\n    }\n\n    const menuClasses = `slick-context-menu slick-menu-level-${level} ${this._gridUid}`;\n    const bodyMenuElm = document.body.querySelector<HTMLDivElement>(`.slick-context-menu.slick-menu-level-${level}${this.getGridUidSelector()}`);\n\n    // return menu/sub-menu if it's already opened unless we are on different sub-menu tree if so close them all\n    if (bodyMenuElm) {\n      if (bodyMenuElm.dataset.subMenuParent === subMenuId) {\n        return bodyMenuElm;\n      }\n      this.destroySubMenus();\n    }\n\n    const menuElm = document.createElement('div');\n    menuElm.className = menuClasses;\n    if (level > 0) {\n      menuElm.classList.add('slick-submenu');\n      if (subMenuId) {\n        menuElm.dataset.subMenuParent = subMenuId;\n      }\n    }\n    menuElm.ariaLabel = level > 1 ? 'SubMenu' : 'Context Menu';\n    menuElm.role = 'menu';\n    if (width) {\n      menuElm.style.width = width as string;\n    }\n    if (maxHeight) {\n      menuElm.style.maxHeight = maxHeight as string;\n    }\n\n    menuElm.style.display = 'none';\n\n    let closeButtonElm: HTMLButtonElement | null = null;\n    if (level === 0) {\n      closeButtonElm = document.createElement('button');\n      closeButtonElm.type = 'button';\n      closeButtonElm.className = 'close';\n      closeButtonElm.dataset.dismiss = 'slick-context-menu';\n      closeButtonElm.ariaLabel = 'Close';\n\n      const spanCloseElm = document.createElement('span');\n      spanCloseElm.className = 'close';\n      spanCloseElm.ariaHidden = 'true';\n      spanCloseElm.textContent = '\u00D7';\n      closeButtonElm.appendChild(spanCloseElm);\n    }\n\n    // -- Option List section\n    if (!this._contextMenuProperties.hideOptionSection && isColumnOptionAllowed && optionItems.length > 0) {\n      const optionMenuElm = document.createElement('div');\n      optionMenuElm.className = 'slick-context-menu-option-list';\n      optionMenuElm.role = 'menu';\n\n      // when creating sub-menu add its sub-menu title when exists\n      if (item && level > 0) {\n        this.addSubMenuTitleWhenExists(item, optionMenuElm); // add sub-menu title when exists\n      }\n\n      if (closeButtonElm && !this._contextMenuProperties.hideCloseButton) {\n        this._bindingEventService.bind(closeButtonElm, 'click', this.handleCloseButtonClicked.bind(this) as EventListener);\n        menuElm.appendChild(closeButtonElm);\n      }\n      menuElm.appendChild(optionMenuElm);\n\n      this.populateCommandOrOptionItems(\n        'option',\n        this._contextMenuProperties,\n        optionMenuElm,\n        optionItems,\n        { cell: this._currentCell, row: this._currentRow, column: columnDef, dataContext, grid: this._grid, level }\n      );\n    }\n\n    // -- Command List section\n    if (!this._contextMenuProperties.hideCommandSection && isColumnCommandAllowed && commandItems.length > 0) {\n      const commandMenuElm = document.createElement('div');\n      commandMenuElm.className = 'slick-context-menu-command-list';\n      commandMenuElm.role = 'menu';\n\n      // when creating sub-menu add its sub-menu title when exists\n      if (item && level > 0) {\n        this.addSubMenuTitleWhenExists(item, commandMenuElm); // add sub-menu title when exists\n      }\n\n      if (closeButtonElm && !this._contextMenuProperties.hideCloseButton && (!isColumnOptionAllowed || optionItems.length === 0 || this._contextMenuProperties.hideOptionSection)) {\n        this._bindingEventService.bind(closeButtonElm, 'click', this.handleCloseButtonClicked.bind(this) as EventListener);\n        menuElm.appendChild(closeButtonElm);\n      }\n\n      menuElm.appendChild(commandMenuElm);\n      this.populateCommandOrOptionItems(\n        'command',\n        this._contextMenuProperties,\n        commandMenuElm,\n        commandItems,\n        { cell: this._currentCell, row: this._currentRow, column: columnDef, dataContext, grid: this._grid, level }\n      );\n    }\n\n    // increment level for possible next sub-menus if exists\n    level++;\n\n    return menuElm;\n  }\n\n  protected addSubMenuTitleWhenExists(item: MenuCommandItem | MenuOptionItem | 'divider', commandOrOptionMenu: HTMLDivElement) {\n    if (item !== 'divider' && item?.subMenuTitle) {\n      const subMenuTitleElm = document.createElement('div');\n      subMenuTitleElm.className = 'slick-menu-title';\n      subMenuTitleElm.textContent = item.subMenuTitle as string;\n      const subMenuTitleClass = item.subMenuTitleCssClass as string;\n      if (subMenuTitleClass) {\n        subMenuTitleElm.classList.add(...Utils.classNameToList(subMenuTitleClass));\n      }\n\n      commandOrOptionMenu.appendChild(subMenuTitleElm);\n    }\n  }\n\n  protected handleCloseButtonClicked(e: MouseEvent | TouchEvent) {\n    if (!e.defaultPrevented) {\n      this.destroyMenu(e);\n    }\n  }\n\n  destroyMenu(e?: Event | SlickEventData_, args?: { cell: number; row: number; }) {\n    this._menuElm = this._menuElm || document.querySelector(`.slick-context-menu${this.getGridUidSelector()}`);\n\n    if (this._menuElm?.remove) {\n      if (this.onBeforeMenuClose.notify({\n        cell: args?.cell ?? 0,\n        row: args?.row ?? 0,\n        grid: this._grid,\n      }, e, this).getReturnValue() === false) {\n        return;\n      }\n      this._menuElm.remove();\n      this._menuElm = null;\n    }\n    this.destroySubMenus();\n  }\n\n  /** Destroy all parent menus and any sub-menus */\n  destroyAllMenus() {\n    this.destroySubMenus();\n\n    // remove all parent menu listeners before removing them from the DOM\n    this._bindingEventService.unbindAll('parent-menu');\n    document.querySelectorAll(`.slick-context-menu${this.getGridUidSelector()}`)\n      .forEach(subElm => subElm.remove());\n  }\n\n  /** Close and destroy all previously opened sub-menus */\n  destroySubMenus() {\n    this._bindingEventService.unbindAll('sub-menu');\n    document.querySelectorAll(`.slick-context-menu.slick-submenu${this.getGridUidSelector()}`)\n      .forEach(subElm => subElm.remove());\n  }\n\n  protected checkIsColumnAllowed(columnIds: Array<number | string>, columnId: number | string) {\n    let isAllowedColumn = false;\n\n    if (columnIds?.length > 0) {\n      for (let o = 0, ln = columnIds.length; o < ln; o++) {\n        if (columnIds[o] === columnId) {\n          isAllowedColumn = true;\n        }\n      }\n    } else {\n      isAllowedColumn = true;\n    }\n    return isAllowedColumn;\n  }\n\n  protected getGridUidSelector() {\n    const gridUid = this._grid.getUID() || '';\n    return gridUid ? `.${gridUid}` : '';\n  }\n\n  protected handleOnContextMenu(evt: SlickEventData_ | DOMMouseOrTouchEvent<HTMLDivElement>, args: MenuCommandItemCallbackArgs) {\n    this.destroyAllMenus(); // make there's only 1 parent menu opened at a time\n    const e = evt instanceof SlickEventData ? evt.getNativeEvent<DOMMouseOrTouchEvent<HTMLDivElement>>() : evt;\n    e.preventDefault();\n    const cell = this._grid.getCellFromEvent(e);\n\n    if (cell) {\n      const columnDef = this._grid.getColumns()[cell.cell];\n      const dataContext = this._grid.getDataItem(cell.row);\n\n      // run the override function (when defined), if the result is false it won't go further\n      args = args || {};\n      args.cell = cell.cell;\n      args.row = cell.row;\n      args.column = columnDef;\n      args.dataContext = dataContext;\n      args.grid = this._grid;\n\n      if (!this.runOverrideFunctionWhenExists(this._contextMenuProperties.menuUsabilityOverride, args)) {\n        return;\n      }\n\n      // create the DOM element\n      this._menuElm = this.createParentMenu(e as MouseEvent);\n\n      // reposition the menu to where the user clicked\n      if (this._menuElm) {\n        this.repositionMenu(e, this._menuElm);\n        this._menuElm.style.display = 'block';\n      }\n\n      // Hide the menu on outside click.\n      this._bindingEventService.bind(document.body, 'mousedown', this.handleBodyMouseDown.bind(this) as EventListener);\n    }\n  }\n\n  /** When users click outside the Cell Menu, we will typically close the Cell Menu (and any sub-menus) */\n  protected handleBodyMouseDown(e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    // did we click inside the menu or any of its sub-menu(s)\n    let isMenuClicked = false;\n    if (this._menuElm?.contains(e.target)) {\n      isMenuClicked = true;\n    }\n    if (!isMenuClicked) {\n      document\n        .querySelectorAll(`.slick-context-menu.slick-submenu${this.getGridUidSelector()}`)\n        .forEach(subElm => {\n          if (subElm.contains(e.target)) {\n            isMenuClicked = true;\n          }\n        });\n    }\n\n    if (this._menuElm !== e.target && !isMenuClicked && !e.defaultPrevented) {\n      this.destroyMenu(e, { cell: this._currentCell, row: this._currentRow });\n    }\n  }\n\n  /** Construct the Command Items section. */\n  protected populateCommandOrOptionItems(\n    itemType: MenuType,\n    contextMenu: ContextMenuOption,\n    commandOrOptionMenuElm: HTMLElement,\n    commandOrOptionItems: Array<MenuCommandItem | 'divider'> | Array<MenuOptionItem | 'divider'>,\n    args: { cell: number, row: number, column: Column, dataContext: any, grid: SlickGrid, level: number }\n  ) {\n    if (!args || !commandOrOptionItems || !contextMenu) {\n      return;\n    }\n\n    // user could pass a title on top of the Commands/Options section\n    const level = args?.level || 0;\n    const isSubMenu = level > 0;\n    if (contextMenu?.[`${itemType}Title`] && !isSubMenu) {\n      this[`_${itemType}TitleElm`] = document.createElement('div');\n      this[`_${itemType}TitleElm`]!.className = 'slick-menu-title';\n      this[`_${itemType}TitleElm`]!.textContent = contextMenu[`${itemType}Title`] as string;\n      commandOrOptionMenuElm.appendChild(this[`_${itemType}TitleElm`]!);\n    }\n\n    for (let i = 0, ln = commandOrOptionItems.length; i < ln; i++) {\n      let addClickListener = true;\n      const item = commandOrOptionItems[i];\n\n      // run each override functions to know if the item is visible and usable\n      const isItemVisible = this.runOverrideFunctionWhenExists<typeof args>((item as MenuCommandItem | MenuOptionItem).itemVisibilityOverride, args);\n      const isItemUsable = this.runOverrideFunctionWhenExists<typeof args>((item as MenuCommandItem | MenuOptionItem).itemUsabilityOverride, args);\n\n      // if the result is not visible then there's no need to go further\n      if (!isItemVisible) {\n        continue;\n      }\n\n      // when the override is defined, we need to use its result to update the disabled property\n      // so that \"handleMenuItemClick\" has the correct flag and won't trigger a command clicked event\n      if (Object.prototype.hasOwnProperty.call(item, 'itemUsabilityOverride')) {\n        (item as MenuCommandItem | MenuOptionItem).disabled = isItemUsable ? false : true;\n      }\n\n      const liElm = document.createElement('div');\n      liElm.className = 'slick-context-menu-item';\n      liElm.role = 'menuitem';\n\n      if ((item as MenuCommandItem | MenuOptionItem).divider || item === 'divider') {\n        liElm.classList.add('slick-context-menu-item-divider');\n        addClickListener = false;\n      }\n\n      // if the item is disabled then add the disabled css class\n      if ((item as MenuCommandItem | MenuOptionItem).disabled || !isItemUsable) {\n        liElm.classList.add('slick-context-menu-item-disabled');\n      }\n\n      // if the item is hidden then add the hidden css class\n      if ((item as MenuCommandItem | MenuOptionItem).hidden) {\n        liElm.classList.add('slick-context-menu-item-hidden');\n      }\n\n      if ((item as MenuCommandItem | MenuOptionItem).cssClass) {\n        liElm.classList.add(...Utils.classNameToList((item as MenuCommandItem | MenuOptionItem).cssClass));\n      }\n\n      if ((item as MenuCommandItem | MenuOptionItem).tooltip) {\n        liElm.title = (item as MenuCommandItem | MenuOptionItem).tooltip || '';\n      }\n\n      const iconElm = document.createElement('div');\n      iconElm.className = 'slick-context-menu-icon';\n\n      liElm.appendChild(iconElm);\n\n      if ((item as MenuCommandItem | MenuOptionItem).iconCssClass) {\n        iconElm.classList.add(...Utils.classNameToList((item as MenuCommandItem | MenuOptionItem).iconCssClass));\n      }\n\n      if ((item as MenuCommandItem | MenuOptionItem).iconImage) {\n        iconElm.style.backgroundImage = `url(${(item as MenuCommandItem | MenuOptionItem).iconImage})`;\n      }\n\n      const textElm = document.createElement('span');\n      textElm.className = 'slick-context-menu-content';\n      textElm.textContent = (item as MenuCommandItem | MenuOptionItem).title || '';\n\n      liElm.appendChild(textElm);\n\n      if ((item as MenuCommandItem | MenuOptionItem).textCssClass) {\n        textElm.classList.add(...Utils.classNameToList((item as MenuCommandItem | MenuOptionItem).textCssClass));\n      }\n\n      commandOrOptionMenuElm.appendChild(liElm);\n\n      if (addClickListener) {\n        const eventGroup = isSubMenu ? 'sub-menu' : 'parent-menu';\n        this._bindingEventService.bind(liElm, 'click', this.handleMenuItemClick.bind(this, item, itemType, level) as EventListener, undefined, eventGroup);\n      }\n\n      // optionally open sub-menu(s) by mouseover\n      if (this._contextMenuProperties.subMenuOpenByEvent === 'mouseover') {\n        this._bindingEventService.bind(liElm, 'mouseover', ((e: DOMMouseOrTouchEvent<HTMLDivElement>) => {\n          if ((item as MenuCommandItem).commandItems || (item as MenuOptionItem).optionItems) {\n            this.repositionSubMenu(item, itemType, level, e);\n            this._lastMenuTypeClicked = itemType;\n          } else if (!isSubMenu) {\n            this.destroySubMenus();\n          }\n        }) as EventListener);\n      }\n\n      // the option/command item could be a sub-menu if it has another list of commands/options\n      if ((item as MenuCommandItem).commandItems || (item as MenuOptionItem).optionItems) {\n        const chevronElm = document.createElement('span');\n        chevronElm.className = 'sub-item-chevron';\n        if (this._contextMenuProperties.subItemChevronClass) {\n          chevronElm.classList.add(...Utils.classNameToList(this._contextMenuProperties.subItemChevronClass));\n        } else {\n          chevronElm.textContent = '\u2B9E'; // \u2B9E or \u25B8\n        }\n\n        liElm.classList.add('slick-submenu-item');\n        liElm.appendChild(chevronElm);\n        continue;\n      }\n    }\n  }\n\n  protected handleMenuItemClick(item: MenuCommandItem | MenuOptionItem | 'divider', type: MenuType, level = 0, e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    if ((item as never)?.[type] !== undefined && item !== 'divider' && !item.disabled && !(item as MenuCommandItem | MenuOptionItem).divider && this._currentCell !== undefined && this._currentRow !== undefined) {\n      if (type === 'option' && !this._grid.getEditorLock().commitCurrentEdit()) {\n        return;\n      }\n      const optionOrCommand = (item as any)[type] !== undefined ? (item as any)[type] : '';\n      const row = this._currentRow;\n      const cell = this._currentCell;\n      const columnDef = this._grid.getColumns()[cell];\n      const dataContext = this._grid.getDataItem(row);\n      let cellValue;\n\n      if (Object.prototype.hasOwnProperty.call(dataContext, columnDef?.field)) {\n        cellValue = dataContext[columnDef.field];\n      }\n\n      if (optionOrCommand !== undefined && !(item as any)[`${type}Items`]) {\n        // user could execute a callback through 2 ways\n        // via the onCommand event and/or an action callback\n        const callbackArgs = {\n          cell,\n          row,\n          grid: this._grid,\n          [type]: optionOrCommand,\n          item,\n          column: columnDef,\n          dataContext,\n          value: cellValue\n        };\n        const eventType = type === 'command' ? 'onCommand' : 'onOptionSelected';\n        this[eventType].notify(callbackArgs as any, e, this);\n\n        // execute action callback when defined\n        if (typeof (item as MenuCommandItem).action === 'function') {\n          (item as any).action.call(this, e, callbackArgs);\n        }\n\n        if (!e.defaultPrevented) {\n          this.destroyMenu(e, { cell, row });\n        }\n      } else if ((item as MenuCommandItem).commandItems || (item as MenuOptionItem).optionItems) {\n        this.repositionSubMenu(item, type, level, e);\n      } else {\n        this.destroySubMenus();\n      }\n      this._lastMenuTypeClicked = type;\n    }\n  }\n\n  protected repositionSubMenu(item: MenuCommandItem | MenuOptionItem | 'divider', type: MenuType, level: number, e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    // when we're clicking a grid cell OR our last menu type (command/option) differs then we know that we need to start fresh and close any sub-menus that might still be open\n    if (e.target.classList.contains('slick-cell') || this._lastMenuTypeClicked !== type) {\n      this.destroySubMenus();\n    }\n\n    // creating sub-menu, we'll also pass level & the item object since we might have \"subMenuTitle\" to show\n    const subMenuElm = this.createMenu((item as MenuCommandItem)?.commandItems || [], (item as MenuOptionItem)?.optionItems || [], level + 1, item);\n    subMenuElm.style.display = 'block';\n    document.body.appendChild(subMenuElm);\n    this.repositionMenu(e, subMenuElm);\n  }\n\n  /**\n   * Reposition the menu drop (up/down) and the side (left/right)\n   * @param {*} event\n   */\n  protected repositionMenu(e: DOMMouseOrTouchEvent<HTMLDivElement>, menuElm: HTMLElement) {\n    const isSubMenu = menuElm.classList.contains('slick-submenu');\n    const targetEvent = (e as TouchEvent).touches?.[0] ?? e;\n    const parentElm = isSubMenu\n      ? e.target.closest('.slick-context-menu-item') as HTMLDivElement\n      : e.target.closest('.slick-cell') as HTMLDivElement;\n\n    if (menuElm && parentElm) {\n      const parentOffset = Utils.offset(parentElm);\n      let menuOffsetLeft = (isSubMenu && parentElm) ? parentOffset?.left ?? 0 : targetEvent.pageX;\n      let menuOffsetTop = parentElm ? parentOffset?.top ?? 0 : targetEvent.pageY;\n      const menuHeight = menuElm?.offsetHeight || 0;\n      const menuWidth = Number(menuElm?.offsetWidth || this._contextMenuProperties.width || 0);\n      const rowHeight = this._gridOptions.rowHeight;\n      const dropOffset = Number(this._contextMenuProperties.autoAdjustDropOffset || 0);\n      const sideOffset = Number(this._contextMenuProperties.autoAlignSideOffset || 0);\n\n      // if autoAdjustDrop is enable, we first need to see what position the drop will be located\n      // without necessary toggling it's position just yet, we just want to know the future position for calculation\n      if (this._contextMenuProperties.autoAdjustDrop) {\n        // since we reposition menu below slick cell, we need to take it in consideration and do our calculation from that element\n        const spaceBottom = Utils.calculateAvailableSpace(parentElm).bottom;\n        const spaceTop = Utils.calculateAvailableSpace(parentElm).top;\n        const spaceBottomRemaining = spaceBottom + dropOffset - rowHeight!;\n        const spaceTopRemaining = spaceTop - dropOffset + rowHeight!;\n        const dropPosition = (spaceBottomRemaining < menuHeight && spaceTopRemaining > spaceBottomRemaining) ? 'top' : 'bottom';\n        if (dropPosition === 'top') {\n          menuElm.classList.remove('dropdown');\n          menuElm.classList.add('dropup');\n          if (isSubMenu) {\n            menuOffsetTop -= (menuHeight - dropOffset - parentElm.clientHeight);\n          } else {\n            menuOffsetTop -= menuHeight - dropOffset;\n          }\n        } else {\n          menuElm.classList.remove('dropup');\n          menuElm.classList.add('dropdown');\n          if (isSubMenu) {\n            menuOffsetTop += dropOffset;\n          } else {\n            menuOffsetTop += rowHeight! + dropOffset;\n          }\n        }\n      }\n\n      // when auto-align is set, it will calculate whether it has enough space in the viewport to show the drop menu on the right (default)\n      // if there isn't enough space on the right, it will automatically align the drop menu to the left\n      // to simulate an align left, we actually need to know the width of the drop menu\n      if (this._contextMenuProperties.autoAlignSide) {\n        const gridPos = this._grid.getGridPosition();\n        let subMenuPosCalc = menuOffsetLeft + Number(menuWidth); // calculate coordinate at caller element far right\n        if (isSubMenu) {\n          subMenuPosCalc += parentElm.clientWidth;\n        }\n        const browserWidth = document.documentElement.clientWidth;\n        const dropSide = (subMenuPosCalc >= gridPos.width || subMenuPosCalc >= browserWidth) ? 'left' : 'right';\n        if (dropSide === 'left') {\n          menuElm.classList.remove('dropright');\n          menuElm.classList.add('dropleft');\n          menuOffsetLeft -= menuWidth - sideOffset;\n        } else {\n          menuElm.classList.remove('dropleft');\n          menuElm.classList.add('dropright');\n          if (isSubMenu) {\n            menuOffsetLeft += sideOffset + parentElm.offsetWidth;\n          } else {\n            menuOffsetLeft += sideOffset;\n          }\n        }\n      }\n\n      // ready to reposition the menu\n      menuElm.style.top = `${menuOffsetTop}px`;\n      menuElm.style.left = `${menuOffsetLeft}px`;\n    }\n  }\n\n  /**\n   * Method that user can pass to override the default behavior.\n   * In order word, user can choose or an item is (usable/visible/enable) by providing his own logic.\n   * @param overrideFn: override function callback\n   * @param args: multiple arguments provided to the override (cell, row, columnDef, dataContext, grid)\n   */\n  protected runOverrideFunctionWhenExists<T = any>(overrideFn: ((args: any) => boolean) | undefined, args: T): boolean {\n    if (typeof overrideFn === 'function') {\n      return overrideFn.call(this, args);\n    }\n    return true;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      Plugins: {\n        ContextMenu: SlickContextMenu\n      }\n    }\n  });\n}\n", "import { SlickEvent as SlickEvent_, type SlickEventData as SlickEventData_, SlickEventHandler as SlickEventHandler_, Utils as Utils_ } from '../slick.core';\nimport type { Column, DragRowMove, CrossGridRowMoveManagerOption, FormatterResultWithText, UsabilityOverrideFn } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * Row Move Manager options:\n *    cssClass:                 A CSS class to be added to the menu item container.\n *    columnId:                 Column definition id (defaults to \"_move\")\n *    cancelEditOnDrag:         Do we want to cancel any Editing while dragging a row (defaults to false)\n *    disableRowSelection:      Do we want to disable the row selection? (defaults to false)\n *    hideRowMoveShadow:        Do we want to hide the row move shadow clone? (defaults to true)\n *    rowMoveShadowMarginTop:   When row move shadow is shown, optional margin-top (defaults to 0)\n *    rowMoveShadowMarginLeft:  When row move shadow is shown, optional margin-left (defaults to 0)\n *    rowMoveShadowOpacity:     When row move shadow is shown, what is its opacity? (defaults to 0.95)\n *    rowMoveShadowScale:       When row move shadow is shown, what is its size scale? (default to 0.75)\n *    singleRowMove:            Do we want a single row move? Setting this to false means that it's a multple row move (defaults to false)\n *    width:                    Width of the column\n *    usabilityOverride:        Callback method that user can override the default behavior of the row being moveable or not\n *\n */\nexport class SlickCrossGridRowMoveManager {\n  // --\n  // public API\n  pluginName = 'CrossGridRowMoveManager' as const;\n  onBeforeMoveRows = new SlickEvent<{ rows: number[]; insertBefore: number; fromGrid: SlickGrid; toGrid: SlickGrid; }>('onBeforeMoveRows');\n  onMoveRows = new SlickEvent<{ rows: number[]; insertBefore: number; fromGrid: SlickGrid; toGrid: SlickGrid; }>('onMoveRows');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _canvas!: HTMLElement;\n  protected _dragging = false;\n  protected _toGrid!: SlickGrid;\n  protected _toCanvas!: HTMLElement;\n  protected _usabilityOverride?: UsabilityOverrideFn;\n  protected _eventHandler: SlickEventHandler_;\n  protected _options: CrossGridRowMoveManagerOption;\n  protected _defaults: CrossGridRowMoveManagerOption = {\n    columnId: '_move',\n    cssClass: undefined,\n    cancelEditOnDrag: false,\n    disableRowSelection: false,\n    hideRowMoveShadow: true,\n    rowMoveShadowMarginTop: 0,\n    rowMoveShadowMarginLeft: 0,\n    rowMoveShadowOpacity: 0.95,\n    rowMoveShadowScale: 0.75,\n    singleRowMove: false,\n    toGrid: undefined as any,\n    width: 40,\n  };\n\n  constructor(options: Partial<CrossGridRowMoveManagerOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n    this._eventHandler = new SlickEventHandler();\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._canvas = this._grid.getCanvasNode();\n    this._toGrid = this._options.toGrid;\n    this._toCanvas = this._toGrid.getCanvasNode();\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    // user could override the expandable icon logic from within the options or after instantiating the plugin\n    if (typeof this._options?.usabilityOverride === 'function') {\n      this.usabilityOverride(this._options.usabilityOverride);\n    }\n\n    this._eventHandler\n      .subscribe(this._grid.onDragInit, this.handleDragInit.bind(this))\n      .subscribe(this._grid.onDragStart as any, this.handleDragStart.bind(this))\n      .subscribe(this._grid.onDrag, this.handleDrag.bind(this))\n      .subscribe(this._grid.onDragEnd, this.handleDragEnd.bind(this));\n  }\n\n  destroy() {\n    this._eventHandler.unsubscribeAll();\n  }\n\n  setOptions(newOptions: CrossGridRowMoveManagerOption) {\n    this._options = Utils.extend({}, this._options, newOptions);\n  }\n\n  protected handleDragInit(e: SlickEventData_) {\n    // prevent the grid from cancelling drag'n'drop by default\n    e.stopImmediatePropagation();\n  }\n\n  protected handleDragStart(e: SlickEventData_, dd: DragRowMove & { fromGrid: SlickGrid; toGrid: SlickGrid; }): boolean | void {\n    const cell = this._grid.getCellFromEvent(e) || { cell: -1, row: -1 };\n    const currentRow = cell?.row ?? 0;\n    const dataContext = this._grid.getDataItem(currentRow);\n\n    if (!this.checkUsabilityOverride(currentRow, dataContext, this._grid)) {\n      return;\n    }\n\n    if (this._options.cancelEditOnDrag && this._grid.getEditorLock().isActive()) {\n      this._grid.getEditorLock().cancelCurrentEdit();\n    }\n\n    if (this._grid.getEditorLock().isActive() || !this.isHandlerColumn(cell.cell)) {\n      return false;\n    }\n\n    this._dragging = true;\n    e.stopImmediatePropagation();\n\n    // optionally create a shadow element of the row so that we can see all the time which row exactly we're dragging\n    if (!this._options.hideRowMoveShadow) {\n      const cellNodeElm = this._grid.getCellNode(cell.row, cell.cell);\n      const slickRowElm = cellNodeElm?.closest('.slick-row');\n      if (slickRowElm) {\n        dd.clonedSlickRow = slickRowElm.cloneNode(true) as HTMLDivElement;\n        dd.clonedSlickRow.classList.add('slick-reorder-shadow-row');\n        dd.clonedSlickRow.style.display = 'none';\n        dd.clonedSlickRow.style.marginLeft = Number(this._options.rowMoveShadowMarginLeft || 0) + 'px';\n        dd.clonedSlickRow.style.marginTop = Number(this._options.rowMoveShadowMarginTop || 0) + 'px';\n        dd.clonedSlickRow.style.opacity = `${this._options.rowMoveShadowOpacity || 0.95}`;\n        dd.clonedSlickRow.style.transform = `scale(${this._options.rowMoveShadowScale || 0.75})`;\n        this._canvas.appendChild(dd.clonedSlickRow);\n      }\n    }\n\n    let selectedRows = this._options.singleRowMove ? [cell.row] : this._grid.getSelectedRows();\n    if (selectedRows.length === 0 || !selectedRows.some(selectedRow => selectedRow === cell.row)) {\n      selectedRows = [cell.row];\n      if (!this._options.disableRowSelection) {\n        this._grid.setSelectedRows(selectedRows);\n      }\n    }\n\n    selectedRows.sort((a, b) => a - b);\n\n    const rowHeight = this._grid.getOptions().rowHeight;\n\n    dd.fromGrid = this._grid;\n    dd.toGrid = this._toGrid;\n    dd.selectedRows = selectedRows;\n\n    dd.selectionProxy = document.createElement('div');\n    dd.selectionProxy.className = 'slick-reorder-proxy';\n    dd.selectionProxy.style.display = 'none';\n    dd.selectionProxy.style.position = 'absolute';\n    dd.selectionProxy.style.zIndex = '99999';\n    dd.selectionProxy.style.width = `${this._toCanvas.clientWidth}px`;\n    dd.selectionProxy.style.height = `${rowHeight! * selectedRows.length}px`;\n    this._toCanvas.appendChild(dd.selectionProxy);\n\n    dd.guide = document.createElement('div');\n    dd.guide.className = 'slick-reorder-guide';\n    dd.guide.style.position = 'absolute';\n    dd.guide.style.zIndex = '99999';\n    dd.guide.style.width = `${this._toCanvas.clientWidth}px`;\n    dd.guide.style.top = `-1000px`;\n    this._toCanvas.appendChild(dd.guide);\n\n    dd.insertBefore = -1;\n  }\n\n  protected handleDrag(evt: SlickEventData_, dd: DragRowMove): boolean | void {\n    if (!this._dragging) {\n      return;\n    }\n\n    evt.stopImmediatePropagation();\n    const e = evt.getNativeEvent<MouseEvent | TouchEvent>();\n\n    const targetEvent = (e as TouchEvent).touches?.[0] ?? e;\n    const top = targetEvent.pageY - (Utils.offset(this._toCanvas)?.top ?? 0);\n    dd.selectionProxy.style.top = `${top - 5}px`;\n    dd.selectionProxy.style.display = 'block';\n\n    // if the row move shadow is enabled, we'll also make it follow the mouse cursor\n    if (dd.clonedSlickRow) {\n      dd.clonedSlickRow.style.top = `${top - 6}px`;\n      dd.clonedSlickRow.style.display = 'block';\n    }\n\n    const insertBefore = Math.max(0, Math.min(Math.round(top / this._toGrid.getOptions().rowHeight!), this._toGrid.getDataLength()));\n    if (insertBefore !== dd.insertBefore) {\n      const eventData = {\n        fromGrid: this._grid,\n        toGrid: this._toGrid,\n        rows: dd.selectedRows,\n        insertBefore\n      };\n\n      if (this.onBeforeMoveRows.notify(eventData).getReturnValue() === false) {\n        dd.canMove = false;\n      } else {\n        dd.canMove = true;\n      }\n\n      // if there's a UsabilityOverride defined, we also need to verify that the condition is valid\n      if (this._usabilityOverride && dd.canMove) {\n        const insertBeforeDataContext = this._toGrid.getDataItem(insertBefore);\n        dd.canMove = this.checkUsabilityOverride(insertBefore, insertBeforeDataContext, this._toGrid);\n      }\n\n      // if the new target is possible we'll display the dark blue bar (representin the acceptability) at the target position\n      // else it won't show up (it will be off the screen)\n      if (!dd.canMove) {\n        dd.guide.style.top = '-1000px';\n      } else {\n        dd.guide.style.top = `${insertBefore * (this._toGrid.getOptions().rowHeight || 0)}px`;\n      }\n\n      dd.insertBefore = insertBefore;\n    }\n  }\n\n  protected handleDragEnd(e: SlickEventData_, dd: DragRowMove) {\n    if (!this._dragging) {\n      return;\n    }\n    this._dragging = false;\n    e.stopImmediatePropagation();\n\n    dd.guide?.remove();\n    dd.selectionProxy?.remove();\n    dd.clonedSlickRow?.remove();\n\n    if (dd.canMove) {\n      const eventData = {\n        fromGrid: this._grid,\n        toGrid: this._toGrid,\n        rows: dd.selectedRows,\n        insertBefore: dd.insertBefore\n      };\n      // TODO:  this._grid.remapCellCssClasses ?\n      this.onMoveRows.notify(eventData);\n    }\n  }\n\n  getColumnDefinition(): Column {\n    const columnId = String(this._options?.columnId ?? this._defaults.columnId);\n\n    return {\n      id: columnId,\n      name: '',\n      field: 'move',\n      behavior: 'selectAndMove',\n      excludeFromColumnPicker: true,\n      excludeFromGridMenu: true,\n      excludeFromHeaderMenu: true,\n      selectable: false,\n      resizable: false,\n      width: this._options.width || 40,\n      formatter: this.moveIconFormatter.bind(this)\n    };\n  }\n\n  protected moveIconFormatter(row: number, _cell: number, _val: any, _column: Column, dataContext: any, grid: SlickGrid): FormatterResultWithText | string {\n    if (!this.checkUsabilityOverride(row, dataContext, grid)) {\n      return '';\n    } else {\n      return { addClasses: `cell-reorder dnd ${this._options.cssClass || ''}`.trim(), text: '' };\n    }\n  }\n\n  protected checkUsabilityOverride(row: number, dataContext: any, grid: SlickGrid) {\n    if (typeof this._usabilityOverride === 'function') {\n      return this._usabilityOverride(row, dataContext, grid);\n    }\n    return true;\n  }\n\n  /**\n   * Method that user can pass to override the default behavior or making every row moveable.\n   * In order word, user can choose which rows to be an available as moveable (or not) by providing his own logic show/hide icon and usability.\n   * @param overrideFn: override function callback\n   */\n  usabilityOverride(overrideFn: UsabilityOverrideFn) {\n    this._usabilityOverride = overrideFn;\n  }\n\n  isHandlerColumn(columnIndex: number | string) {\n    return /move|selectAndMove/.test(this._grid.getColumns()[+columnIndex].behavior || '');\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      CrossGridRowMoveManager: SlickCrossGridRowMoveManager\n    }\n  });\n}\n\n", "import type { CancellablePromiseWrapper, Column, CustomDataView, CustomTooltipOption, Formatter, FormatterResultWithHtml, FormatterResultWithText, GridOption } from '../models/index';\nimport { type SlickEventData, SlickEventHandler as SlickEventHandler_, Utils as Utils_ } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * A plugin to add Custom Tooltip when hovering a cell, it subscribes to the cell \"onMouseEnter\" and \"onMouseLeave\" events.\n * The \"customTooltip\" is defined in the Column Definition OR Grid Options (the first found will have priority over the second)\n *\n * USAGE:\n *\n * Add the slick.customTooltip.(js|css) files and register it with the grid.\n *\n * To specify a tooltip when hovering a cell, extend the column definition like so:\n * const customTooltipPlugin = new Slick.Plugins.CustomTooltip(columns, grid options);\n *\n * Available plugin options (same options are available in both column definition and/or grid options)\n *\n * Example 1  - via Column Definition\n *  const columns = [\n *    {\n *      id: \"action\", name: \"Action\", field: \"action\", formatter: fakeButtonFormatter,\n *      customTooltip: {\n *        formatter: tooltipTaskFormatter,\n *        usabilityOverride: (args) => !!(args.dataContext.id % 2) // show it only every second row\n *      }\n *    }\n *  ];\n *\n *  OR Example 2 - via Grid Options (for all columns), NOTE: the column definition tooltip options will win over the options defined in the grid options\n *  const gridOptions = {\n *    enableCellNavigation: true,\n *    customTooltip: {\n *      formatter: tooltipTaskFormatter,\n *      usabilityOverride: (args) => !!(args.dataContext.id % 2) // show it only every second row\n *    },\n *  };\n *\n * Available options that can be defined from either a column definition or in grid options (column definition options as precendence)\n *   asyncParamsPropName:                 defaults to \"__params\", optionally change the property name that will be used to merge the data returned by the async method into the `dataContext` object\n *   asyncProcess:                        Async Post method returning a Promise, it must return an object with 1 or more properties. internally the data that will automatically be merged into the `dataContext` object under the `__params` property so that you can use it in your `asyncPostFormatter` formatter.\n *   asyncPostFormatter:                  Formatter to execute once the async process is completed, to displayed the actual text result (used when dealing with an Async API to get data to display later in the tooltip)\n *   hideArrow:                           defaults to False, should we hide the tooltip pointer arrow?\n *   className:                           defaults to \"slick-custom-tooltip\"\n *   formatter:                           Formatter to execute for displaying the data that will show in the tooltip. NOTE: when using `asyncProcess`, this formatter will be executed first and prior to the actual async process.\n *   headerFormatter:                     Formatter to execute when custom tooltip is over a header column\n *   headerRowFormatter:                  Formatter to execute when custom tooltip is over a heade row column (e.g. filter)\n *   maxHeight:                           optional maximum height number (in pixel) of the tooltip container\n *   maxWidth:                            optional maximum width number (in pixel) of the tooltip container\n *   offsetLeft:                          defaults to 0, optional left offset, it must be a positive/negative number (in pixel) that will be added to the offset position calculation of the tooltip container.\n *   offsetRight:                         defaults to 0, optional right offset, it must be a positive/negative number (in pixel) that will be added to the offset position calculation of the tooltip container.\n *   offsetTopBottom:                     defaults to 4, optional top or bottom offset (depending on which side it shows), it must be a positive/negative number (in pixel) that will be added to the offset position calculation of the tooltip container.\n *   position:                            defaults to \"auto\" (available options: 'auto' | 'top' | 'bottom' | 'left-align' | 'right-align'), allows to align the tooltip to the best logical position in the window, by default it will show on top left but if it calculates that it doesn't have enough space it will use bottom (same goes for each side align)\n *   regularTooltipWhiteSpace:            defaults to `pre-line`, optionally change the style `white-space` when displaying regular text tooltip. NOTE: when using a formatter it will use the `whiteSpace` setting instead\n *   whiteSpace:                          defaults to `normal`, optionally change the style `white-space` when displaying tooltip with formatter (tooltip or regular formatter)\n *   useRegularTooltip:                   defaults to False, when set to True it will try parse through the regular cell formatter and try to find a `title` attribute to show as a regular tooltip (also note: this has precedence over customTooltip formatter defined)\n *   useRegularTooltipFromFormatterOnly:  defaults to False, optionally force to retrieve the `title` from the Formatter result instead of the cell itself.\n *                                            for example, when used in combo with the AutoTooltip plugin we might want to force the tooltip to read the `title` attribute from the formatter result first instead of the cell itself,\n *                                            make the cell as a 2nd read, in other words check the formatter prior to the cell which the AutoTooltip might have filled.\n *   renderRegularTooltipAsHtml:          defaults to false, regular \"title\" tooltip won't be rendered as html unless specified via this flag (also \"\\r\\n\" will be replaced by <br>)\n *   tooltipTextMaxLength:                defaults to 700 (characters), when defined the text will be truncated to the max length characters provided\n *   usabilityOverride:                   callback method that user can override the default behavior of showing the tooltip. If it returns False, then the tooltip won't show\n *\n * @param options {Object} Custom Tooltip Options\n * @class Slick.Plugins.CustomTooltip\n * @constructor\n */\n\ntype CellType = 'slick-cell' | 'slick-header-column' | 'slick-headerrow-column';\n\n/**\n * CustomTooltip plugin to show/hide tooltips when columns are too narrow to fit content.\n * @constructor\n * @param {boolean} [options.className=\"slick-custom-tooltip\"]  - custom tooltip class name\n * @param {boolean} [options.offsetTop=5]                       - tooltip offset from the top\n */\nexport class SlickCustomTooltip {\n  // --\n  // public API\n  pluginName = 'CustomTooltip' as const;\n\n  // --\n  // protected props\n  protected _cancellablePromise?: CancellablePromiseWrapper;\n  protected _cellNodeElm?: HTMLDivElement;\n  protected _dataView?: CustomDataView | null;\n  protected _grid!: SlickGrid;\n  protected _gridOptions!: GridOption;\n  protected _tooltipElm?: HTMLDivElement;\n  protected _options!: CustomTooltipOption;\n  protected _defaults: CustomTooltipOption = {\n    className: 'slick-custom-tooltip',\n    offsetLeft: 0,\n    offsetRight: 0,\n    offsetTopBottom: 4,\n    hideArrow: false,\n    tooltipTextMaxLength: 700,\n    regularTooltipWhiteSpace: 'pre-line',\n    whiteSpace: 'normal',\n  };\n  protected _eventHandler = new SlickEventHandler();\n  protected _cellTooltipOptions!: CustomTooltipOption;\n\n  constructor(protected readonly tooltipOptions: Partial<CustomTooltipOption>) { }\n\n  /**\n   * Initialize plugin.\n   */\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    const _data = grid?.getData() || [];\n    this._dataView = Array.isArray(_data) ? null : _data as CustomDataView;\n    this._gridOptions = (grid.getOptions() || {}) as GridOption;\n    this._options = Utils.extend(true, {}, this._defaults, this._gridOptions.customTooltip, this.tooltipOptions);\n    this._eventHandler\n      .subscribe(grid.onMouseEnter, this.handleOnMouseEnter.bind(this))\n      .subscribe(grid.onHeaderMouseEnter, (e, args) => this.handleOnHeaderMouseEnterByType(e, args, 'slick-header-column'))\n      .subscribe(grid.onHeaderRowMouseEnter, (e, args) => this.handleOnHeaderMouseEnterByType(e, args, 'slick-headerrow-column'))\n      .subscribe(grid.onMouseLeave, () => this.hideTooltip())\n      .subscribe(grid.onHeaderMouseLeave, () => this.hideTooltip())\n      .subscribe(grid.onHeaderRowMouseLeave, () => this.hideTooltip());\n  }\n\n  /**\n   * Destroy plugin.\n   */\n  destroy() {\n    this.hideTooltip();\n    this._eventHandler.unsubscribeAll();\n  }\n\n  /** depending on the selector type, execute the necessary handler code */\n  protected handleOnHeaderMouseEnterByType(e: SlickEventData, args: any, selector: CellType) {\n    // before doing anything, let's remove any previous tooltip before\n    // and cancel any opened Promise/Observable when using async\n    this.hideTooltip();\n\n    const cell = {\n      row: -1, // negative row to avoid pulling any dataContext while rendering\n      cell: this._grid.getColumns().findIndex((col) => args?.column?.id === col.id)\n    };\n    const columnDef = args.column;\n    const item = {};\n    const isHeaderRowType = selector === 'slick-headerrow-column';\n\n    // run the override function (when defined), if the result is false it won't go further\n    args = args || {};\n    args.cell = cell.cell;\n    args.row = cell.row;\n    args.columnDef = columnDef;\n    args.dataContext = item;\n    args.grid = this._grid;\n    args.type = isHeaderRowType ? 'header-row' : 'header';\n\n    this._cellTooltipOptions = Utils.extend(true, {}, this._options, columnDef.customTooltip);\n    if ((columnDef?.disableTooltip) || !this.runOverrideFunctionWhenExists<typeof args>(this._cellTooltipOptions.usabilityOverride, args)) {\n      return;\n    }\n\n    if (columnDef && e.target) {\n      this._cellNodeElm = (e.target as HTMLDivElement).closest(`.${selector}`) as HTMLDivElement;\n      const formatter = isHeaderRowType ? this._cellTooltipOptions.headerRowFormatter : this._cellTooltipOptions.headerFormatter;\n\n      if (this._cellTooltipOptions.useRegularTooltip || !formatter) {\n        const formatterOrText = !isHeaderRowType ? columnDef.name : this._cellTooltipOptions.useRegularTooltip ? null : formatter;\n        this.renderRegularTooltip(formatterOrText, cell, null, columnDef, item);\n      } else if (this._cellNodeElm && typeof formatter === 'function') {\n        this.renderTooltipFormatter(formatter, cell, null, columnDef, item);\n      }\n    }\n  }\n\n  /**\n   * Handle mouse entering grid cell to show tooltip.\n   * @param {jQuery.Event} e - The event\n   */\n  protected handleOnMouseEnter(e: SlickEventData, args: any) {\n    // before doing anything, let's remove any previous tooltip before\n    // and cancel any opened Promise/Observable when using async\n    this.hideTooltip();\n\n    if (this._grid && e) {\n      // get cell only when it's possible (ie, Composite Editor will not be able to get cell and so it will never show any tooltip)\n      const targetClassName = (event?.target as HTMLDivElement)?.closest('.slick-cell')?.className;\n      const cell = (targetClassName && /l\\d+/.exec(targetClassName || '')) ? this._grid.getCellFromEvent(e) : null;\n\n      if (cell) {\n        const item = this._dataView ? this._dataView.getItem(cell.row) : this._grid.getDataItem(cell.row);\n        const columnDef = this._grid.getColumns()[cell.cell];\n        this._cellNodeElm = this._grid.getCellNode(cell.row, cell.cell) as HTMLDivElement;\n        this._cellTooltipOptions = Utils.extend(true, {}, this._options, columnDef.customTooltip);\n\n        if (item && columnDef) {\n          // run the override function (when defined), if the result is false it won't go further\n          args = args || {};\n          args.cell = cell.cell;\n          args.row = cell.row;\n          args.columnDef = columnDef;\n          args.dataContext = item;\n          args.grid = this._grid;\n          args.type = 'cell';\n          if ((columnDef?.disableTooltip) || !this.runOverrideFunctionWhenExists<typeof args>(this._cellTooltipOptions.usabilityOverride, args)) {\n            return;\n          }\n\n          const value = item.hasOwnProperty(columnDef.field) ? item[columnDef.field] : null;\n\n          if (this._cellTooltipOptions.useRegularTooltip || !this._cellTooltipOptions.formatter) {\n            this.renderRegularTooltip(columnDef.formatter, cell, value, columnDef, item);\n          } else {\n            if (typeof this._cellTooltipOptions.formatter === 'function') {\n              this.renderTooltipFormatter(this._cellTooltipOptions.formatter, cell, value, columnDef, item);\n            }\n            if (typeof this._cellTooltipOptions.asyncProcess === 'function') {\n              const asyncProcess = this._cellTooltipOptions.asyncProcess(cell.row, cell.cell, value, columnDef, item, this._grid);\n              if (!this._cellTooltipOptions.asyncPostFormatter) {\n                throw new Error('[SlickGrid] when using \"asyncProcess\", you must also provide an \"asyncPostFormatter\" formatter');\n              }\n\n              if (asyncProcess instanceof Promise) {\n                // create a new cancellable promise which will resolve, unless it's cancelled, with the udpated `dataContext` object that includes the `this._this._params`\n                this._cancellablePromise = this.cancellablePromise(asyncProcess);\n                this._cancellablePromise.promise\n                  .then((asyncResult) => {\n                    this.asyncProcessCallback(asyncResult, cell, value, columnDef, item);\n                  })\n                  .catch(function (error) {\n                    // we will throw back any errors, unless it's a cancelled promise which in that case will be disregarded (thrown by the promise wrapper cancel() call)\n                    if (!(error.isPromiseCancelled)) {\n                      throw error;\n                    }\n                  });\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  protected findFirstElementAttribute(inputElm: Element | null | undefined, attributes: string[]): string | null {\n    if (inputElm) {\n      let outputAttrData: string | null = null;\n      attributes.forEach((attribute) => {\n        const attrData = inputElm.getAttribute(attribute);\n        if (attrData) {\n          outputAttrData = attrData;\n        }\n      });\n      return outputAttrData;\n    }\n    return null;\n  }\n\n  /**\n   * Parse the cell formatter and assume it might be html\n   * then create a temporary html element to easily retrieve the first [title=\"\"] attribute text content\n   * also clear the \"title\" attribute from the grid div text content so that it won't show also as a 2nd browser tooltip\n   */\n  protected renderRegularTooltip(formatterOrText: Formatter | string | undefined, cell: { row: number; cell: number; }, value: any, columnDef: Column, item: any) {\n    const tmpDiv = document.createElement('div');\n    this._grid.applyHtmlCode(tmpDiv, this.parseFormatterAndSanitize(formatterOrText, cell, value, columnDef, item));\n    let tooltipText = columnDef.toolTip || '';\n    let tmpTitleElm;\n\n    if (!tooltipText) {\n      if ((this._cellNodeElm && (this._cellNodeElm.clientWidth < this._cellNodeElm.scrollWidth)) && !this._cellTooltipOptions.useRegularTooltipFromFormatterOnly) {\n        tooltipText = (this._cellNodeElm.textContent || '').trim() || '';\n        if (this._cellTooltipOptions.tooltipTextMaxLength && (tooltipText.length > this._cellTooltipOptions.tooltipTextMaxLength)) {\n          tooltipText = tooltipText.substring(0, this._cellTooltipOptions.tooltipTextMaxLength - 3) + '...';\n        }\n        tmpTitleElm = this._cellNodeElm;\n      } else {\n        if (this._cellTooltipOptions.useRegularTooltipFromFormatterOnly) {\n          tmpTitleElm = tmpDiv.querySelector('[title], [data-slick-tooltip]');\n        } else {\n          tmpTitleElm = this.findFirstElementAttribute(this._cellNodeElm, ['title', 'data-slick-tooltip']) ? this._cellNodeElm : tmpDiv.querySelector('[title], [data-slick-tooltip]');\n          if ((!tmpTitleElm || !this.findFirstElementAttribute(tmpTitleElm, ['title', 'data-slick-tooltip'])) && this._cellNodeElm) {\n            tmpTitleElm = this._cellNodeElm.querySelector('[title], [data-slick-tooltip]');\n          }\n        }\n        if (!tooltipText || (typeof formatterOrText === 'function' && this._cellTooltipOptions.useRegularTooltipFromFormatterOnly)) {\n          tooltipText = this.findFirstElementAttribute(tmpTitleElm, ['title', 'data-slick-tooltip']) || '';\n        }\n      }\n    }\n\n    if (tooltipText !== '') {\n      this.renderTooltipFormatter(formatterOrText, cell, value, columnDef, item, tooltipText);\n    }\n\n    // also clear any \"title\" attribute to avoid showing a 2nd browser tooltip\n    this.swapAndClearTitleAttribute(tmpTitleElm, tooltipText);\n  }\n\n  /**\n * swap and copy the \"title\" attribute into a new custom attribute then clear the \"title\" attribute\n * from the grid div text content so that it won't show also as a 2nd browser tooltip\n */\n  protected swapAndClearTitleAttribute(inputTitleElm?: Element | null, tooltipText?: string) {\n    // the title attribute might be directly on the slick-cell container element (when formatter returns a result object)\n    // OR in a child element (most commonly as a custom formatter)\n    const titleElm = inputTitleElm || (this._cellNodeElm && ((this._cellNodeElm.hasAttribute('title') && this._cellNodeElm.getAttribute('title')) ? this._cellNodeElm : this._cellNodeElm.querySelector('[title]')));\n\n    // flip tooltip text from `title` to `data-slick-tooltip`\n    if (titleElm) {\n      titleElm.setAttribute('data-slick-tooltip', tooltipText || '');\n      if (titleElm.hasAttribute('title')) {\n        titleElm.setAttribute('title', '');\n      }\n    }\n  }\n\n  protected asyncProcessCallback(asyncResult: any, cell: { row: number, cell: number }, value: any, columnDef: Column, dataContext: any) {\n    this.hideTooltip();\n    const itemWithAsyncData = Utils.extend(true, {}, dataContext, { [this._cellTooltipOptions.asyncParamsPropName || '__params']: asyncResult });\n    this.renderTooltipFormatter(this._cellTooltipOptions.asyncPostFormatter, cell, value, columnDef, itemWithAsyncData);\n  }\n\n  protected cancellablePromise<T = any>(inputPromise: Promise<T>): CancellablePromiseWrapper<T> {\n    let hasCancelled = false;\n\n    if (inputPromise instanceof Promise) {\n      return {\n        promise: inputPromise.then(function (result) {\n          if (hasCancelled) {\n            throw { isPromiseCancelled: true };\n          }\n          return result;\n        }),\n        cancel: () => hasCancelled = true\n      };\n    }\n    return inputPromise;\n  }\n\n  protected getHtmlElementOffset(element?: HTMLElement | null) {\n    if (!element) {\n      return undefined;\n    }\n    const rect = element.getBoundingClientRect();\n    let left = 0;\n    let top = 0;\n    let bottom = 0;\n    let right = 0;\n\n    if (rect.top !== undefined && rect.left !== undefined) {\n      top = rect.top + window.pageYOffset;\n      left = rect.left + window.pageXOffset;\n      right = rect.right;\n      bottom = rect.bottom;\n    }\n    return { top, left, bottom, right };\n  }\n\n  /**\n   * hide (remove) tooltip from the DOM,\n   * when using async process, it will also cancel any opened Promise/Observable that might still be opened/pending.\n   */\n  hideTooltip() {\n    this._cancellablePromise?.cancel();\n    const prevTooltip = document.body.querySelector(`.${this._cellTooltipOptions?.className ?? this._defaults.className}.${this._grid.getUID()}`);\n    prevTooltip?.remove();\n  }\n\n  /**\n   * Reposition the Tooltip to be top-left position over the cell.\n   * By default we use an \"auto\" mode which will allow to position the Tooltip to the best logical position in the window, also when we mention position, we are talking about the relative position against the grid cell.\n   * We can assume that in 80% of the time the default position is top-right, the default is \"auto\" but we can also override it and use a specific position.\n   * Most of the time positioning of the tooltip will be to the \"top-right\" of the cell is ok but if our column is completely on the right side then we'll want to change the position to \"left\" align.\n   * Same goes for the top/bottom position, Most of the time positioning the tooltip to the \"top\" but if we are hovering a cell at the top of the grid and there's no room to display it then we might need to reposition to \"bottom\" instead.\n   */\n  protected reposition(cell: { row: number; cell: number; }) {\n    if (this._tooltipElm) {\n      this._cellNodeElm = (this._cellNodeElm || this._grid.getCellNode(cell.row, cell.cell)) as HTMLDivElement;\n      const cellPosition = this.getHtmlElementOffset(this._cellNodeElm);\n      const cellContainerWidth = this._cellNodeElm.offsetWidth;\n      const calculatedTooltipHeight = this._tooltipElm.getBoundingClientRect().height;\n      const calculatedTooltipWidth = this._tooltipElm.getBoundingClientRect().width;\n      const calculatedBodyWidth = document.body.offsetWidth || window.innerWidth;\n\n      // first calculate the default (top/left) position\n      let newPositionTop = (cellPosition?.top || 0) - this._tooltipElm.offsetHeight - (this._cellTooltipOptions.offsetTopBottom ?? 0);\n      let newPositionLeft = (cellPosition?.left || 0) - (this._cellTooltipOptions.offsetRight ?? 0);\n\n      // user could explicitely use a \"left-align\" arrow position, (when user knows his column is completely on the right in the grid)\n      // or when using \"auto\" and we detect not enough available space then we'll position to the \"left\" of the cell\n      const position = this._cellTooltipOptions.position || 'auto';\n      if (position === 'center') {\n        newPositionLeft += (cellContainerWidth / 2) - (calculatedTooltipWidth / 2) + (this._cellTooltipOptions.offsetRight || 0);\n        this._tooltipElm.classList.remove('arrow-left-align');\n        this._tooltipElm.classList.remove('arrow-right-align');\n        this._tooltipElm.classList.add('arrow-center-align');\n\n      } else if (position === 'right-align' || ((position === 'auto' || position !== 'left-align') && (newPositionLeft + calculatedTooltipWidth) > calculatedBodyWidth)) {\n        newPositionLeft -= (calculatedTooltipWidth - cellContainerWidth - (this._cellTooltipOptions.offsetLeft || 0));\n        this._tooltipElm.classList.remove('arrow-center-align');\n        this._tooltipElm.classList.remove('arrow-left-align');\n        this._tooltipElm.classList.add('arrow-right-align');\n      } else {\n        this._tooltipElm.classList.remove('arrow-center-align');\n        this._tooltipElm.classList.remove('arrow-right-align');\n        this._tooltipElm.classList.add('arrow-left-align');\n      }\n\n      // do the same calculation/reposition with top/bottom (default is top of the cell or in other word starting from the cell going down)\n      if (position === 'bottom' || (position === 'auto' && calculatedTooltipHeight > Utils.calculateAvailableSpace(this._cellNodeElm).top)) {\n        newPositionTop = (cellPosition?.top || 0) + (this._gridOptions.rowHeight || 0) + (this._cellTooltipOptions.offsetTopBottom || 0);\n        this._tooltipElm.classList.remove('arrow-down');\n        this._tooltipElm.classList.add('arrow-up');\n      } else {\n        this._tooltipElm.classList.add('arrow-down');\n        this._tooltipElm.classList.remove('arrow-up');\n      }\n\n      // reposition the tooltip over the cell (90% of the time this will end up using a position on the \"right\" of the cell)\n      this._tooltipElm.style.top = newPositionTop + 'px';\n      this._tooltipElm.style.left = newPositionLeft + 'px';\n    }\n  }\n\n  /**\n   * Parse the Custom Formatter (when provided) or return directly the text when it is already a string.\n   * We will also sanitize the text in both cases before returning it so that it can be used safely.\n   */\n  protected parseFormatterAndSanitize(formatterOrText: Formatter | string | undefined, cell: { row: number; cell: number; }, value: any, columnDef: Column, item: unknown): string | HTMLElement {\n    if (typeof formatterOrText === 'function') {\n      const tooltipResult = formatterOrText(cell.row, cell.cell, value, columnDef, item, this._grid);\n      const formatterText = (Object.prototype.toString.call(tooltipResult) !== '[object Object]' ? tooltipResult : (tooltipResult as FormatterResultWithHtml).html || (tooltipResult as FormatterResultWithText).text);\n      if (formatterText instanceof HTMLElement) {\n        return formatterText;\n      }\n      return this._grid.sanitizeHtmlString(formatterText as string);\n    } else if (typeof formatterOrText === 'string') {\n      return this._grid.sanitizeHtmlString(formatterOrText);\n    }\n    return '';\n  }\n\n\n  protected renderTooltipFormatter(formatter: Formatter | string | undefined, cell: { row: number; cell: number; }, value: any, columnDef: Column, item: unknown, tooltipText?: string, inputTitleElm?: Element | null) {\n    // create the tooltip DOM element with the text returned by the Formatter\n    this._tooltipElm = document.createElement('div');\n    this._tooltipElm.className = (this._cellTooltipOptions.className || this._defaults.className) as string;\n    this._tooltipElm.classList.add(this._grid.getUID());\n    this._tooltipElm.classList.add('l' + cell.cell);\n    this._tooltipElm.classList.add('r' + cell.cell);\n    let outputText = tooltipText || this.parseFormatterAndSanitize(formatter, cell, value, columnDef, item) || '';\n    if (outputText instanceof HTMLElement) {\n      const content = outputText.textContent || '';\n      if (this._cellTooltipOptions.tooltipTextMaxLength && content.length > this._cellTooltipOptions.tooltipTextMaxLength) {\n        outputText.textContent = content.substring(0, this._cellTooltipOptions.tooltipTextMaxLength - 3) + '...';\n      }\n    } else {\n      outputText = (this._cellTooltipOptions.tooltipTextMaxLength && outputText.length > this._cellTooltipOptions.tooltipTextMaxLength) ? outputText.substring(0, this._cellTooltipOptions.tooltipTextMaxLength - 3) + '...' : outputText;\n    }\n\n    let finalOutputText = '';\n    if (!tooltipText || (this._cellTooltipOptions?.renderRegularTooltipAsHtml)) {\n      if (outputText instanceof HTMLElement) {\n        this._grid.applyHtmlCode(this._tooltipElm, outputText);\n        finalOutputText = this._grid.sanitizeHtmlString(outputText.textContent || '');\n      } else {\n        finalOutputText = this._grid.sanitizeHtmlString(outputText);\n        this._tooltipElm.innerHTML = finalOutputText;\n      }\n      this._tooltipElm.style.whiteSpace = this._cellTooltipOptions?.whiteSpace ?? this._defaults.whiteSpace as string;\n    } else {\n      finalOutputText = (outputText instanceof HTMLElement ? outputText.textContent : outputText) || '';\n      this._tooltipElm.textContent = finalOutputText;\n      this._tooltipElm.style.whiteSpace = this._cellTooltipOptions?.regularTooltipWhiteSpace ?? this._defaults.regularTooltipWhiteSpace as string; // use `pre` so that sequences of white space are collapsed. Lines are broken at newline characters\n    }\n\n    // optional max height/width of the tooltip container\n    if (this._cellTooltipOptions.maxHeight) {\n      this._tooltipElm.style.maxHeight = this._cellTooltipOptions.maxHeight + 'px';\n    }\n    if (this._cellTooltipOptions.maxWidth) {\n      this._tooltipElm.style.maxWidth = this._cellTooltipOptions.maxWidth + 'px';\n    }\n\n    // when do have text to show, then append the new tooltip to the html body & reposition the tooltip\n    if (finalOutputText) {\n      document.body.appendChild(this._tooltipElm);\n\n      // reposition the tooltip on top of the cell that triggered the mouse over event\n      this.reposition(cell);\n\n      // user could optionally hide the tooltip arrow (we can simply update the CSS variables, that's the only way we have to update CSS pseudo)\n      if (!this._cellTooltipOptions.hideArrow) {\n        this._tooltipElm.classList.add('tooltip-arrow');\n      }\n\n      // also clear any \"title\" attribute to avoid showing a 2nd browser tooltip\n      this.swapAndClearTitleAttribute(inputTitleElm, (outputText instanceof HTMLElement ? outputText.textContent : outputText) || '');\n    }\n  }\n\n  /**\n   * Method that user can pass to override the default behavior.\n   * In order word, user can choose or an item is (usable/visible/enable) by providing his own logic.\n   * @param overrideFn: override function callback\n   * @param args: multiple arguments provided to the override (cell, row, columnDef, dataContext, grid)\n   */\n  protected runOverrideFunctionWhenExists<T = any>(overrideFn: ((args: any) => boolean) | undefined, args: T): boolean {\n    if (typeof overrideFn === 'function') {\n      return overrideFn.call(this, args);\n    }\n    return true;\n  }\n\n  setOptions(newOptions: Partial<CustomTooltipOption>) {\n    this._options = Utils.extend({}, this._options, newOptions);\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      Plugins: {\n        CustomTooltip: SlickCustomTooltip\n      }\n    }\n  });\n}\n", "// @ts-ignore\nimport type SortableInstance from 'sortablejs';\n\nimport type { Column, DOMMouseOrTouchEvent, DraggableGroupingOption, Grouping, GroupingGetterFunction } from '../models/index';\nimport { BindingEventService as BindingEventService_, SlickEvent as SlickEvent_, SlickEventHandler as SlickEventHandler_, Utils as Utils_ } from '../slick.core';\nimport type { SlickDataView } from '../slick.dataview';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n *\n * Draggable Grouping contributed by:  Muthukumar Selvarasu\n *  muthukumar{dot}se{at}gmail{dot}com\n *  github.com/muthukumarse/Slickgrid\n *\n * NOTES:\n *     This plugin provides the Draggable Grouping feature\n * A plugin to add Draggable Grouping feature.\n *\n * USAGE:\n *\n * Add the plugin .js & .css files and register it with the grid.\n *\n *\n * The plugin expose the following methods:\n *    destroy: used to destroy the plugin\n *    setDroppedGroups: provide option to set default grouping on loading\n *    clearDroppedGroups: provide option to clear grouping\n *    getSetupColumnReorder: its function to setup draggable feature agains Header Column, should be passed on grid option. Also possible to pass custom function\n *\n *\n * The plugin expose the following event(s):\n *    onGroupChanged: pass the grouped columns to who subscribed.\n *\n */\nexport class SlickDraggableGrouping {\n  // --\n  // public API\n  pluginName = 'DraggableGrouping' as const;\n  onGroupChanged = new SlickEvent<{ caller?: string; groupColumns: Grouping[]; }>('onGroupChanged');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _gridUid = '';\n  protected _gridColumns: Column[] = [];\n  protected _dataView!: SlickDataView;\n  protected _dropzoneElm!: HTMLDivElement;\n  protected _droppableInstance?: SortableInstance;\n  protected _dropzonePlaceholder!: HTMLDivElement;\n  protected _groupToggler?: HTMLDivElement;\n  protected _options: DraggableGroupingOption;\n  protected _defaults: DraggableGroupingOption = {\n    dropPlaceHolderText: 'Drop a column header here to group by the column',\n    hideGroupSortIcons: false,\n    hideToggleAllButton: false,\n    toggleAllButtonText: '',\n    toggleAllPlaceholderText: 'Toggle all Groups',\n  };\n  protected _bindingEventService = new BindingEventService();\n  protected _handler = new SlickEventHandler();\n  protected _sortableLeftInstance?: SortableInstance;\n  protected _sortableRightInstance?: SortableInstance;\n  protected _columnsGroupBy: Column[] = [];\n\n  /**\n   * @param options {Object} Options:\n   *    deleteIconCssClass:  an extra CSS class to add to the delete button (default undefined), if deleteIconCssClass && deleteIconImage undefined then slick-groupby-remove-image class will be added\n   *    deleteIconImage:     a url to the delete button image (default undefined)\n   *    groupIconCssClass:   an extra CSS class to add to the grouping field hint  (default undefined)\n   *    groupIconImage:      a url to the grouping field hint image (default undefined)\n   *    dropPlaceHolderText:      option to specify set own placeholder note text\n   */\n  constructor(options: Partial<DraggableGroupingOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  /**\n   * Initialize plugin.\n   */\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    this._gridUid = this._grid.getUID();\n    this._gridColumns = this._grid.getColumns();\n    this._dataView = this._grid.getData();\n    this._dropzoneElm = this._grid.getPreHeaderPanel();\n    this._dropzoneElm.classList.add('slick-dropzone');\n\n    const dropPlaceHolderText = this._options.dropPlaceHolderText || 'Drop a column header here to group by the column';\n\n    this._dropzonePlaceholder = document.createElement('div');\n    this._dropzonePlaceholder.className = 'slick-placeholder';\n    this._dropzonePlaceholder.textContent = dropPlaceHolderText;\n\n    this._groupToggler = document.createElement('div');\n    this._groupToggler.className = 'slick-group-toggle-all expanded';\n    this._groupToggler.style.display = 'none';\n\n    this._dropzoneElm.appendChild(this._dropzonePlaceholder);\n    this._dropzoneElm.appendChild(this._groupToggler);\n\n    this.setupColumnDropbox();\n\n\n    this._handler.subscribe(this._grid.onHeaderCellRendered, (_e, args) => {\n      const column = args.column;\n      const node = args.node;\n      if (!Utils.isEmptyObject(column.grouping) && node) {\n        node.style.cursor = 'pointer'; // add the pointer cursor on each column title\n\n        // also optionally add an icon beside each column title that can be dragged\n        if (this._options.groupIconCssClass || this._options.groupIconImage) {\n          const groupableIconElm = document.createElement('span');\n          groupableIconElm.className = 'slick-column-groupable';\n          if (this._options.groupIconCssClass) {\n            groupableIconElm.classList.add(...Utils.classNameToList(this._options.groupIconCssClass));\n          }\n          if (this._options.groupIconImage) {\n            groupableIconElm.style.background = `url(${this._options.groupIconImage}) no-repeat center center`;\n          }\n          node.appendChild(groupableIconElm);\n        }\n      }\n    });\n\n    for (let i = 0; i < this._gridColumns.length; i++) {\n      const columnId = this._gridColumns[i].field;\n      this._grid.updateColumnHeader(columnId);\n    }\n  }\n\n  /**\n   * Setup the column reordering\n   * NOTE: this function is a standalone function and is called externally and does not have access to `this` instance\n   * @param grid - slick grid object\n   * @param headers - slick grid column header elements\n   * @param _headerColumnWidthDiff - header column width difference\n   * @param setColumns - callback to reassign columns\n   * @param setupColumnResize - callback to setup the column resize\n   * @param columns - columns array\n   * @param getColumnIndex - callback to find index of a column\n   * @param uid - grid UID\n   * @param trigger - callback to execute when triggering a column grouping\n   */\n  getSetupColumnReorder(grid: SlickGrid, headers: any, _headerColumnWidthDiff: any, setColumns: (columns: Column[]) => void, setupColumnResize: () => void, _columns: Column[], getColumnIndex: (columnId: string) => number, _uid: string, trigger: (slickEvent: SlickEvent_, data?: any) => void) {\n    this.destroySortableInstances();\n    const dropzoneElm = grid.getPreHeaderPanel();\n    const groupTogglerElm = dropzoneElm.querySelector<HTMLDivElement>('.slick-group-toggle-all');\n\n    const sortableOptions = {\n      animation: 50,\n      // chosenClass: 'slick-header-column-active',\n      ghostClass: 'slick-sortable-placeholder',\n      draggable: '.slick-header-column',\n      dataIdAttr: 'data-id',\n      group: {\n        name: 'shared',\n        pull: 'clone',\n        put: false,\n      },\n      revertClone: true,\n      // filter: function (_e, target) {\n      //   // block column from being able to be dragged if it's already a grouped column\n      //   // NOTE: need to disable for now since it also blocks the column reordering\n      //   return this.columnsGroupBy.some(c => c.id === target.getAttribute('data-id'));\n      // },\n      onStart: () => {\n        dropzoneElm.classList.add('slick-dropzone-hover');\n        dropzoneElm.classList.add('slick-dropzone-placeholder-hover');\n        const draggablePlaceholderElm = dropzoneElm.querySelector<HTMLDivElement>('.slick-placeholder');\n        if (draggablePlaceholderElm) {\n          draggablePlaceholderElm.style.display = 'inline-block';\n        }\n\n        const droppedGroupingElms = dropzoneElm.querySelectorAll<HTMLDivElement>('.slick-dropped-grouping');\n        droppedGroupingElms.forEach(droppedGroupingElm => droppedGroupingElm.style.display = 'none');\n        if (groupTogglerElm) {\n          groupTogglerElm.style.display = 'none';\n        }\n      },\n      onEnd: (e: Event & { item: any; clone: HTMLElement; }) => {\n        const draggablePlaceholderElm = dropzoneElm.querySelector<HTMLDivElement>('.slick-placeholder');\n        dropzoneElm.classList.remove('slick-dropzone-hover');\n        draggablePlaceholderElm?.classList.remove('slick-dropzone-placeholder-hover');\n\n\n        if (this._dropzonePlaceholder) {\n          this._dropzonePlaceholder.style.display = 'none';\n        }\n        if (draggablePlaceholderElm) {\n          draggablePlaceholderElm.parentElement?.classList.remove('slick-dropzone-placeholder-hover');\n        }\n\n        const droppedGroupingElms = dropzoneElm.querySelectorAll<HTMLDivElement>('.slick-dropped-grouping');\n        if (droppedGroupingElms.length) {\n          droppedGroupingElms.forEach(droppedGroupingElm => droppedGroupingElm.style.display = 'inline-flex');\n          if (draggablePlaceholderElm) {\n            draggablePlaceholderElm.style.display = 'none';\n          }\n          if (groupTogglerElm) {\n            groupTogglerElm.style.display = 'inline-block';\n          }\n        }\n\n        if (!grid.getEditorLock().commitCurrentEdit()) {\n          return;\n        }\n\n        const reorderedIds = this._sortableLeftInstance?.toArray() ?? [];\n\n        // when frozen columns are used, headers has more than one entry and we need the ids from all of them.\n        // though there is only really a left and right header, this will work even if that should change.\n        if (headers.length > 1) {\n          const ids = this._sortableRightInstance?.toArray() ?? [];\n\n          // Note: the loop below could be simplified with:\n          // reorderedIds.push.apply(reorderedIds,ids);\n          // However, the loop is more in keeping with way-backward compatibility\n          for (const id of ids) {\n            reorderedIds.push(id);\n          }\n        }\n\n        const finalReorderedColumns: Column[] = [];\n        const reorderedColumns = grid.getColumns();\n        for (const reorderedId of reorderedIds) {\n          finalReorderedColumns.push(reorderedColumns[getColumnIndex.call(grid, reorderedId)]);\n        }\n        setColumns.call(grid, finalReorderedColumns);\n        trigger.call(grid, grid.onColumnsReordered, { grid });\n        e.stopPropagation();\n        setupColumnResize.call(grid);\n      }\n    };\n\n    this._sortableLeftInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-left`) as HTMLDivElement, sortableOptions);\n    this._sortableRightInstance = Sortable.create(document.querySelector(`.${grid.getUID()} .slick-header-columns.slick-header-columns-right`) as HTMLDivElement, sortableOptions);\n\n    return {\n      sortableLeftInstance: this._sortableLeftInstance,\n      sortableRightInstance: this._sortableRightInstance\n    };\n  }\n\n  /**\n   * Destroy plugin.\n   */\n  destroy() {\n    this.destroySortableInstances();\n    if (this._droppableInstance?.el) {\n      this._droppableInstance?.destroy();\n    }\n    this.onGroupChanged.unsubscribe();\n    this._handler.unsubscribeAll();\n    this._bindingEventService.unbindAll();\n    Utils.emptyElement(document.querySelector(`.${this._gridUid} .slick-preheader-panel`));\n  }\n\n  protected destroySortableInstances() {\n    if (this._sortableLeftInstance?.el) {\n      this._sortableLeftInstance?.destroy();\n    }\n    if (this._sortableRightInstance?.el) {\n      this._sortableRightInstance?.destroy();\n    }\n  }\n\n  protected addDragOverDropzoneListeners() {\n    const draggablePlaceholderElm = this._dropzoneElm.querySelector('.slick-placeholder');\n\n    if (draggablePlaceholderElm && this._dropzoneElm) {\n      this._bindingEventService.bind(draggablePlaceholderElm, 'dragover', (e) => e.preventDefault());\n      this._bindingEventService.bind(draggablePlaceholderElm, 'dragenter', () => this._dropzoneElm.classList.add('slick-dropzone-hover'));\n      this._bindingEventService.bind(draggablePlaceholderElm, 'dragleave', () => this._dropzoneElm.classList.remove('slick-dropzone-hover'));\n    }\n  }\n\n  protected setupColumnDropbox() {\n    const dropzoneElm = this._dropzoneElm;\n\n    this._droppableInstance = Sortable.create(dropzoneElm, {\n      group: 'shared',\n      // chosenClass: 'slick-header-column-active',\n      ghostClass: 'slick-droppable-sortitem-hover',\n      draggable: '.slick-dropped-grouping',\n      dragoverBubble: true,\n      onAdd: (evt: MouseEvent & { item: any; clone: HTMLElement; originalEvent: MouseEvent; }) => {\n        const el = evt.item;\n        const elId = el.getAttribute('id');\n        if (elId?.replace(this._gridUid, '')) {\n          this.handleGroupByDrop(dropzoneElm, (Sortable.utils).clone(evt.item));\n        }\n        evt.clone.style.opacity = '.5';\n        el.parentNode?.removeChild(el);\n      },\n      onUpdate: () => {\n        const sortArray = this._droppableInstance?.toArray() ?? [];\n        const newGroupingOrder: Column[] = [];\n        for (let i = 0, l = sortArray.length; i < l; i++) {\n          for (let a = 0, b = this._columnsGroupBy.length; a < b; a++) {\n            if (this._columnsGroupBy[a].id === sortArray[i]) {\n              newGroupingOrder.push(this._columnsGroupBy[a]);\n              break;\n            }\n          }\n        }\n        this._columnsGroupBy = newGroupingOrder;\n        this.updateGroupBy('sort-group');\n      },\n    });\n\n    // Sortable doesn't have onOver, we need to implement it ourselves\n    this.addDragOverDropzoneListeners();\n\n    if (this._groupToggler) {\n      this._bindingEventService.bind(this._groupToggler, 'click', ((event: DOMMouseOrTouchEvent<HTMLDivElement>) => {\n        const target = event.target;\n        this.toggleGroupToggler(target, target?.classList.contains('expanded'));\n      }) as EventListener);\n    }\n  }\n\n  protected handleGroupByDrop(containerElm: HTMLDivElement, headerColumnElm: HTMLDivElement) {\n    const headerColDataId = headerColumnElm.getAttribute('data-id');\n    const columnId = headerColDataId?.replace(this._gridUid, '');\n    let columnAllowed = true;\n    for (const colGroupBy of this._columnsGroupBy) {\n      if (colGroupBy.id === columnId) {\n        columnAllowed = false;\n      }\n    }\n\n    if (columnAllowed) {\n      for (const col of this._gridColumns) {\n        if (col.id === columnId && col.grouping && !Utils.isEmptyObject(col.grouping)) {\n          const columnNameElm = headerColumnElm.querySelector('.slick-column-name');\n          const entryElm = document.createElement('div');\n          entryElm.id = `${this._gridUid}_${col.id}_entry`;\n          entryElm.className = 'slick-dropped-grouping';\n          entryElm.dataset.id = `${col.id}`;\n\n          const groupTextElm = document.createElement('div');\n          groupTextElm.className = 'slick-dropped-grouping-title';\n          groupTextElm.style.display = 'inline-flex';\n          groupTextElm.textContent = columnNameElm ? columnNameElm.textContent : headerColumnElm.textContent;\n          entryElm.appendChild(groupTextElm);\n\n          // delete icon\n          const groupRemoveIconElm = document.createElement('div');\n          groupRemoveIconElm.className = 'slick-groupby-remove';\n          if (this._options.deleteIconCssClass) {\n            groupRemoveIconElm.classList.add(...Utils.classNameToList(this._options.deleteIconCssClass));\n          }\n          if (this._options.deleteIconImage) {\n            groupRemoveIconElm.classList.add(...Utils.classNameToList(this._options.deleteIconImage));\n          }\n          if (!this._options.deleteIconCssClass) {\n            groupRemoveIconElm.classList.add('slick-groupby-remove-icon');\n          }\n          if (!this._options.deleteIconCssClass && !this._options.deleteIconImage) {\n            groupRemoveIconElm.classList.add('slick-groupby-remove-image');\n          }\n\n          // sorting icons when enabled\n          if (this._options?.hideGroupSortIcons !== true && col.sortable) {\n            if (col.grouping?.sortAsc === undefined) {\n              col.grouping.sortAsc = true;\n            }\n          }\n\n          entryElm.appendChild(groupRemoveIconElm);\n          entryElm.appendChild(document.createElement('div'));\n          containerElm.appendChild(entryElm);\n\n          this.addColumnGroupBy(col);\n          this.addGroupByRemoveClickHandler(col.id, groupRemoveIconElm, headerColumnElm, entryElm);\n        }\n      }\n\n      // show the \"Toggle All\" when feature is enabled\n      if (this._groupToggler && this._columnsGroupBy.length > 0) {\n        this._groupToggler.style.display = 'inline-block';\n      }\n    }\n  }\n\n  protected addColumnGroupBy(column: Column) {\n    this._columnsGroupBy.push(column);\n    this.updateGroupBy('add-group');\n  }\n\n  protected addGroupByRemoveClickHandler(id: string | number, groupRemoveIconElm: HTMLDivElement, headerColumnElm: HTMLDivElement, entry: any) {\n    this._bindingEventService.bind(groupRemoveIconElm, 'click', () => {\n      const boundedElms = this._bindingEventService.getBoundedEvents().filter(boundedEvent => boundedEvent.element === groupRemoveIconElm);\n      for (const boundedEvent of boundedElms) {\n        this._bindingEventService.unbind(boundedEvent.element, 'click', boundedEvent.listener);\n      }\n      this.removeGroupBy(id, headerColumnElm, entry);\n    });\n  }\n\n  setDroppedGroups(groupingInfo: Array<string | GroupingGetterFunction> | string) {\n    const groupingInfos = Array.isArray(groupingInfo) ? groupingInfo : [groupingInfo];\n    this._dropzonePlaceholder.style.display = 'none';\n    for (const groupInfo of groupingInfos) {\n      const columnElm = this._grid.getHeaderColumn(groupInfo as string);\n      this.handleGroupByDrop(this._dropzoneElm, columnElm);\n    }\n  }\n\n  clearDroppedGroups() {\n    this._columnsGroupBy = [];\n    this.updateGroupBy('clear-all');\n    const allDroppedGroupingElms = this._dropzoneElm.querySelectorAll('.slick-dropped-grouping');\n\n    for (const groupElm of Array.from(allDroppedGroupingElms)) {\n      const groupRemoveBtnElm = this._dropzoneElm.querySelector('.slick-groupby-remove');\n      groupRemoveBtnElm?.remove();\n      groupElm?.remove();\n    }\n\n    // show placeholder text & hide the \"Toggle All\" when that later feature is enabled\n    this._dropzonePlaceholder.style.display = 'inline-block';\n    if (this._groupToggler) {\n      this._groupToggler.style.display = 'none';\n    }\n  }\n\n  protected removeFromArray(arrayToModify: any[], itemToRemove: any) {\n    if (Array.isArray(arrayToModify)) {\n      const itemIdx = arrayToModify.findIndex(a => a.id === itemToRemove.id);\n      if (itemIdx >= 0) {\n        arrayToModify.splice(itemIdx, 1);\n      }\n    }\n    return arrayToModify;\n  }\n\n  protected removeGroupBy(id: string | number, _hdrColumnElm: HTMLDivElement, entry: any) {\n    entry.remove();\n    const groupby: Column[] = [];\n    this._gridColumns.forEach((col) => groupby[col.id as any] = col);\n    this.removeFromArray(this._columnsGroupBy, groupby[id as any]);\n    if (this._columnsGroupBy.length === 0) {\n      this._dropzonePlaceholder.style.display = 'block';\n      if (this._groupToggler) {\n        this._groupToggler.style.display = 'none';\n      }\n    }\n    this.updateGroupBy('remove-group');\n  }\n\n  protected toggleGroupToggler(targetElm: Element | null, collapsing = true, shouldExecuteDataViewCommand = true) {\n    if (targetElm) {\n      if (collapsing === true) {\n        targetElm.classList.add('collapsed');\n        targetElm.classList.remove('expanded');\n        if (shouldExecuteDataViewCommand) {\n          this._dataView.collapseAllGroups();\n        }\n      } else {\n        targetElm.classList.remove('collapsed');\n        targetElm.classList.add('expanded');\n        if (shouldExecuteDataViewCommand) {\n          this._dataView.expandAllGroups();\n        }\n      }\n    }\n  }\n\n  protected updateGroupBy(originator: string) {\n    if (this._columnsGroupBy.length === 0) {\n      this._dataView.setGrouping([]);\n      this.onGroupChanged.notify({ caller: originator, groupColumns: [] });\n      return;\n    }\n    const groupingArray: Grouping<any>[] = [];\n    this._columnsGroupBy.forEach((element) => groupingArray.push(element.grouping!));\n    this._dataView.setGrouping(groupingArray);\n    this.onGroupChanged.notify({ caller: originator, groupColumns: groupingArray });\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      DraggableGrouping: SlickDraggableGrouping\n    }\n  });\n}\n", "import type {\n  Column,\n  DOMEvent,\n  HeaderButtonItem,\n  HeaderButtonOnCommandArgs,\n  HeaderButtonOption,\n  OnHeaderCellRenderedEventArgs,\n  SlickPlugin\n} from '../models/index';\nimport { BindingEventService as BindingEventService_,  EventHandler as EventHandler_, SlickEvent as SlickEvent_, type SlickEventData, Utils as Utils_ } from '../slick.core';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst EventHandler = IIFE_ONLY ? Slick.EventHandler : EventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n   * A plugin to add custom buttons to column headers.\n   *\n   * USAGE:\n   *\n   * Add the plugin .js & .css files and register it with the grid.\n   *\n   * To specify a custom button in a column header, extend the column definition like so:\n   *\n   *   let columns = [\n   *     {\n   *       id: 'myColumn',\n   *       name: 'My column',\n   *\n   *       // This is the relevant part\n   *       header: {\n   *          buttons: [\n   *              {\n   *                // button options\n   *              },\n   *              {\n   *                // button options\n   *              }\n   *          ]\n   *       }\n   *     }\n   *   ];\n   *\n   * Available button options:\n   *    cssClass:     CSS class to add to the button.\n   *    image:        Relative button image path.\n   *    disabled:     Whether the item is disabled.\n   *    tooltip:      Button tooltip.\n   *    showOnHover:  Only show the button on hover.\n   *    handler:      Button click handler.\n   *    command:      A command identifier to be passed to the onCommand event handlers.\n   *\n   * Available menu item options:\n   *    action:                   Optionally define a callback function that gets executed when item is chosen (and/or use the onCommand event)\n   *    command:                  A command identifier to be passed to the onCommand event handlers.\n   *    cssClass:                 CSS class to add to the button.\n   *    handler:                  Button click handler.\n   *    image:                    Relative button image path.\n   *    showOnHover:              Only show the button on hover.\n   *    tooltip:                  Button tooltip.\n   *    itemVisibilityOverride:   Callback method that user can override the default behavior of showing/hiding an item from the list\n   *    itemUsabilityOverride:    Callback method that user can override the default behavior of enabling/disabling an item from the list\n   *\n   * The plugin exposes the following events:\n   *    onCommand:    Fired on button click for buttons with 'command' specified.\n   *        Event args:\n   *            grid:     Reference to the grid.\n   *            column:   Column definition.\n   *            command:  Button command identified.\n   *            button:   Button options.  Note that you can change the button options in your\n   *                      event handler, and the column header will be automatically updated to\n   *                      reflect them.  This is useful if you want to implement something like a\n   *                      toggle button.\n   *\n   *\n   * @param options {Object} Options:\n   *    buttonCssClass:   a CSS class to use for buttons (default 'slick-header-button')\n   * @class Slick.Plugins.HeaderButtons\n   * @constructor\n   */\nexport class SlickHeaderButtons implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'HeaderButtons' as const;\n  onCommand = new SlickEvent<HeaderButtonOnCommandArgs>('onCommand');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _handler = new EventHandler();\n  protected _bindingEventService = new BindingEventService();\n  protected _defaults: HeaderButtonOption = {\n    buttonCssClass: 'slick-header-button'\n  };\n  protected _options: HeaderButtonOption;\n\n  constructor(options: Partial<HeaderButtonOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._handler\n      .subscribe(this._grid.onHeaderCellRendered, this.handleHeaderCellRendered.bind(this))\n      .subscribe(this._grid.onBeforeHeaderCellDestroy, this.handleBeforeHeaderCellDestroy.bind(this));\n\n    // Force the grid to re-render the header now that the events are hooked up.\n    this._grid.setColumns(this._grid.getColumns());\n  }\n\n  destroy() {\n    this._handler.unsubscribeAll();\n    this._bindingEventService.unbindAll();\n  }\n\n  protected handleHeaderCellRendered(_e: SlickEventData, args: OnHeaderCellRenderedEventArgs) {\n    const column = args.column;\n\n    if (column.header?.buttons) {\n      // Append buttons in reverse order since they are floated to the right.\n      let i = column.header.buttons.length;\n      while (i--) {\n        const button = column.header.buttons[i];\n\n        // run each override functions to know if the item is visible and usable\n        const isItemVisible = this.runOverrideFunctionWhenExists<typeof args>(button.itemVisibilityOverride, args);\n        const isItemUsable = this.runOverrideFunctionWhenExists<typeof args>(button.itemUsabilityOverride, args);\n\n        // if the result is not visible then there's no need to go further\n        if (!isItemVisible) {\n          continue;\n        }\n\n        // when the override is defined, we need to use its result to update the disabled property\n        // so that \"handleMenuItemCommandClick\" has the correct flag and won't trigger a command clicked event\n        if (Object.prototype.hasOwnProperty.call(button, 'itemUsabilityOverride')) {\n          button.disabled = isItemUsable ? false : true;\n        }\n\n        const btn = document.createElement('div');\n        btn.className = this._options.buttonCssClass || '';\n        btn.ariaLabel = 'Header Button';\n        btn.role = 'button';\n\n        if (button.disabled) {\n          btn.classList.add('slick-header-button-disabled');\n        }\n\n        if (button.showOnHover) {\n          btn.classList.add('slick-header-button-hidden');\n        }\n\n        if (button.image) {\n          btn.style.backgroundImage = `url(${button.image})`;\n        }\n\n        if (button.cssClass) {\n          btn.classList.add(...Utils.classNameToList(button.cssClass));\n        }\n\n        if (button.tooltip) {\n          btn.title = button.tooltip;\n        }\n\n        if (button.handler && !button.disabled) {\n          this._bindingEventService.bind(btn, 'click', button.handler);\n        }\n\n        this._bindingEventService.bind(btn, 'click', this.handleButtonClick.bind(this, button, args.column) as EventListener);\n        args.node.appendChild(btn);\n      }\n    }\n  }\n\n\n  protected handleBeforeHeaderCellDestroy(_e: SlickEventData, args: { column: Column; node: HTMLElement; }) {\n    const column = args.column;\n\n    if (column.header?.buttons) {\n      // Removing buttons via jQuery will also clean up any event handlers and data.\n      // NOTE: If you attach event handlers directly or using a different framework,\n      //       you must also clean them up here to avoid memory leaks.\n      const buttonCssClass = (this._options.buttonCssClass || '').replace(/(\\s+)/g, '.');\n      if (buttonCssClass) {\n        args.node.querySelectorAll(`.${buttonCssClass}`).forEach(elm => elm.remove());\n      }\n    }\n  }\n\n  protected handleButtonClick(button: HeaderButtonItem, columnDef: Column, e: DOMEvent<HTMLDivElement>) {\n    const command = button.command || '';\n    const callbackArgs = {\n      grid: this._grid,\n      column: columnDef,\n      button\n    } as HeaderButtonOnCommandArgs;\n\n    if (command) {\n      callbackArgs.command = command;\n    }\n\n    // execute action callback when defined\n    if (typeof button.action === 'function') {\n      button.action.call(this, e, callbackArgs);\n    }\n\n    if (command && !button.disabled) {\n      this.onCommand.notify(callbackArgs, e, this);\n\n      // Update the header in case the user updated the button definition in the handler.\n      this._grid.updateColumnHeader(columnDef.id);\n    }\n\n    // Stop propagation so that it doesn't register as a header click event.\n    e.preventDefault();\n    e.stopPropagation();\n  }\n\n  /**\n   * Method that user can pass to override the default behavior.\n   * In order word, user can choose or an item is (usable/visible/enable) by providing his own logic.\n   * @param overrideFn: override function callback\n   * @param args: multiple arguments provided to the override (cell, row, columnDef, dataContext, grid)\n   */\n  protected runOverrideFunctionWhenExists<T = any>(overrideFn: ((args: any) => boolean) | undefined, args: T): boolean {\n    if (typeof overrideFn === 'function') {\n      return overrideFn.call(this, args);\n    }\n    return true;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      Plugins: {\n        HeaderButtons: SlickHeaderButtons\n      }\n    }\n  });\n}\n", "import { BindingEventService as BindingEventService_, Event as SlickEvent_, type SlickEventData, SlickEventHandler as SlickEventHandler_, Utils as Utils_ } from '../slick.core';\nimport type {\n  Column,\n  DOMEvent,\n  DOMMouseOrTouchEvent,\n  HeaderMenuCommandItemCallbackArgs,\n  HeaderMenuItems,\n  HeaderMenuOption,\n  HeaderMenuCommandItem,\n  MenuCommandItemCallbackArgs,\n  SlickPlugin,\n  OnHeaderCellRenderedEventArgs,\n} from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * A plugin to add drop-down menus to column headers.\n *\n * USAGE:\n *\n * Add the plugin .js & .css files and register it with the grid.\n *\n * To specify a menu in a column header, extend the column definition like so:\n *\n *   let columns = [\n *     {\n *       id: 'myColumn',\n *       name: 'My column',\n *\n *       // This is the relevant part\n *       header: {\n *          menu: {\n *              items: [\n *                {\n *                  // menu item options\n *                },\n *                {\n *                  // menu item options\n *                }\n *              ]\n *          }\n *       }\n *     }\n *   ];\n *\n *\n * Available menu options:\n *    autoAlign:              Auto-align drop menu to the left when not enough viewport space to show on the right\n *    autoAlignOffset:        When drop menu is aligned to the left, it might not be perfectly aligned with the header menu icon, if that is the case you can add an offset (positive/negative number to move right/left)\n *    buttonCssClass:         an extra CSS class to add to the menu button (default 'caret')\n *    buttonImage:            a url to the menu button image\n *    menuUsabilityOverride:  Callback method that user can override the default behavior of enabling/disabling the menu from being usable (must be combined with a custom formatter)\n *    minWidth:               Minimum width that the drop menu will have\n *    subItemChevronClass:        CSS class that can be added on the right side of a sub-item parent (typically a chevron-right icon)\n *    subMenuOpenByEvent:         defaults to \"mouseover\", what event type shoud we use to open sub-menu(s), 2 options are available: \"mouseover\" or \"click\"\n *\n *\n * Available menu item options:\n *    action:                   Optionally define a callback function that gets executed when item is chosen (and/or use the onCommand event)\n *    title:                    Menu item text.\n *    divider:                  Whether the current item is a divider, not an actual command.\n *    disabled:                 Whether the item/command is disabled.\n *    hidden:                   Whether the item/command is hidden.\n *    tooltip:                  Item tooltip.\n *    command:                  A command identifier to be passed to the onCommand event handlers.\n *    cssClass:                 A CSS class to be added to the menu item container.\n *    iconCssClass:             A CSS class to be added to the menu item icon.\n *    iconImage:                A url to the icon image.\n *    textCssClass:             A CSS class to be added to the menu item text.\n *    itemVisibilityOverride:   Callback method that user can override the default behavior of showing/hiding an item from the list\n *    itemUsabilityOverride:    Callback method that user can override the default behavior of enabling/disabling an item from the list\n *\n *\n * The plugin exposes the following events:\n\n  *    onAfterMenuShow:   Fired after the menu is shown.  You can customize the menu or dismiss it by returning false.\n  *        Event args:\n  *            grid:     Reference to the grid.\n  *            column:   Column definition.\n  *            menu:     Menu options.  Note that you can change the menu items here.\n  *\n  *    onBeforeMenuShow:   Fired before the menu is shown.  You can customize the menu or dismiss it by returning false.\n  *        Event args:\n  *            grid:     Reference to the grid.\n  *            column:   Column definition.\n  *            menu:     Menu options.  Note that you can change the menu items here.\n  *\n  *    onCommand:    Fired on menu item click for buttons with 'command' specified.\n  *        Event args:\n  *            grid:     Reference to the grid.\n  *            column:   Column definition.\n  *            command:  Button command identified.\n  *            button:   Button options.  Note that you can change the button options in your\n  *                      event handler, and the column header will be automatically updated to\n  *                      reflect them.  This is useful if you want to implement something like a\n  *                      toggle button.\n  *\n  *\n  * @param options {Object} Options:\n  *    buttonCssClass:   an extra CSS class to add to the menu button (default 'caret')\n  *    buttonImage:      a url to the menu button image\n  * @class Slick.Plugins.HeaderButtons\n  */\nexport class SlickHeaderMenu implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'HeaderMenu' as const;\n  onAfterMenuShow = new SlickEvent<HeaderMenuCommandItemCallbackArgs>('onAfterMenuShow');\n  onBeforeMenuShow = new SlickEvent<HeaderMenuCommandItemCallbackArgs>('onBeforeMenuShow');\n  onCommand = new SlickEvent<MenuCommandItemCallbackArgs>('onCommand');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _gridUid = '';\n  protected _handler = new SlickEventHandler();\n  protected _bindingEventService = new BindingEventService();\n  protected _defaults: HeaderMenuOption = {\n    buttonCssClass: undefined,\n    buttonImage: undefined,\n    minWidth: 100,\n    autoAlign: true,\n    autoAlignOffset: 0,\n    subMenuOpenByEvent: 'mouseover',\n  };\n  protected _options: HeaderMenuOption;\n  protected _activeHeaderColumnElm?: HTMLDivElement | null;\n  protected _menuElm?: HTMLDivElement | null;\n  protected _subMenuParentId = '';\n\n  constructor(options: Partial<HeaderMenuOption>) {\n    this._options = Utils.extend(true, {}, options, this._defaults);\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._gridUid = grid?.getUID() || '';\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    this._handler\n      .subscribe(this._grid.onHeaderCellRendered, this.handleHeaderCellRendered.bind(this))\n      .subscribe(this._grid.onBeforeHeaderCellDestroy, this.handleBeforeHeaderCellDestroy.bind(this));\n\n    // Force the grid to re-render the header now that the events are hooked up.\n    this._grid.setColumns(this._grid.getColumns());\n\n    // Hide the menu on outside click.\n    this._bindingEventService.bind(document.body, 'click', this.handleBodyMouseDown.bind(this) as EventListener);\n  }\n\n  setOptions(newOptions: Partial<HeaderMenuOption>) {\n    this._options = Utils.extend(true, {}, this._options, newOptions);\n  }\n\n  protected getGridUidSelector() {\n    const gridUid = this._grid.getUID() || '';\n    return gridUid ? `.${gridUid}` : '';\n  }\n\n  destroy() {\n    this._handler.unsubscribeAll();\n    this._bindingEventService.unbindAll();\n    this._menuElm = this._menuElm || document.body.querySelector(`.slick-header-menu${this.getGridUidSelector()}`);\n    this._menuElm?.remove();\n    this._activeHeaderColumnElm = undefined;\n  }\n\n  destroyAllMenus() {\n    this.destroySubMenus();\n\n    // remove all parent menu listeners before removing them from the DOM\n    this._bindingEventService.unbindAll('parent-menu');\n    document.querySelectorAll(`.slick-header-menu${this.getGridUidSelector()}`)\n      .forEach(subElm => subElm.remove());\n  }\n\n  /** Close and destroy all previously opened sub-menus */\n  destroySubMenus() {\n    this._bindingEventService.unbindAll('sub-menu');\n    document.querySelectorAll(`.slick-header-menu.slick-submenu${this.getGridUidSelector()}`)\n      .forEach(subElm => subElm.remove());\n  }\n\n  protected handleBodyMouseDown(e: DOMEvent<HTMLElement>) {\n    // did we click inside the menu or any of its sub-menu(s)\n    let isMenuClicked = false;\n    if (this._menuElm?.contains(e.target)) {\n      isMenuClicked = true;\n    }\n    if (!isMenuClicked) {\n      document\n        .querySelectorAll(`.slick-header-menu.slick-submenu${this.getGridUidSelector()}`)\n        .forEach(subElm => {\n          if (subElm.contains(e.target)) {\n            isMenuClicked = true;\n          }\n        });\n    }\n\n    if (this._menuElm !== e.target && !isMenuClicked && !e.defaultPrevented || e.target.className === 'close') {\n      this.hideMenu();\n    }\n  }\n\n  hideMenu() {\n    if (this._menuElm) {\n      this._menuElm.remove();\n      this._menuElm = undefined;\n    }\n    this._activeHeaderColumnElm?.classList.remove('slick-header-column-active');\n    this.destroySubMenus();\n  }\n\n  protected handleHeaderCellRendered(_e: SlickEventData, args: OnHeaderCellRenderedEventArgs) {\n    const column = args.column;\n    const menu = column?.header?.menu as HeaderMenuItems;\n\n    if (menu?.items) {\n      console.warn('[SlickGrid] Header Menu \"items\" property was deprecated in favor of \"commandItems\" to align with all other Menu plugins.');\n    }\n\n    if (menu) {\n      // run the override function (when defined), if the result is false it won't go further\n      if (!this.runOverrideFunctionWhenExists<typeof args>(this._options.menuUsabilityOverride, args)) {\n        return;\n      }\n\n      const elm = document.createElement('div');\n      elm.className = 'slick-header-menubutton';\n      elm.ariaLabel = 'Header Menu';\n      elm.role = 'button';\n\n      if (!this._options.buttonCssClass && !this._options.buttonImage) {\n        this._options.buttonCssClass = 'caret'; // default when nothing is provided\n      }\n\n      if (this._options.buttonCssClass) {\n        // sgi icon with mask requires inner span to work properly\n        const icon = document.createElement('span');\n        icon.classList.add(...Utils.classNameToList(this._options.buttonCssClass));\n        elm.appendChild(icon);\n      }\n\n      if (this._options.buttonImage) {\n        elm.style.backgroundImage = `url(${this._options.buttonImage})`;\n      }\n\n      if (this._options.tooltip) {\n        elm.title = this._options.tooltip;\n      }\n\n      this._bindingEventService.bind(elm, 'click', ((e: DOMMouseOrTouchEvent<HTMLDivElement>) => {\n        this.destroyAllMenus(); // make there's only 1 parent menu opened at a time\n        this.createParentMenu(e, menu, args.column);\n      }) as EventListener);\n      args.node.appendChild(elm);\n    }\n  }\n\n  protected handleBeforeHeaderCellDestroy(_e: SlickEventData, args: { column: Column; node: HTMLElement; }) {\n    const column = args.column;\n\n    if (column.header?.menu) {\n      args.node.querySelectorAll('.slick-header-menubutton').forEach(elm => elm.remove());\n    }\n  }\n\n  protected addSubMenuTitleWhenExists(item: HeaderMenuCommandItem | 'divider', commandMenuElm: HTMLDivElement) {\n    if (item !== 'divider' && item?.subMenuTitle) {\n      const subMenuTitleElm = document.createElement('div');\n      subMenuTitleElm.className = 'slick-menu-title';\n      subMenuTitleElm.textContent = item.subMenuTitle as string;\n      const subMenuTitleClass = item.subMenuTitleCssClass as string;\n      if (subMenuTitleClass) {\n        subMenuTitleElm.classList.add(...Utils.classNameToList(subMenuTitleClass));\n      }\n\n      commandMenuElm.appendChild(subMenuTitleElm);\n    }\n  }\n\n  protected createParentMenu(event: DOMMouseOrTouchEvent<HTMLDivElement>, menu: HeaderMenuItems, columnDef: Column) {\n    // Let the user modify the menu or cancel altogether,\n    // or provide alternative menu implementation.\n    const callbackArgs = {\n      grid: this._grid,\n      column: columnDef,\n      menu\n    } as unknown as HeaderMenuCommandItemCallbackArgs;\n    if (this.onBeforeMenuShow.notify(callbackArgs, event, this).getReturnValue() === false) {\n      return;\n    }\n\n    // create 1st parent menu container & reposition it\n    this._menuElm = this.createMenu((menu.commandItems || menu.items) as Array<HeaderMenuCommandItem | 'divider'>, columnDef);\n    const containerNode = this._grid.getContainerNode();\n    if (containerNode) {\n      containerNode.appendChild(this._menuElm);\n    }\n    this.repositionMenu(event, this._menuElm);\n\n    if (this.onAfterMenuShow.notify(callbackArgs, event, this).getReturnValue() === false) {\n      return;\n    }\n\n    // Stop propagation so that it doesn't register as a header click event.\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  protected createMenu(commandItems: Array<HeaderMenuCommandItem | 'divider'>, columnDef: Column, level = 0, item?: HeaderMenuCommandItem | 'divider') {\n    // to avoid having multiple sub-menu trees opened,\n    // we need to somehow keep trace of which parent menu the tree belongs to\n    // and we should keep ref of only the first sub-menu parent, we can use the command name (remove any whitespaces though)\n    const isSubMenu = level > 0;\n    const subMenuCommand = (item as HeaderMenuCommandItem)?.command;\n    let subMenuId = (level === 1 && subMenuCommand) ? subMenuCommand.replaceAll(' ', '') : '';\n    if (subMenuId) {\n      this._subMenuParentId = subMenuId;\n    }\n    if (isSubMenu) {\n      subMenuId = this._subMenuParentId;\n    }\n\n    // return menu/sub-menu if it's already opened unless we are on different sub-menu tree if so close them all\n    const menuClasses = `slick-header-menu slick-menu-level-${level} ${this._gridUid}`;\n    const bodyMenuElm = document.body.querySelector<HTMLDivElement>(`.slick-header-menu.slick-menu-level-${level}${this.getGridUidSelector()}`);\n    if (bodyMenuElm) {\n      if (bodyMenuElm.dataset.subMenuParent === subMenuId) {\n        return bodyMenuElm;\n      }\n      this.destroySubMenus();\n    }\n\n    const menuElm = document.createElement('div');\n    menuElm.className = menuClasses;\n    if (level > 0) {\n      menuElm.classList.add('slick-submenu');\n      if (subMenuId) {\n        menuElm.dataset.subMenuParent = subMenuId;\n      }\n    }\n    menuElm.classList.add(this._gridUid);\n    menuElm.role = 'menu';\n    menuElm.ariaLabel = level > 1 ? 'SubMenu' : 'Header Menu';\n    menuElm.style.minWidth = `${this._options.minWidth}px`;\n    menuElm.setAttribute('aria-expanded', 'true');\n\n    const callbackArgs = {\n      grid: this._grid,\n      column: columnDef,\n      menu: { items: commandItems }\n    } as unknown as HeaderMenuCommandItemCallbackArgs;\n\n    // when creating sub-menu add its sub-menu title when exists\n    if (item && level > 0) {\n      this.addSubMenuTitleWhenExists(item, menuElm); // add sub-menu title when exists\n    }\n\n    // Construct the menu items.\n    for (let i = 0; i < commandItems.length; i++) {\n      let addClickListener = true;\n      const item = commandItems[i];\n\n      // run each override functions to know if the item is visible and usable\n      const isItemVisible = this.runOverrideFunctionWhenExists((item as HeaderMenuCommandItem).itemVisibilityOverride, callbackArgs);\n      const isItemUsable = this.runOverrideFunctionWhenExists((item as HeaderMenuCommandItem).itemUsabilityOverride, callbackArgs);\n\n      // if the result is not visible then there's no need to go further\n      if (!isItemVisible) {\n        continue;\n      }\n\n      // when the override is defined, we need to use its result to update the disabled property\n      // so that \"handleMenuItemCommandClick\" has the correct flag and won't trigger a command clicked event\n      if (Object.prototype.hasOwnProperty.call(item, 'itemUsabilityOverride')) {\n        (item as HeaderMenuCommandItem).disabled = isItemUsable ? false : true;\n      }\n\n      const menuItemElm = document.createElement('div');\n      menuItemElm.className = 'slick-header-menuitem';\n      menuItemElm.role = 'menuitem';\n\n      if ((item as HeaderMenuCommandItem).divider || item === 'divider') {\n        menuItemElm.classList.add('slick-header-menuitem-divider');\n        addClickListener = false;\n      }\n\n      if ((item as HeaderMenuCommandItem).disabled) {\n        menuItemElm.classList.add('slick-header-menuitem-disabled');\n      }\n\n      if ((item as HeaderMenuCommandItem).hidden) {\n        menuItemElm.classList.add('slick-header-menuitem-hidden');\n      }\n\n      if ((item as HeaderMenuCommandItem).cssClass) {\n        menuItemElm.classList.add(...Utils.classNameToList((item as HeaderMenuCommandItem).cssClass));\n      }\n\n      if ((item as HeaderMenuCommandItem).tooltip) {\n        menuItemElm.title = (item as HeaderMenuCommandItem).tooltip || '';\n      }\n\n      const iconElm = document.createElement('div');\n      iconElm.className = 'slick-header-menuicon';\n      menuItemElm.appendChild(iconElm);\n\n      if ((item as HeaderMenuCommandItem).iconCssClass) {\n        iconElm.classList.add(...Utils.classNameToList((item as HeaderMenuCommandItem).iconCssClass));\n      }\n\n      if ((item as HeaderMenuCommandItem).iconImage) {\n        iconElm.style.backgroundImage = 'url(' + (item as HeaderMenuCommandItem).iconImage + ')';\n      }\n\n      const textElm = document.createElement('span');\n      textElm.className = 'slick-header-menucontent';\n      textElm.textContent = (item as HeaderMenuCommandItem).title || '';\n      menuItemElm.appendChild(textElm);\n\n      if ((item as HeaderMenuCommandItem).textCssClass) {\n        textElm.classList.add(...Utils.classNameToList((item as HeaderMenuCommandItem).textCssClass));\n      }\n      menuElm.appendChild(menuItemElm);\n\n      if (addClickListener) {\n        const eventGroup = isSubMenu ? 'sub-menu' : 'parent-menu';\n        this._bindingEventService.bind(menuItemElm, 'click', this.handleMenuItemClick.bind(this, item, columnDef, level) as EventListener, undefined, eventGroup);\n      }\n\n      // optionally open sub-menu(s) by mouseover\n      if (this._options.subMenuOpenByEvent === 'mouseover') {\n        this._bindingEventService.bind(menuItemElm, 'mouseover', ((e: DOMMouseOrTouchEvent<HTMLDivElement>) => {\n          if ((item as HeaderMenuCommandItem).commandItems || (item as HeaderMenuCommandItem).items) {\n            this.repositionSubMenu(item as HeaderMenuCommandItem, columnDef, level, e);\n          } else if (!isSubMenu) {\n            this.destroySubMenus();\n          }\n        }) as EventListener);\n      }\n\n      // the option/command item could be a sub-menu if it has another list of commands/options\n      if ((item as HeaderMenuCommandItem).commandItems || (item as HeaderMenuCommandItem).items) {\n        const chevronElm = document.createElement('div');\n        chevronElm.className = 'sub-item-chevron';\n        if (this._options.subItemChevronClass) {\n          chevronElm.classList.add(...Utils.classNameToList(this._options.subItemChevronClass));\n        } else {\n          chevronElm.textContent = '\u2B9E'; // \u2B9E or \u25B8\n        }\n\n        menuItemElm.classList.add('slick-submenu-item');\n        menuItemElm.appendChild(chevronElm);\n      }\n    }\n\n    return menuElm;\n  }\n\n  protected handleMenuItemClick(item: HeaderMenuCommandItem | 'divider', columnDef: Column, level = 0, e: DOMMouseOrTouchEvent<HTMLDivElement>): boolean | void {\n    if (item !== 'divider' && !item.disabled && !item.divider) {\n      const command = (item as HeaderMenuCommandItem).command || '';\n\n      if (Utils.isDefined(command) && !item.commandItems && !(item as HeaderMenuCommandItem).items) {\n        const callbackArgs = {\n          grid: this._grid,\n          column: columnDef,\n          command,\n          item,\n        };\n        this.onCommand.notify(callbackArgs, e, this);\n\n        // execute action callback when defined\n        if (typeof item.action === 'function') {\n          item.action.call(this, e, callbackArgs);\n        }\n\n        // unless prevented, close the menu\n        if (!e.defaultPrevented) {\n          this.hideMenu();\n        }\n      } else if (item.commandItems || (item as HeaderMenuCommandItem).items) {\n        this.repositionSubMenu(item as HeaderMenuCommandItem, columnDef, level, e);\n      } else {\n        this.destroySubMenus();\n      }\n    }\n  }\n\n  protected repositionSubMenu(item: HeaderMenuCommandItem, columnDef: Column, level: number, e: DOMMouseOrTouchEvent<HTMLDivElement>) {\n    // when we're clicking a grid cell OR our last menu type (command/option) differs then we know that we need to start fresh and close any sub-menus that might still be open\n    if (e.target.classList.contains('slick-header-menubutton')) {\n      this.destroySubMenus();\n    }\n\n    // creating sub-menu, we'll also pass level & the item object since we might have \"subMenuTitle\" to show\n    const subMenuElm = this.createMenu(item.commandItems || item.items || [], columnDef, level + 1, item);\n    document.body.appendChild(subMenuElm);\n    this.repositionMenu(e, subMenuElm);\n  }\n\n  protected repositionMenu(e: DOMMouseOrTouchEvent<HTMLDivElement>, menuElm: HTMLDivElement) {\n    const buttonElm = e.target;\n    const isSubMenu = menuElm.classList.contains('slick-submenu');\n    const parentElm = isSubMenu\n      ? e.target.closest('.slick-header-menuitem') as HTMLDivElement\n      : buttonElm as HTMLElement;\n\n    const btnOffset = Utils.offset(buttonElm);\n    const gridPos = this._grid.getGridPosition();\n    const menuWidth = menuElm.offsetWidth;\n    const menuOffset = Utils.offset(this._menuElm!);\n    const parentOffset = Utils.offset(parentElm);\n    const menuOffsetTop = isSubMenu\n      ? parentOffset?.top ?? 0\n      : buttonElm.clientHeight ?? btnOffset?.top ?? 0 + (this._options?.menuOffsetTop ?? 0);\n    let menuOffsetLeft = isSubMenu ? parentOffset?.left ?? 0 : btnOffset?.left ?? 0;\n\n    // when auto-align is set, it will calculate whether it has enough space in the viewport to show the drop menu on the right (default)\n    // if there isn't enough space on the right, it will automatically align the drop menu to the left\n    // to simulate an align left, we actually need to know the width of the drop menu\n    if (isSubMenu && parentElm) {\n      let subMenuPosCalc = menuOffsetLeft + Number(menuWidth); // calculate coordinate at caller element far right\n      if (isSubMenu) {\n        subMenuPosCalc += parentElm.clientWidth;\n      }\n      const browserWidth = document.documentElement.clientWidth;\n      const dropSide = (subMenuPosCalc >= gridPos.width || subMenuPosCalc >= browserWidth) ? 'left' : 'right';\n      if (dropSide === 'left') {\n        menuElm.classList.remove('dropright');\n        menuElm.classList.add('dropleft');\n        menuOffsetLeft -= menuWidth;\n      } else {\n        menuElm.classList.remove('dropleft');\n        menuElm.classList.add('dropright');\n        if (isSubMenu) {\n          menuOffsetLeft += parentElm.offsetWidth;\n        }\n      }\n    } else {\n      if (menuOffsetLeft + menuElm.offsetWidth >= gridPos.width) {\n        menuOffsetLeft = menuOffsetLeft + buttonElm.clientWidth - menuElm.clientWidth + (this._options.autoAlignOffset || 0);\n      }\n      menuOffsetLeft -= menuOffset?.left ?? 0;\n    }\n\n    // ready to reposition the menu\n    menuElm.style.top = `${menuOffsetTop}px`;\n    menuElm.style.left = `${menuOffsetLeft}px`;\n\n    // Mark the header as active to keep the highlighting.\n    this._activeHeaderColumnElm = menuElm.closest('.slick-header-column');\n    if (this._activeHeaderColumnElm) {\n      this._activeHeaderColumnElm.classList.add('slick-header-column-active');\n    }\n  }\n\n  /**\n   * Method that user can pass to override the default behavior.\n   * In order word, user can choose or an item is (usable/visible/enable) by providing his own logic.\n   * @param overrideFn: override function callback\n   * @param args: multiple arguments provided to the override (cell, row, columnDef, dataContext, grid)\n   */\n  protected runOverrideFunctionWhenExists<T = any>(overrideFn: ((args: any) => boolean) | undefined, args: T): boolean {\n    if (typeof overrideFn === 'function') {\n      return overrideFn.call(this, args);\n    }\n    return true;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      Plugins: {\n        HeaderMenu: SlickHeaderMenu\n      }\n    }\n  });\n}\n", "import { BindingEventService as BindingEventService_, Event as SlickEvent_, Utils as Utils_ } from '../slick.core';\nimport type { GridOption, GridSize, ResizerOption } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n// define some constants, height/width are in pixels\nconst DATAGRID_MIN_HEIGHT = 180;\nconst DATAGRID_MIN_WIDTH = 300;\nconst DATAGRID_BOTTOM_PADDING = 20;\n\n/***\n * A Resizer plugin that can be used to auto-resize a grid and/or resize with fixed dimensions.\n * When fixed height is defined, it will auto-resize only the width and vice versa with the width defined.\n * You can also choose to use the flag \"enableAutoSizeColumns\" if you want to the plugin to\n * automatically call the grid \"autosizeColumns()\" method after each resize.\n *\n * USAGE:\n *\n * Add the \"slick.resizer.js\" file and register it with the grid.\n *\n * You can specify certain options as arguments when instantiating the plugin like so:\n * var resizer = new Slick.Plugins.Resizer({\n *   container: '#gridContainer',\n *   rightPadding: 15,\n *   bottomPadding: 20,\n *   minHeight: 180,\n *   minWidth: 300,\n * });\n * grid.registerPlugin(resizer);\n *\n *\n * The plugin exposes the following events:\n *\n *    onGridAfterResize:  Fired after the grid got resized.  You can customize the menu or dismiss it by returning false.\n *        Event args:\n *            grid:       Reference to the grid.\n *            dimensions: Resized grid dimensions used\n *\n *    onGridBeforeResize:   Fired before the grid gets resized.  You can customize the menu or dismiss it by returning false.\n *        Event args:\n *            grid:     Reference to the grid.\n *\n *\n * @param {Object} options available plugin options that can be passed in the constructor:\n *   container:      (REQUIRED) DOM element selector of the page container, basically what element in the page will be used to calculate the available space\n *   gridContainer:             DOM element selector of the grid container, optional but when provided it will be resized with same size as the grid (typically a container holding the grid and extra custom footer/pagination)\n *   applyResizeToContainer:    Defaults to false, do we want to apply the resized dimentions to the grid container as well?\n *   rightPadding:              Defaults to 0, right side padding to remove from the total dimension\n *   bottomPadding:             Defaults to 20, bottom padding to remove from the total dimension\n *   minHeight:                 Defaults to 180, minimum height of the grid\n *   minWidth:                  Defaults to 300, minimum width of the grid\n *   maxHeight:                 Maximum height of the grid\n *   maxWidth:                  Maximum width of the grid\n *   calculateAvailableSizeBy:  Defaults to \"window\", which DOM element (\"container\" or \"window\") are we using to calculate the available size for the grid?\n *\n * @class Slick.Plugins.Resizer\n */\n\nexport class SlickResizer {\n  // --\n  // public API\n  pluginName = 'Resizer' as const;\n  onGridAfterResize = new SlickEvent<{ grid: SlickGrid; dimensions: GridSize; }>('onGridAfterResize');\n  onGridBeforeResize = new SlickEvent<{ grid: SlickGrid; }>('onGridBeforeResize');\n\n  // --\n  // protected props\n  protected _bindingEventService: BindingEventService_;\n  protected _fixedHeight?: number | null;\n  protected _fixedWidth?: number | null;\n  protected _grid!: SlickGrid;\n  protected _gridDomElm!: HTMLElement;\n  protected _gridContainerElm!: HTMLElement;\n  protected _pageContainerElm!: HTMLElement;\n  protected _gridOptions!: GridOption;\n  protected _gridUid = '';\n  protected _lastDimensions?: GridSize;\n  protected _resizePaused = false;\n  protected _timer!: NodeJS.Timeout;\n  protected _options: ResizerOption;\n  protected _defaults: ResizerOption = {\n    bottomPadding: 20,\n    applyResizeToContainer: false,\n    minHeight: 180,\n    minWidth: 300,\n    rightPadding: 0\n  };\n\n  constructor(options: Partial<ResizerOption>, fixedDimensions?: { height?: number; width?: number; }) {\n    this._bindingEventService = new BindingEventService();\n    this._options = Utils.extend(true, {}, this._defaults, options);\n    if (fixedDimensions) {\n      this._fixedHeight = fixedDimensions.height;\n      this._fixedWidth = fixedDimensions.width;\n    }\n  }\n\n  setOptions(newOptions: Partial<ResizerOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, this._options, newOptions);\n  }\n\n  init(grid: SlickGrid) {\n    this.setOptions(this._options);\n    this._grid = grid;\n    this._gridOptions = this._grid.getOptions();\n    this._gridUid = this._grid.getUID();\n    this._gridDomElm = this._grid.getContainerNode();\n    this._pageContainerElm = typeof this._options.container === 'string'\n      ? document.querySelector(this._options.container) as HTMLElement\n      : this._options.container as HTMLElement;\n\n    if (this._options.gridContainer) {\n      this._gridContainerElm = this._options.gridContainer as HTMLElement;\n    }\n\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n    if (this._gridOptions) {\n      this.bindAutoResizeDataGrid();\n    }\n  }\n\n  /** Bind an auto resize trigger on the datagrid, if that is enable then it will resize itself to the available space\n  * Options: we could also provide a % factor to resize on each height/width independently\n  */\n  bindAutoResizeDataGrid(newSizes?: GridSize) {\n    const gridElmOffset = Utils.offset(this._gridDomElm);\n\n    // if we can't find the grid to resize, return without binding anything\n    if (this._gridDomElm !== undefined || gridElmOffset !== undefined) {\n      // -- 1st resize the datagrid size at first load (we need this because the .on event is not triggered on first load)\n      // -- also we add a slight delay (in ms) so that we resize after the grid render is done\n      this.resizeGrid(0, newSizes, null);\n\n      // -- 2nd bind a trigger on the Window DOM element, so that it happens also when resizing after first load\n      // -- bind auto-resize to Window object only if it exist\n      this._bindingEventService.bind(window, 'resize', (event) => {\n        this.onGridBeforeResize.notify({ grid: this._grid }, event, this);\n\n        // unless the resizer is paused, let's go and resize the grid\n        if (!this._resizePaused) {\n          // for some yet unknown reason, calling the resize twice removes any stuttering/flickering\n          // when changing the height and makes it much smoother experience\n          this.resizeGrid(0, newSizes, event);\n          this.resizeGrid(0, newSizes, event);\n        }\n      });\n    }\n  }\n\n  /**\n   * Calculate the datagrid new height/width from the available space, also consider that a % factor might be applied to calculation\n   */\n  calculateGridNewDimensions(): GridSize | null {\n    const gridElmOffset = Utils.offset(this._gridDomElm);\n\n    if (!window || this._pageContainerElm === undefined || this._gridDomElm === undefined || gridElmOffset === undefined) {\n      return null;\n    }\n\n    // calculate bottom padding\n    const bottomPadding = (this._options?.bottomPadding !== undefined) ? this._options.bottomPadding : DATAGRID_BOTTOM_PADDING;\n\n    let gridHeight = 0;\n    let gridOffsetTop = 0;\n\n    // which DOM element are we using to calculate the available size for the grid?\n    // defaults to \"window\"\n    if (this._options.calculateAvailableSizeBy === 'container') {\n      // uses the container's height to calculate grid height without any top offset\n      gridHeight = Utils.innerSize(this._pageContainerElm, 'height') || 0;\n    } else {\n      // uses the browser's window height with its top offset to calculate grid height\n      gridHeight = window.innerHeight || 0;\n      gridOffsetTop = (gridElmOffset !== undefined) ? gridElmOffset.top : 0;\n    }\n\n    const availableHeight = gridHeight - gridOffsetTop - bottomPadding;\n    const availableWidth = Utils.innerSize(this._pageContainerElm, 'width') || window.innerWidth || 0;\n    const maxHeight = this._options?.maxHeight || undefined;\n    const minHeight = (this._options?.minHeight !== undefined) ? this._options.minHeight : DATAGRID_MIN_HEIGHT;\n    const maxWidth = this._options?.maxWidth || undefined;\n    const minWidth = (this._options?.minWidth !== undefined) ? this._options.minWidth : DATAGRID_MIN_WIDTH;\n\n    let newHeight = availableHeight;\n    let newWidth = (this._options?.rightPadding) ? availableWidth - this._options.rightPadding : availableWidth;\n\n    // optionally (when defined), make sure that grid height & width are within their thresholds\n    if (newHeight < minHeight) {\n      newHeight = minHeight;\n    }\n    if (maxHeight && newHeight > maxHeight) {\n      newHeight = maxHeight;\n    }\n    if (newWidth < minWidth) {\n      newWidth = minWidth;\n    }\n    if (maxWidth && newWidth > maxWidth) {\n      newWidth = maxWidth;\n    }\n\n    // return the new dimensions unless a fixed height/width was defined\n    return {\n      height: this._fixedHeight || newHeight,\n      width: this._fixedWidth || newWidth\n    };\n  }\n\n  /** Destroy function when element is destroyed */\n  destroy() {\n    this.onGridBeforeResize.unsubscribe();\n    this.onGridAfterResize.unsubscribe();\n    this._bindingEventService.unbindAll();\n  }\n\n  /**\n  * Return the last resize dimensions used by the service\n  * @return {object} last dimensions (height: number, width: number)\n  */\n  getLastResizeDimensions() {\n    return this._lastDimensions;\n  }\n\n  /**\n   * Provide the possibility to pause the resizer for some time, until user decides to re-enabled it later if he wish to.\n   * @param {boolean} isResizePaused are we pausing the resizer?\n   */\n  pauseResizer(isResizePaused: boolean) {\n    this._resizePaused = isResizePaused;\n  }\n\n  /**\n   * Resize the datagrid to fit the browser height & width.\n   * @param {number} [delay] to wait before resizing, defaults to 0 (in milliseconds)\n   * @param {object} [newSizes] can optionally be passed (height: number, width: number)\n   * @param {object} [event] that triggered the resize, defaults to null\n   * @return If the browser supports it, we can return a Promise that would resolve with the new dimensions\n   */\n  resizeGrid(delay?: number, newSizes?: GridSize, event?: Event | null): Promise<GridSize | undefined> | void {\n    // because of the javascript async nature, we might want to delay the resize a little bit\n    const resizeDelay = delay || 0;\n\n    // return a Promise when supported by the browser\n    if (typeof Promise === 'function') {\n      return new Promise((resolve) => {\n        if (resizeDelay > 0) {\n          clearTimeout(this._timer);\n          this._timer = setTimeout(() => {\n            resolve(this.resizeGridCallback(newSizes, event));\n          }, resizeDelay);\n        } else {\n          resolve(this.resizeGridCallback(newSizes, event));\n        }\n      });\n    } else {\n      // OR no return when Promise isn't supported\n      if (resizeDelay > 0) {\n        clearTimeout(this._timer);\n        this._timer = setTimeout(() => {\n          this.resizeGridCallback(newSizes, event);\n        }, resizeDelay);\n      } else {\n        this.resizeGridCallback(newSizes, event);\n      }\n    }\n  }\n\n  protected resizeGridCallback(newSizes?: GridSize, event?: Event | null) {\n    const lastDimensions = this.resizeGridWithDimensions(newSizes) as GridSize;\n    this.onGridAfterResize.notify({ grid: this._grid, dimensions: lastDimensions }, event, this);\n    return lastDimensions;\n  }\n\n  protected resizeGridWithDimensions(newSizes?: GridSize): GridSize | undefined {\n    // calculate the available sizes with minimum height defined as a varant\n    const availableDimensions = this.calculateGridNewDimensions();\n\n    if ((newSizes || availableDimensions) && this._gridDomElm) {\n      try {\n        // get the new sizes, if new sizes are passed (not 0), we will use them else use available space\n        // basically if user passes 1 of the dimension, let say he passes just the height,\n        // we will use the height as a fixed height but the width will be resized by it's available space\n        const newHeight = (newSizes?.height) ? newSizes.height : availableDimensions?.height;\n        const newWidth = (newSizes?.width) ? newSizes.width : availableDimensions?.width;\n\n        // apply these new height/width to the datagrid\n        if (!this._gridOptions.autoHeight) {\n          this._gridDomElm.style.height = `${newHeight}px`;\n        }\n        this._gridDomElm.style.width = `${newWidth}px`;\n        if (this._gridContainerElm) {\n          this._gridContainerElm.style.width = `${newWidth}px`;\n        }\n\n        // resize the slickgrid canvas on all browser\n        if (this._grid?.resizeCanvas) {\n          this._grid.resizeCanvas();\n        }\n\n        // also call the grid auto-size columns so that it takes available when going bigger\n        if (this._gridOptions?.enableAutoSizeColumns && this._grid.autosizeColumns) {\n          // make sure that the grid still exist (by looking if the Grid UID is found in the DOM tree) to avoid SlickGrid error \"missing stylesheet\"\n          if (this._gridUid && document.querySelector(`.${this._gridUid}`)) {\n            this._grid.autosizeColumns();\n          }\n        }\n\n        // keep last resized dimensions & resolve them to the Promise\n        this._lastDimensions = {\n          height: newHeight,\n          width: newWidth\n        };\n      } catch (e) {\n        this.destroy();\n      }\n    }\n\n    return this._lastDimensions;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      Plugins: {\n        Resizer: SlickResizer\n      }\n    }\n  });\n}\n\n", "import { SlickEvent as SlickEvent_, type SlickEventData, SlickEventHandler as SlickEventHandler_, Utils as Utils_ } from '../slick.core';\nimport type { Column, FormatterResultWithHtml, GridOption, OnAfterRowDetailToggleArgs, OnBeforeRowDetailToggleArgs, OnRowBackToViewportRangeArgs, OnRowDetailAsyncEndUpdateArgs, OnRowDetailAsyncResponseArgs, OnRowOutOfViewportRangeArgs, RowDetailViewOption, UsabilityOverrideFn } from '../models/index';\nimport type { SlickDataView } from '../slick.dataview';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * A plugin to add row detail panel\n * Original StackOverflow question & article making this possible (thanks to violet313)\n * https://stackoverflow.com/questions/10535164/can-slickgrids-row-height-be-dynamically-altered#29399927\n * http://violet313.org/slickgrids/#intro\n *\n * USAGE:\n * Add the slick.rowDetailView.(js|css) files and register the plugin with the grid.\n *\n * AVAILABLE ROW DETAIL OPTIONS:\n *    cssClass:               A CSS class to be added to the row detail\n *    expandedClass:          Extra classes to be added to the expanded Toggle\n *    expandableOverride:     callback method that user can override the default behavior of making every row an expandable row (the logic to show or not the expandable icon).\n *    collapsedClass:         Extra classes to be added to the collapse Toggle\n *    loadOnce:               Defaults to false, when set to True it will load the data once and then reuse it.\n *    preTemplate:            Template that will be used before the async process (typically used to show a spinner/loading)\n *    postTemplate:           Template that will be loaded once the async function finishes\n *    process:                Async server function call\n *    panelRows:              Row count to use for the template panel\n *    singleRowExpand:        Defaults to false, limit expanded row to 1 at a time.\n *    useRowClick:            Boolean flag, when True will open the row detail on a row click (from any column), default to False\n *    keyPrefix:              Defaults to '_', prefix used for all the plugin metadata added to the item object (meta e.g.: padding, collapsed, parent)\n *    collapseAllOnSort:      Defaults to true, which will collapse all row detail views when user calls a sort. Unless user implements a sort to deal with padding\n *    saveDetailViewOnScroll: Defaults to true, which will save the row detail view in a cache when it detects that it will become out of the viewport buffer\n *    useSimpleViewportCalc:  Defaults to false, which will use simplified calculation of out or back of viewport visibility\n *\n * AVAILABLE PUBLIC METHODS:\n *    init:                 initiliaze the plugin\n *    expandableOverride:   callback method that user can override the default behavior of making every row an expandable row (the logic to show or not the expandable icon).\n *    destroy:              destroy the plugin and it's events\n *    collapseAll:          collapse all opened row detail panel\n *    collapseDetailView:   collapse a row by passing the item object (row detail)\n *    expandDetailView:     expand a row by passing the item object (row detail)\n *    getColumnDefinition:  get the column definitions\n *    getExpandedRows:      get all the expanded rows\n *    getFilterItem:        takes in the item we are filtering and if it is an expanded row returns it's parents row to filter on\n *    getOptions:           get current plugin options\n *    resizeDetailView:     resize a row detail view, it will auto-calculate the number of rows it needs\n *    saveDetailView:       save a row detail view content by passing the row object\n *    setOptions:           set or change some of the plugin options\n *\n * THE PLUGIN EXPOSES THE FOLLOWING SLICK EVENTS:\n *    onAsyncResponse:  This event must be used with the \"notify\" by the end user once the Asynchronous Server call returns the item detail\n *      Event args:\n *        item:         Item detail returned from the async server call\n *        detailView:   An explicit view to use instead of template (Optional)\n *\n *    onAsyncEndUpdate: Fired when the async response finished\n *      Event args:\n *        grid:         Reference to the grid.\n *        item:         Item data context\n *\n *    onBeforeRowDetailToggle: Fired before the row detail gets toggled\n *      Event args:\n *        grid:         Reference to the grid.\n *        item:         Item data context\n *\n *    onAfterRowDetailToggle: Fired after the row detail gets toggled\n *      Event args:\n *        grid:         Reference to the grid.\n *        item:         Item data context\n *        expandedRows: Array of the Expanded Rows\n *\n *    onRowOutOfViewportRange: Fired after a row becomes out of viewport range (user can't see the row anymore)\n *      Event args:\n *        grid:         Reference to the grid.\n *        item:         Item data context\n *        rowId:        Id of the Row object (datacontext) in the Grid\n *        rowIndex:     Index of the Row in the Grid\n *        expandedRows: Array of the Expanded Rows\n *        rowIdsOutOfViewport: Array of the Out of viewport Range Rows\n *\n *    onRowBackToViewportRange: Fired after a row is back to viewport range (user can visually see the row detail)\n *      Event args:\n *        grid:         Reference to the grid.\n *        item:         Item data context\n *        rowId:        Id of the Row object (datacontext) in the Grid\n *        rowIndex:     Index of the Row in the Grid\n *        expandedRows: Array of the Expanded Rows\n *        rowIdsOutOfViewport: Array of the Out of viewport Range Rows\n */\nexport class SlickRowDetailView {\n  // --\n  // public API\n  pluginName = 'RowDetailView' as const;\n  onAsyncResponse = new SlickEvent<OnRowDetailAsyncResponseArgs>('onAsyncResponse');\n  onAsyncEndUpdate = new SlickEvent<OnRowDetailAsyncEndUpdateArgs>('onAsyncEndUpdate');\n  onAfterRowDetailToggle = new SlickEvent<OnAfterRowDetailToggleArgs>('onAfterRowDetailToggle');\n  onBeforeRowDetailToggle = new SlickEvent<OnBeforeRowDetailToggleArgs>('onBeforeRowDetailToggle');\n  onRowBackToViewportRange = new SlickEvent<OnRowBackToViewportRangeArgs>('onRowBackToViewportRange');\n  onRowOutOfViewportRange = new SlickEvent<OnRowOutOfViewportRangeArgs>('onRowOutOfViewportRange');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _gridOptions!: GridOption;\n  protected _gridUid = '';\n  protected _dataView!: SlickDataView;\n  protected _dataViewIdProperty = 'id';\n  protected _expandableOverride: UsabilityOverrideFn | null = null;\n  protected _lastRange: { bottom: number; top: number; } | null = null;\n  protected _expandedRows: any[] = [];\n  protected _eventHandler: SlickEventHandler_;\n  protected _outsideRange = 5;\n  protected _visibleRenderedCellCount = 0;\n  protected _options: RowDetailViewOption;\n  protected _defaults = {\n    columnId: '_detail_selector',\n    cssClass: 'detailView-toggle',\n    expandedClass: undefined,\n    collapsedClass: undefined,\n    keyPrefix: '_',\n    loadOnce: false,\n    collapseAllOnSort: true,\n    reorderable: false,\n    saveDetailViewOnScroll: true,\n    singleRowExpand: false,\n    useSimpleViewportCalc: false,\n    alwaysRenderColumn: true,\n    toolTip: '',\n    width: 30,\n    maxRows: undefined\n  } as RowDetailViewOption;\n  protected _keyPrefix = this._defaults.keyPrefix;\n  protected _gridRowBuffer = 0;\n  protected _rowIdsOutOfViewport: Array<number | string> = [];\n\n  /** Constructor of the Row Detail View Plugin which accepts optional options */\n  constructor(options: RowDetailViewOption) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n    this._eventHandler = new SlickEventHandler();\n\n    // user could override the expandable icon logic from within the options or after instantiating the plugin\n    if (typeof this._options.expandableOverride === 'function') {\n      this.expandableOverride(this._options.expandableOverride);\n    }\n  }\n\n  /**\n   * Initialize the plugin, which requires user to pass the SlickGrid Grid object\n   * @param grid: SlickGrid Grid object\n   */\n  init(grid: SlickGrid) {\n    if (!grid) {\n      throw new Error('RowDetailView Plugin requires the Grid instance to be passed as argument to the \"init()\" method');\n    }\n    this._grid = grid;\n    this._gridUid = grid.getUID();\n    this._gridOptions = grid.getOptions() || {};\n    this._dataView = this._grid.getData<SlickDataView>();\n    this._keyPrefix = this._options?.keyPrefix ?? '_';\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    // Update the minRowBuffer so that the view doesn't disappear when it's at top of screen + the original default 3\n    this._gridRowBuffer = this._gridOptions.minRowBuffer || 0;\n    this._gridOptions.minRowBuffer = this._options.panelRows + 3;\n\n    this._eventHandler\n      .subscribe(this._grid.onClick, this.handleClick.bind(this))\n      .subscribe(this._grid.onScroll, this.handleScroll.bind(this));\n\n    // Sort will, by default, Collapse all of the open items (unless user implements his own onSort which deals with open row and padding)\n    if (this._options.collapseAllOnSort) {\n      this._eventHandler.subscribe(this._grid.onSort, this.collapseAll.bind(this));\n      this._expandedRows = [];\n      this._rowIdsOutOfViewport = [];\n    }\n\n    this._eventHandler.subscribe(this._dataView.onRowCountChanged, () => {\n      this._grid.updateRowCount();\n      this._grid.render();\n    });\n\n    this._eventHandler.subscribe(this._dataView.onRowsChanged, (_e, a) => {\n      this._grid.invalidateRows(a.rows);\n      this._grid.render();\n    });\n\n    // subscribe to the onAsyncResponse so that the plugin knows when the user server side calls finished\n    this.subscribeToOnAsyncResponse();\n\n    // after data is set, let's get the DataView Id Property name used (defaults to \"id\")\n    this._eventHandler.subscribe(this._dataView.onSetItemsCalled, () => {\n      this._dataViewIdProperty = this._dataView?.getIdPropertyName() ?? 'id';\n    });\n\n    // if we use the alternative & simpler calculation of the out of viewport range\n    // we will need to know how many rows are rendered on the screen and we need to wait for grid to be rendered\n    // unfortunately there is no triggered event for knowing when grid is finished, so we use 250ms delay and it's typically more than enough\n    if (this._options.useSimpleViewportCalc) {\n      this._eventHandler.subscribe(this._grid.onRendered, (_e, args) => {\n        if (args?.endRow) {\n          this._visibleRenderedCellCount = args.endRow - args.startRow;\n        }\n      });\n    }\n  }\n\n  /** destroy the plugin and it's events */\n  destroy() {\n    this._eventHandler.unsubscribeAll();\n    this.onAsyncResponse.unsubscribe();\n    this.onAsyncEndUpdate.unsubscribe();\n    this.onAfterRowDetailToggle.unsubscribe();\n    this.onBeforeRowDetailToggle.unsubscribe();\n    this.onRowOutOfViewportRange.unsubscribe();\n    this.onRowBackToViewportRange.unsubscribe();\n  }\n\n  /** Get current plugin options */\n  getOptions() {\n    return this._options;\n  }\n\n  /** set or change some of the plugin options */\n  setOptions(options: Partial<RowDetailViewOption>) {\n    this._options = Utils.extend(true, {}, this._options, options);\n    if (this._options?.singleRowExpand) {\n      this.collapseAll();\n    }\n  }\n\n  /** Find a value in an array and return the index when (or -1 when not found) */\n  protected arrayFindIndex(sourceArray: any[], value: any) {\n    if (Array.isArray(sourceArray)) {\n      for (let i = 0; i < sourceArray.length; i++) {\n        if (sourceArray[i] === value) {\n          return i;\n        }\n      }\n    }\n    return -1;\n  }\n\n  /** Handle mouse click event */\n  protected handleClick(e: SlickEventData, args: { row: number; cell: number; }) {\n    const dataContext = this._grid.getDataItem(args.row);\n    if (!this.checkExpandableOverride(args.row, dataContext, this._grid)) {\n      return;\n    }\n\n    // clicking on a row select checkbox\n    if (this._options.useRowClick || this._grid.getColumns()[args.cell]['id'] === this._options.columnId && (e.target as HTMLDivElement).classList.contains(this._options.cssClass || '')) {\n      // if editing, try to commit\n      if (this._grid.getEditorLock().isActive() && !this._grid.getEditorLock().commitCurrentEdit()) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n        return;\n      }\n\n      // trigger an event before toggling\n      // user could cancel the Row Detail opening when event is returning false\n      if (this.onBeforeRowDetailToggle.notify({ grid: this._grid, item: dataContext }, e, this).getReturnValue() === false) {\n        return;\n      }\n\n      this.toggleRowSelection(args.row, dataContext);\n\n      // trigger an event after toggling\n      this.onAfterRowDetailToggle.notify({\n        grid: this._grid,\n        item: dataContext,\n        expandedRows: this._expandedRows,\n      }, e, this);\n\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n\n  /** If we scroll save detail views that go out of cache range */\n  protected handleScroll() {\n    if (this._options.useSimpleViewportCalc) {\n      this.calculateOutOfRangeViewsSimplerVersion();\n    } else {\n      this.calculateOutOfRangeViews();\n    }\n  }\n\n  /** Calculate when expanded rows become out of view range */\n  protected calculateOutOfRangeViews() {\n    let scrollDir = '';\n    if (this._grid) {\n      const renderedRange = this._grid.getRenderedRange();\n      // Only check if we have expanded rows\n      if (this._expandedRows.length > 0) {\n        // Assume scroll direction is down by default.\n        scrollDir = 'DOWN';\n        if (this._lastRange) {\n          // Some scrolling isn't anything as the range is the same\n          if (this._lastRange.top === renderedRange.top && this._lastRange.bottom === renderedRange.bottom) {\n            return;\n          }\n\n          // If our new top is smaller we are scrolling up\n          if (this._lastRange.top > renderedRange.top ||\n            // Or we are at very top but our bottom is increasing\n            (this._lastRange.top === 0 && renderedRange.top === 0) && this._lastRange.bottom > renderedRange.bottom) {\n            scrollDir = 'UP';\n          }\n        }\n      }\n\n      this._expandedRows.forEach((row) => {\n        const rowIndex = this._dataView?.getRowById(row[this._dataViewIdProperty]) ?? 0;\n        const rowPadding = row[`${this._keyPrefix}sizePadding`];\n        const rowOutOfRange = this.arrayFindIndex(this._rowIdsOutOfViewport, row[this._dataViewIdProperty]) >= 0;\n\n        if (scrollDir === 'UP') {\n          // save the view when asked\n          if (this._options.saveDetailViewOnScroll) {\n            // If the bottom item within buffer range is an expanded row save it.\n            if (rowIndex >= renderedRange.bottom - this._gridRowBuffer) {\n              this.saveDetailView(row);\n            }\n          }\n\n          // If the row expanded area is within the buffer notify that it is back in range\n          if (rowOutOfRange && rowIndex - this._outsideRange < renderedRange.top && rowIndex >= renderedRange.top) {\n            this.notifyBackToViewportWhenDomExist(row, row[this._dataViewIdProperty]);\n          }\n\n          // if our first expanded row is about to go off the bottom\n          else if (!rowOutOfRange && (rowIndex + rowPadding) > renderedRange.bottom) {\n            this.notifyOutOfViewport(row, row[this._dataViewIdProperty]);\n          }\n        }\n        else if (scrollDir === 'DOWN') {\n          // save the view when asked\n          if (this._options.saveDetailViewOnScroll) {\n            // If the top item within buffer range is an expanded row save it.\n            if (rowIndex <= renderedRange.top + this._gridRowBuffer) {\n              this.saveDetailView(row);\n            }\n          }\n\n          // If row index is i higher than bottom with some added value (To ignore top rows off view) and is with view and was our of range\n          if (rowOutOfRange && (rowIndex + rowPadding + this._outsideRange) > renderedRange.bottom && rowIndex < rowIndex + rowPadding) {\n            this.notifyBackToViewportWhenDomExist(row, row[this._dataViewIdProperty]);\n          }\n          // if our row is outside top of and the buffering zone but not in the array of outOfVisable range notify it\n          else if (!rowOutOfRange && rowIndex < renderedRange.top) {\n            this.notifyOutOfViewport(row, row[this._dataViewIdProperty]);\n          }\n        }\n      });\n      this._lastRange = renderedRange;\n    }\n  }\n\n  /** This is an alternative & more simpler version of the Calculate when expanded rows become out of view range */\n  protected calculateOutOfRangeViewsSimplerVersion() {\n    if (this._grid) {\n      const renderedRange = this._grid.getRenderedRange();\n\n      this._expandedRows.forEach((row) => {\n        const rowIndex = this._dataView.getRowById(row[this._dataViewIdProperty]) ?? -1;\n        const isOutOfVisibility = this.checkIsRowOutOfViewportRange(rowIndex, renderedRange);\n        if (!isOutOfVisibility && this.arrayFindIndex(this._rowIdsOutOfViewport, row[this._dataViewIdProperty]) >= 0) {\n          this.notifyBackToViewportWhenDomExist(row, row[this._dataViewIdProperty]);\n        } else if (isOutOfVisibility) {\n          this.notifyOutOfViewport(row, row[this._dataViewIdProperty]);\n        }\n      });\n    }\n  }\n\n  /**\n   * Check if the row became out of visible range (when user can't see it anymore)\n   * @param rowIndex\n   * @param renderedRange from SlickGrid\n   */\n  protected checkIsRowOutOfViewportRange(rowIndex: number, renderedRange: any) {\n    if (Math.abs(renderedRange.bottom - this._gridRowBuffer - rowIndex) > this._visibleRenderedCellCount * 2) {\n      return true;\n    }\n    return false;\n  }\n\n  /** Send a notification, through \"onRowOutOfViewportRange\", that is out of the viewport range */\n  protected notifyOutOfViewport(item: any, rowId: number | string) {\n    const rowIndex = (item.rowIndex || this._dataView.getRowById(item[this._dataViewIdProperty])) as number;\n\n    this.onRowOutOfViewportRange.notify({\n      grid: this._grid,\n      item,\n      rowId,\n      rowIndex,\n      expandedRows: this._expandedRows,\n      rowIdsOutOfViewport: this.syncOutOfViewportArray(rowId, true)\n    }, null, this);\n  }\n\n  /** Send a notification, through \"onRowBackToViewportRange\", that a row came back into the viewport visible range */\n  protected notifyBackToViewportWhenDomExist(item: any, rowId: number | string) {\n    const rowIndex = (item.rowIndex || this._dataView.getRowById(item[this._dataViewIdProperty])) as number;\n\n    setTimeout(() => {\n      // make sure View Row DOM Element really exist before notifying that it's a row that is visible again\n      if (document.querySelector(`.${this._gridUid} .cellDetailView_${item[this._dataViewIdProperty]}`)) {\n        this.onRowBackToViewportRange.notify({\n          grid: this._grid,\n          item,\n          rowId,\n          rowIndex,\n          expandedRows: this._expandedRows,\n          rowIdsOutOfViewport: this.syncOutOfViewportArray(rowId, false)\n        }, null, this);\n      }\n    }, 100);\n  }\n\n  /**\n   * This function will sync the \"out of viewport\" array whenever necessary.\n   * The sync can add a detail row (when necessary, no need to add again if it already exist) or delete a row from the array.\n   * @param rowId: number\n   * @param isAdding: are we adding or removing a row?\n   */\n  protected syncOutOfViewportArray(rowId: number | string, isAdding: boolean) {\n    const arrayRowIndex = this.arrayFindIndex(this._rowIdsOutOfViewport, rowId);\n\n    if (isAdding && arrayRowIndex < 0) {\n      this._rowIdsOutOfViewport.push(rowId);\n    } else if (!isAdding && arrayRowIndex >= 0) {\n      this._rowIdsOutOfViewport.splice(arrayRowIndex, 1);\n    }\n    return this._rowIdsOutOfViewport;\n  }\n\n  // Toggle between showing or hiding a row\n  protected toggleRowSelection(rowNumber: number, dataContext: any) {\n    if (!this.checkExpandableOverride(rowNumber, dataContext, this._grid)) {\n      return;\n    }\n\n    this._dataView.beginUpdate();\n    this.handleAccordionShowHide(dataContext);\n    this._dataView.endUpdate();\n  }\n\n  /** Collapse all of the open detail rows */\n  collapseAll() {\n    this._dataView.beginUpdate();\n    for (let i = this._expandedRows.length - 1; i >= 0; i--) {\n      this.collapseDetailView(this._expandedRows[i], true);\n    }\n    this._dataView.endUpdate();\n  }\n\n  /** Collapse a detail row so that it is not longer open */\n  collapseDetailView(item: any, isMultipleCollapsing = false) {\n    if (!isMultipleCollapsing) {\n      this._dataView.beginUpdate();\n    }\n    // Save the details on the collapse assuming onetime loading\n    if (this._options.loadOnce) {\n      this.saveDetailView(item);\n    }\n\n    item[`${this._keyPrefix}collapsed`] = true;\n    for (let idx = 1; idx <= item[`${this._keyPrefix}sizePadding`]; idx++) {\n      this._dataView.deleteItem(item[this._dataViewIdProperty] + '.' + idx);\n    }\n    item[`${this._keyPrefix}sizePadding`] = 0;\n    this._dataView.updateItem(item[this._dataViewIdProperty], item);\n\n    // Remove the item from the expandedRows\n    this._expandedRows = this._expandedRows.filter((r) => {\n      return r[this._dataViewIdProperty] !== item[this._dataViewIdProperty];\n    });\n\n    if (!isMultipleCollapsing) {\n      this._dataView.endUpdate();\n    }\n  }\n\n  /** Expand a detail row by providing the dataview item that is to be expanded */\n  expandDetailView(item: any) {\n    if (this._options?.singleRowExpand) {\n      this.collapseAll();\n    }\n\n    item[`${this._keyPrefix}collapsed`] = false;\n    this._expandedRows.push(item);\n\n    // In the case something went wrong loading it the first time such a scroll of screen before loaded\n    if (!item[`${this._keyPrefix}detailContent`]) {\n      item[`${this._keyPrefix}detailViewLoaded`] = false;\n    }\n    // display pre-loading template\n    if (!item[`${this._keyPrefix}detailViewLoaded`] || this._options.loadOnce !== true) {\n      item[`${this._keyPrefix}detailContent`] = this._options?.preTemplate?.(item);\n    } else {\n      this.onAsyncResponse.notify({\n        item,\n        itemDetail: item,\n        detailView: item[`${this._keyPrefix}detailContent`],\n        grid: this._grid\n      }, undefined, this);\n      this.applyTemplateNewLineHeight(item);\n      this._dataView.updateItem(item[this._dataViewIdProperty], item);\n\n      return;\n    }\n\n    this.applyTemplateNewLineHeight(item);\n    this._dataView.updateItem(item[this._dataViewIdProperty], item);\n\n    // async server call\n    this._options.process(item);\n  }\n\n  /** Saves the current state of the detail view */\n  saveDetailView(item: any) {\n    const view = document.querySelector(`.${this._gridUid} .innerDetailView_${item[this._dataViewIdProperty]}`);\n    if (view) {\n      const html = view.innerHTML;\n      if (html !== undefined) {\n        item[`${this._keyPrefix}detailContent`] = html;\n      }\n    }\n  }\n\n  /**\n   * subscribe to the onAsyncResponse so that the plugin knows when the user server side calls finished\n   * the response has to be as \"args.item\" (or \"args.itemDetail\") with it's data back\n   */\n  protected subscribeToOnAsyncResponse() {\n    this.onAsyncResponse.subscribe((e, args) => {\n      if (!args || (!args.item && !args.itemDetail)) {\n        throw 'Slick.RowDetailView plugin requires the onAsyncResponse() to supply \"args.item\" property.';\n      }\n\n      // we accept item/itemDetail, just get the one which has data\n      const itemDetail = args.item || args.itemDetail;\n\n      // If we just want to load in a view directly we can use detailView property to do so\n      if (args.detailView) {\n        itemDetail[`${this._keyPrefix}detailContent`] = args.detailView;\n      } else {\n        itemDetail[`${this._keyPrefix}detailContent`] = this._options?.postTemplate?.(itemDetail);\n      }\n\n      itemDetail[`${this._keyPrefix}detailViewLoaded`] = true;\n      this._dataView.updateItem(itemDetail[this._dataViewIdProperty], itemDetail);\n\n      // trigger an event once the post template is finished loading\n      this.onAsyncEndUpdate.notify({\n        grid: this._grid,\n        item: itemDetail,\n        itemDetail\n      }, e, this);\n    });\n  }\n\n  /** When row is getting toggled, we will handle the action of collapsing/expanding */\n  protected handleAccordionShowHide(item: any) {\n    if (item) {\n      if (!item[`${this._keyPrefix}collapsed`]) {\n        this.collapseDetailView(item);\n      } else {\n        this.expandDetailView(item);\n      }\n    }\n  }\n\n  //////////////////////////////////////////////////////////////\n  //////////////////////////////////////////////////////////////\n\n  /** Get the Row Detail padding (which are the rows dedicated to the detail panel) */\n  protected getPaddingItem(parent: any, offset: any) {\n    const item: any = {};\n\n    Object.keys(this._dataView).forEach(prop => {\n      console.log(item[prop]);\n      item[prop] = null;\n    });\n    item[this._dataViewIdProperty] = parent[this._dataViewIdProperty] + '.' + offset;\n\n    // additional hidden padding metadata fields\n    item[`${this._keyPrefix}collapsed`] = true;\n    item[`${this._keyPrefix}isPadding`] = true;\n    item[`${this._keyPrefix}parent`] = parent;\n    item[`${this._keyPrefix}offset`] = offset;\n\n    return item;\n  };\n\n  /** Create the detail ctr node. this belongs to the dev & can be custom-styled as per */\n  protected applyTemplateNewLineHeight(item: any) {\n    // the height is calculated by the template row count (how many line of items does the template view have)\n    const rowCount = this._options.panelRows;\n\n    // calculate padding requirements based on detail-content..\n    // ie. worst-case: create an invisible dom node now & find it's height.\n    const lineHeight = 13; // we know cuz we wrote the custom css init ;)\n    item[`${this._keyPrefix}sizePadding`] = Math.ceil(((rowCount * 2) * lineHeight) / this._gridOptions.rowHeight!);\n    item[`${this._keyPrefix}height`] = (item[`${this._keyPrefix}sizePadding`] * this._gridOptions.rowHeight!);\n    const idxParent = this._dataView.getIdxById(item[this._dataViewIdProperty]) ?? 0;\n    for (let idx = 1; idx <= item[`${this._keyPrefix}sizePadding`]; idx++) {\n      this._dataView.insertItem(idxParent + idx, this.getPaddingItem(item, idx));\n    }\n  }\n\n  /** Get the Column Definition of the first column dedicated to toggling the Row Detail View */\n  getColumnDefinition() {\n    return {\n      id: this._options.columnId,\n      name: '',\n      reorderable: this._options.reorderable,\n      toolTip: this._options.toolTip,\n      field: 'sel',\n      width: this._options.width,\n      resizable: false,\n      sortable: false,\n      alwaysRenderColumn: this._options.alwaysRenderColumn,\n      cssClass: this._options.cssClass,\n      formatter: this.detailSelectionFormatter.bind(this)\n    };\n  }\n\n  /** Return the currently expanded rows */\n  getExpandedRows() {\n    return this._expandedRows;\n  }\n\n  /** The cell Formatter that shows the icon that will be used to toggle the Row Detail */\n  protected detailSelectionFormatter(row: number, _cell: number, _val: any, _column: Column, dataContext: any, grid: SlickGrid): FormatterResultWithHtml | HTMLElement | '' {\n    if (!this.checkExpandableOverride(row, dataContext, grid)) {\n      return '';\n    } else {\n      if (dataContext[`${this._keyPrefix}collapsed`] === undefined) {\n        dataContext[`${this._keyPrefix}collapsed`] = true;\n        dataContext[`${this._keyPrefix}sizePadding`] = 0;     //the required number of pading rows\n        dataContext[`${this._keyPrefix}height`] = 0;     //the actual height in pixels of the detail field\n        dataContext[`${this._keyPrefix}isPadding`] = false;\n        dataContext[`${this._keyPrefix}parent`] = undefined;\n        dataContext[`${this._keyPrefix}offset`] = 0;\n      }\n\n      if (dataContext[`${this._keyPrefix}isPadding`]) {\n        // render nothing\n      }\n      else if (dataContext[`${this._keyPrefix}collapsed`]) {\n        let collapsedClasses = this._options.cssClass + ' expand ';\n        if (this._options.collapsedClass) {\n          collapsedClasses += this._options.collapsedClass;\n        }\n        return Utils.createDomElement('div', { className: collapsedClasses });\n      }\n      else {\n        const rowHeight = this._gridOptions.rowHeight;\n        let outterHeight = dataContext[`${this._keyPrefix}sizePadding`] * this._gridOptions.rowHeight!;\n\n        if (this._options.maxRows !== undefined && dataContext[`${this._keyPrefix}sizePadding`] > this._options.maxRows) {\n          outterHeight = this._options.maxRows * rowHeight!;\n          dataContext[`${this._keyPrefix}sizePadding`] = this._options.maxRows;\n        }\n\n        // sneaky extra </div> inserted here-----------------v\n        let expandedClasses = this._options.cssClass + ' collapse ';\n        if (this._options.expandedClass) {\n          expandedClasses += this._options.expandedClass;\n        }\n\n        // create the Row Detail div container that will be inserted AFTER the `.slick-cell`\n        const cellDetailContainerElm = Utils.createDomElement('div', {\n          className: `dynamic-cell-detail cellDetailView_${dataContext[this._dataViewIdProperty]}`,\n          style: { height: `${outterHeight}px`, top: `${rowHeight}px` }\n        });\n        const innerContainerElm = Utils.createDomElement('div', { className: `detail-container detailViewContainer_${dataContext[this._dataViewIdProperty]}` });\n        const innerDetailViewElm = Utils.createDomElement('div', { className: `innerDetailView_${dataContext[this._dataViewIdProperty]}` });\n        innerDetailViewElm.innerHTML = this._grid.sanitizeHtmlString(dataContext[`${this._keyPrefix}detailContent`]);\n\n        innerContainerElm.appendChild(innerDetailViewElm);\n        cellDetailContainerElm.appendChild(innerContainerElm);\n\n        const result: FormatterResultWithHtml = {\n          html: Utils.createDomElement('div', { className: expandedClasses }),\n          insertElementAfterTarget: cellDetailContainerElm,\n        };\n\n        return result;\n      }\n    }\n    return '';\n  }\n\n  /** Resize the Row Detail View */\n  resizeDetailView(item: any) {\n    if (!item) {\n      return;\n    }\n\n    // Grad each of the DOM elements\n    const mainContainer = document.querySelector<HTMLDivElement>(`.${this._gridUid} .detailViewContainer_${item[this._dataViewIdProperty]}`);\n    const cellItem = document.querySelector<HTMLDivElement>(`.${this._gridUid} .cellDetailView_${item[this._dataViewIdProperty]}`);\n    const inner = document.querySelector<HTMLDivElement>(`.${this._gridUid} .innerDetailView_${item[this._dataViewIdProperty]}`);\n\n    if (!mainContainer || !cellItem || !inner) {\n      return;\n    }\n\n    for (let idx = 1; idx <= item[`${this._keyPrefix}sizePadding`]; idx++) {\n      this._dataView.deleteItem(`${item[this._dataViewIdProperty]}.${idx}`);\n    }\n\n    const rowHeight = this._gridOptions.rowHeight; // height of a row\n    const lineHeight = 13; // we know cuz we wrote the custom css innit ;)\n\n    // remove the height so we can calculate the height\n    mainContainer.style.minHeight = '';\n\n    // Get the scroll height for the main container so we know the actual size of the view\n    const itemHeight = mainContainer.scrollHeight;\n\n    // Now work out how many rows\n    const rowCount = Math.ceil(itemHeight / rowHeight!);\n\n    item[`${this._keyPrefix}sizePadding`] = Math.ceil(((rowCount * 2) * lineHeight) / rowHeight!);\n    item[`${this._keyPrefix}height`] = itemHeight;\n\n    let outterHeight = (item[`${this._keyPrefix}sizePadding`] * rowHeight!);\n    if (this._options.maxRows !== undefined && item[`${this._keyPrefix}sizePadding`] > this._options.maxRows) {\n      outterHeight = this._options.maxRows * rowHeight!;\n      item[`${this._keyPrefix}sizePadding`] = this._options.maxRows;\n    }\n\n    // If the padding is now more than the original minRowBuff we need to increase it\n    if (this._grid.getOptions().minRowBuffer! < item[`${this._keyPrefix}sizePadding`]) {\n      // Update the minRowBuffer so that the view doesn't disappear when it's at top of screen + the original default 3\n      this._grid.getOptions().minRowBuffer = item[`${this._keyPrefix}sizePadding`] + 3;\n    }\n\n    mainContainer.setAttribute('style', 'min-height: ' + item[`${this._keyPrefix}height`] + 'px');\n    if (cellItem) {\n      cellItem.setAttribute('style', 'height: ' + outterHeight + 'px; top:' + rowHeight + 'px');\n    }\n\n    const idxParent = this._dataView.getIdxById(item[this._dataViewIdProperty]) ?? 0;\n    for (let idx = 1; idx <= item[`${this._keyPrefix}sizePadding`]; idx++) {\n      this._dataView.insertItem(idxParent + idx, this.getPaddingItem(item, idx));\n    }\n\n    // Lastly save the updated state\n    this.saveDetailView(item);\n  }\n\n  /** Takes in the item we are filtering and if it is an expanded row returns it's parents row to filter on */\n  getFilterItem(item: any) {\n    if (item[`${this._keyPrefix}isPadding`] && item[`${this._keyPrefix}parent`]) {\n      item = item[`${this._keyPrefix}parent`];\n    }\n    return item;\n  }\n\n  protected checkExpandableOverride(row: number, dataContext: any, grid: SlickGrid) {\n    if (typeof this._expandableOverride === 'function') {\n      return this._expandableOverride(row, dataContext, grid);\n    }\n    return true;\n  }\n\n  /**\n   * Method that user can pass to override the default behavior or making every row an expandable row.\n   * In order word, user can choose which rows to be an available row detail (or not) by providing his own logic.\n   * @param overrideFn: override function callback\n   */\n  expandableOverride(overrideFn: UsabilityOverrideFn) {\n    this._expandableOverride = overrideFn;\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      Plugins: {\n        RowDetailView: SlickRowDetailView\n      }\n    }\n  });\n}\n\n", "import { SlickEvent as SlickEvent_, type SlickEventData as SlickEventData_, SlickEventHandler as SlickEventHandler_, Utils as Utils_ } from '../slick.core';\nimport type { Column, DragRowMove, FormatterResultWithHtml, RowMoveManagerOption, UsabilityOverrideFn } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * Row Move Manager options:\n *    containerCssClass:        A CSS class to be added to the cell container.\n *    cssClass:                 A CSS class to be added to the div of the cell formatter.\n *    columnId:                 Column definition id (defaults to \"_move\")\n *    cancelEditOnDrag:         Do we want to cancel any Editing while dragging a row (defaults to false)\n *    disableRowSelection:      Do we want to disable the row selection? (defaults to false)\n *    hideRowMoveShadow:        Do we want to hide the row move shadow clone? (defaults to true)\n *    rowMoveShadowMarginTop:   When row move shadow is shown, optional margin-top (defaults to 0)\n *    rowMoveShadowMarginLeft:  When row move shadow is shown, optional margin-left (defaults to 0)\n *    rowMoveShadowOpacity:     When row move shadow is shown, what is its opacity? (defaults to 0.95)\n *    rowMoveShadowScale:       When row move shadow is shown, what is its size scale? (default to 0.75)\n *    singleRowMove:            Do we want a single row move? Setting this to false means that it's a multple row move (defaults to false)\n *    width:                    Width of the column\n *    usabilityOverride:        Callback method that user can override the default behavior of the row being moveable or not\n *\n */\n\nexport class SlickRowMoveManager {\n  // --\n  // public API\n  pluginName = 'RowMoveManager' as const;\n  onBeforeMoveRows = new SlickEvent<{ grid: SlickGrid; rows: number[]; insertBefore: number; }>('onBeforeMoveRows');\n  onMoveRows = new SlickEvent<{ grid: SlickGrid; rows: number[]; insertBefore: number; }>('onMoveRows');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _canvas!: HTMLElement;\n  protected _dragging = false;\n  protected _eventHandler: SlickEventHandler_;\n  protected _usabilityOverride?: UsabilityOverrideFn;\n  protected _options: RowMoveManagerOption;\n  protected _defaults: RowMoveManagerOption = {\n    columnId: '_move',\n    cssClass: undefined,\n    cancelEditOnDrag: false,\n    disableRowSelection: false,\n    hideRowMoveShadow: true,\n    reorderable: false,\n    rowMoveShadowMarginTop: 0,\n    rowMoveShadowMarginLeft: 0,\n    rowMoveShadowOpacity: 0.95,\n    rowMoveShadowScale: 0.75,\n    singleRowMove: false,\n    width: 40,\n  };\n\n  constructor(options: Partial<RowMoveManagerOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n    this._eventHandler = new SlickEventHandler();\n  }\n\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._canvas = this._grid.getCanvasNode();\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    // user could override the expandable icon logic from within the options or after instantiating the plugin\n    if (typeof this._options?.usabilityOverride === 'function') {\n      this.usabilityOverride(this._options.usabilityOverride);\n    }\n\n    this._eventHandler\n      .subscribe(this._grid.onDragInit, this.handleDragInit.bind(this))\n      .subscribe(this._grid.onDragStart, this.handleDragStart.bind(this))\n      .subscribe(this._grid.onDrag, this.handleDrag.bind(this))\n      .subscribe(this._grid.onDragEnd, this.handleDragEnd.bind(this));\n  }\n\n  destroy() {\n    this._eventHandler.unsubscribeAll();\n  }\n\n  setOptions(newOptions: Partial<RowMoveManagerOption>) {\n    this._options = Utils.extend({}, this._options, newOptions);\n  }\n\n  protected handleDragInit(e: SlickEventData_) {\n    // prevent the grid from cancelling drag'n'drop by default\n    e.stopImmediatePropagation();\n  }\n\n  protected handleDragStart(e: SlickEventData_, dd: DragRowMove): boolean | void {\n    const cell = this._grid.getCellFromEvent(e) || { cell: -1, row: -1 };\n    const currentRow = cell?.row;\n    const dataContext = this._grid.getDataItem(currentRow);\n\n    if (!this.checkUsabilityOverride(currentRow, dataContext, this._grid)) {\n      return;\n    }\n\n    if (this._options.cancelEditOnDrag && this._grid.getEditorLock().isActive()) {\n      this._grid.getEditorLock().cancelCurrentEdit();\n    }\n\n    if (this._grid.getEditorLock().isActive() || !this.isHandlerColumn(cell.cell)) {\n      return false;\n    }\n\n    this._dragging = true;\n    e.stopImmediatePropagation();\n\n    // optionally create a shadow element of the row so that we can see all the time which row exactly we're dragging\n    if (!this._options.hideRowMoveShadow) {\n      const slickRowElm = this._grid.getCellNode(cell.row, cell.cell)?.closest<HTMLDivElement>('.slick-row');\n      if (slickRowElm) {\n        dd.clonedSlickRow = slickRowElm.cloneNode(true) as HTMLDivElement;\n        dd.clonedSlickRow.classList.add('slick-reorder-shadow-row');\n        dd.clonedSlickRow.style.display = 'none';\n        dd.clonedSlickRow.style.marginLeft = Number(this._options.rowMoveShadowMarginLeft || 0) + 'px';\n        dd.clonedSlickRow.style.marginTop = Number(this._options.rowMoveShadowMarginTop || 0) + 'px';\n        dd.clonedSlickRow.style.opacity = `${this._options.rowMoveShadowOpacity || 0.95}`;\n        dd.clonedSlickRow.style.transform = `scale(${this._options.rowMoveShadowScale || 0.75})`;\n        this._canvas.appendChild(dd.clonedSlickRow);\n      }\n    }\n\n    let selectedRows = this._options.singleRowMove ? [cell.row] : this._grid.getSelectedRows();\n    if (selectedRows.length === 0 || !selectedRows.some(selectedRow => selectedRow === cell.row)) {\n      selectedRows = [cell.row];\n      if (!this._options.disableRowSelection) {\n        this._grid.setSelectedRows(selectedRows);\n      }\n    }\n\n    const rowHeight = this._grid.getOptions().rowHeight;\n\n    dd.selectedRows = selectedRows;\n\n    dd.selectionProxy = document.createElement('div');\n    dd.selectionProxy.className = 'slick-reorder-proxy';\n    dd.selectionProxy.style.display = 'none';\n    dd.selectionProxy.style.position = 'absolute';\n    dd.selectionProxy.style.zIndex = '99999';\n    dd.selectionProxy.style.width = `${this._canvas.clientWidth}px`;\n    dd.selectionProxy.style.height = `${rowHeight! * selectedRows.length}px`;\n    this._canvas.appendChild(dd.selectionProxy);\n\n    dd.guide = document.createElement('div');\n    dd.guide.className = 'slick-reorder-guide';\n    dd.guide.style.position = 'absolute';\n    dd.guide.style.zIndex = '99999';\n    dd.guide.style.width = `${this._canvas.clientWidth}px`;\n    dd.guide.style.top = `-1000px`;\n    this._canvas.appendChild(dd.guide);\n\n    dd.insertBefore = -1;\n  }\n\n  protected handleDrag(evt: SlickEventData_, dd: DragRowMove): boolean | void {\n    if (!this._dragging) {\n      return;\n    }\n\n    evt.stopImmediatePropagation();\n    const e = evt.getNativeEvent<MouseEvent | TouchEvent>();\n\n    const targetEvent = (e as TouchEvent)?.touches?.[0] ?? e;\n    const top = targetEvent.pageY - (Utils.offset(this._canvas)?.top ?? 0);\n    dd.selectionProxy.style.top = `${top - 5}px`;\n    dd.selectionProxy.style.display = 'block';\n\n    // if the row move shadow is enabled, we'll also make it follow the mouse cursor\n    if (dd.clonedSlickRow) {\n      dd.clonedSlickRow.style.top = `${top - 6}px`;\n      dd.clonedSlickRow.style.display = 'block';\n    }\n\n    const insertBefore = Math.max(0, Math.min(Math.round(top / this._grid.getOptions().rowHeight!), this._grid.getDataLength()));\n    if (insertBefore !== dd.insertBefore) {\n      const eventData = {\n        grid: this._grid,\n        rows: dd.selectedRows,\n        insertBefore\n      };\n\n      if (this.onBeforeMoveRows.notify(eventData).getReturnValue() === false) {\n        dd.canMove = false;\n      } else {\n        dd.canMove = true;\n      }\n\n      // if there's a UsabilityOverride defined, we also need to verify that the condition is valid\n      if (this._usabilityOverride && dd.canMove) {\n        const insertBeforeDataContext = this._grid.getDataItem(insertBefore);\n        dd.canMove = this.checkUsabilityOverride(insertBefore, insertBeforeDataContext, this._grid);\n      }\n\n      // if the new target is possible we'll display the dark blue bar (representin the acceptability) at the target position\n      // else it won't show up (it will be off the screen)\n      if (!dd.canMove) {\n        dd.guide.style.top = '-1000px';\n      } else {\n        dd.guide.style.top = `${insertBefore * (this._grid.getOptions().rowHeight || 0)}px`;\n      }\n\n      dd.insertBefore = insertBefore;\n    }\n  }\n\n  protected handleDragEnd(e: SlickEventData_, dd: DragRowMove) {\n    if (!this._dragging) {\n      return;\n    }\n    this._dragging = false;\n    e.stopImmediatePropagation();\n\n    dd.guide?.remove();\n    dd.selectionProxy?.remove();\n    dd.clonedSlickRow?.remove();\n\n    if (dd.canMove) {\n      const eventData = {\n        grid: this._grid,\n        rows: dd.selectedRows,\n        insertBefore: dd.insertBefore\n      };\n      // TODO:  this._grid.remapCellCssClasses ?\n      this.onMoveRows.notify(eventData);\n    }\n  }\n\n  getColumnDefinition(): Column {\n    const columnId = String(this._options?.columnId ?? this._defaults.columnId);\n\n    return {\n      id: columnId,\n      name: '',\n      field: 'move',\n      behavior: 'selectAndMove',\n      reorderable: this._options.reorderable,\n      excludeFromColumnPicker: true,\n      excludeFromGridMenu: true,\n      excludeFromHeaderMenu: true,\n      resizable: false,\n      selectable: false,\n      width: this._options.width || 40,\n      formatter: this.moveIconFormatter.bind(this)\n    };\n  }\n\n  protected moveIconFormatter(row: number, _cell: number, _val: any, _column: Column, dataContext: any, grid: SlickGrid): FormatterResultWithHtml | string {\n    if (!this.checkUsabilityOverride(row, dataContext, grid)) {\n      return '';\n    } else {\n      const iconElm = document.createElement('div');\n      iconElm.className = this._options.cssClass || '';\n      return {\n        addClasses: `cell-reorder dnd ${this._options.containerCssClass || ''}`,\n        html: iconElm\n      };\n    }\n  }\n\n  protected checkUsabilityOverride(row: number, dataContext: any, grid: SlickGrid) {\n    if (typeof this._usabilityOverride === 'function') {\n      return this._usabilityOverride(row, dataContext, grid);\n    }\n    return true;\n  }\n\n  /**\n   * Method that user can pass to override the default behavior or making every row moveable.\n   * In order word, user can choose which rows to be an available as moveable (or not) by providing his own logic show/hide icon and usability.\n   * @param overrideFn: override function callback\n   */\n  usabilityOverride(overrideFn: UsabilityOverrideFn) {\n    this._usabilityOverride = overrideFn;\n  }\n\n  isHandlerColumn(columnIndex: number | string) {\n    return /move|selectAndMove/.test(this._grid.getColumns()[+columnIndex].behavior || '');\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      RowMoveManager: SlickRowMoveManager\n    }\n  });\n}\n\n", "import { keyCode as keyCode_, SlickEvent as SlickEvent_, SlickEventData as SlickEventData_, SlickEventHandler as SlickEventHandler_, SlickRange as SlickRange_, Utils as Utils_ } from '../slick.core';\nimport { Draggable as Draggable_ } from '../slick.interactions';\nimport { SlickCellRangeDecorator as SlickCellRangeDecorator_ } from './slick.cellrangedecorator';\nimport { SlickCellRangeSelector as SlickCellRangeSelector_ } from './slick.cellrangeselector';\nimport type { SlickCrossGridRowMoveManager as SlickCrossGridRowMoveManager_ } from './slick.crossgridrowmovemanager';\nimport type { SlickRowMoveManager as SlickRowMoveManager_ } from './slick.rowmovemanager';\nimport type { OnActiveCellChangedEventArgs, RowSelectionModelOption } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickCellRangeDecorator = IIFE_ONLY ? Slick.CellRangeDecorator : SlickCellRangeDecorator_;\nconst SlickCellRangeSelector = IIFE_ONLY ? Slick.CellRangeSelector : SlickCellRangeSelector_;\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst SlickEventHandler = IIFE_ONLY ? Slick.EventHandler : SlickEventHandler_;\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport class SlickRowSelectionModel {\n  // --\n  // public API\n  pluginName = 'RowSelectionModel' as const;\n  onSelectedRangesChanged = new SlickEvent<SlickRange_[]>('onSelectedRangesChanged');\n  // _handler, _inHandler, _isRowMoveManagerHandler, _options, wrapHandler\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _ranges: SlickRange_[] = [];\n  protected _eventHandler = new SlickEventHandler();\n  protected _inHandler = false;\n  protected _selector?: SlickCellRangeSelector_;\n  protected _isRowMoveManagerHandler: any;\n  protected _options: RowSelectionModelOption;\n  protected _defaults: RowSelectionModelOption = {\n    selectActiveRow: true,\n    dragToSelect: false,\n    autoScrollWhenDrag: true,\n    cellRangeSelector: undefined\n  };\n\n  constructor(options?: Partial<RowSelectionModelOption>) {\n    this._options = Utils.extend(true, {}, this._defaults, options);\n  }\n\n  init(grid: SlickGrid) {\n    if (Draggable === undefined) {\n      throw new Error('Slick.Draggable is undefined, make sure to import \"slick.interactions.js\"');\n    }\n\n    this._selector = this._options.cellRangeSelector;\n    this._grid = grid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    if (!this._selector && this._options.dragToSelect) {\n      if (!SlickCellRangeDecorator) {\n        throw new Error('Slick.CellRangeDecorator is required when option dragToSelect set to true');\n      }\n      this._selector = new SlickCellRangeSelector({\n        selectionCss: { border: 'none' } as CSSStyleDeclaration,\n        autoScroll: this._options.autoScrollWhenDrag\n      });\n    }\n\n    this._eventHandler.subscribe(this._grid.onActiveCellChanged, this.wrapHandler(this.handleActiveCellChange).bind(this));\n    this._eventHandler.subscribe(this._grid.onKeyDown, this.wrapHandler(this.handleKeyDown).bind(this));\n    this._eventHandler.subscribe(this._grid.onClick, this.wrapHandler(this.handleClick).bind(this));\n    if (this._selector) {\n      grid.registerPlugin(this._selector);\n      this._selector.onCellRangeSelecting.subscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onCellRangeSelected.subscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onBeforeCellRangeSelected.subscribe(this.handleBeforeCellRangeSelected.bind(this));\n    }\n  }\n\n  destroy() {\n    this._eventHandler.unsubscribeAll();\n    if (this._selector) {\n      this._selector.onCellRangeSelecting.unsubscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onCellRangeSelected.unsubscribe(this.handleCellRangeSelected.bind(this));\n      this._selector.onBeforeCellRangeSelected.unsubscribe(this.handleBeforeCellRangeSelected.bind(this));\n      this._grid.unregisterPlugin(this._selector);\n      if (this._selector.destroy) {\n        this._selector.destroy();\n      }\n    }\n  }\n\n  protected wrapHandler(handler: (...args: any) => void) {\n    return (...args: any) => {\n      if (!this._inHandler) {\n        this._inHandler = true;\n        handler.apply(this, args);\n        this._inHandler = false;\n      }\n    };\n  }\n\n  protected rangesToRows(ranges: SlickRange_[]): number[] {\n    const rows: number[] = [];\n    for (let i = 0; i < ranges.length; i++) {\n      for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n        rows.push(j);\n      }\n    }\n    return rows;\n  }\n\n  protected rowsToRanges(rows: number[]) {\n    const ranges: SlickRange_[] = [];\n    const lastCell = this._grid.getColumns().length - 1;\n    rows.forEach(row => ranges.push(new SlickRange(row, 0, row, lastCell)));\n    return ranges;\n  }\n\n  protected getRowsRange(from: number, to: number) {\n    let i;\n    const rows: number[] = [];\n    for (i = from; i <= to; i++) {\n      rows.push(i);\n    }\n    for (i = to; i < from; i++) {\n      rows.push(i);\n    }\n    return rows;\n  }\n\n  getSelectedRows() {\n    return this.rangesToRows(this._ranges);\n  }\n\n  setSelectedRows(rows: number[]) {\n    this.setSelectedRanges(this.rowsToRanges(rows), 'SlickRowSelectionModel.setSelectedRows');\n  }\n\n  setSelectedRanges(ranges: SlickRange_[], caller = 'SlickRowSelectionModel.setSelectedRanges') {\n    // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged\n    if ((!this._ranges || this._ranges.length === 0) && (!ranges || ranges.length === 0)) {\n      return;\n    }\n    this._ranges = ranges;\n\n    // provide extra \"caller\" argument through SlickEventData event to avoid breaking the previous pubsub event structure\n    // that only accepts an array of selected range `SlickRange[]`, the SlickEventData args will be merged and used later by `onSelectedRowsChanged`\n    const eventData = new SlickEventData(new CustomEvent('click', { detail: { caller } }), this._ranges);\n    this.onSelectedRangesChanged.notify(this._ranges, eventData);\n  }\n\n  getSelectedRanges() {\n    return this._ranges;\n  }\n\n  refreshSelections() {\n    this.setSelectedRows(this.getSelectedRows());\n  }\n\n  protected handleActiveCellChange(_e: SlickEventData_, args: OnActiveCellChangedEventArgs) {\n    if (this._options.selectActiveRow && Utils.isDefined(args.row)) {\n      this.setSelectedRanges([new SlickRange(args.row, 0, args.row, this._grid.getColumns().length - 1)]);\n    }\n  }\n\n  protected handleKeyDown(e: KeyboardEvent) {\n    const activeRow = this._grid.getActiveCell();\n    if (this._grid.getOptions().multiSelect && activeRow\n      && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey\n      && (e.which === keyCode.UP || e.which === keyCode.DOWN)) {\n      let selectedRows = this.getSelectedRows();\n      selectedRows.sort(function (x, y) {\n        return x - y;\n      });\n\n      if (!selectedRows.length) {\n        selectedRows = [activeRow.row];\n      }\n\n      let top = selectedRows[0];\n      let bottom = selectedRows[selectedRows.length - 1];\n      let active: number;\n\n      if (e.which === keyCode.DOWN) {\n        active = activeRow.row < bottom || top === bottom ? ++bottom : ++top;\n      } else {\n        active = activeRow.row < bottom ? --bottom : --top;\n      }\n\n      if (active >= 0 && active < this._grid.getDataLength()) {\n        this._grid.scrollRowIntoView(active);\n        const tempRanges = this.rowsToRanges(this.getRowsRange(top, bottom));\n        this.setSelectedRanges(tempRanges);\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }\n\n  protected handleClick(e: MouseEvent): boolean | void {\n    const cell = this._grid.getCellFromEvent(e);\n    if (!cell || !this._grid.canCellBeActive(cell.row, cell.cell)) {\n      return false;\n    }\n\n    if (!this._grid.getOptions().multiSelect || (\n      !e.ctrlKey && !e.shiftKey && !e.metaKey)) {\n      return false;\n    }\n\n    let selection = this.rangesToRows(this._ranges);\n    const idx = selection.indexOf(cell.row);\n\n    if (idx === -1 && (e.ctrlKey || e.metaKey)) {\n      selection.push(cell.row);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\n      selection = selection.filter((o) => o !== cell.row);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    } else if (selection.length && e.shiftKey) {\n      const last = selection.pop() as number;\n      const from = Math.min(cell.row, last);\n      const to = Math.max(cell.row, last);\n      selection = [];\n      for (let i = from; i <= to; i++) {\n        if (i !== last) {\n          selection.push(i);\n        }\n      }\n      selection.push(last);\n      this._grid.setActiveCell(cell.row, cell.cell);\n    }\n\n    const tempRanges = this.rowsToRanges(selection);\n    this.setSelectedRanges(tempRanges);\n    e.stopImmediatePropagation();\n\n    return true;\n  }\n\n  protected handleBeforeCellRangeSelected(e: SlickEventData_, cell: { row: number; cell: number; }): boolean | void {\n    if (!this._isRowMoveManagerHandler) {\n      const rowMoveManager = this._grid.getPluginByName<SlickRowMoveManager_>('RowMoveManager') || this._grid.getPluginByName<SlickCrossGridRowMoveManager_>('CrossGridRowMoveManager');\n      this._isRowMoveManagerHandler = rowMoveManager ? rowMoveManager.isHandlerColumn : Utils.noop;\n    }\n    if (this._grid.getEditorLock().isActive() || this._isRowMoveManagerHandler(cell.cell)) {\n      e.stopPropagation();\n      return false;\n    }\n    this._grid.setActiveCell(cell.row, cell.cell);\n  }\n\n  protected handleCellRangeSelected(_e: SlickEventData_, args: { range: SlickRange_; }): boolean | void {\n    if (!this._grid.getOptions().multiSelect || !this._options.selectActiveRow) {\n      return false;\n    }\n    this.setSelectedRanges([new SlickRange(args.range.fromRow, 0, args.range.toRow, this._grid.getColumns().length - 1)]);\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      RowSelectionModel: SlickRowSelectionModel\n    }\n  });\n}\n\n", "import { SlickEvent as SlickEvent_, Utils as Utils_ } from '../slick.core';\nimport type { Column, ColumnSort, SlickPlugin } from '../models/index';\nimport type { SlickGrid } from '../slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\nexport interface SlickStateOption {\n  /** optional grid state clientId */\n  cid: string;\n\n  /** default columns when loadnig the grid */\n  defaultColumns: Column[];\n\n  /** local storage key prefix */\n  key_prefix: string;\n\n  /** should we scroll the grid into view? */\n  scrollRowIntoView: boolean;\n\n  /** local storage wrapper */\n  storage: LocalStorageWrapper;\n}\n\nexport interface CurrentState {\n  columns: Array<{ id: string | number; width: number | undefined; }>;\n  sortcols: ColumnSort[];\n  userData: any;\n  viewport: { top: number; bottom: number; leftPx: number; rightPx: number; };\n}\n\nclass LocalStorageWrapper {\n  protected localStorage = window.localStorage;\n\n  constructor() {\n    if (typeof localStorage === 'undefined') {\n      console.error('localStorage is not available. slickgrid statepersistor disabled.');\n    }\n  }\n\n  get<T = any>(key: string) {\n    return new Promise<T>((resolve, reject) => {\n      if (!localStorage) {\n        reject('missing localStorage');\n        return;\n      }\n      try {\n        const d = localStorage.getItem(key);\n        if (d) {\n          return resolve(JSON.parse(d) as T);\n        }\n        resolve({} as T);\n      } catch (exc) {\n        reject(exc);\n      }\n    });\n  }\n\n  set(key: string, obj: any) {\n    if (!localStorage) { return; }\n    if (typeof obj !== 'undefined') {\n      obj = JSON.stringify(obj);\n    }\n    localStorage.setItem(key, obj);\n  }\n};\n\nexport class SlickState implements SlickPlugin {\n  // --\n  // public API\n  pluginName = 'State' as const;\n  onStateChanged = new SlickEvent<CurrentState>('onStateChanged');\n\n  // --\n  // protected props\n  protected _grid!: SlickGrid;\n  protected _cid = '';\n  protected _store: LocalStorageWrapper;\n  protected _options: SlickStateOption;\n  protected _state?: CurrentState;\n  protected _userData = {\n    state: null,\n    current: null\n  };\n\n  constructor(options: Partial<SlickStateOption>) {\n    const defaults = {\n      key_prefix: 'slickgrid:',\n      storage: new LocalStorageWrapper(),\n      scrollRowIntoView: true\n    };\n    this._options = Utils.extend(true, {}, defaults, options);\n    this._store = this._options.storage;\n  }\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._cid = grid.cid || this._options.cid;\n    Utils.addSlickEventPubSubWhenDefined(grid.getPubSubService(), this);\n\n    if (this._cid) {\n      this._grid.onColumnsResized.subscribe(this.save.bind(this));\n      this._grid.onColumnsReordered.subscribe(this.save.bind(this));\n      this._grid.onSort.subscribe(this.save.bind(this));\n    } else {\n      console.warn('grid has no client id. state persisting is disabled.');\n    }\n  }\n\n  destroy() {\n    this._grid.onSort.unsubscribe(this.save.bind(this));\n    this._grid.onColumnsReordered.unsubscribe(this.save.bind(this));\n    this._grid.onColumnsResized.unsubscribe(this.save.bind(this));\n    this.save();\n  }\n\n  save() {\n    if (this._cid && this._store) {\n      this._state = {\n        sortcols: this.getSortColumns(),\n        viewport: this._grid.getViewport(),\n        columns: this.getColumns(),\n        userData: null\n      };\n      this._state.userData = this._userData.current;\n      this.setUserDataFromState(this._state.userData);\n      this.onStateChanged.notify(this._state);\n\n      return this._store.set(this._options.key_prefix + this._cid, this._state);\n    }\n  }\n\n  restore() {\n    return new Promise((resolve, reject) => {\n      if (!this._cid) {\n        reject('missing client id');\n        return;\n      }\n      if (!this._store) {\n        reject('missing store');\n        return;\n      }\n\n      this._store.get<CurrentState>(this._options.key_prefix + this._cid)\n        .then((state) => {\n          if (state) {\n            if (state.sortcols) {\n              this._grid.setSortColumns(state.sortcols || []);\n            }\n            if (state.viewport && this._options.scrollRowIntoView) {\n              this._grid.scrollRowIntoView(state.viewport.top, true);\n            }\n            if (state.columns) {\n              const defaultColumns = this._options.defaultColumns;\n              if (defaultColumns) {\n                const defaultColumnsLookup: Record<number | string, Column> = {};\n                defaultColumns.forEach((colDef) => defaultColumnsLookup[colDef.id] = colDef);\n\n                const cols: Array<{ id: string | number; width: number | undefined; }> = [];\n                (state.columns || []).forEach((columnDef) => {\n                  if (defaultColumnsLookup[columnDef.id]) {\n                    cols.push(Utils.extend(true, {}, defaultColumnsLookup[columnDef.id], {\n                      width: columnDef.width,\n                      headerCssClass: (columnDef as Column).headerCssClass\n                    }));\n                  }\n                });\n\n                state.columns = cols;\n              }\n\n              this._grid.setColumns(state.columns as Column[]);\n            }\n            this.setUserDataFromState(state.userData);\n          }\n          resolve(state);\n        })\n        .catch((e) => {\n          reject(e);\n        });\n    });\n  }\n\n  /**\n   * allows users to add their own data to the grid state\n   * this function does not trigger the save() function, so the actual act of writing the state happens in save()\n   * therefore, it's necessary to call save() function after setting user-data\n   *\n   * @param data\n   * @return {State}\n   */\n  setUserData(data: any) {\n    this._userData.current = data;\n    return this;\n  }\n\n  /**\n   *\n   * @internal\n   * @param data\n   * @return {State}\n   */\n  setUserDataFromState(data: any) {\n    this._userData.state = data;\n    return this.setUserData(data);\n  }\n\n  /**\n   * returns current value of user-data\n   * @return {Object}\n   */\n  getUserData() {\n    return this._userData.current;\n  }\n\n  /**\n   * returns user-data found in saved state\n   *\n   * @return {Object}\n   */\n  getStateUserData() {\n    return this._userData.state;\n  }\n\n  /**\n   * Sets user-data to the value read from state\n   * @return {State}\n   */\n  resetUserData() {\n    this._userData.current = this._userData.state;\n    return this;\n  }\n\n  getColumns() {\n    return this._grid.getColumns().map((col) => ({\n      id: col.id,\n      width: col.width\n    }));\n  }\n\n  getSortColumns() {\n    return this._grid.getSortColumns();\n  }\n\n  reset() {\n    this._store.set(this._options.key_prefix + this._cid, {});\n    this.setUserDataFromState(null);\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(true, window, {\n    Slick: {\n      State: SlickState\n    }\n  });\n}\n\n", "import type { Column, CompositeEditorOption, Editor, EditorArguments, HtmlElementPosition } from './models/index';\nimport { Utils as Utils_ } from './slick.core';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * A composite SlickGrid editor factory.\n * Generates an editor that is composed of multiple editors for given columns.\n * Individual editors are provided given containers instead of the original cell.\n * Validation will be performed on all editors individually and the results will be aggregated into one\n * validation result.\n *\n *\n * The returned editor will have its prototype set to CompositeEditor, so you can use the \"instanceof\" check.\n *\n * NOTE:  This doesn't work for detached editors since they will be created and positioned relative to the\n *        active cell and not the provided container.\n *\n * @namespace Slick\n * @class CompositeEditor\n * @constructor\n * @param columns {Array} Column definitions from which editors will be pulled.\n * @param containers {Array} Container HTMLElements in which editors will be placed.\n * @param options {Object} Options hash:\n *  validationFailedMsg     -   A generic failed validation message set on the aggregated validation resuls.\n *  validationMsgPrefix     -   Add an optional prefix to each validation message (only the ones shown in the modal form, not the ones in the \"errors\")\n *  modalType               -   Defaults to \"edit\", modal type can 1 of these 3: (create, edit, mass, mass-selection)\n *  hide                    -   A function to be called when the grid asks the editor to hide itself.\n *  show                    -   A function to be called when the grid asks the editor to show itself.\n *  position                -   A function to be called when the grid asks the editor to reposition itself.\n *  destroy                 -   A function to be called when the editor is destroyed.\n */\nexport function SlickCompositeEditor(columns: Column[], containers: Array<HTMLDivElement>, options: CompositeEditorOption) {\n  const defaultOptions = {\n    modalType: 'edit', // available type (create, edit, mass)\n    validationFailedMsg: 'Some of the fields have failed validation',\n    validationMsgPrefix: null,\n    show: null,\n    hide: null,\n    position: null,\n    destroy: null,\n    formValues: {},\n    editors: {}\n  };\n\n  const noop = function () { };\n\n  let firstInvalidEditor: Editor | null = null;\n\n  options = Slick.Utils.extend({}, defaultOptions, options);\n\n  function getContainerBox(i: number) {\n    const c = containers[i];\n    const offset = Slick.Utils.offset(c);\n    const w = Slick.Utils.width(c);\n    const h = Slick.Utils.height(c);\n\n    return {\n      top: (offset?.top ?? 0),\n      left: (offset?.left ?? 0),\n      bottom: (offset?.top ?? 0) + (h || 0),\n      right: (offset?.left ?? 0) + (w || 0),\n      width: w,\n      height: h,\n      visible: true\n    };\n  }\n\n  function editor(args: any[]) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    // @ts-ignore\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const context: any = this;\n    let editors: Array<Editor & { args: EditorArguments }> = [];\n\n    function init() {\n      let newArgs: any = {};\n      let idx = 0;\n      while (idx < columns.length) {\n        if (columns[idx].editor) {\n          const column = columns[idx];\n          newArgs = Slick.Utils.extend(false, {}, args);\n          newArgs.container = containers[idx];\n          newArgs.column = column;\n          newArgs.position = getContainerBox(idx);\n          newArgs.commitChanges = noop;\n          newArgs.cancelChanges = noop;\n          newArgs.compositeEditorOptions = options;\n          newArgs.formValues = {};\n\n          const currentEditor = new (column.editor as any)(newArgs) as Editor & { args: EditorArguments };\n          options.editors[column.id] = currentEditor; // add every Editor instance refs\n          editors.push(currentEditor);\n        }\n        idx++;\n      }\n\n      // focus on first input\n      setTimeout(function () {\n        if (Array.isArray(editors) && editors.length > 0 && typeof editors[0].focus === 'function') {\n          editors[0].focus();\n        }\n      }, 0);\n    }\n\n    context.destroy = () => {\n      let idx = 0;\n      while (idx < editors.length) {\n        editors[idx].destroy();\n        idx++;\n      }\n\n      options.destroy?.();\n      editors = [];\n    };\n\n\n    context.focus = () => {\n      // if validation has failed, set the focus to the first invalid editor\n      (firstInvalidEditor || editors[0]).focus();\n    };\n\n    context.isValueChanged = () => {\n      let idx = 0;\n      while (idx < editors.length) {\n        if (editors[idx].isValueChanged()) {\n          return true;\n        }\n        idx++;\n      }\n      return false;\n    };\n\n    context.serializeValue = () => {\n      const serializedValue: any[] = [];\n      let idx = 0;\n      while (idx < editors.length) {\n        serializedValue[idx] = editors[idx].serializeValue();\n        idx++;\n      }\n      return serializedValue;\n    };\n\n    context.applyValue = (item: any, state: any) => {\n      let idx = 0;\n      while (idx < editors.length) {\n        editors[idx].applyValue(item, state[idx]);\n        idx++;\n      }\n    };\n\n    context.loadValue = (item: any) => {\n      let idx = 0;\n\n      while (idx < editors.length) {\n        editors[idx].loadValue(item);\n        idx++;\n      }\n    };\n\n    context.validate = (target: HTMLElement | null) => {\n      let validationResults;\n      const errors: any[] = [];\n      let targetElm = target ? target : null;\n\n      firstInvalidEditor = null;\n\n      let idx = 0;\n      while (idx < editors.length) {\n        const columnDef = editors[idx].args?.column ?? {};\n        if (columnDef) {\n          let validationElm = document.querySelector(`.item-details-validation.editor-${columnDef.id}`);\n          let labelElm = document.querySelector(`.item-details-label.editor-${columnDef.id}`);\n          let editorElm = document.querySelector(`[data-editorid=${columnDef.id}]`);\n          const validationMsgPrefix = options?.validationMsgPrefix || '';\n\n          if (!targetElm || Slick.Utils.contains(editorElm as HTMLElement, targetElm)) {\n            validationResults = editors[idx].validate();\n\n            if (!validationResults.valid) {\n              firstInvalidEditor = editors[idx];\n              errors.push({\n                index: idx,\n                editor: editors[idx],\n                container: containers[idx],\n                msg: validationResults.msg\n              });\n\n              if (validationElm) {\n                validationElm.textContent = validationMsgPrefix + validationResults.msg;\n                labelElm?.classList.add('invalid');\n                editorElm?.classList.add('invalid');\n              }\n            } else if (validationElm) {\n              validationElm.textContent = '';\n              editorElm?.classList.remove('invalid');\n              labelElm?.classList.remove('invalid');\n            }\n          }\n          validationElm = null;\n          labelElm = null;\n          editorElm = null;\n        }\n        idx++;\n      }\n      targetElm = null;\n\n      if (errors.length) {\n        return {\n          valid: false,\n          msg: options.validationFailedMsg,\n          errors\n        };\n      } else {\n        return {\n          valid: true,\n          msg: ''\n        };\n      }\n    };\n\n    context.hide = () => {\n      let idx = 0;\n      while (idx < editors.length) {\n        editors[idx]?.hide?.();\n        idx++;\n      }\n      options?.hide?.();\n    };\n\n    context.show = () => {\n      let idx = 0;\n      while (idx < editors.length) {\n        editors[idx]?.show?.();\n        idx++;\n      }\n      options?.show?.();\n    };\n\n    context.position = (box: HtmlElementPosition) => {\n      options?.position?.(box);\n    };\n\n    init();\n  }\n\n  // so we can do \"editor instanceof Slick.CompositeEditor\n  // @ts-ignore\n  editor.prototype = this;\n  return editor;\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(Slick, {\n    CompositeEditor: SlickCompositeEditor\n  });\n}\n", "import { type SlickEventData, SlickGroup as SlickGroup_, keyCode as keyCode_, Utils as Utils_ } from './slick.core';\nimport type { Column, GroupItemMetadataProviderOption, GroupingFormatterItem, ItemMetadata, SlickPlugin } from './models/index';\nimport type { SlickGrid } from './slick.grid';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst SlickGroup = IIFE_ONLY ? Slick.Group : SlickGroup_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/**\n * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.\n * This metadata overrides the default behavior and formatting of those rows so that they appear and function\n * correctly when processed by the grid.\n *\n * This class also acts as a grid plugin providing event handlers to expand & collapse groups.\n * If \"grid.registerPlugin(...)\" is not called, expand & collapse will not work.\n *\n * @class GroupItemMetadataProvider\n * @module Data\n * @namespace Slick.Data\n * @constructor\n * @param inputOptions\n */\nexport class SlickGroupItemMetadataProvider implements SlickPlugin {\n  pluginName = 'GroupItemMetadataProvider' as const;\n\n  protected _grid!: SlickGrid;\n  protected _options: GroupItemMetadataProviderOption;\n  protected _defaults: GroupItemMetadataProviderOption = {\n    checkboxSelect: false,\n    checkboxSelectCssClass: 'slick-group-select-checkbox',\n    checkboxSelectPlugin: null,\n    groupCssClass: 'slick-group',\n    groupTitleCssClass: 'slick-group-title',\n    totalsCssClass: 'slick-group-totals',\n    groupFocusable: true,\n    totalsFocusable: false,\n    toggleCssClass: 'slick-group-toggle',\n    toggleExpandedCssClass: 'expanded',\n    toggleCollapsedCssClass: 'collapsed',\n    enableExpandCollapse: true,\n    groupFormatter: this.defaultGroupCellFormatter.bind(this),\n    totalsFormatter: this.defaultTotalsCellFormatter.bind(this),\n    includeHeaderTotals: false\n  };\n\n  constructor(inputOptions?: GroupItemMetadataProviderOption) {\n    this._options = Utils.extend<GroupItemMetadataProviderOption>(true, {}, this._defaults, inputOptions);\n  }\n\n  /** Getter of SlickGrid DataView object */\n  protected get dataView(): any {\n    return this._grid?.getData?.() ?? {} as any;\n  }\n\n  getOptions() {\n    return this._options;\n  }\n\n  setOptions(inputOptions: GroupItemMetadataProviderOption) {\n    Utils.extend(true, this._options, inputOptions);\n  }\n\n  protected defaultGroupCellFormatter(_row: number, _cell: number, _value: any, _columnDef: Column, item: any) {\n    if (!this._options.enableExpandCollapse) {\n      return item.title;\n    }\n\n    const indentation = `${item.level * 15}px`;\n    const toggleClass = item.collapsed ? this._options.toggleCollapsedCssClass : this._options.toggleExpandedCssClass;\n\n    // use a DocumentFragment to avoid creating an extra div container\n    const containerElm = document.createDocumentFragment();\n\n    // 1. optional row checkbox span to select the entire group rows\n    if (this._options.checkboxSelect) {\n      containerElm.appendChild(Utils.createDomElement('span', { className: `${this._options.checkboxSelectCssClass} ${item.selectChecked ? 'checked' : 'unchecked'}` }));\n    }\n\n    // 2. group toggle span\n    containerElm.appendChild(Utils.createDomElement('span', {\n      className: `${this._options.toggleCssClass} ${toggleClass}`,\n      ariaExpanded: String(!item.collapsed),\n      style: { marginLeft: indentation }\n    }));\n\n    // 3. group title span\n    const groupTitleElm = Utils.createDomElement('span', { className: this._options.groupTitleCssClass || '' });\n    groupTitleElm.setAttribute('level', item.level);\n    (item.title instanceof HTMLElement)\n      ? groupTitleElm.appendChild(item.title)\n      : this._grid.applyHtmlCode(groupTitleElm, item.title ?? '');\n    containerElm.appendChild(groupTitleElm);\n\n    return containerElm;\n  }\n\n  protected defaultTotalsCellFormatter(_row: number, _cell: number, _value: any, columnDef: Column, item: any, grid: SlickGrid) {\n    return (columnDef?.groupTotalsFormatter?.(item, columnDef, grid)) ?? '';\n  }\n\n\n  init(grid: SlickGrid) {\n    this._grid = grid;\n    this._grid.onClick.subscribe(this.handleGridClick.bind(this));\n    this._grid.onKeyDown.subscribe(this.handleGridKeyDown.bind(this));\n  }\n\n  destroy() {\n    if (this._grid) {\n      this._grid.onClick.unsubscribe(this.handleGridClick.bind(this));\n      this._grid.onKeyDown.unsubscribe(this.handleGridKeyDown.bind(this));\n    }\n  }\n\n  protected handleGridClick(e: SlickEventData, args: { row: number; cell: number; grid: SlickGrid; }) {\n    const target = e.target as HTMLElement;\n    const item = this._grid.getDataItem(args.row);\n    if (item && item instanceof SlickGroup && target.classList.contains(this._options.toggleCssClass || '')) {\n      this.handleDataViewExpandOrCollapse(item);\n      e.stopImmediatePropagation();\n      e.preventDefault();\n    }\n    if (item && item instanceof SlickGroup && target.classList.contains(this._options.checkboxSelectCssClass || '')) {\n      item.selectChecked = !item.selectChecked;\n      target.classList.remove((item.selectChecked ? 'unchecked' : 'checked'));\n      target.classList.add((item.selectChecked ? 'checked' : 'unchecked'));\n      // get rowIndexes array\n      const rowIndexes = this.dataView.mapItemsToRows(item.rows);\n      if (item.selectChecked) { \n        this._options.checkboxSelectPlugin.selectRows(rowIndexes); \n      } else {\n        this._options.checkboxSelectPlugin.deSelectRows(rowIndexes);\n      }\n    }\n  }\n\n  // TODO:  add -/+ handling\n  protected handleGridKeyDown(e: SlickEventData) {\n    if (this._options.enableExpandCollapse && (e.which === keyCode.SPACE)) {\n      const activeCell = this._grid.getActiveCell();\n      if (activeCell) {\n        const item = this._grid.getDataItem(activeCell.row);\n        if (item && item instanceof SlickGroup) {\n          this.handleDataViewExpandOrCollapse(item);\n          e.stopImmediatePropagation();\n          e.preventDefault();\n        }\n      }\n    }\n  }\n\n  protected handleDataViewExpandOrCollapse(item: any) {\n    const range = this._grid.getRenderedRange();\n    this.dataView.setRefreshHints({\n      ignoreDiffsBefore: range.top,\n      ignoreDiffsAfter: range.bottom + 1\n    });\n\n    if (item.collapsed) {\n      this.dataView.expandGroup(item.groupingKey);\n    } else {\n      this.dataView.collapseGroup(item.groupingKey);\n    }\n  }\n\n  getGroupRowMetadata(item: GroupingFormatterItem): ItemMetadata {\n    const groupLevel = item?.level;\n    return {\n      selectable: false,\n      focusable: this._options.groupFocusable,\n      cssClasses: `${this._options.groupCssClass} slick-group-level-${groupLevel}`,\n      formatter: (this._options.includeHeaderTotals && this._options.totalsFormatter) || undefined,\n      columns: {\n        0: {\n          colspan: this._options.includeHeaderTotals ? '1' : '*',\n          formatter: this._options.groupFormatter,\n          editor: null\n        }\n      }\n    };\n  }\n\n  getTotalsRowMetadata(item: { group: GroupingFormatterItem }): ItemMetadata | null {\n    const groupLevel = item?.group?.level;\n    return {\n      selectable: false,\n      focusable: this._options.totalsFocusable,\n      cssClasses: `${this._options.totalsCssClass} slick-group-level-${groupLevel}`,\n      formatter: this._options.totalsFormatter,\n      editor: null\n    };\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Data = window.Slick.Data || {};\n  window.Slick.Data.GroupItemMetadataProvider = SlickGroupItemMetadataProvider;\n}\n", "import type {\n  Aggregator,\n  AnyFunction,\n  CssStyleHash,\n  CustomDataView,\n  DataViewHints,\n  Grouping,\n  GroupingFormatterItem,\n  ItemMetadata,\n  OnGroupCollapsedEventArgs,\n  OnGroupExpandedEventArgs,\n  OnRowCountChangedEventArgs,\n  OnRowsChangedEventArgs,\n  OnRowsOrCountChangedEventArgs,\n  OnSelectedRowIdsChangedEventArgs,\n  OnSetItemsCalledEventArgs,\n  PagingInfo,\n  SlickGridModel,\n} from './models/index';\nimport {\n  type BasePubSub,\n  SlickEvent as SlickEvent_,\n  SlickEventData as SlickEventData_,\n  SlickGroup as SlickGroup_,\n  SlickGroupTotals as SlickGroupTotals_,\n  Utils as Utils_,\n  type SlickNonDataItem,\n} from './slick.core';\nimport { SlickGroupItemMetadataProvider as SlickGroupItemMetadataProvider_ } from './slick.groupitemmetadataprovider';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\nconst SlickGroup = IIFE_ONLY ? Slick.Group : SlickGroup_;\nconst SlickGroupTotals = IIFE_ONLY ? Slick.GroupTotals : SlickGroupTotals_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\nconst SlickGroupItemMetadataProvider = IIFE_ONLY ? Slick.Data?.GroupItemMetadataProvider ?? {} : SlickGroupItemMetadataProvider_;\n\nexport interface DataViewOption {\n  /** Optionally provide a GroupItemMetadataProvider in order to use Grouping/DraggableGrouping features */\n  groupItemMetadataProvider: SlickGroupItemMetadataProvider_ | null;\n\n  /** defaults to false, are we using inline filters? */\n  inlineFilters: boolean;\n\n  /**\n   * defaults to false, option to use CSP Safe approach,\n   * Note: it is an opt-in option because it is slightly slower (perf impact) when compared to the non-CSP safe approach.\n   */\n  useCSPSafeFilter: boolean;\n}\nexport type FilterFn<T> = (item: T, args: any) => boolean;\nexport type FilterCspFn<T> = (item: T[], args: any) => T[];\nexport type FilterWithCspCachingFn<T> = (item: T[], args: any, filterCache: any[]) => T[];\nexport type DataIdType = number | string;\nexport type SlickDataItem = SlickNonDataItem | SlickGroup_ | SlickGroupTotals_ | any;\nexport type GroupGetterFn = (val: any) => string | number;\n\n/**\n  * A simple Model implementation.\n  * Provides a filtered view of the underlying data.\n  * Relies on the data item having an \"id\" property uniquely identifying it.\n  */\nexport class SlickDataView<TData extends SlickDataItem = any> implements CustomDataView {\n  protected defaults: DataViewOption = {\n    groupItemMetadataProvider: null,\n    inlineFilters: false,\n    useCSPSafeFilter: false,\n  };\n\n  // private\n  protected idProperty = 'id';          // property holding a unique row id\n  protected items: TData[] = [];            // data by index\n  protected rows: TData[] = [];             // data by row\n  protected idxById = new Map<DataIdType, number>();   // indexes by id\n  protected rowsById: { [id: DataIdType]: number } | undefined = undefined;       // rows by id; lazy-calculated\n  protected filter: FilterFn<TData> | null = null;         // filter function\n  protected filterCSPSafe: FilterFn<TData> | null = null;         // filter function\n  protected updated: ({ [id: DataIdType]: boolean }) | null = null;        // updated item ids\n  protected suspend = false;            // suspends the recalculation\n  protected isBulkSuspend = false;      // delays protectedious operations like the\n  // index update and delete to efficient\n  // versions at endUpdate\n  protected bulkDeleteIds = new Map<DataIdType, boolean>();\n  protected sortAsc: boolean | undefined = true;\n  protected fastSortField?: string | null | (() => string);\n  protected sortComparer!: ((a: TData, b: TData) => number);\n  protected refreshHints: DataViewHints = {};\n  protected prevRefreshHints: DataViewHints = {};\n  protected filterArgs: any;\n  protected filteredItems: TData[] = [];\n  protected compiledFilter?: FilterFn<TData> | null;\n  protected compiledFilterCSPSafe?: FilterCspFn<TData> | null;\n  protected compiledFilterWithCaching?: FilterFn<TData> | null;\n  protected compiledFilterWithCachingCSPSafe?: FilterWithCspCachingFn<TData> | null;\n  protected filterCache: any[] = [];\n  protected _grid?: SlickGridModel; // grid object will be defined only after using \"syncGridSelection()\" method\"\n\n  // grouping\n  protected groupingInfoDefaults: Grouping = {\n    getter: undefined,\n    formatter: undefined,\n    comparer: (a: { value: any; }, b: { value: any; }) => (a.value === b.value ? 0 : (a.value > b.value ? 1 : -1)),\n    predefinedValues: [],\n    aggregators: [],\n    aggregateEmpty: false,\n    aggregateCollapsed: false,\n    aggregateChildGroups: false,\n    collapsed: false,\n    displayTotalsRow: true,\n    lazyTotalsCalculation: false\n  };\n  protected groupingInfos: Array<Grouping & { aggregators: Aggregator[]; getterIsAFn?: boolean; compiledAccumulators: any[]; getter: GroupGetterFn | string }> = [];\n  protected groups: SlickGroup_[] = [];\n  protected toggledGroupsByLevel: any[] = [];\n  protected groupingDelimiter = ':|:';\n  protected selectedRowIds: DataIdType[] = [];\n  protected preSelectedRowIdsChangeFn?: (args?: any) => void;\n\n  protected pagesize = 0;\n  protected pagenum = 0;\n  protected totalRows = 0;\n  protected _options: DataViewOption;\n  protected _container?: HTMLElement;\n\n  // public events\n  onBeforePagingInfoChanged: SlickEvent_<PagingInfo>;\n  onGroupExpanded: SlickEvent_<OnGroupExpandedEventArgs>;\n  onGroupCollapsed: SlickEvent_<OnGroupCollapsedEventArgs>;\n  onPagingInfoChanged: SlickEvent_<PagingInfo>;\n  onRowCountChanged: SlickEvent_<OnRowCountChangedEventArgs>;\n  onRowsChanged: SlickEvent_<OnRowsChangedEventArgs>;\n  onRowsOrCountChanged: SlickEvent_<OnRowsOrCountChangedEventArgs>;\n  onSelectedRowIdsChanged: SlickEvent_<OnSelectedRowIdsChangedEventArgs>;\n  onSetItemsCalled: SlickEvent_<OnSetItemsCalledEventArgs>;\n\n  constructor(options?: Partial<DataViewOption>, protected externalPubSub?: BasePubSub) {\n    this.onBeforePagingInfoChanged = new SlickEvent<PagingInfo>('onBeforePagingInfoChanged', externalPubSub);\n    this.onGroupExpanded = new SlickEvent<OnGroupExpandedEventArgs>('onGroupExpanded', externalPubSub);\n    this.onGroupCollapsed = new SlickEvent<OnGroupCollapsedEventArgs>('onGroupCollapsed', externalPubSub);\n    this.onPagingInfoChanged = new SlickEvent<PagingInfo>('onPagingInfoChanged', externalPubSub);\n    this.onRowCountChanged = new SlickEvent<OnRowCountChangedEventArgs>('onRowCountChanged', externalPubSub);\n    this.onRowsChanged = new SlickEvent<OnRowsChangedEventArgs>('onRowsChanged', externalPubSub);\n    this.onRowsOrCountChanged = new SlickEvent<OnRowsOrCountChangedEventArgs>('onRowsOrCountChanged', externalPubSub);\n    this.onSelectedRowIdsChanged = new SlickEvent<OnSelectedRowIdsChangedEventArgs>('onSelectedRowIdsChanged', externalPubSub);\n    this.onSetItemsCalled = new SlickEvent<OnSetItemsCalledEventArgs>('onSetItemsCalled', externalPubSub);\n\n    this._options = Utils.extend(true, {}, this.defaults, options);\n  }\n\n  /**\n   * Begins a bached update of the items in the data view.\n   * including deletes and the related events are postponed to the endUpdate call.\n   * As certain operations are postponed during this update, some methods might not\n   * deliver fully consistent information.\n   * @param {Boolean} [bulkUpdate] - if set to true, most data view modifications\n   */\n  beginUpdate(bulkUpdate?: boolean) {\n    this.suspend = true;\n    this.isBulkSuspend = bulkUpdate === true;\n  }\n\n  endUpdate() {\n    const wasBulkSuspend = this.isBulkSuspend;\n    this.isBulkSuspend = false;\n    this.suspend = false;\n    if (wasBulkSuspend) {\n      this.processBulkDelete();\n      this.ensureIdUniqueness();\n    }\n    this.refresh();\n  }\n\n  destroy() {\n    this.items = [];\n    this.idxById = null as any;\n    this.rowsById = null as any;\n    this.filter = null as any;\n    this.filterCSPSafe = null as any;\n    this.updated = null as any;\n    this.sortComparer = null as any;\n    this.filterCache = [];\n    this.filteredItems = [];\n    this.compiledFilter = null;\n    this.compiledFilterCSPSafe = null;\n    this.compiledFilterWithCaching = null;\n    this.compiledFilterWithCachingCSPSafe = null;\n\n    if (this._grid && this._grid.onSelectedRowsChanged && this._grid.onCellCssStylesChanged) {\n      this._grid.onSelectedRowsChanged.unsubscribe();\n      this._grid.onCellCssStylesChanged.unsubscribe();\n    }\n    if (this.onRowsOrCountChanged) {\n      this.onRowsOrCountChanged.unsubscribe();\n    }\n  }\n\n  /** provide some refresh hints as to what to rows needs refresh */\n  setRefreshHints(hints: DataViewHints) {\n    this.refreshHints = hints;\n  }\n\n  /** get extra filter arguments of the filter method */\n  getFilterArgs() {\n    return this.filterArgs;\n  }\n\n  /** add extra filter arguments to the filter method */\n  setFilterArgs(args: any) {\n    this.filterArgs = args;\n  }\n\n  /**\n   * Processes all delete requests placed during bulk update\n   * by recomputing the items and idxById members.\n   */\n  protected processBulkDelete() {\n    if (!this.idxById) { return; }\n\n    // the bulk update is processed by\n    // recomputing the whole items array and the index lookup in one go.\n    // this is done by placing the not-deleted items\n    // from left to right into the array and shrink the array the the new\n    // size afterwards.\n    // see https://github.com/6pac/SlickGrid/issues/571 for further details.\n\n    let id: DataIdType, item, newIdx = 0;\n    for (let i = 0, l = this.items.length; i < l; i++) {\n      item = this.items[i];\n      id = item[this.idProperty as keyof TData] as DataIdType;\n      if (id === undefined) {\n        throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\n      }\n\n      // if items have been marked as deleted we skip them for the new final items array\n      // and we remove them from the lookup table.\n      if (this.bulkDeleteIds.has(id)) {\n        this.idxById.delete(id);\n      } else {\n        // for items which are not deleted, we add them to the\n        // next free position in the array and register the index in the lookup.\n        this.items[newIdx] = item;\n        this.idxById.set(id, newIdx);\n        ++newIdx;\n      }\n    }\n\n    // here we shrink down the full item array to the ones actually\n    // inserted in the cleanup loop above.\n    this.items.length = newIdx;\n    // and finally cleanup the deleted ids to start cleanly on the next update.\n    this.bulkDeleteIds = new Map();\n  }\n\n  protected updateIdxById(startingIndex?: number) {\n    if (this.isBulkSuspend || !this.idxById) { // during bulk update we do not reorganize\n      return;\n    }\n    startingIndex = startingIndex || 0;\n    let id: DataIdType;\n    for (let i = startingIndex, l = this.items.length; i < l; i++) {\n      id = this.items[i][this.idProperty as keyof TData] as DataIdType;\n      if (id === undefined) {\n        throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\n      }\n      this.idxById.set(id, i);\n    }\n  }\n\n  protected ensureIdUniqueness() {\n    if (this.isBulkSuspend || !this.idxById) { // during bulk update we do not reorganize\n      return;\n    }\n    let id: DataIdType;\n    for (let i = 0, l = this.items.length; i < l; i++) {\n      id = this.items[i][this.idProperty as keyof TData] as DataIdType;\n      if (id === undefined || this.idxById.get(id) !== i) {\n        throw new Error(`[SlickGrid DataView] Each data element must implement a unique 'id' property`);\n      }\n    }\n  }\n\n  /** Get all DataView Items */\n  getItems() {\n    return this.items;\n  }\n\n  /** Get the DataView Id property name to use (defaults to \"Id\" but could be customized to something else when instantiating the DataView) */\n  getIdPropertyName() {\n    return this.idProperty;\n  }\n\n  /**\n   * Set the Items with a new Dataset and optionally pass a different Id property name\n   * @param {Array<*>} data - array of data\n   * @param {String} [objectIdProperty] - optional id property to use as primary id\n   */\n  setItems(data: TData[], objectIdProperty?: string) {\n    if (objectIdProperty !== undefined) {\n      this.idProperty = objectIdProperty;\n    }\n    this.items = this.filteredItems = data;\n    this.onSetItemsCalled.notify({ idProperty: this.idProperty, itemCount: this.items.length }, null, this);\n    this.idxById = new Map();\n    this.updateIdxById();\n    this.ensureIdUniqueness();\n    this.refresh();\n  }\n\n  /** Set Paging Options */\n  setPagingOptions(args: Partial<PagingInfo>) {\n    if (this.onBeforePagingInfoChanged.notify(this.getPagingInfo(), null, this).getReturnValue() !== false) {\n      if (Utils.isDefined(args.pageSize)) {\n        this.pagesize = args.pageSize;\n        this.pagenum = this.pagesize ? Math.min(this.pagenum, Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1)) : 0;\n      }\n\n      if (Utils.isDefined(args.pageNum)) {\n        this.pagenum = Math.min(args.pageNum, Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1));\n      }\n\n      this.onPagingInfoChanged.notify(this.getPagingInfo(), null, this);\n\n      this.refresh();\n    }\n  }\n\n  /** Get Paging Options */\n  getPagingInfo(): PagingInfo {\n    const totalPages = this.pagesize ? Math.max(1, Math.ceil(this.totalRows / this.pagesize)) : 1;\n    return { pageSize: this.pagesize, pageNum: this.pagenum, totalRows: this.totalRows, totalPages, dataView: this as SlickDataView };\n  }\n\n  /** Sort Method to use by the DataView */\n  sort(comparer: (a: TData, b: TData) => number, ascending?: boolean) {\n    this.sortAsc = ascending;\n    this.sortComparer = comparer;\n    this.fastSortField = null;\n    if (ascending === false) {\n      this.items.reverse();\n    }\n    this.items.sort(comparer);\n    if (ascending === false) {\n      this.items.reverse();\n    }\n    this.idxById = new Map();\n    this.updateIdxById();\n    this.refresh();\n  }\n\n  /**\n   * Provides a workaround for the extremely slow sorting in IE.\n   * Does a [lexicographic] sort on a give column by temporarily overriding Object.prototype.toString\n   * to return the value of that field and then doing a native Array.sort().\n   */\n  fastSort(field: string | (() => string), ascending?: boolean) {\n    this.sortAsc = ascending;\n    this.fastSortField = field;\n    this.sortComparer = null as any;\n    const oldToString = Object.prototype.toString;\n    Object.prototype.toString = (typeof field === 'function') ? field : function () {\n      // @ts-ignore\n      return this[field];\n    };\n    // an extra reversal for descending sort keeps the sort stable\n    // (assuming a stable native sort implementation, which isn't true in some cases)\n    if (ascending === false) {\n      this.items.reverse();\n    }\n    this.items.sort();\n    Object.prototype.toString = oldToString;\n    if (ascending === false) {\n      this.items.reverse();\n    }\n    this.idxById = new Map();\n    this.updateIdxById();\n    this.refresh();\n  }\n\n  /** Re-Sort the dataset */\n  reSort() {\n    if (this.sortComparer) {\n      this.sort(this.sortComparer, this.sortAsc);\n    } else if (this.fastSortField) {\n      this.fastSort(this.fastSortField, this.sortAsc);\n    }\n  }\n\n  /** Get only the DataView filtered items */\n  getFilteredItems<T extends TData>() {\n    return this.filteredItems as T[];\n  }\n\n  /** Get the array length (count) of only the DataView filtered items */\n  getFilteredItemCount() {\n    return this.filteredItems.length;\n  }\n\n  /** Get current Filter used by the DataView */\n  getFilter() {\n    return this._options.useCSPSafeFilter ? this.filterCSPSafe : this.filter;\n  }\n\n  /**\n   * Set a Filter that will be used by the DataView\n   * @param {Function} fn - filter callback function\n   */\n  setFilter(filterFn: FilterFn<TData>) {\n    this.filterCSPSafe = filterFn;\n    this.filter = filterFn;\n    if (this._options.inlineFilters) {\n      this.compiledFilterCSPSafe = this.compileFilterCSPSafe;\n      this.compiledFilterWithCachingCSPSafe = this.compileFilterWithCachingCSPSafe;\n      this.compiledFilter = this.compileFilter(this._options.useCSPSafeFilter);\n      this.compiledFilterWithCaching = this.compileFilterWithCaching(this._options.useCSPSafeFilter);\n    }\n    this.refresh();\n  }\n\n  /** Get current Grouping info */\n  getGrouping(): Grouping[] {\n    return this.groupingInfos;\n  }\n\n  /** Set some Grouping */\n  setGrouping(groupingInfo: Grouping | Grouping[]) {\n    if (!this._options.groupItemMetadataProvider) {\n      this._options.groupItemMetadataProvider = new SlickGroupItemMetadataProvider();\n    }\n\n    this.groups = [];\n    this.toggledGroupsByLevel = [];\n    groupingInfo = groupingInfo || [];\n    this.groupingInfos = ((groupingInfo instanceof Array) ? groupingInfo : [groupingInfo]) as any;\n\n    for (let i = 0; i < this.groupingInfos.length; i++) {\n      const gi = this.groupingInfos[i] = Utils.extend(true, {}, this.groupingInfoDefaults, this.groupingInfos[i]);\n      gi.getterIsAFn = typeof gi.getter === 'function';\n\n      // pre-compile accumulator loops\n      gi.compiledAccumulators = [];\n      let idx = gi.aggregators.length;\n      while (idx--) {\n        gi.compiledAccumulators[idx] = this.compileAccumulatorLoopCSPSafe(gi.aggregators[idx]);\n      }\n\n      this.toggledGroupsByLevel[i] = {};\n    }\n\n    this.refresh();\n  }\n\n  /** Get an item in the DataView by its row index */\n  getItemByIdx<T extends TData>(i: number) {\n    return this.items[i] as T;\n  }\n\n  /** Get row index in the DataView by its Id */\n  getIdxById(id: DataIdType) {\n    return this.idxById?.get(id);\n  }\n\n  protected ensureRowsByIdCache() {\n    if (!this.rowsById) {\n      this.rowsById = {};\n      for (let i = 0, l = this.rows.length; i < l; i++) {\n        this.rowsById[this.rows[i][this.idProperty as keyof TData] as DataIdType] = i;\n      }\n    }\n  }\n\n  /** Get row number in the grid by its item object */\n  getRowByItem(item: TData) {\n    this.ensureRowsByIdCache();\n    return this.rowsById?.[item[this.idProperty as keyof TData] as DataIdType];\n  }\n\n  /** Get row number in the grid by its Id */\n  getRowById(id: DataIdType) {\n    this.ensureRowsByIdCache();\n    return this.rowsById?.[id];\n  }\n\n  /** Get an item in the DataView by its Id */\n  getItemById<T extends TData>(id: DataIdType) {\n    return this.items[(this.idxById.get(id) as number)] as T;\n  }\n\n  /** From the items array provided, return the mapped rows */\n  mapItemsToRows(itemArray: TData[]) {\n    const rows: number[] = [];\n    this.ensureRowsByIdCache();\n    for (let i = 0, l = itemArray.length; i < l; i++) {\n      const row = this.rowsById?.[itemArray[i][this.idProperty as keyof TData] as DataIdType];\n      if (Utils.isDefined(row)) {\n        rows[rows.length] = row as number;\n      }\n    }\n    return rows;\n  }\n\n  /** From the Ids array provided, return the mapped rows */\n  mapIdsToRows(idArray: DataIdType[]) {\n    const rows: number[] = [];\n    this.ensureRowsByIdCache();\n    for (let i = 0, l = idArray.length; i < l; i++) {\n      const row = this.rowsById?.[idArray[i]];\n      if (Utils.isDefined(row)) {\n        rows[rows.length] = row as number;\n      }\n    }\n    return rows;\n  }\n\n  /** From the rows array provided, return the mapped Ids */\n  mapRowsToIds(rowArray: number[]) {\n    const ids: DataIdType[] = [];\n    for (let i = 0, l = rowArray.length; i < l; i++) {\n      if (rowArray[i] < this.rows.length) {\n        const rowItem = this.rows[rowArray[i]];\n        ids[ids.length] = rowItem![this.idProperty as keyof TData] as DataIdType;\n      }\n    }\n    return ids;\n  }\n\n  /**\n   * Performs the update operations of a single item by id without\n   * triggering any events or refresh operations.\n   * @param id The new id of the item.\n   * @param item The item which should be the new value for the given id.\n   */\n  updateSingleItem(id: DataIdType, item: TData) {\n    if (!this.idxById) { return; }\n\n    // see also https://github.com/mleibman/SlickGrid/issues/1082\n    if (!this.idxById.has(id)) {\n      throw new Error('[SlickGrid DataView] Invalid id');\n    }\n\n    // What if the specified item also has an updated idProperty?\n    // Then we'll have to update the index as well, and possibly the `updated` cache too.\n    if (id !== item[this.idProperty as keyof TData]) {\n      // make sure the new id is unique:\n      const newId = item[this.idProperty as keyof TData] as DataIdType;\n      if (!Utils.isDefined(newId)) {\n        throw new Error('[SlickGrid DataView] Cannot update item to associate with a null id');\n      }\n      if (this.idxById.has(newId)) {\n        throw new Error('[SlickGrid DataView] Cannot update item to associate with a non-unique id');\n      }\n      this.idxById.set(newId, this.idxById.get(id) as number);\n      this.idxById.delete(id);\n\n      // Also update the `updated` hashtable/markercache? Yes, `recalc()` inside `refresh()` needs that one!\n      if (this.updated?.[id]) {\n        delete this.updated[id];\n      }\n\n      // Also update the row indexes? no need since the `refresh()`, further down, blows away the `rowsById[]` cache!\n\n      id = newId;\n    }\n    this.items[this.idxById.get(id) as number] = item;\n\n    // Also update the rows? no need since the `refresh()`, further down, blows away the `rows[]` cache and recalculates it via `recalc()`!\n\n    if (!this.updated) {\n      this.updated = {};\n    }\n    this.updated[id] = true;\n  }\n\n  /**\n   * Updates a single item in the data view given the id and new value.\n   * @param id The new id of the item.\n   * @param item The item which should be the new value for the given id.\n   */\n  updateItem<T extends TData>(id: DataIdType, item: T) {\n    this.updateSingleItem(id, item);\n    this.refresh();\n  }\n\n  /**\n   * Updates multiple items in the data view given the new ids and new values.\n   * @param id {Array} The array of new ids which is in the same order as the items.\n   * @param newItems {Array} The new items that should be set in the data view for the given ids.\n   */\n  updateItems<T extends TData>(ids: DataIdType[], newItems: T[]) {\n    if (ids.length !== newItems.length) {\n      throw new Error('[SlickGrid DataView] Mismatch on the length of ids and items provided to update');\n    }\n    for (let i = 0, l = newItems.length; i < l; i++) {\n      this.updateSingleItem(ids[i], newItems[i]);\n    }\n    this.refresh();\n  }\n\n  /**\n   * Inserts a single item into the data view at the given position.\n   * @param insertBefore {Number} The 0-based index before which the item should be inserted.\n   * @param item The item to insert.\n   */\n  insertItem(insertBefore: number, item: TData) {\n    this.items.splice(insertBefore, 0, item);\n    this.updateIdxById(insertBefore);\n    this.refresh();\n  }\n\n  /**\n   * Inserts multiple items into the data view at the given position.\n   * @param insertBefore {Number} The 0-based index before which the items should be inserted.\n   * @param newItems {Array}  The items to insert.\n   */\n  insertItems(insertBefore: number, newItems: TData[]) {\n    // @ts-ignore\n    Array.prototype.splice.apply(this.items, [insertBefore, 0].concat(newItems));\n    this.updateIdxById(insertBefore);\n    this.refresh();\n  }\n\n  /**\n   * Adds a single item at the end of the data view.\n   * @param item The item to add at the end.\n   */\n  addItem(item: TData) {\n    this.items.push(item);\n    this.updateIdxById(this.items.length - 1);\n    this.refresh();\n  }\n\n  /**\n   * Adds multiple items at the end of the data view.\n   * @param {Array} newItems The items to add at the end.\n   */\n  addItems(newItems: TData[]) {\n    this.items = this.items.concat(newItems);\n    this.updateIdxById(this.items.length - newItems.length);\n    this.refresh();\n  }\n\n  /**\n   * Deletes a single item identified by the given id from the data view.\n   * @param {String|Number} id The id identifying the object to delete.\n   */\n  deleteItem(id: DataIdType) {\n    if (!this.idxById) { return; }\n    if (this.isBulkSuspend) {\n      this.bulkDeleteIds.set(id, true);\n    } else {\n      const idx = this.idxById.get(id);\n      if (idx === undefined) {\n        throw new Error('[SlickGrid DataView] Invalid id');\n      }\n      this.idxById.delete(id);\n      this.items.splice(idx, 1);\n      this.updateIdxById(idx);\n      this.refresh();\n    }\n  }\n\n  /**\n   * Deletes multiple item identified by the given ids from the data view.\n   * @param {Array} ids The ids of the items to delete.\n   */\n  deleteItems(ids: DataIdType[]) {\n    if (ids.length === 0 || !this.idxById) {\n      return;\n    }\n\n    if (this.isBulkSuspend) {\n      for (let i = 0, l = ids.length; i < l; i++) {\n        const id = ids[i];\n        const idx = this.idxById.get(id);\n        if (idx === undefined) {\n          throw new Error('[SlickGrid DataView] Invalid id');\n        }\n        this.bulkDeleteIds.set(id, true);\n      }\n    } else {\n      // collect all indexes\n      const indexesToDelete: number[] = [];\n      for (let i = 0, l = ids.length; i < l; i++) {\n        const id = ids[i];\n        const idx = this.idxById.get(id);\n        if (idx === undefined) {\n          throw new Error('[SlickGrid DataView] Invalid id');\n        }\n        this.idxById.delete(id);\n        indexesToDelete.push(idx);\n      }\n\n      // Remove from back to front\n      indexesToDelete.sort();\n      for (let i = indexesToDelete.length - 1; i >= 0; --i) {\n        this.items.splice(indexesToDelete[i], 1);\n      }\n\n      // update lookup from front to back\n      this.updateIdxById(indexesToDelete[0]);\n      this.refresh();\n    }\n  }\n\n  /** Add an item in a sorted dataset (a Sort function must be defined) */\n  sortedAddItem(item: TData) {\n    if (!this.sortComparer) {\n      throw new Error('[SlickGrid DataView] sortedAddItem() requires a sort comparer, use sort()');\n    }\n    this.insertItem(this.sortedIndex(item), item);\n  }\n\n  /** Update an item in a sorted dataset (a Sort function must be defined) */\n  sortedUpdateItem(id: string | number, item: TData) {\n    if (!this.idxById) { return; }\n    if (!this.idxById.has(id) || id !== item[this.idProperty as keyof TData]) {\n      throw new Error('[SlickGrid DataView] Invalid or non-matching id ' + this.idxById.get(id));\n    }\n    if (!this.sortComparer) {\n      throw new Error('[SlickGrid DataView] sortedUpdateItem() requires a sort comparer, use sort()');\n    }\n    const oldItem = this.getItemById(id);\n    if (this.sortComparer(oldItem, item) !== 0) {\n      // item affects sorting -> must use sorted add\n      this.deleteItem(id);\n      this.sortedAddItem(item);\n    } else { // update does not affect sorting -> regular update works fine\n      this.updateItem(id, item);\n    }\n  }\n\n  protected sortedIndex(searchItem: TData) {\n    let low = 0;\n    let high = this.items.length;\n\n    while (low < high) {\n      const mid = low + high >>> 1;\n      if (this.sortComparer(this.items[mid], searchItem) === -1) {\n        low = mid + 1;\n      } else {\n        high = mid;\n      }\n    }\n    return low;\n  }\n\n  /** Get item count, that is the full dataset lenght of the DataView */\n  getItemCount() {\n    return this.items.length;\n  }\n\n  /** Get row count (rows displayed in current page) */\n  getLength() {\n    return this.rows.length;\n  }\n\n  /** Retrieve an item from the DataView at specific index */\n  getItem<T extends TData>(i: number) {\n    const item = this.rows[i] as T;\n\n    // if this is a group row, make sure totals are calculated and update the title\n    if ((item as SlickGroup_)?.__group && (item as SlickGroup_).totals && !(item as SlickGroup_).totals?.initialized) {\n      const gi = this.groupingInfos[(item as SlickGroup_).level];\n      if (!gi.displayTotalsRow) {\n        this.calculateTotals((item as SlickGroup_).totals);\n        (item as SlickGroup_).title = gi.formatter ? gi.formatter((item as SlickGroup_)) : (item as SlickGroup_).value;\n      }\n    }\n    // if this is a totals row, make sure it's calculated\n    else if ((item as SlickGroupTotals_)?.__groupTotals && !(item as SlickGroupTotals_).initialized) {\n      this.calculateTotals(item as SlickGroupTotals_);\n    }\n\n    return item;\n  }\n\n  getItemMetadata(i: number): ItemMetadata | null {\n    const item = this.rows[i];\n    if (item === undefined) {\n      return null;\n    }\n\n    // overrides for grouping rows\n    if ((item as SlickGroup_).__group) {\n      return this._options.groupItemMetadataProvider!.getGroupRowMetadata(item as GroupingFormatterItem);\n    }\n\n    // overrides for totals rows\n    if ((item as SlickGroupTotals_).__groupTotals) {\n      return this._options.groupItemMetadataProvider!.getTotalsRowMetadata(item as { group: GroupingFormatterItem });\n    }\n\n    return null;\n  }\n\n  protected expandCollapseAllGroups(level?: number, collapse?: boolean) {\n    if (!Utils.isDefined(level)) {\n      for (let i = 0; i < this.groupingInfos.length; i++) {\n        this.toggledGroupsByLevel[i] = {};\n        this.groupingInfos[i].collapsed = collapse;\n\n        if (collapse === true) {\n          this.onGroupCollapsed.notify({ level: i, groupingKey: null });\n        } else {\n          this.onGroupExpanded.notify({ level: i, groupingKey: null });\n        }\n      }\n    } else {\n      this.toggledGroupsByLevel[level] = {};\n      this.groupingInfos[level].collapsed = collapse;\n\n      if (collapse === true) {\n        this.onGroupCollapsed.notify({ level, groupingKey: null });\n      } else {\n        this.onGroupExpanded.notify({ level, groupingKey: null });\n      }\n    }\n    this.refresh();\n  }\n\n  /**\n   * @param {Number} [level] Optional level to collapse.  If not specified, applies to all levels.\n   */\n  collapseAllGroups(level?: number) {\n    this.expandCollapseAllGroups(level, true);\n  }\n\n  /**\n   * @param {Number} [level] Optional level to expand.  If not specified, applies to all levels.\n   */\n  expandAllGroups(level?: number) {\n    this.expandCollapseAllGroups(level, false);\n  }\n\n  expandCollapseGroup(level: number, groupingKey: string, collapse?: boolean) {\n    // @ts-ignore\n    this.toggledGroupsByLevel[level][groupingKey] = this.groupingInfos[level].collapsed ^ collapse;\n    this.refresh();\n  }\n\n  /**\n   * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\n   *     variable argument list of grouping values denoting a unique path to the row.  For\n   *     example, calling collapseGroup('high', '10%') will collapse the '10%' subgroup of\n   *     the 'high' group.\n   */\n  collapseGroup(...args: any) {\n    const calledArgs = Array.prototype.slice.call(args);\n    const arg0 = calledArgs[0];\n    let groupingKey: string;\n    let level: number;\n\n    if (args.length === 1 && arg0.indexOf(this.groupingDelimiter) !== -1) {\n      groupingKey = arg0;\n      level = arg0.split(this.groupingDelimiter).length - 1;\n    } else {\n      groupingKey = args.join(this.groupingDelimiter);\n      level = args.length - 1;\n    }\n\n    this.expandCollapseGroup(level, groupingKey, true);\n    this.onGroupCollapsed.notify({ level, groupingKey });\n  }\n\n  /**\n   * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\n   *     variable argument list of grouping values denoting a unique path to the row.  For\n   *     example, calling expandGroup('high', '10%') will expand the '10%' subgroup of\n   *     the 'high' group.\n   */\n  expandGroup(...args: any) {\n    const calledArgs = Array.prototype.slice.call(args);\n    const arg0 = calledArgs[0];\n    let groupingKey: string;\n    let level: number;\n\n    if (args.length === 1 && arg0.indexOf(this.groupingDelimiter) !== -1) {\n      level = arg0.split(this.groupingDelimiter).length - 1;\n      groupingKey = arg0;\n    } else {\n      level = args.length - 1;\n      groupingKey = args.join(this.groupingDelimiter);\n    }\n\n    this.expandCollapseGroup(level, groupingKey, false);\n    this.onGroupExpanded.notify({ level, groupingKey });\n  }\n\n  getGroups() {\n    return this.groups;\n  }\n\n  protected extractGroups(rows: any[], parentGroup?: SlickGroup_) {\n    let group: SlickGroup_;\n    let val: any;\n    const groups: SlickGroup_[] = [];\n    const groupsByVal: any = {};\n    let r;\n    const level = parentGroup ? parentGroup.level + 1 : 0;\n    const gi = this.groupingInfos[level];\n\n    for (let i = 0, l = gi.predefinedValues?.length ?? 0; i < l; i++) {\n      val = gi.predefinedValues?.[i];\n      group = groupsByVal[val];\n      if (!group) {\n        group = new SlickGroup();\n        group.value = val;\n        group.level = level;\n        group.groupingKey = (parentGroup ? parentGroup.groupingKey + this.groupingDelimiter : '') + val;\n        groups[groups.length] = group;\n        groupsByVal[val] = group;\n      }\n    }\n\n    for (let i = 0, l = rows.length; i < l; i++) {\n      r = rows[i];\n      val = gi.getterIsAFn ? (gi.getter as GroupGetterFn)(r) : r[gi.getter as keyof TData];\n      group = groupsByVal[val];\n      if (!group) {\n        group = new SlickGroup();\n        group.value = val;\n        group.level = level;\n        group.groupingKey = (parentGroup ? parentGroup.groupingKey + this.groupingDelimiter : '') + val;\n        groups[groups.length] = group;\n        groupsByVal[val] = group;\n      }\n\n      group.rows[group.count++] = r;\n    }\n\n    if (level < this.groupingInfos.length - 1) {\n      for (let i = 0; i < groups.length; i++) {\n        group = groups[i];\n        group.groups = this.extractGroups(group.rows, group);\n      }\n    }\n\n    if (groups.length) {\n      this.addTotals(groups, level);\n    }\n\n    groups.sort(this.groupingInfos[level].comparer);\n\n    return groups;\n  }\n\n  /** claculate Group Totals */\n  protected calculateTotals(totals: SlickGroupTotals_) {\n    const group = totals.group;\n    const gi = this.groupingInfos[group.level ?? 0];\n    const isLeafLevel = (group.level === this.groupingInfos.length);\n    let agg: Aggregator;\n    let idx = gi.aggregators.length;\n\n    if (!isLeafLevel && gi.aggregateChildGroups) {\n      // make sure all the subgroups are calculated\n      let i = group.groups?.length ?? 0;\n      while (i--) {\n        if (!group.groups[i].totals.initialized) {\n          this.calculateTotals(group.groups[i].totals);\n        }\n      }\n    }\n\n    while (idx--) {\n      agg = gi.aggregators[idx];\n      agg.init();\n      if (!isLeafLevel && gi.aggregateChildGroups) {\n        gi.compiledAccumulators[idx].call(agg, group.groups);\n      } else {\n        gi.compiledAccumulators[idx].call(agg, group.rows);\n      }\n      agg.storeResult(totals);\n    }\n    totals.initialized = true;\n  }\n\n  protected addGroupTotals(group: SlickGroup_) {\n    const gi = this.groupingInfos[group.level];\n    const totals = new SlickGroupTotals();\n    totals.group = group;\n    group.totals = totals;\n    if (!gi.lazyTotalsCalculation) {\n      this.calculateTotals(totals);\n    }\n  }\n\n  protected addTotals(groups: SlickGroup_[], level?: number) {\n    level = level || 0;\n    const gi = this.groupingInfos[level];\n    const groupCollapsed = gi.collapsed;\n    const toggledGroups = this.toggledGroupsByLevel[level];\n    let idx = groups.length, g;\n    while (idx--) {\n      g = groups[idx];\n\n      if (g.collapsed && !gi.aggregateCollapsed) {\n        continue;\n      }\n\n      // Do a depth-first aggregation so that parent group aggregators can access subgroup totals.\n      if (g.groups) {\n        this.addTotals(g.groups, level + 1);\n      }\n\n      if (gi.aggregators?.length && (\n        gi.aggregateEmpty || g.rows.length || g.groups?.length)) {\n        this.addGroupTotals(g);\n      }\n\n      g.collapsed = (groupCollapsed as any) ^ toggledGroups[g.groupingKey];\n      g.title = gi.formatter ? gi.formatter(g) : g.value;\n    }\n  }\n\n  protected flattenGroupedRows(groups: SlickGroup_[], level?: number) {\n    level = level || 0;\n    const gi = this.groupingInfos[level];\n    const groupedRows: any[] = [];\n    let rows: any[];\n    let gl = 0;\n    let g;\n    for (let i = 0, l = groups.length; i < l; i++) {\n      g = groups[i];\n      groupedRows[gl++] = g;\n\n      if (!g.collapsed) {\n        rows = g.groups ? this.flattenGroupedRows(g.groups, level + 1) : g.rows;\n        for (let j = 0, jj = rows.length; j < jj; j++) {\n          groupedRows[gl++] = rows[j];\n        }\n      }\n\n      if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {\n        groupedRows[gl++] = g.totals;\n      }\n    }\n    return groupedRows;\n  }\n\n  protected compileAccumulatorLoopCSPSafe(aggregator: Aggregator) {\n    if (aggregator.accumulate) {\n      return function (items: any[]) {\n        let result;\n        for (let i = 0; i < items.length; i++) {\n          const item = items[i];\n          result = aggregator.accumulate!.call(aggregator, item);\n        }\n        return result;\n      };\n    } else {\n      return function noAccumulator() { };\n    }\n  }\n\n  protected compileFilterCSPSafe(items: TData[], args: any): TData[] {\n    if (typeof this.filterCSPSafe !== 'function') {\n      return [];\n    }\n    const _retval: TData[] = [];\n    const _il = items.length;\n\n    for (let _i = 0; _i < _il; _i++) {\n      if (this.filterCSPSafe(items[_i], args)) {\n        _retval.push(items[_i]);\n      }\n    }\n\n    return _retval;\n  }\n\n  protected compileFilter(stopRunningIfCSPSafeIsActive: boolean = false): FilterFn<TData> {\n    if (stopRunningIfCSPSafeIsActive) {\n      return null as any;\n    }\n    const filterInfo = Utils.getFunctionDetails(this.filter as FilterFn<TData>);\n\n    const filterPath1 = '{ continue _coreloop; }$1';\n    const filterPath2 = '{ _retval[_idx++] = $item$; continue _coreloop; }$1';\n    // make some allowances for minification - there's only so far we can go with RegEx\n    const filterBody = filterInfo.body\n      .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\n      .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\n      .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\n      .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\n      .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\n        '{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2');\n\n    // This preserves the function template code after JS compression,\n    // so that replace() commands still work as expected.\n    let tpl = [\n      // 'function(_items, _args) { ',\n      'var _retval = [], _idx = 0; ',\n      'var $item$, $args$ = _args; ',\n      '_coreloop: ',\n      'for (var _i = 0, _il = _items.length; _i < _il; _i++) { ',\n      '$item$ = _items[_i]; ',\n      '$filter$; ',\n      '} ',\n      'return _retval; '\n      // '}'\n    ].join('');\n    tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\n    tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\n    tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\n    const fn: any = new Function('_items,_args', tpl);\n    const fnName = 'compiledFilter';\n    fn.displayName = fnName;\n    fn.name = this.setFunctionName(fn, fnName);\n    return fn;\n  }\n\n  protected compileFilterWithCaching(stopRunningIfCSPSafeIsActive: boolean = false) {\n    if (stopRunningIfCSPSafeIsActive) {\n      return null as any;\n    }\n\n    const filterInfo = Utils.getFunctionDetails(this.filter as FilterFn<TData>);\n\n    const filterPath1 = '{ continue _coreloop; }$1';\n    const filterPath2 = '{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1';\n    // make some allowances for minification - there's only so far we can go with RegEx\n    const filterBody = filterInfo.body\n      .replace(/return false\\s*([;}]|\\}|$)/gi, filterPath1)\n      .replace(/return!1([;}]|\\}|$)/gi, filterPath1)\n      .replace(/return true\\s*([;}]|\\}|$)/gi, filterPath2)\n      .replace(/return!0([;}]|\\}|$)/gi, filterPath2)\n      .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\n        '{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2');\n\n    // This preserves the function template code after JS compression,\n    // so that replace() commands still work as expected.\n    let tpl = [\n      // 'function(_items, _args, _cache) { ',\n      'var _retval = [], _idx = 0; ',\n      'var $item$, $args$ = _args; ',\n      '_coreloop: ',\n      'for (var _i = 0, _il = _items.length; _i < _il; _i++) { ',\n      '$item$ = _items[_i]; ',\n      'if (_cache[_i]) { ',\n      '_retval[_idx++] = $item$; ',\n      'continue _coreloop; ',\n      '} ',\n      '$filter$; ',\n      '} ',\n      'return _retval; '\n      // '}'\n    ].join('');\n    tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\n    tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\n    tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\n\n    const fn: any = new Function('_items,_args,_cache', tpl);\n    const fnName = 'compiledFilterWithCaching';\n    fn.displayName = fnName;\n    fn.name = this.setFunctionName(fn, fnName);\n    return fn;\n  }\n\n  protected compileFilterWithCachingCSPSafe(items: TData[], args: any, filterCache: any[]): TData[] {\n    if (typeof this.filterCSPSafe !== 'function') {\n      return [];\n    }\n\n    const retval: TData[] = [];\n    const il = items.length;\n\n    for (let _i = 0; _i < il; _i++) {\n      if (filterCache[_i] || this.filterCSPSafe(items[_i], args)) {\n        retval.push(items[_i]);\n      }\n    }\n\n    return retval;\n  }\n\n  /**\n   * In ES5 we could set the function name on the fly but in ES6 this is forbidden and we need to set it through differently\n   * We can use Object.defineProperty and set it the property to writable, see MDN for reference\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n   * @param {*} fn\n   * @param {string} fnName\n   */\n  protected setFunctionName(fn: any, fnName: string) {\n    try {\n      Object.defineProperty(fn, 'name', { writable: true, value: fnName });\n    } catch (err) {\n      fn.name = fnName;\n    }\n  }\n\n  protected uncompiledFilter(items: TData[], args: any) {\n    const retval: any[] = [];\n    let idx = 0;\n\n    for (let i = 0, ii = items.length; i < ii; i++) {\n      if (this.filter?.(items[i], args)) {\n        retval[idx++] = items[i];\n      }\n    }\n\n    return retval;\n  }\n\n  protected uncompiledFilterWithCaching(items: TData[], args: any, cache: any) {\n    const retval: any[] = [];\n    let idx = 0,\n      item: TData;\n\n    for (let i = 0, ii = items.length; i < ii; i++) {\n      item = items[i];\n      if (cache[i]) {\n        retval[idx++] = item;\n      } else if (this.filter?.(item, args)) {\n        retval[idx++] = item;\n        cache[i] = true;\n      }\n    }\n\n    return retval;\n  }\n\n  protected getFilteredAndPagedItems(items: TData[]) {\n    if (this._options.useCSPSafeFilter ? this.filterCSPSafe : this.filter) {\n      let batchFilter: AnyFunction;\n      let batchFilterWithCaching: AnyFunction;\n      if (this._options.useCSPSafeFilter) {\n        batchFilter = (this._options.inlineFilters ? this.compiledFilterCSPSafe : this.uncompiledFilter) as AnyFunction;\n        batchFilterWithCaching = (this._options.inlineFilters ? this.compiledFilterWithCachingCSPSafe : this.uncompiledFilterWithCaching) as AnyFunction;\n      } else {\n        batchFilter = (this._options.inlineFilters ? this.compiledFilter : this.uncompiledFilter) as AnyFunction;\n        batchFilterWithCaching = (this._options.inlineFilters ? this.compiledFilterWithCaching : this.uncompiledFilterWithCaching) as AnyFunction;\n      }\n      if (this.refreshHints.isFilterNarrowing) {\n        this.filteredItems = batchFilter.call(this, this.filteredItems, this.filterArgs);\n      } else if (this.refreshHints.isFilterExpanding) {\n        this.filteredItems = batchFilterWithCaching.call(this, items, this.filterArgs, this.filterCache);\n      } else if (!this.refreshHints.isFilterUnchanged) {\n        this.filteredItems = batchFilter.call(this, items, this.filterArgs);\n      }\n    } else {\n      // special case:  if not filtering and not paging, the resulting\n      // rows collection needs to be a copy so that changes due to sort\n      // can be caught\n      this.filteredItems = this.pagesize ? items : items.concat();\n    }\n\n    // get the current page\n    let paged: TData[];\n    if (this.pagesize) {\n      if (this.filteredItems.length <= this.pagenum * this.pagesize) {\n        if (this.filteredItems.length === 0) {\n          this.pagenum = 0;\n        } else {\n          this.pagenum = Math.floor((this.filteredItems.length - 1) / this.pagesize);\n        }\n      }\n      paged = this.filteredItems.slice(this.pagesize * this.pagenum, this.pagesize * this.pagenum + this.pagesize);\n    } else {\n      paged = this.filteredItems;\n    }\n    return { totalRows: this.filteredItems.length, rows: paged };\n  }\n\n  protected getRowDiffs(rows: TData[], newRows: TData[]) {\n    let item: TData | SlickNonDataItem | SlickDataItem | SlickGroup_;\n    let r;\n    let eitherIsNonData;\n    const diff: number[] = [];\n    let from = 0;\n    let to = Math.max(newRows.length, rows.length);\n\n    if (this.refreshHints?.ignoreDiffsBefore) {\n      from = Math.max(0,\n        Math.min(newRows.length, this.refreshHints.ignoreDiffsBefore));\n    }\n\n    if (this.refreshHints?.ignoreDiffsAfter) {\n      to = Math.min(newRows.length,\n        Math.max(0, this.refreshHints.ignoreDiffsAfter));\n    }\n\n    for (let i = from, rl = rows.length; i < to; i++) {\n      if (i >= rl) {\n        diff[diff.length] = i;\n      } else {\n        item = newRows[i];\n        r = rows[i];\n\n        if (!item || (this.groupingInfos.length && (eitherIsNonData = ((item as SlickNonDataItem).__nonDataRow) || ((r as SlickNonDataItem).__nonDataRow)) &&\n          (item as SlickGroup_).__group !== (r as SlickGroup_).__group ||\n          (item as SlickGroup_).__group && !(item as SlickGroup_).equals(r as SlickGroup_))\n          || (eitherIsNonData &&\n            // no good way to compare totals since they are arbitrary DTOs\n            // deep object comparison is pretty expensive\n            // always considering them 'dirty' seems easier for the time being\n            ((item as SlickGroupTotals_).__groupTotals || (r as SlickGroupTotals_).__groupTotals))\n          || item[this.idProperty as keyof TData] !== r[this.idProperty as keyof TData]\n          || (this.updated?.[item[this.idProperty as keyof TData]])\n        ) {\n          diff[diff.length] = i;\n        }\n      }\n    }\n    return diff;\n  }\n\n  protected recalc(_items: TData[]) {\n    this.rowsById = undefined;\n\n    if (this.refreshHints.isFilterNarrowing !== this.prevRefreshHints.isFilterNarrowing ||\n      this.refreshHints.isFilterExpanding !== this.prevRefreshHints.isFilterExpanding) {\n      this.filterCache = [];\n    }\n\n    const filteredItems = this.getFilteredAndPagedItems(_items);\n    this.totalRows = filteredItems.totalRows;\n    let newRows: TData[] = filteredItems.rows;\n\n    this.groups = [];\n    if (this.groupingInfos.length) {\n      this.groups = this.extractGroups(newRows);\n      if (this.groups.length) {\n        newRows = this.flattenGroupedRows(this.groups);\n      }\n    }\n\n    const diff = this.getRowDiffs(this.rows, newRows as TData[]);\n\n    this.rows = newRows as TData[];\n\n    return diff;\n  }\n\n  refresh() {\n    if (this.suspend) {\n      return;\n    }\n\n    const previousPagingInfo = Utils.extend(true, {}, this.getPagingInfo());\n\n    const countBefore = this.rows.length;\n    const totalRowsBefore = this.totalRows;\n\n    let diff = this.recalc(this.items); // pass as direct refs to avoid closure perf hit\n\n    // if the current page is no longer valid, go to last page and recalc\n    // we suffer a performance penalty here, but the main loop (recalc) remains highly optimized\n    if (this.pagesize && this.totalRows < this.pagenum * this.pagesize) {\n      this.pagenum = Math.max(0, Math.ceil(this.totalRows / this.pagesize) - 1);\n      diff = this.recalc(this.items);\n    }\n\n    this.updated = null;\n    this.prevRefreshHints = this.refreshHints;\n    this.refreshHints = {};\n\n    if (totalRowsBefore !== this.totalRows) {\n      // use the previously saved paging info\n      if (this.onBeforePagingInfoChanged.notify(previousPagingInfo, null, this).getReturnValue() !== false) {\n        this.onPagingInfoChanged.notify(this.getPagingInfo(), null, this);\n      }\n    }\n    if (countBefore !== this.rows.length) {\n      this.onRowCountChanged.notify({ previous: countBefore, current: this.rows.length, itemCount: this.items.length, dataView: this, callingOnRowsChanged: (diff.length > 0) }, null, this);\n    }\n    if (diff.length > 0) {\n      this.onRowsChanged.notify({ rows: diff, itemCount: this.items.length, dataView: this, calledOnRowCountChanged: (countBefore !== this.rows.length) }, null, this);\n    }\n    if (countBefore !== this.rows.length || diff.length > 0) {\n      this.onRowsOrCountChanged.notify({\n        rowsDiff: diff, previousRowCount: countBefore, currentRowCount: this.rows.length, itemCount: this.items.length,\n        rowCountChanged: countBefore !== this.rows.length, rowsChanged: diff.length > 0, dataView: this\n      }, null, this);\n    }\n  }\n\n  /**\n   * Wires the grid and the DataView together to keep row selection tied to item ids.\n   * This is useful since, without it, the grid only knows about rows, so if the items\n   * move around, the same rows stay selected instead of the selection moving along\n   * with the items.\n   *\n   * NOTE:  This doesn't work with cell selection model.\n   *\n   * @param {SlickGrid} grid - The grid to sync selection with.\n   * @param {Boolean} preserveHidden - Whether to keep selected items that go out of the\n   *     view due to them getting filtered out.\n   * @param {Boolean} [preserveHiddenOnSelectionChange] - Whether to keep selected items\n   *     that are currently out of the view (see preserveHidden) as selected when selection\n   *     changes.\n   * @return {Event} An event that notifies when an internal list of selected row ids\n   *     changes.  This is useful since, in combination with the above two options, it allows\n   *     access to the full list selected row ids, and not just the ones visible to the grid.\n   * @method syncGridSelection\n   */\n  syncGridSelection(grid: SlickGridModel, preserveHidden: boolean, preserveHiddenOnSelectionChange?: boolean) {\n    this._grid = grid;\n    let inHandler: boolean;\n    this.selectedRowIds = this.mapRowsToIds(grid.getSelectedRows());\n\n    /** @param {Array} rowIds */\n    const setSelectedRowIds = (rowIds: DataIdType[] | false) => {\n      if (rowIds === false) {\n        this.selectedRowIds = [];\n      } else {\n        if (this.selectedRowIds!.sort().join(',') !== rowIds.sort().join(',')) {\n          this.selectedRowIds = rowIds;\n        }\n      }\n    };\n\n    const update = () => {\n      if ((this.selectedRowIds || []).length > 0 && !inHandler) {\n        inHandler = true;\n        const selectedRows = this.mapIdsToRows(this.selectedRowIds || []);\n        if (!preserveHidden) {\n          const selectedRowsChangedArgs = {\n            grid: this._grid,\n            ids: this.mapRowsToIds(selectedRows),\n            rows: selectedRows,\n            dataView: this\n          };\n          this.preSelectedRowIdsChangeFn!(selectedRowsChangedArgs);\n          this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\n            selectedRowIds: this.selectedRowIds,\n            filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\n          }), new SlickEventData(), this);\n        }\n        grid.setSelectedRows(selectedRows);\n        inHandler = false;\n      }\n    };\n\n    grid.onSelectedRowsChanged.subscribe((_e: SlickEventData_, args: { rows: number[]; }) => {\n      if (!inHandler) {\n        const newSelectedRowIds = this.mapRowsToIds(args.rows);\n        const selectedRowsChangedArgs = {\n          grid: this._grid,\n          ids: newSelectedRowIds,\n          rows: args.rows,\n          added: true,\n          dataView: this\n        };\n        this.preSelectedRowIdsChangeFn!(selectedRowsChangedArgs);\n        this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\n          selectedRowIds: this.selectedRowIds,\n          filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\n        }), new SlickEventData(), this);\n      }\n    });\n\n    this.preSelectedRowIdsChangeFn = (args: { ids: DataIdType[]; added?: boolean; }) => {\n      if (!inHandler) {\n        inHandler = true;\n        const overwrite = (typeof args.added === typeof undefined);\n\n        if (overwrite) {\n          setSelectedRowIds(args.ids);\n        } else {\n          let rowIds: DataIdType[];\n          if (args.added) {\n            if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {\n              // find the ones that are hidden\n              const hiddenSelectedRowIds = this.selectedRowIds?.filter((id) => this.getRowById(id) === undefined);\n              // add the newly selected ones\n              rowIds = hiddenSelectedRowIds!.concat(args.ids);\n            } else {\n              rowIds = args.ids;\n            }\n          } else {\n            if (preserveHiddenOnSelectionChange && grid.getOptions().multiSelect) {\n              // remove rows whose id is on the list\n              rowIds = this.selectedRowIds!.filter((id) => args.ids.indexOf(id) === -1);\n            } else {\n              rowIds = [];\n            }\n          }\n          setSelectedRowIds(rowIds);\n        }\n        inHandler = false;\n      }\n    };\n\n    this.onRowsOrCountChanged.subscribe(update.bind(this));\n\n    return this.onSelectedRowIdsChanged;\n  }\n\n  /**\n   * Get all selected IDs\n   * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\n   */\n  getAllSelectedIds() {\n    return this.selectedRowIds;\n  }\n\n  /**\n   * Get all selected filtered IDs (similar to \"getAllSelectedIds\" but only return filtered data)\n   * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\n   */\n  getAllSelectedFilteredIds() {\n    return this.getAllSelectedFilteredItems().map((item) => item[this.idProperty as keyof TData]);\n  }\n\n  /**\n   * Set current row selected IDs array (regardless of Pagination)\n   * NOTE: This will NOT change the selection in the grid, if you need to do that then you still need to call\n   * \"grid.setSelectedRows(rows)\"\n   * @param {Array} selectedIds - list of IDs which have been selected for this action\n   * @param {Object} options\n   *  - `isRowBeingAdded`: defaults to true, are the new selected IDs being added (or removed) as new row selections\n   *  - `shouldTriggerEvent`: defaults to true, should we trigger `onSelectedRowIdsChanged` event\n   *  - `applyRowSelectionToGrid`: defaults to true, should we apply the row selections to the grid in the UI\n   */\n  setSelectedIds(selectedIds: Array<number | string>, options?: Partial<{ isRowBeingAdded: boolean; shouldTriggerEvent: boolean; applyRowSelectionToGrid: boolean; }>) {\n    let isRowBeingAdded = options?.isRowBeingAdded;\n    const shouldTriggerEvent = options?.shouldTriggerEvent;\n    const applyRowSelectionToGrid = options?.applyRowSelectionToGrid;\n\n    if (isRowBeingAdded !== false) {\n      isRowBeingAdded = true;\n    }\n    const selectedRows = this.mapIdsToRows(selectedIds);\n    const selectedRowsChangedArgs = {\n      grid: this._grid,\n      ids: selectedIds,\n      rows: selectedRows,\n      added: isRowBeingAdded,\n      dataView: this\n    };\n    this.preSelectedRowIdsChangeFn?.(selectedRowsChangedArgs);\n\n    if (shouldTriggerEvent !== false) {\n      this.onSelectedRowIdsChanged.notify(Object.assign(selectedRowsChangedArgs, {\n        selectedRowIds: this.selectedRowIds,\n        filteredIds: this.getAllSelectedFilteredIds() as DataIdType[],\n      }), new SlickEventData(), this);\n    }\n\n    // should we also apply the row selection in to the grid (UI) as well?\n    if (applyRowSelectionToGrid !== false && this._grid) {\n      this._grid.setSelectedRows(selectedRows);\n    }\n  }\n\n  /**\n   * Get all selected dataContext items\n   * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\n   */\n  getAllSelectedItems<T extends TData>() {\n    const selectedData: TData[] = [];\n    const selectedIds = this.getAllSelectedIds();\n    selectedIds!.forEach((id) => {\n      selectedData.push(this.getItemById(id));\n    });\n    return selectedData as T[];\n  }\n\n  /**\n  * Get all selected filtered dataContext items (similar to \"getAllSelectedItems\" but only return filtered data)\n  * Note: when using Pagination it will also include hidden selections assuming `preserveHiddenOnSelectionChange` is set to true.\n  */\n  getAllSelectedFilteredItems<T extends TData>() {\n    if (!Array.isArray(this.selectedRowIds)) {\n      return [];\n    }\n\n    const intersection = this.filteredItems.filter((a) => this.selectedRowIds!.some((b) => a[this.idProperty as keyof TData] === b));\n    return (intersection || []) as T[];\n  }\n\n  syncGridCellCssStyles(grid: SlickGridModel, key: string) {\n    let hashById: any;\n    let inHandler: boolean;\n\n    const storeCellCssStyles = (hash: CssStyleHash) => {\n      hashById = {};\n      if (typeof hash === 'object') {\n        Object.keys(hash).forEach(row => {\n          if (hash) {\n            const id = this.rows[row as any][this.idProperty as keyof TData];\n            hashById[id] = hash[row];\n          }\n        });\n      }\n    };\n\n    // since this method can be called after the cell styles have been set,\n    // get the existing ones right away\n    storeCellCssStyles(grid.getCellCssStyles(key));\n\n    const update = () => {\n      if (typeof hashById === 'object') {\n        inHandler = true;\n        this.ensureRowsByIdCache();\n        const newHash: CssStyleHash = {};\n        Object.keys(hashById).forEach(id => {\n          const row = this.rowsById?.[id];\n          if (Utils.isDefined(row)) {\n            newHash[row as number] = hashById[id];\n          }\n        });\n        grid.setCellCssStyles(key, newHash);\n        inHandler = false;\n      }\n    };\n\n    grid.onCellCssStylesChanged.subscribe((_e: SlickEventData_, args: any) => {\n      if (inHandler) { return; }\n      if (key !== args.key) { return; }\n      if (args.hash) {\n        storeCellCssStyles(args.hash);\n      } else {\n        grid.onCellCssStylesChanged.unsubscribe();\n        this.onRowsOrCountChanged.unsubscribe(update);\n      }\n    });\n\n    this.onRowsOrCountChanged.subscribe(update.bind(this));\n  }\n}\n\nexport class AvgAggregator<T = any> implements Aggregator {\n  private _nonNullCount = 0;\n  private _sum = 0;\n  private _field: number | string;\n  private _type = 'avg' as const;\n\n  constructor(field: number | string) {\n    this._field = field;\n  }\n\n  get field(): number | string {\n    return this._field;\n  }\n\n  get type(): string {\n    return this._type;\n  }\n\n  init(): void {\n    this._nonNullCount = 0;\n    this._sum = 0;\n  }\n\n  accumulate(item: T) {\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\n    if (val !== null && val !== '' && !isNaN(val)) {\n      this._nonNullCount++;\n      this._sum += parseFloat(val);\n    }\n  }\n\n  storeResult(groupTotals: SlickGroupTotals_ & { avg: Record<number | string, number>; }) {\n    if (!groupTotals || groupTotals[this._type] === undefined) {\n      (groupTotals as any)[this._type] = {};\n    }\n    if (this._nonNullCount !== 0) {\n      groupTotals[this._type][this._field] = this._sum / this._nonNullCount;\n    }\n  }\n}\n\nexport class MinAggregator<T = any> implements Aggregator {\n  private _min: number | null = null;\n  private _field: number | string;\n  private _type = 'min' as const;\n\n  constructor(field: number | string) {\n    this._field = field;\n  }\n\n  get field(): number | string {\n    return this._field;\n  }\n\n  get type(): string {\n    return this._type;\n  }\n\n  init() {\n    this._min = null;\n  }\n\n  accumulate(item: T) {\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\n    if (val !== null && val !== '' && !isNaN(val)) {\n      if (this._min === null || val < this._min) {\n        this._min = parseFloat(val);\n      }\n    }\n  }\n\n  storeResult(groupTotals: SlickGroupTotals_ & { min: Record<number | string, number | null>; }) {\n    if (!groupTotals || groupTotals[this._type] === undefined) {\n      groupTotals[this._type] = {};\n    }\n    groupTotals[this._type][this._field] = this._min;\n  }\n}\n\nexport class MaxAggregator<T = any> implements Aggregator {\n  private _max: number | null = null;\n  private _field: number | string;\n  private _type = 'max' as const;\n\n  constructor(field: number | string) {\n    this._field = field;\n  }\n\n  get field(): number | string {\n    return this._field;\n  }\n\n  get type(): string {\n    return this._type;\n  }\n\n  init(): void {\n    this._max = null;\n  }\n\n  accumulate(item: T) {\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\n    if (val !== null && val !== '' && !isNaN(val)) {\n      if (this._max === null || val > this._max) {\n        this._max = parseFloat(val);\n      }\n    }\n  }\n\n  storeResult(groupTotals: SlickGroupTotals_ & { max: Record<number | string, number | null>; }) {\n    if (!groupTotals || groupTotals[this._type] === undefined) {\n      groupTotals[this._type] = {};\n    }\n    groupTotals[this._type][this._field] = this._max;\n  }\n}\n\nexport class SumAggregator<T = any> implements Aggregator {\n  private _sum = 0;\n  private _field: number | string;\n  private _type = 'sum' as const;\n\n  constructor(field: number | string) {\n    this._field = field;\n  }\n\n  get field(): number | string {\n    return this._field;\n  }\n\n  get type(): string {\n    return this._type;\n  }\n\n  init() {\n    this._sum = 0;\n  }\n\n  accumulate(item: T) {\n    const val: any = (item?.hasOwnProperty(this._field)) ? item[this._field as keyof T] : null;\n    if (val !== null && val !== '' && !isNaN(val)) {\n      this._sum += parseFloat(val);\n    }\n  }\n\n  storeResult(groupTotals: SlickGroupTotals_ & { sum: Record<number | string, number>; }) {\n    if (!groupTotals || groupTotals[this._type] === undefined) {\n      groupTotals[this._type] = {};\n    }\n    groupTotals[this._type][this._field] = this._sum;\n  }\n}\n\nexport class CountAggregator implements Aggregator {\n  private _field: number | string;\n  private _type = 'count' as const;\n\n  constructor(field: number | string) {\n    this._field = field;\n  }\n\n  get field(): number | string {\n    return this._field;\n  }\n\n  get type(): string {\n    return this._type;\n  }\n\n  init(): void {\n  }\n\n  storeResult(groupTotals: SlickGroupTotals_ & { count: Record<number | string, number>; }) {\n    if (!groupTotals || groupTotals[this._type] === undefined) {\n      groupTotals[this._type] = {};\n    }\n    groupTotals[this._type][this._field] = groupTotals.group.rows.length;\n  }\n}\n\n// TODO:  add more built-in aggregators\n// TODO:  merge common aggregators in one to prevent needless iterating\n\nexport const Aggregators = {\n  Avg: AvgAggregator,\n  Min: MinAggregator,\n  Max: MaxAggregator,\n  Sum: SumAggregator,\n  Count: CountAggregator\n};\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Data = window.Slick.Data || {};\n  window.Slick.Data.DataView = SlickDataView;\n  window.Slick.Data.Aggregators = Aggregators;\n}", "import type { Column, Editor, EditorArguments, EditorValidationResult, ElementPosition, GridOption, OnCompositeEditorChangeEventArgs } from './models/index';\nimport { keyCode as keyCode_, Utils as Utils_ } from './slick.core';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * Contains basic SlickGrid editors.\n * @module Editors\n * @namespace Slick\n */\n\nexport class TextEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected input!: HTMLInputElement;\n  protected defaultValue?: number | string;\n  protected navOnLR?: boolean;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n  }\n\n  init() {\n    this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n    this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n    this.input.focus();\n    this.input.select();\n\n    // don't show Save/Cancel when it's a Composite Editor and also trigger a onCompositeEditorChange event when input changes\n    if (this.args.compositeEditorOptions) {\n      this.input.addEventListener('change', this.onChange.bind(this));\n    }\n  }\n\n  onChange() {\n    const activeCell = this.args.grid.getActiveCell();\n\n    // when valid, we'll also apply the new value to the dataContext item object\n    if (this.validate().valid) {\n      this.applyValue(this.args.item, this.serializeValue());\n    }\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n    this.args.grid.onCompositeEditorChange.notify({\n      row: activeCell?.row ?? 0,\n      cell: activeCell?.cell ?? 0,\n      item: this.args.item,\n      column: this.args.column,\n      formValues: this.args.compositeEditorOptions.formValues,\n      grid: this.args.grid,\n      editors: this.args.compositeEditorOptions.editors\n    } as unknown as OnCompositeEditorChangeEventArgs);\n  }\n\n  destroy() {\n    this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n    this.input.removeEventListener('change', this.onChange.bind(this));\n    this.input.remove();\n  }\n\n  focus() {\n    this.input.focus();\n  }\n\n  getValue() {\n    return this.input.value;\n  }\n\n  setValue(val: string) {\n    this.input.value = val;\n  }\n\n  loadValue(item: any) {\n    this.defaultValue = item[this.args.column.field] || '';\n    this.input.value = String(this.defaultValue ?? '');\n    this.input.defaultValue = String(this.defaultValue ?? '');\n    this.input.select();\n  }\n\n  serializeValue() {\n    return this.input.value;\n  }\n\n  applyValue(item: any, state: any) {\n    item[this.args.column.field] = state;\n  }\n\n  isValueChanged() {\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n  }\n\n  validate() {\n    if (this.args.column.validator) {\n      const validationResults = this.args.column.validator(this.input.value, this.args);\n      if (!validationResults.valid) {\n        return validationResults;\n      }\n    }\n\n    return {\n      valid: true,\n      msg: null\n    };\n  }\n}\n\nexport class IntegerEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected input!: HTMLInputElement;\n  protected defaultValue?: string | number;\n  protected navOnLR?: boolean;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n  }\n\n  init() {\n    this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n    this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n    this.input.focus();\n    this.input.select();\n\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n    if (this.args.compositeEditorOptions) {\n      this.input.addEventListener('change', this.onChange.bind(this));\n    }\n  }\n\n  onChange() {\n    const activeCell = this.args.grid.getActiveCell();\n\n    // when valid, we'll also apply the new value to the dataContext item object\n    if (this.validate().valid) {\n      this.applyValue(this.args.item, this.serializeValue());\n    }\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n    this.args.grid.onCompositeEditorChange.notify({\n      row: activeCell?.row ?? 0,\n      cell: activeCell?.cell ?? 0,\n      item: this.args.item,\n      column: this.args.column,\n      formValues: this.args.compositeEditorOptions.formValues,\n      grid: this.args.grid,\n      editors: this.args.compositeEditorOptions.editors\n    } as unknown as OnCompositeEditorChangeEventArgs);\n  }\n\n  destroy() {\n    this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n    this.input.removeEventListener('change', this.onChange.bind(this));\n    this.input.remove();\n  }\n\n  focus() {\n    this.input.focus();\n  }\n\n  loadValue(item: any) {\n    this.defaultValue = item[this.args.column.field];\n    this.input.value = String(this.defaultValue ?? '');\n    this.input.defaultValue = String(this.defaultValue ?? '');\n    this.input.select();\n  }\n\n  serializeValue() {\n    return parseInt(this.input.value, 10) || 0;\n  }\n\n  applyValue(item: any, state: any) {\n    item[this.args.column.field] = state;\n  }\n\n  isValueChanged() {\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n  }\n\n  validate() {\n    if (isNaN(this.input.value as unknown as number)) {\n      return {\n        valid: false,\n        msg: 'Please enter a valid integer'\n      };\n    }\n\n    if (this.args.column.validator) {\n      const validationResults = this.args.column.validator(this.input.value, this.args);\n      if (!validationResults.valid) {\n        return validationResults;\n      }\n    }\n\n    return {\n      valid: true,\n      msg: null\n    };\n  }\n}\n\nexport class FloatEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected input!: HTMLInputElement;\n  protected defaultValue?: string | number;\n  protected navOnLR?: boolean;\n\n  /** Default number of decimal places to use with FloatEditor */\n  static DefaultDecimalPlaces?: number = undefined;\n\n  /** Should we allow empty value when using FloatEditor */\n  static AllowEmptyValue = false;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n  }\n\n  init() {\n    this.navOnLR = this.args.grid.getOptions().editorCellNavOnLRKeys;\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n    this.input.addEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n    this.input.focus();\n    this.input.select();\n\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n    if (this.args.compositeEditorOptions) {\n      this.input.addEventListener('change', this.onChange.bind(this));\n    }\n  };\n\n  onChange() {\n    const activeCell = this.args.grid.getActiveCell();\n\n    // when valid, we'll also apply the new value to the dataContext item object\n    if (this.validate().valid) {\n      this.applyValue(this.args.item, this.serializeValue());\n    }\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n    this.args.grid.onCompositeEditorChange.notify({\n      row: activeCell?.row ?? 0,\n      cell: activeCell?.cell ?? 0,\n      item: this.args.item,\n      column: this.args.column,\n      formValues: this.args.compositeEditorOptions.formValues,\n      grid: this.args.grid,\n      editors: this.args.compositeEditorOptions.editors\n    } as unknown as OnCompositeEditorChangeEventArgs);\n  };\n\n  destroy() {\n    this.input.removeEventListener('keydown', (this.navOnLR ? handleKeydownLRNav : handleKeydownLRNoNav) as EventListener);\n    this.input.removeEventListener('change', this.onChange.bind(this));\n    this.input.remove();\n  };\n\n  focus() {\n    this.input.focus();\n  }\n\n  getDecimalPlaces() {\n    // returns the number of fixed decimal places or null\n    let rtn: number | undefined = this.args.column.editorFixedDecimalPlaces;\n    if (!Utils.isDefined(rtn)) {\n      rtn = FloatEditor.DefaultDecimalPlaces;\n    }\n    return (!rtn && rtn !== 0 ? null : rtn);\n  }\n\n  loadValue(item: any) {\n    this.defaultValue = item[this.args.column.field];\n\n    const decPlaces = this.getDecimalPlaces();\n    if (decPlaces !== null\n      && (this.defaultValue || this.defaultValue === 0)\n      && (this.defaultValue as number)?.toFixed) {\n      this.defaultValue = (this.defaultValue as number).toFixed(decPlaces);\n    }\n\n    this.input.value = String(this.defaultValue ?? '');\n    this.input.defaultValue = String(this.defaultValue ?? '');\n    this.input.select();\n  }\n\n  serializeValue() {\n    let rtn: number | undefined = parseFloat(this.input.value);\n    if (FloatEditor.AllowEmptyValue) {\n      if (!rtn && rtn !== 0) {\n        rtn = undefined;\n      }\n    } else {\n      rtn = rtn || 0;\n    }\n\n    const decPlaces = this.getDecimalPlaces();\n    if (decPlaces !== null\n      && (rtn || rtn === 0)\n      && rtn.toFixed) {\n      rtn = parseFloat(rtn.toFixed(decPlaces));\n    }\n\n    return rtn as number;\n  }\n\n  applyValue(item: any, state: number | string) {\n    item[this.args.column.field] = state;\n  }\n\n  isValueChanged() {\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n  }\n\n  validate() {\n    if (isNaN(this.input.value as unknown as number)) {\n      return {\n        valid: false,\n        msg: 'Please enter a valid number'\n      };\n    }\n\n    if (this.args.column.validator) {\n      const validationResults = this.args.column.validator(this.input.value, this.args);\n      if (!validationResults.valid) {\n        return validationResults;\n      }\n    }\n\n    return {\n      valid: true,\n      msg: null\n    };\n  }\n}\n\nexport class FlatpickrEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected input!: HTMLInputElement;\n  protected defaultValue?: string | number;\n  protected flatpickrInstance: any;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n    if (typeof flatpickr === 'undefined') {\n      throw new Error('Flatpickr not loaded but required in SlickGrid.Editors, refer to Flatpickr documentation: https://flatpickr.js.org/getting-started/');\n    }\n  }\n\n  init() {\n    this.input = Utils.createDomElement('input', { type: 'text', className: 'editor-text' }, this.args.container);\n    this.input.focus();\n    this.input.select();\n    this.flatpickrInstance = flatpickr(this.input, {\n      closeOnSelect: true,\n      allowInput: true,\n      altInput: true,\n      altFormat: 'm/d/Y',\n      dateFormat: 'm/d/Y',\n      onChange: () => {\n        // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n        if (this.args.compositeEditorOptions) {\n          const activeCell = this.args.grid.getActiveCell();\n\n          // when valid, we'll also apply the new value to the dataContext item object\n          if (this.validate().valid) {\n            this.applyValue(this.args.item, this.serializeValue());\n          }\n          this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n          this.args.grid.onCompositeEditorChange.notify({\n            row: activeCell?.row ?? 0,\n            cell: activeCell?.cell ?? 0,\n            item: this.args.item,\n            column: this.args.column,\n            formValues: this.args.compositeEditorOptions.formValues,\n            grid: this.args.grid,\n            editors: this.args.compositeEditorOptions.editors\n          } as unknown as OnCompositeEditorChangeEventArgs);\n        }\n      },\n    });\n\n    if (!this.args.compositeEditorOptions) {\n      setTimeout(() => {\n        this.show();\n        this.focus();\n      }, 50);\n    }\n\n    Utils.width(this.input, (Utils.width(this.input) as number) - (!this.args.compositeEditorOptions ? 18 : 28));\n  }\n\n  destroy() {\n    this.hide();\n    if (this.flatpickrInstance) {\n      this.flatpickrInstance.destroy();\n    }\n    this.input.remove();\n  }\n\n  show() {\n    if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\n      this.flatpickrInstance.open();\n    }\n  }\n\n  hide() {\n    if (!this.args.compositeEditorOptions && this.flatpickrInstance) {\n      this.flatpickrInstance.close();\n    }\n  }\n\n  focus() {\n    this.input.focus();\n  }\n\n  loadValue(item: any) {\n    this.defaultValue = item[this.args.column.field];\n    this.input.value = String(this.defaultValue ?? '');\n    this.input.defaultValue = String(this.defaultValue ?? '');\n    this.input.select();\n    if (this.flatpickrInstance) {\n      this.flatpickrInstance.setDate(this.defaultValue);\n    }\n  }\n\n  serializeValue() {\n    return this.input.value;\n  }\n\n  applyValue(item: any, state: any) {\n    item[this.args.column.field] = state;\n  }\n\n  isValueChanged() {\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n  }\n\n  validate() {\n    if (this.args.column.validator) {\n      const validationResults = this.args.column.validator(this.input.value, this.args);\n      if (!validationResults.valid) {\n        return validationResults;\n      }\n    }\n\n    return {\n      valid: true,\n      msg: null\n    };\n  }\n}\n\nexport class YesNoSelectEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected select!: HTMLSelectElement;\n  protected defaultValue?: string | number;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n  }\n\n  init() {\n    this.select = Utils.createDomElement('select', { tabIndex: 0, className: 'editor-yesno' }, this.args.container);\n    Utils.createDomElement('option', { value: 'yes', textContent: 'Yes' }, this.select);\n    Utils.createDomElement('option', { value: 'no', textContent: 'No' }, this.select);\n\n    this.select.focus();\n\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n    if (this.args.compositeEditorOptions) {\n      this.select.addEventListener('change', this.onChange.bind(this));\n    }\n  }\n\n  onChange() {\n    const activeCell = this.args.grid.getActiveCell();\n\n    // when valid, we'll also apply the new value to the dataContext item object\n    if (this.validate().valid) {\n      this.applyValue(this.args.item, this.serializeValue());\n    }\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n    this.args.grid.onCompositeEditorChange.notify({\n      row: activeCell?.row ?? 0,\n      cell: activeCell?.cell ?? 0,\n      item: this.args.item,\n      column: this.args.column,\n      formValues: this.args.compositeEditorOptions.formValues,\n      grid: this.args.grid,\n      editors: this.args.compositeEditorOptions.editors\n    } as unknown as OnCompositeEditorChangeEventArgs);\n  }\n\n  destroy() {\n    this.select.removeEventListener('change', this.onChange.bind(this));\n    this.select.remove();\n  }\n\n  focus() {\n    this.select.focus();\n  }\n\n  loadValue(item: any) {\n    this.select.value = ((this.defaultValue = item[this.args.column.field]) ? 'yes' : 'no');\n  }\n\n  serializeValue() {\n    return this.select.value === 'yes';\n  }\n\n  applyValue(item: any, state: any) {\n    item[this.args.column.field] = state;\n  }\n\n  isValueChanged() {\n    return this.select.value !== this.defaultValue;\n  }\n\n  validate() {\n    return {\n      valid: true,\n      msg: null\n    };\n  }\n}\n\nexport class CheckboxEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected input!: HTMLInputElement;\n  protected defaultValue?: boolean;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n  }\n\n  init() {\n    this.input = Utils.createDomElement('input', { className: 'editor-checkbox', type: 'checkbox', value: 'true' }, this.args.container);\n    this.input.focus();\n\n    // trigger onCompositeEditorChange event when input checkbox changes and it's a Composite Editor\n    if (this.args.compositeEditorOptions) {\n      this.input.addEventListener('change', this.onChange.bind(this));\n    }\n  };\n\n  onChange() {\n    const activeCell = this.args.grid.getActiveCell();\n\n    // when valid, we'll also apply the new value to the dataContext item object\n    if (this.validate().valid) {\n      this.applyValue(this.args.item, this.serializeValue());\n    }\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n    this.args.grid.onCompositeEditorChange.notify({\n      row: activeCell?.row ?? 0,\n      cell: activeCell?.cell ?? 0,\n      item: this.args.item,\n      column: this.args.column,\n      formValues: this.args.compositeEditorOptions.formValues,\n      grid: this.args.grid,\n      editors: this.args.compositeEditorOptions.editors\n    } as unknown as OnCompositeEditorChangeEventArgs);\n  };\n\n  destroy() {\n    this.input.removeEventListener('change', this.onChange.bind(this));\n    this.input.remove();\n  };\n\n  focus() {\n    this.input.focus();\n  };\n\n  loadValue(item: any) {\n    this.defaultValue = !!(item[this.args.column.field]);\n    if (this.defaultValue) {\n      this.input.checked = true;\n    } else {\n      this.input.checked = false;\n    }\n  };\n\n  serializeValue() {\n    return this.input.checked;\n  };\n\n  applyValue(item: any, state: any) {\n    item[this.args.column.field] = state;\n  }\n\n  isValueChanged() {\n    return (this.serializeValue() !== this.defaultValue);\n  }\n\n  validate(): EditorValidationResult {\n    return {\n      valid: true,\n      msg: null\n    };\n  }\n}\n\nexport class PercentCompleteEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected input!: HTMLInputElement;\n  protected defaultValue?: number;\n  protected picker!: HTMLDivElement;\n  protected slider!: HTMLInputElement | null;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n  }\n\n  sliderInputHandler(e: MouseEvent & { target: HTMLButtonElement }) {\n    this.input.value = e.target.value;\n  }\n\n  sliderChangeHandler() {\n    // trigger onCompositeEditorChange event when slider stops and it's a Composite Editor\n    if (this.args.compositeEditorOptions) {\n      const activeCell = this.args.grid.getActiveCell();\n\n      // when valid, we'll also apply the new value to the dataContext item object\n      if (this.validate().valid) {\n        this.applyValue(this.args.item, this.serializeValue());\n      }\n      this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n      this.args.grid.onCompositeEditorChange.notify({\n        row: activeCell?.row ?? 0,\n        cell: activeCell?.cell ?? 0,\n        item: this.args.item,\n        column: this.args.column,\n        formValues: this.args.compositeEditorOptions.formValues,\n        grid: this.args.grid,\n        editors: this.args.compositeEditorOptions.editors\n      } as unknown as OnCompositeEditorChangeEventArgs);\n    }\n  }\n\n  init() {\n    this.input = Utils.createDomElement('input', { className: 'editor-percentcomplete', type: 'text' }, this.args.container);\n    Utils.width(this.input, this.args.container.clientWidth - 25);\n\n    this.picker = Utils.createDomElement('div', { className: 'editor-percentcomplete-picker' }, this.args.container);\n    Utils.createDomElement('span', { className: 'editor-percentcomplete-picker-icon' }, this.picker);\n    const containerHelper = Utils.createDomElement('div', { className: 'editor-percentcomplete-helper' }, this.picker);\n    const containerWrapper = Utils.createDomElement('div', { className: 'editor-percentcomplete-wrapper' }, containerHelper);\n    Utils.createDomElement('div', { className: 'editor-percentcomplete-slider' }, containerWrapper);\n    this.slider = Utils.createDomElement('input', { className: 'editor-percentcomplete-slider', type: 'range', value: String(this.defaultValue ?? '') }, containerWrapper);\n    const containerButtons = Utils.createDomElement('div', { className: 'editor-percentcomplete-buttons' }, containerWrapper);\n    Utils.createDomElement('button', { value: '0', className: 'slick-btn slick-btn-default', textContent: 'Not started' }, containerButtons);\n    containerButtons.appendChild(document.createElement('br'));\n    Utils.createDomElement('button', { value: '50', className: 'slick-btn slick-btn-default', textContent: 'In Progress' }, containerButtons);\n    containerButtons.appendChild(document.createElement('br'));\n    Utils.createDomElement('button', { value: '100', className: 'slick-btn slick-btn-default', textContent: 'Complete' }, containerButtons);\n\n    this.input.focus();\n    this.input.select();\n\n    this.slider.addEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\n    this.slider.addEventListener('change', this.sliderChangeHandler.bind(this));\n\n    const buttons = this.picker.querySelectorAll('.editor-percentcomplete-buttons button');\n    [].forEach.call(buttons, (button: HTMLButtonElement) => {\n      button.addEventListener('click', this.onClick.bind(this) as EventListener);\n    });\n  };\n\n  onClick(e: MouseEvent & { target: HTMLButtonElement }) {\n    this.input.value = String(e.target.value ?? '');\n    this.slider!.value = String(e.target.value ?? '');\n  };\n\n  destroy() {\n    this.slider?.removeEventListener('input', this.sliderInputHandler.bind(this) as EventListener);\n    this.slider?.removeEventListener('change', this.sliderChangeHandler.bind(this));\n    this.picker.querySelectorAll('.editor-percentcomplete-buttons button')\n      .forEach(button => button.removeEventListener('click', this.onClick.bind(this) as EventListener));\n    this.input.remove();\n    this.picker.remove();\n  };\n\n  focus() {\n    this.input.focus();\n  };\n\n  loadValue(item: any) {\n    this.defaultValue = item[this.args.column.field];\n    this.slider!.value = String(this.defaultValue ?? '');\n    this.input.value = String(this.defaultValue);\n    this.input.select();\n  };\n\n  serializeValue() {\n    return parseInt(this.input.value, 10) || 0;\n  };\n\n  applyValue(item: any, state: any) {\n    item[this.args.column.field] = state;\n  };\n\n  isValueChanged() {\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && ((parseInt(this.input.value as any, 10) || 0) !== this.defaultValue);\n  };\n\n  validate(): EditorValidationResult {\n    if (isNaN(parseInt(this.input.value, 10))) {\n      return {\n        valid: false,\n        msg: 'Please enter a valid positive number'\n      };\n    }\n\n    return {\n      valid: true,\n      msg: null\n    };\n  };\n}\n\n/*\n * An example of a 'detached' editor.\n * The UI is added onto document BODY and .position(), .show() and .hide() are implemented.\n * KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.\n */\nexport class LongTextEditor<TData = any, C extends Column<TData> = Column<TData>, O extends GridOption<C> = GridOption<C>> implements Editor {\n  protected input!: HTMLTextAreaElement;\n  protected wrapper!: HTMLDivElement;\n  protected defaultValue?: string;\n  protected selectionStart = 0;\n\n  constructor(protected readonly args: EditorArguments<TData, C, O>) {\n    this.init();\n  }\n\n  init() {\n    const compositeEditorOptions = this.args.compositeEditorOptions;\n    this.args.grid.getOptions().editorCellNavOnLRKeys;\n    const container = compositeEditorOptions ? this.args.container : document.body;\n\n    this.wrapper = Utils.createDomElement('div', { className: 'slick-large-editor-text' }, container);\n    if (compositeEditorOptions) {\n      this.wrapper.style.position = 'relative';\n      Utils.setStyleSize(this.wrapper, 'padding', 0);\n      Utils.setStyleSize(this.wrapper, 'border', 0);\n    } else {\n      this.wrapper.style.position = 'absolute';\n    }\n\n    this.input = Utils.createDomElement('textarea', { rows: 5, style: { background: 'white', width: '250px', height: '80px', border: '0', outline: '0' } }, this.wrapper);\n\n    // trigger onCompositeEditorChange event when input changes and it's a Composite Editor\n    if (compositeEditorOptions) {\n      this.input.addEventListener('change', this.onChange.bind(this));\n    } else {\n      const btnContainer = Utils.createDomElement('div', { style: 'text-align:right' }, this.wrapper);\n      Utils.createDomElement('button', { id: 'save', className: 'slick-btn slick-btn-primary', textContent: 'Save' }, btnContainer);\n      Utils.createDomElement('button', { id: 'cancel', className: 'slick-btn slick-btn-default', textContent: 'Cancel' }, btnContainer);\n\n      this.wrapper.querySelector('#save')!.addEventListener('click', this.save.bind(this));\n      this.wrapper.querySelector('#cancel')!.addEventListener('click', this.cancel.bind(this));\n      this.input.addEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\n      this.position(this.args.position as ElementPosition);\n    }\n\n    this.input.focus();\n    this.input.select();\n  };\n\n  onChange() {\n    const activeCell = this.args.grid.getActiveCell();\n\n    // when valid, we'll also apply the new value to the dataContext item object\n    if (this.validate().valid) {\n      this.applyValue(this.args.item, this.serializeValue());\n    }\n    this.applyValue(this.args.compositeEditorOptions.formValues, this.serializeValue());\n    this.args.grid.onCompositeEditorChange.notify({\n      row: activeCell?.row ?? 0,\n      cell: activeCell?.cell ?? 0,\n      item: this.args.item,\n      column: this.args.column,\n      formValues: this.args.compositeEditorOptions.formValues,\n      grid: this.args.grid,\n      editors: this.args.compositeEditorOptions.editors\n    } as unknown as OnCompositeEditorChangeEventArgs);\n  };\n\n  handleKeyDown(e: KeyboardEvent & { target: HTMLInputElement }) {\n    if (e.which === keyCode.ENTER && e.ctrlKey) {\n      this.save();\n    } else if (e.which === keyCode.ESCAPE) {\n      e.preventDefault();\n      this.cancel();\n    } else if (e.which === keyCode.TAB && e.shiftKey) {\n      e.preventDefault();\n      this.args.grid.navigatePrev();\n    } else if (e.which === keyCode.TAB) {\n      e.preventDefault();\n      this.args.grid.navigateNext();\n    } else if (e.which === keyCode.LEFT || e.which === keyCode.RIGHT) {\n      if (this.args.grid.getOptions().editorCellNavOnLRKeys) {\n        const cursorPosition = this.selectionStart;\n        const textLength = e.target.value.length;\n        if (e.keyCode === keyCode.LEFT && cursorPosition === 0) {\n          this.args.grid.navigatePrev();\n        }\n        if (e.keyCode === keyCode.RIGHT && cursorPosition >= textLength - 1) {\n          this.args.grid.navigateNext();\n        }\n      }\n    }\n  };\n\n  save() {\n    const gridOptions = this.args.grid.getOptions() || {};\n    if (gridOptions.autoCommitEdit) {\n      this.args.grid.getEditorLock().commitCurrentEdit();\n    } else {\n      this.args.commitChanges();\n    }\n  };\n\n  cancel() {\n    this.input.value = String(this.defaultValue ?? '');\n    this.args.cancelChanges();\n  };\n\n  hide() {\n    Utils.hide(this.wrapper);\n  };\n\n  show() {\n    Utils.show(this.wrapper);\n  };\n\n  position(position: ElementPosition) {\n    Utils.setStyleSize(this.wrapper, 'top', (position.top || 0) - 5);\n    Utils.setStyleSize(this.wrapper, 'left', (position.left || 0) - 2);\n  };\n\n  destroy() {\n    if (this.args.compositeEditorOptions) {\n      this.input.removeEventListener('change', this.onChange.bind(this));\n    } else {\n      this.wrapper.querySelector('#save')!.removeEventListener('click', this.save.bind(this));\n      this.wrapper.querySelector('#cancel')!.removeEventListener('click', this.cancel.bind(this));\n      this.input.removeEventListener('keydown', this.handleKeyDown.bind(this) as EventListener);\n    }\n    this.wrapper.remove();\n  };\n\n  focus() {\n    this.input.focus();\n  };\n\n  loadValue(item: any) {\n    this.input.value = this.defaultValue = item[this.args.column.field];\n    this.input.select();\n  };\n\n  serializeValue() {\n    return this.input.value;\n  };\n\n  applyValue(item: any, state: any) {\n    item[this.args.column.field] = state;\n  };\n\n  isValueChanged() {\n    return (!(this.input.value === '' && !Utils.isDefined(this.defaultValue))) && (this.input.value !== this.defaultValue);\n  };\n\n  validate() {\n    if (this.args.column.validator) {\n      const validationResults = this.args.column.validator(this.input.value, this.args);\n      if (!validationResults.valid) {\n        return validationResults;\n      }\n    }\n\n    return {\n      valid: true,\n      msg: null\n    };\n  };\n}\n\n/*\n * Depending on the value of Grid option 'editorCellNavOnLRKeys', us\n * Navigate to the cell on the left if the cursor is at the beginning of the input string\n * and to the right cell if it's at the end. Otherwise, move the cursor within the text\n */\nfunction handleKeydownLRNav(e: KeyboardEvent & { target: HTMLInputElement; selectionStart: number; }) {\n  const cursorPosition = e.selectionStart;\n  const textLength = e.target.value.length;\n  if ((e.keyCode === keyCode.LEFT && cursorPosition > 0) ||\n    e.keyCode === keyCode.RIGHT && cursorPosition < textLength - 1) {\n    e.stopImmediatePropagation();\n  }\n}\n\nfunction handleKeydownLRNoNav(e: KeyboardEvent) {\n  if (e.keyCode === keyCode.LEFT || e.keyCode === keyCode.RIGHT) {\n    e.stopImmediatePropagation();\n  }\n}\n\nexport const Editors = {\n  Text: TextEditor,\n  Integer: IntegerEditor,\n  Float: FloatEditor,\n  Flatpickr: FlatpickrEditor,\n  YesNoSelect: YesNoSelectEditor,\n  Checkbox: CheckboxEditor,\n  PercentComplete: PercentCompleteEditor,\n  LongText: LongTextEditor\n};\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(Slick, {\n    Editors\n  });\n}\n\n", "import type { Formatter } from './models/index';\nimport { Utils as Utils_ } from './slick.core';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * Contains basic SlickGrid formatters.\n *\n * NOTE:  These are merely examples.  You will most likely need to implement something more\n *        robust/extensible/localizable/etc. for your use!\n *\n * @module Formatters\n * @namespace Slick\n */\n\nexport const PercentCompleteFormatter: Formatter = (_row, _cell, value) => {\n  if (!Utils.isDefined(value) || value === '') {\n    return '-';\n  } else if (value < 50) {\n    return `<span style=\"color:red;font-weight:bold;\">${value}%</span>`;\n  } else {\n    return `<span style=\"color:green\">${value}%</span>`;\n  }\n};\n\nexport const PercentCompleteBarFormatter: Formatter = (_row, _cell, value) => {\n  if (!Utils.isDefined(value) || value === '') {\n    return '';\n  }\n\n  let color;\n\n  if (value < 30) {\n    color = 'red';\n  } else if (value < 70) {\n    color = 'silver';\n  } else {\n    color = 'green';\n  }\n\n  return `<span class=\"percent-complete-bar\" style=\"background:${color};width:${value}%\" title=\"${value}%\"></span>`;\n};\n\nexport const YesNoFormatter: Formatter = (_row, _cell, value) => {\n  return value ? 'Yes' : 'No';\n};\n\nexport const CheckboxFormatter: Formatter = (_row, _cell, value) => {\n  return `<span class=\"sgi sgi-checkbox-${value ? 'intermediate' : 'blank-outline'}\"></span>`;\n};\n\nexport const CheckmarkFormatter: Formatter = (_row, _cell, value) => {\n  return value ? `<span class=\"sgi sgi-check\"></span>` : '';\n};\n\nexport const Formatters = {\n  PercentComplete: PercentCompleteFormatter,\n  PercentCompleteBar: PercentCompleteBarFormatter,\n  YesNo: YesNoFormatter,\n  Checkmark: CheckmarkFormatter,\n  Checkbox: CheckboxFormatter\n};\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(Slick, {\n    Formatters\n  });\n}\n\n", "// @ts-ignore\r\nimport type SortableInstance from 'sortablejs';\r\n\r\nimport type {\r\n  AutoSize,\r\n  CellViewportRange,\r\n  Column,\r\n  ColumnSort,\r\n  CssStyleHash,\r\n  CSSStyleDeclarationWritable,\r\n  CustomDataView,\r\n  DOMEvent,\r\n  DragPosition,\r\n  DragRowMove,\r\n  Editor,\r\n  EditorArguments,\r\n  EditorConstructor,\r\n  EditController,\r\n  Formatter,\r\n  FormatterOverrideCallback,\r\n  FormatterResultObject,\r\n  FormatterResultWithHtml,\r\n  FormatterResultWithText,\r\n  GridOption as BaseGridOption,\r\n  InteractionBase,\r\n  ItemMetadata,\r\n  MultiColumnSort,\r\n  OnActiveCellChangedEventArgs,\r\n  OnAddNewRowEventArgs,\r\n  OnAutosizeColumnsEventArgs,\r\n  OnBeforeUpdateColumnsEventArgs,\r\n  OnBeforeAppendCellEventArgs,\r\n  OnBeforeCellEditorDestroyEventArgs,\r\n  OnBeforeColumnsResizeEventArgs,\r\n  OnBeforeEditCellEventArgs,\r\n  OnBeforeHeaderCellDestroyEventArgs,\r\n  OnBeforeHeaderRowCellDestroyEventArgs,\r\n  OnBeforeFooterRowCellDestroyEventArgs,\r\n  OnBeforeSetColumnsEventArgs,\r\n  OnCellChangeEventArgs,\r\n  OnCellCssStylesChangedEventArgs,\r\n  OnColumnsDragEventArgs,\r\n  OnColumnsReorderedEventArgs,\r\n  OnColumnsResizedEventArgs,\r\n  OnColumnsResizeDblClickEventArgs,\r\n  OnCompositeEditorChangeEventArgs,\r\n  OnDblClickEventArgs,\r\n  OnFooterContextMenuEventArgs,\r\n  OnFooterRowCellRenderedEventArgs,\r\n  OnHeaderCellRenderedEventArgs,\r\n  OnFooterClickEventArgs,\r\n  OnHeaderClickEventArgs,\r\n  OnHeaderContextMenuEventArgs,\r\n  OnHeaderMouseEventArgs,\r\n  OnHeaderRowCellRenderedEventArgs,\r\n  OnKeyDownEventArgs,\r\n  OnValidationErrorEventArgs,\r\n  OnRenderedEventArgs,\r\n  OnSelectedRowsChangedEventArgs,\r\n  OnSetOptionsEventArgs,\r\n  OnActivateChangedOptionsEventArgs,\r\n  OnScrollEventArgs,\r\n  PagingInfo,\r\n  RowInfo,\r\n  SelectionModel,\r\n  SingleColumnSort,\r\n  SlickGridModel,\r\n  SlickPlugin,\r\n  MenuCommandItemCallbackArgs,\r\n  OnClickEventArgs,\r\n} from './models/index';\r\nimport {\r\n  type BasePubSub,\r\n  BindingEventService as BindingEventService_,\r\n  ColAutosizeMode as ColAutosizeMode_,\r\n  GlobalEditorLock as GlobalEditorLock_,\r\n  GridAutosizeColsMode as GridAutosizeColsMode_,\r\n  keyCode as keyCode_,\r\n  preClickClassName as preClickClassName_,\r\n  RowSelectionMode as RowSelectionMode_,\r\n  type SlickEditorLock,\r\n  SlickEvent as SlickEvent_,\r\n  SlickEventData as SlickEventData_,\r\n  SlickRange as SlickRange_,\r\n  Utils as Utils_,\r\n  ValueFilterMode as ValueFilterMode_,\r\n  WidthEvalMode as WidthEvalMode_,\r\n} from './slick.core';\r\nimport { Draggable as Draggable_, MouseWheel as MouseWheel_, Resizable as Resizable_ } from './slick.interactions';\r\n\r\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\r\nconst BindingEventService = IIFE_ONLY ? Slick.BindingEventService : BindingEventService_;\r\nconst ColAutosizeMode = IIFE_ONLY ? Slick.ColAutosizeMode : ColAutosizeMode_;\r\nconst SlickEvent = IIFE_ONLY ? Slick.Event : SlickEvent_;\r\nconst SlickEventData = IIFE_ONLY ? Slick.EventData : SlickEventData_;\r\nconst GlobalEditorLock = IIFE_ONLY ? Slick.GlobalEditorLock : GlobalEditorLock_;\r\nconst GridAutosizeColsMode = IIFE_ONLY ? Slick.GridAutosizeColsMode : GridAutosizeColsMode_;\r\nconst keyCode = IIFE_ONLY ? Slick.keyCode : keyCode_;\r\nconst preClickClassName = IIFE_ONLY ? Slick.preClickClassName : preClickClassName_;\r\nconst SlickRange = IIFE_ONLY ? Slick.Range : SlickRange_;\r\nconst RowSelectionMode = IIFE_ONLY ? Slick.RowSelectionMode : RowSelectionMode_;\r\nconst ValueFilterMode = IIFE_ONLY ? Slick.ValueFilterMode : ValueFilterMode_;\r\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\r\nconst WidthEvalMode = IIFE_ONLY ? Slick.WidthEvalMode : WidthEvalMode_;\r\nconst Draggable = IIFE_ONLY ? Slick.Draggable : Draggable_;\r\nconst MouseWheel = IIFE_ONLY ? Slick.MouseWheel : MouseWheel_;\r\nconst Resizable = IIFE_ONLY ? Slick.Resizable : Resizable_;\r\n\r\n/**\r\n * @license\r\n * (c) 2009-present Michael Leibman\r\n * michael{dot}leibman{at}gmail{dot}com\r\n * http://github.com/mleibman/slickgrid\r\n *\r\n * Distributed under MIT license.\r\n * All rights reserved.\r\n *\r\n * SlickGrid v5.9.2\r\n *\r\n * NOTES:\r\n *     Cell/row DOM manipulations are done directly bypassing JS DOM manipulation methods.\r\n *     This increases the speed dramatically, but can only be done safely because there are no event handlers\r\n *     or data associated with any cell/row DOM nodes.  Cell editors must make sure they implement .destroy()\r\n *     and do proper cleanup.\r\n */\r\n\r\n//////////////////////////////////////////////////////////////////////////////////////////////\r\n// SlickGrid class implementation (available as SlickGrid)\r\n\r\ninterface RowCaching {\r\n  rowNode: HTMLElement[] | null,\r\n  cellColSpans: Array<number | '*'>;\r\n  cellNodesByColumnIdx: HTMLElement[];\r\n  cellRenderQueue: any[];\r\n}\r\n\r\nexport class SlickGrid<TData = any, C extends Column<TData> = Column<TData>, O extends BaseGridOption<C> = BaseGridOption<C>> {\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Public API\r\n  slickGridVersion = '5.9.2';\r\n\r\n  /** optional grid state clientId */\r\n  cid = '';\r\n\r\n  // Events\r\n  onActiveCellChanged: SlickEvent_<OnActiveCellChangedEventArgs>;\r\n  onActiveCellPositionChanged: SlickEvent_<{ grid: SlickGrid; }>;\r\n  onAddNewRow: SlickEvent_<OnAddNewRowEventArgs>;\r\n  onAutosizeColumns: SlickEvent_<OnAutosizeColumnsEventArgs>;\r\n  onBeforeAppendCell: SlickEvent_<OnBeforeAppendCellEventArgs>;\r\n  onBeforeCellEditorDestroy: SlickEvent_<OnBeforeCellEditorDestroyEventArgs>;\r\n  onBeforeColumnsResize: SlickEvent_<OnBeforeColumnsResizeEventArgs>;\r\n  onBeforeDestroy: SlickEvent_<{ grid: SlickGrid; }>;\r\n  onBeforeEditCell: SlickEvent_<OnBeforeEditCellEventArgs>;\r\n  onBeforeFooterRowCellDestroy: SlickEvent_<OnBeforeFooterRowCellDestroyEventArgs>;\r\n  onBeforeHeaderCellDestroy: SlickEvent_<OnBeforeHeaderCellDestroyEventArgs>;\r\n  onBeforeHeaderRowCellDestroy: SlickEvent_<OnBeforeHeaderRowCellDestroyEventArgs>;\r\n  onBeforeSetColumns: SlickEvent_<OnBeforeSetColumnsEventArgs>;\r\n  onBeforeSort: SlickEvent_<SingleColumnSort | MultiColumnSort>;\r\n  onBeforeUpdateColumns: SlickEvent_<OnBeforeUpdateColumnsEventArgs>;\r\n  onCellChange: SlickEvent_<OnCellChangeEventArgs>;\r\n  onCellCssStylesChanged: SlickEvent_<OnCellCssStylesChangedEventArgs>;\r\n  onClick: SlickEvent_<OnClickEventArgs>;\r\n  onColumnsReordered: SlickEvent_<OnColumnsReorderedEventArgs>;\r\n  onColumnsDrag: SlickEvent_<OnColumnsDragEventArgs>;\r\n  onColumnsResized: SlickEvent_<OnColumnsResizedEventArgs>;\r\n  onColumnsResizeDblClick: SlickEvent_<OnColumnsResizeDblClickEventArgs>;\r\n  onCompositeEditorChange: SlickEvent_<OnCompositeEditorChangeEventArgs>;\r\n  onContextMenu: SlickEvent_<MenuCommandItemCallbackArgs>;\r\n  onDrag: SlickEvent_<DragRowMove>;\r\n  onDblClick: SlickEvent_<OnDblClickEventArgs>;\r\n  onDragInit: SlickEvent_<DragRowMove>;\r\n  onDragStart: SlickEvent_<DragRowMove>;\r\n  onDragEnd: SlickEvent_<DragRowMove>;\r\n  onFooterClick: SlickEvent_<OnFooterClickEventArgs>;\r\n  onFooterContextMenu: SlickEvent_<OnFooterContextMenuEventArgs>;\r\n  onFooterRowCellRendered: SlickEvent_<OnFooterRowCellRenderedEventArgs>;\r\n  onHeaderCellRendered: SlickEvent_<OnHeaderCellRenderedEventArgs>;\r\n  onHeaderClick: SlickEvent_<OnHeaderClickEventArgs>;\r\n  onHeaderContextMenu: SlickEvent_<OnHeaderContextMenuEventArgs>;\r\n  onHeaderMouseEnter: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onHeaderMouseLeave: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onHeaderRowCellRendered: SlickEvent_<OnHeaderRowCellRenderedEventArgs>;\r\n  onHeaderRowMouseEnter: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onHeaderRowMouseLeave: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onKeyDown: SlickEvent_<OnKeyDownEventArgs>;\r\n  onMouseEnter: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onMouseLeave: SlickEvent_<OnHeaderMouseEventArgs>;\r\n  onRendered: SlickEvent_<OnRenderedEventArgs>;\r\n  onScroll: SlickEvent_<OnScrollEventArgs>;\r\n  onSelectedRowsChanged: SlickEvent_<OnSelectedRowsChangedEventArgs>;\r\n  onSetOptions: SlickEvent_<OnSetOptionsEventArgs>;\r\n  onActivateChangedOptions: SlickEvent_<OnActivateChangedOptionsEventArgs>;\r\n  onSort: SlickEvent_<SingleColumnSort | MultiColumnSort>;\r\n  onValidationError: SlickEvent_<OnValidationErrorEventArgs>;\r\n  onViewportChanged: SlickEvent_<{ grid: SlickGrid; }>;\r\n\r\n  // ---\r\n  // protected variables\r\n\r\n  // shared across all grids on the page\r\n  protected scrollbarDimensions?: { height: number; width: number; };\r\n  protected maxSupportedCssHeight!: number;  // browser's breaking point\r\n\r\n  protected canvas: HTMLCanvasElement | null = null;\r\n  protected canvas_context: CanvasRenderingContext2D | null = null;\r\n\r\n  // settings\r\n  protected _options!: O;\r\n  protected _defaults: BaseGridOption = {\r\n    alwaysShowVerticalScroll: false,\r\n    alwaysAllowHorizontalScroll: false,\r\n    explicitInitialization: false,\r\n    rowHeight: 25,\r\n    defaultColumnWidth: 80,\r\n    enableHtmlRendering: true,\r\n    enableAddRow: false,\r\n    leaveSpaceForNewRows: false,\r\n    editable: false,\r\n    autoEdit: true,\r\n    autoEditNewRow: true,\r\n    autoCommitEdit: false,\r\n    suppressActiveCellChangeOnEdit: false,\r\n    enableCellNavigation: true,\r\n    enableColumnReorder: true,\r\n    unorderableColumnCssClass: 'unorderable',\r\n    asyncEditorLoading: false,\r\n    asyncEditorLoadDelay: 100,\r\n    forceFitColumns: false,\r\n    enableAsyncPostRender: false,\r\n    asyncPostRenderDelay: 50,\r\n    enableAsyncPostRenderCleanup: false,\r\n    asyncPostRenderCleanupDelay: 40,\r\n    auto: false,\r\n    nonce: '',\r\n    editorLock: GlobalEditorLock,\r\n    showColumnHeader: true,\r\n    showHeaderRow: false,\r\n    headerRowHeight: 25,\r\n    createFooterRow: false,\r\n    showFooterRow: false,\r\n    footerRowHeight: 25,\r\n    createPreHeaderPanel: false,\r\n    showPreHeaderPanel: false,\r\n    preHeaderPanelHeight: 25,\r\n    showTopPanel: false,\r\n    topPanelHeight: 25,\r\n    formatterFactory: null,\r\n    editorFactory: null,\r\n    cellFlashingCssClass: 'flashing',\r\n    rowHighlightCssClass: 'highlight-animate',\r\n    rowHighlightDuration: 400,\r\n    selectedCellCssClass: 'selected',\r\n    multiSelect: true,\r\n    enableTextSelectionOnCells: false,\r\n    dataItemColumnValueExtractor: null,\r\n    frozenBottom: false,\r\n    frozenColumn: -1,\r\n    frozenRow: -1,\r\n    frozenRightViewportMinWidth: 100,\r\n    throwWhenFrozenNotAllViewable: false,\r\n    fullWidthRows: false,\r\n    multiColumnSort: false,\r\n    numberedMultiColumnSort: false,\r\n    tristateMultiColumnSort: false,\r\n    sortColNumberInSeparateSpan: false,\r\n    defaultFormatter: this.defaultFormatter,\r\n    forceSyncScrolling: false,\r\n    addNewRowCssClass: 'new-row',\r\n    preserveCopiedSelectionOnPaste: false,\r\n    showCellSelection: true,\r\n    viewportClass: undefined,\r\n    minRowBuffer: 3,\r\n    emulatePagingWhenScrolling: true, // when scrolling off bottom of viewport, place new row at top of viewport\r\n    editorCellNavOnLRKeys: false,\r\n    enableMouseWheelScrollHandler: true,\r\n    doPaging: true,\r\n    autosizeColsMode: GridAutosizeColsMode.LegacyOff,\r\n    autosizeColPaddingPx: 4,\r\n    scrollRenderThrottling: 50,\r\n    autosizeTextAvgToMWidthRatio: 0.75,\r\n    viewportSwitchToScrollModeWidthPercent: undefined,\r\n    viewportMinWidthPx: undefined,\r\n    viewportMaxWidthPx: undefined,\r\n    suppressCssChangesOnHiddenInit: false,\r\n    ffMaxSupportedCssHeight: 6000000,\r\n    maxSupportedCssHeight: 1000000000,\r\n    sanitizer: undefined,  // sanitize function, built in basic sanitizer is: Slick.RegexSanitizer(dirtyHtml)\r\n    logSanitizedHtml: false, // log to console when sanitised - recommend true for testing of dev and production\r\n    mixinDefaults: true,\r\n    shadowRoot: undefined\r\n  };\r\n\r\n  protected _columnDefaults = {\r\n    name: '',\r\n    headerCssClass: null,\r\n    defaultSortAsc: true,\r\n    focusable: true,\r\n    hidden: false,\r\n    minWidth: 30,\r\n    maxWidth: undefined,\r\n    rerenderOnResize: false,\r\n    reorderable: true,\r\n    resizable: true,\r\n    sortable: false,\r\n    selectable: true,\r\n  } as Partial<C>;\r\n\r\n  protected _columnAutosizeDefaults: AutoSize = {\r\n    ignoreHeaderText: false,\r\n    colValueArray: undefined,\r\n    allowAddlPercent: undefined,\r\n    formatterOverride: undefined,\r\n    autosizeMode: ColAutosizeMode.ContentIntelligent,\r\n    rowSelectionModeOnInit: undefined,\r\n    rowSelectionMode: RowSelectionMode.FirstNRows,\r\n    rowSelectionCount: 100,\r\n    valueFilterMode: ValueFilterMode.None,\r\n    widthEvalMode: WidthEvalMode.Auto,\r\n    sizeToRemaining: undefined,\r\n    widthPx: undefined,\r\n    contentSizePx: 0,\r\n    headerWidthPx: 0,\r\n    colDataTypeOf: undefined\r\n  };\r\n\r\n  protected _columnResizeTimer?: any;\r\n  protected _executionBlockTimer?: any;\r\n  protected _flashCellTimer?: any;\r\n  protected _highlightRowTimer?: any;\r\n\r\n  // scroller\r\n  protected th!: number;   // virtual height\r\n  protected h!: number;    // real scrollable height\r\n  protected ph!: number;   // page height\r\n  protected n!: number;    // number of pages\r\n  protected cj!: number;   // \"jumpiness\" coefficient\r\n\r\n  protected page = 0;       // current page\r\n  protected offset = 0;     // current page offset\r\n  protected vScrollDir = 1;\r\n  protected _bindingEventService = new BindingEventService();\r\n  protected initialized = false;\r\n  protected _container!: HTMLElement;\r\n  protected uid = `slickgrid_${Math.round(1000000 * Math.random())}`;\r\n  protected _focusSink!: HTMLDivElement;\r\n  protected _focusSink2!: HTMLDivElement;\r\n  protected _groupHeaders: HTMLDivElement[] = [];\r\n  protected _headerScroller: HTMLDivElement[] = [];\r\n  protected _headers: HTMLDivElement[] = [];\r\n  protected _headerRows!: HTMLDivElement[];\r\n  protected _headerRowScroller!: HTMLDivElement[];\r\n  protected _headerRowSpacerL!: HTMLDivElement;\r\n  protected _headerRowSpacerR!: HTMLDivElement;\r\n  protected _footerRow!: HTMLDivElement[];\r\n  protected _footerRowScroller!: HTMLDivElement[];\r\n  protected _footerRowSpacerL!: HTMLDivElement;\r\n  protected _footerRowSpacerR!: HTMLDivElement;\r\n  protected _preHeaderPanel!: HTMLDivElement;\r\n  protected _preHeaderPanelScroller!: HTMLDivElement;\r\n  protected _preHeaderPanelSpacer!: HTMLDivElement;\r\n  protected _preHeaderPanelR!: HTMLDivElement;\r\n  protected _preHeaderPanelScrollerR!: HTMLDivElement;\r\n  protected _preHeaderPanelSpacerR!: HTMLDivElement;\r\n  protected _topPanelScrollers!: HTMLDivElement[];\r\n  protected _topPanels!: HTMLDivElement[];\r\n  protected _viewport!: HTMLDivElement[];\r\n  protected _canvas!: HTMLDivElement[];\r\n  protected _style?: HTMLStyleElement;\r\n  protected _boundAncestors: HTMLElement[] = [];\r\n  protected stylesheet?: { cssRules: Array<{ selectorText: string; }>; rules: Array<{ selectorText: string; }>; } | null;\r\n  protected columnCssRulesL?: Array<{ selectorText: string; }>;\r\n  protected columnCssRulesR?: Array<{ selectorText: string; }>;\r\n  protected viewportH = 0;\r\n  protected viewportW = 0;\r\n  protected canvasWidth = 0;\r\n  protected canvasWidthL = 0;\r\n  protected canvasWidthR = 0;\r\n  protected headersWidth = 0;\r\n  protected headersWidthL = 0;\r\n  protected headersWidthR = 0;\r\n  protected viewportHasHScroll = false;\r\n  protected viewportHasVScroll = false;\r\n  protected headerColumnWidthDiff = 0;\r\n  protected headerColumnHeightDiff = 0; // border+padding\r\n  protected cellWidthDiff = 0;\r\n  protected cellHeightDiff = 0;\r\n  protected absoluteColumnMinWidth!: number;\r\n  protected hasFrozenRows = false;\r\n  protected frozenRowsHeight = 0;\r\n  protected actualFrozenRow = -1;\r\n  protected paneTopH = 0;\r\n  protected paneBottomH = 0;\r\n  protected viewportTopH = 0;\r\n  protected viewportBottomH = 0;\r\n  protected topPanelH = 0;\r\n  protected headerRowH = 0;\r\n  protected footerRowH = 0;\r\n\r\n  protected tabbingDirection = 1;\r\n  protected _activeCanvasNode!: HTMLDivElement;\r\n  protected _activeViewportNode!: HTMLDivElement;\r\n  protected activePosX!: number;\r\n  protected activeRow!: number;\r\n  protected activeCell!: number;\r\n  protected activeCellNode: HTMLDivElement | null = null;\r\n  protected currentEditor: Editor | null = null;\r\n  protected serializedEditorValue: any;\r\n  protected editController?: EditController;\r\n\r\n  protected rowsCache: Array<RowCaching> = {} as any;\r\n  protected renderedRows = 0;\r\n  protected numVisibleRows = 0;\r\n  protected prevScrollTop = 0;\r\n  protected scrollTop = 0;\r\n  protected lastRenderedScrollTop = 0;\r\n  protected lastRenderedScrollLeft = 0;\r\n  protected prevScrollLeft = 0;\r\n  protected scrollLeft = 0;\r\n\r\n  protected selectionModel?: SelectionModel;\r\n  protected selectedRows: number[] = [];\r\n\r\n  protected plugins: SlickPlugin[] = [];\r\n  protected cellCssClasses: CssStyleHash = {};\r\n\r\n  protected columnsById: Record<string, number> = {};\r\n  protected sortColumns: ColumnSort[] = [];\r\n  protected columnPosLeft: number[] = [];\r\n  protected columnPosRight: number[] = [];\r\n\r\n  protected pagingActive = false;\r\n  protected pagingIsLastPage = false;\r\n\r\n  protected scrollThrottle!: { enqueue: () => void; dequeue: () => void; };\r\n\r\n  // async call handles\r\n  protected h_editorLoader: any = null;\r\n  protected h_render = null;\r\n  protected h_postrender: any = null;\r\n  protected h_postrenderCleanup: any = null;\r\n  protected postProcessedRows: any = {};\r\n  protected postProcessToRow: number = null as any;\r\n  protected postProcessFromRow: number = null as any;\r\n  protected postProcessedCleanupQueue: Array<{\r\n    actionType: string;\r\n    groupId: number;\r\n    node: HTMLElement | HTMLElement[];\r\n    columnIdx?: number;\r\n    rowIdx?: number;\r\n  }> = [];\r\n  protected postProcessgroupId = 0;\r\n\r\n  // perf counters\r\n  protected counter_rows_rendered = 0;\r\n  protected counter_rows_removed = 0;\r\n\r\n  protected _paneHeaderL!: HTMLDivElement;\r\n  protected _paneHeaderR!: HTMLDivElement;\r\n  protected _paneTopL!: HTMLDivElement;\r\n  protected _paneTopR!: HTMLDivElement;\r\n  protected _paneBottomL!: HTMLDivElement;\r\n  protected _paneBottomR!: HTMLDivElement;\r\n  protected _headerScrollerL!: HTMLDivElement;\r\n  protected _headerScrollerR!: HTMLDivElement;\r\n  protected _headerL!: HTMLDivElement;\r\n  protected _headerR!: HTMLDivElement;\r\n  protected _groupHeadersL!: HTMLDivElement;\r\n  protected _groupHeadersR!: HTMLDivElement;\r\n  protected _headerRowScrollerL!: HTMLDivElement;\r\n  protected _headerRowScrollerR!: HTMLDivElement;\r\n  protected _footerRowScrollerL!: HTMLDivElement;\r\n  protected _footerRowScrollerR!: HTMLDivElement;\r\n  protected _headerRowL!: HTMLDivElement;\r\n  protected _headerRowR!: HTMLDivElement;\r\n  protected _footerRowL!: HTMLDivElement;\r\n  protected _footerRowR!: HTMLDivElement;\r\n  protected _topPanelScrollerL!: HTMLDivElement;\r\n  protected _topPanelScrollerR!: HTMLDivElement;\r\n  protected _topPanelL!: HTMLDivElement;\r\n  protected _topPanelR!: HTMLDivElement;\r\n  protected _viewportTopL!: HTMLDivElement;\r\n  protected _viewportTopR!: HTMLDivElement;\r\n  protected _viewportBottomL!: HTMLDivElement;\r\n  protected _viewportBottomR!: HTMLDivElement;\r\n  protected _canvasTopL!: HTMLDivElement;\r\n  protected _canvasTopR!: HTMLDivElement;\r\n  protected _canvasBottomL!: HTMLDivElement;\r\n  protected _canvasBottomR!: HTMLDivElement;\r\n  protected _viewportScrollContainerX!: HTMLDivElement;\r\n  protected _viewportScrollContainerY!: HTMLDivElement;\r\n  protected _headerScrollContainer!: HTMLDivElement;\r\n  protected _headerRowScrollContainer!: HTMLDivElement;\r\n  protected _footerRowScrollContainer!: HTMLDivElement;\r\n\r\n  // store css attributes if display:none is active in container or parent\r\n  protected cssShow = { position: 'absolute', visibility: 'hidden', display: 'block' };\r\n  protected _hiddenParents: HTMLElement[] = [];\r\n  protected oldProps: Array<Partial<CSSStyleDeclaration>> = [];\r\n  protected enforceFrozenRowHeightRecalc = false;\r\n  protected columnResizeDragging = false;\r\n  protected slickDraggableInstance: InteractionBase | null = null;\r\n  protected slickMouseWheelInstances: Array<InteractionBase> = [];\r\n  protected slickResizableInstances: Array<InteractionBase> = [];\r\n  protected sortableSideLeftInstance?: SortableInstance;\r\n  protected sortableSideRightInstance?: SortableInstance;\r\n  protected logMessageCount = 0;\r\n  protected logMessageMaxCount = 30;\r\n  protected _pubSubService?: BasePubSub;\r\n\r\n  /**\r\n   * Creates a new instance of the grid.\r\n   * @class SlickGrid\r\n   * @constructor\r\n   * @param {Node} container - Container node to create the grid in.\r\n   * @param {Array|Object} data - An array of objects for databinding or an external DataView.\r\n   * @param {Array<C>} columns - An array of column definitions.\r\n   * @param {Object} [options] - Grid Options\r\n   * @param {Object} [externalPubSub] - optional External PubSub Service to use by SlickEvent\r\n   **/\r\n  constructor(protected readonly container: HTMLElement | string, protected data: CustomDataView<TData> | TData[], protected columns: C[], options: Partial<O>, protected readonly externalPubSub?: BasePubSub) {\r\n    this._container = typeof this.container === 'string'\r\n      ? document.querySelector(this.container) as HTMLDivElement\r\n      : this.container;\r\n\r\n    if (!this._container) {\r\n      throw new Error(`SlickGrid requires a valid container, ${this.container} does not exist in the DOM.`);\r\n    }\r\n\r\n    this._pubSubService = externalPubSub;\r\n    this.onActiveCellChanged = new SlickEvent<OnActiveCellChangedEventArgs>('onActiveCellChanged', externalPubSub);\r\n    this.onActiveCellPositionChanged = new SlickEvent<{ grid: SlickGrid; }>('onActiveCellPositionChanged', externalPubSub);\r\n    this.onAddNewRow = new SlickEvent<OnAddNewRowEventArgs>('onAddNewRow', externalPubSub);\r\n    this.onAutosizeColumns = new SlickEvent<OnAutosizeColumnsEventArgs>('onAutosizeColumns', externalPubSub);\r\n    this.onBeforeAppendCell = new SlickEvent<OnBeforeAppendCellEventArgs>('onBeforeAppendCell', externalPubSub);\r\n    this.onBeforeCellEditorDestroy = new SlickEvent<OnBeforeCellEditorDestroyEventArgs>('onBeforeCellEditorDestroy', externalPubSub);\r\n    this.onBeforeColumnsResize = new SlickEvent<OnBeforeColumnsResizeEventArgs>('onBeforeColumnsResize', externalPubSub);\r\n    this.onBeforeDestroy = new SlickEvent<{ grid: SlickGrid; }>('onBeforeDestroy', externalPubSub);\r\n    this.onBeforeEditCell = new SlickEvent<OnBeforeEditCellEventArgs>('onBeforeEditCell', externalPubSub);\r\n    this.onBeforeFooterRowCellDestroy = new SlickEvent<OnBeforeFooterRowCellDestroyEventArgs>('onBeforeFooterRowCellDestroy', externalPubSub);\r\n    this.onBeforeHeaderCellDestroy = new SlickEvent<OnBeforeHeaderCellDestroyEventArgs>('onBeforeHeaderCellDestroy', externalPubSub);\r\n    this.onBeforeHeaderRowCellDestroy = new SlickEvent<OnBeforeHeaderRowCellDestroyEventArgs>('onBeforeHeaderRowCellDestroy', externalPubSub);\r\n    this.onBeforeSetColumns = new SlickEvent<OnBeforeSetColumnsEventArgs>('onBeforeSetColumns', externalPubSub);\r\n    this.onBeforeSort = new SlickEvent<SingleColumnSort | MultiColumnSort>('onBeforeSort', externalPubSub);\r\n    this.onBeforeUpdateColumns = new SlickEvent<OnBeforeUpdateColumnsEventArgs>('onBeforeUpdateColumns', externalPubSub);\r\n    this.onCellChange = new SlickEvent<OnCellChangeEventArgs>('onCellChange', externalPubSub);\r\n    this.onCellCssStylesChanged = new SlickEvent<OnCellCssStylesChangedEventArgs>('onCellCssStylesChanged', externalPubSub);\r\n    this.onClick = new SlickEvent<OnClickEventArgs>('onClick', externalPubSub);\r\n    this.onColumnsReordered = new SlickEvent<OnColumnsReorderedEventArgs>('onColumnsReordered', externalPubSub);\r\n    this.onColumnsDrag = new SlickEvent<OnColumnsDragEventArgs>('onColumnsDrag', externalPubSub);\r\n    this.onColumnsResized = new SlickEvent<OnColumnsResizedEventArgs>('onColumnsResized', externalPubSub);\r\n    this.onColumnsResizeDblClick = new SlickEvent<OnColumnsResizeDblClickEventArgs>('onColumnsResizeDblClick', externalPubSub);\r\n    this.onCompositeEditorChange = new SlickEvent<OnCompositeEditorChangeEventArgs>('onCompositeEditorChange', externalPubSub);\r\n    this.onContextMenu = new SlickEvent<MenuCommandItemCallbackArgs>('onContextMenu', externalPubSub);\r\n    this.onDrag = new SlickEvent<DragRowMove>('onDrag', externalPubSub);\r\n    this.onDblClick = new SlickEvent<OnDblClickEventArgs>('onDblClick', externalPubSub);\r\n    this.onDragInit = new SlickEvent<DragRowMove>('onDragInit', externalPubSub);\r\n    this.onDragStart = new SlickEvent<DragRowMove>('onDragStart', externalPubSub);\r\n    this.onDragEnd = new SlickEvent<DragRowMove>('onDragEnd', externalPubSub);\r\n    this.onFooterClick = new SlickEvent<OnFooterClickEventArgs>('onFooterClick', externalPubSub);\r\n    this.onFooterContextMenu = new SlickEvent<OnFooterContextMenuEventArgs>('onFooterContextMenu', externalPubSub);\r\n    this.onFooterRowCellRendered = new SlickEvent<OnFooterRowCellRenderedEventArgs>('onFooterRowCellRendered', externalPubSub);\r\n    this.onHeaderCellRendered = new SlickEvent<OnHeaderCellRenderedEventArgs>('onHeaderCellRendered', externalPubSub);\r\n    this.onHeaderClick = new SlickEvent<OnHeaderClickEventArgs>('onHeaderClick', externalPubSub);\r\n    this.onHeaderContextMenu = new SlickEvent<OnHeaderContextMenuEventArgs>('onHeaderContextMenu', externalPubSub);\r\n    this.onHeaderMouseEnter = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderMouseEnter', externalPubSub);\r\n    this.onHeaderMouseLeave = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderMouseLeave', externalPubSub);\r\n    this.onHeaderRowCellRendered = new SlickEvent<OnHeaderRowCellRenderedEventArgs>('onHeaderRowCellRendered', externalPubSub);\r\n    this.onHeaderRowMouseEnter = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderRowMouseEnter', externalPubSub);\r\n    this.onHeaderRowMouseLeave = new SlickEvent<OnHeaderMouseEventArgs>('onHeaderRowMouseLeave', externalPubSub);\r\n    this.onKeyDown = new SlickEvent<OnKeyDownEventArgs>('onKeyDown', externalPubSub);\r\n    this.onMouseEnter = new SlickEvent<OnHeaderMouseEventArgs>('onMouseEnter', externalPubSub);\r\n    this.onMouseLeave = new SlickEvent<OnHeaderMouseEventArgs>('onMouseLeave', externalPubSub);\r\n    this.onRendered = new SlickEvent<OnRenderedEventArgs>('onRendered', externalPubSub);\r\n    this.onScroll = new SlickEvent<OnScrollEventArgs>('onScroll', externalPubSub);\r\n    this.onSelectedRowsChanged = new SlickEvent<OnSelectedRowsChangedEventArgs>('onSelectedRowsChanged', externalPubSub);\r\n    this.onSetOptions = new SlickEvent<OnSetOptionsEventArgs>('onSetOptions', externalPubSub);\r\n    this.onActivateChangedOptions = new SlickEvent<OnActivateChangedOptionsEventArgs>('onActivateChangedOptions', externalPubSub);\r\n    this.onSort = new SlickEvent<SingleColumnSort | MultiColumnSort>('onSort', externalPubSub);\r\n    this.onValidationError = new SlickEvent<OnValidationErrorEventArgs>('onValidationError', externalPubSub);\r\n    this.onViewportChanged = new SlickEvent<{ grid: SlickGrid; }>('onViewportChanged', externalPubSub);\r\n\r\n    this.initialize(options);\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Initialization\r\n\r\n  /** Initializes the grid. */\r\n  init() {\r\n    this.finishInitialization();\r\n  }\r\n\r\n  /**\r\n   * Apply HTML code by 3 different ways depending on what is provided as input and what options are enabled.\r\n   * 1. value is an HTMLElement or DocumentFragment, then first empty the target and simply append the HTML to the target element.\r\n   * 2. value is string and `enableHtmlRendering` is enabled, then use `target.innerHTML = value;`\r\n   * 3. value is string and `enableHtmlRendering` is disabled, then use `target.textContent = value;`\r\n   * @param target - target element to apply to\r\n   * @param val - input value can be either a string or an HTMLElement\r\n   * @param options -\r\n   *   `emptyTarget`, defaults to true, will empty the target.\r\n   *   `skipEmptyReassignment`, defaults to true, when enabled it will not try to reapply an empty value when the target is already empty\r\n   */\r\n  applyHtmlCode(target: HTMLElement, val: string | HTMLElement | DocumentFragment, options?: { emptyTarget?: boolean; skipEmptyReassignment?: boolean; }) {\r\n    if (target) {\r\n      if (val instanceof HTMLElement || val instanceof DocumentFragment) {\r\n        // first empty target and then append new HTML element\r\n        const emptyTarget = options?.emptyTarget !== false;\r\n        if (emptyTarget) {\r\n          Utils.emptyElement(target);\r\n        }\r\n        target.appendChild(val);\r\n      } else {\r\n        // when it's already empty and we try to reassign empty, it's probably ok to skip the assignment\r\n        const skipEmptyReassignment = options?.skipEmptyReassignment !== false;\r\n        if (skipEmptyReassignment && !Utils.isDefined(val) && !target.innerHTML) {\r\n          return;\r\n        }\r\n\r\n        let sanitizedText = val;\r\n        if (typeof sanitizedText === 'number' || typeof sanitizedText === 'boolean') {\r\n          target.textContent = sanitizedText;\r\n        } else {\r\n          sanitizedText = this.sanitizeHtmlString(val as string);\r\n\r\n          // apply HTML when enableHtmlRendering is enabled but make sure we do have a value (without a value, it will simply use `textContent` to clear text content)\r\n          if (this._options.enableHtmlRendering && sanitizedText) {\r\n            target.innerHTML = sanitizedText;\r\n          } else {\r\n            target.textContent = sanitizedText;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  protected initialize(options: Partial<O>) {\r\n    // calculate these only once and share between grid instances\r\n    if (options?.mixinDefaults) {\r\n      // use provided options and then assign defaults\r\n      if (!this._options) { this._options = options as O; }\r\n      Utils.applyDefaults(this._options, this._defaults);\r\n    } else {\r\n      this._options = Utils.extend<O>(true, {}, this._defaults, options);\r\n    }\r\n    this.scrollThrottle = this.actionThrottle(this.render.bind(this), this._options.scrollRenderThrottling as number);\r\n    this.maxSupportedCssHeight = this.maxSupportedCssHeight || this.getMaxSupportedCssHeight();\r\n    this.validateAndEnforceOptions();\r\n    this._columnDefaults.width = this._options.defaultColumnWidth;\r\n\r\n    if (!this._options.suppressCssChangesOnHiddenInit) {\r\n      this.cacheCssForHiddenInit();\r\n    }\r\n\r\n    this.updateColumnProps();\r\n\r\n    // validate loaded JavaScript modules against requested options\r\n    if (this._options.enableColumnReorder && (!Sortable || !Sortable.create)) {\r\n      throw new Error('SlickGrid requires Sortable.js module to be loaded');\r\n    }\r\n\r\n    this.editController = {\r\n      commitCurrentEdit: this.commitCurrentEdit.bind(this),\r\n      cancelCurrentEdit: this.cancelCurrentEdit.bind(this),\r\n    };\r\n\r\n    Utils.emptyElement(this._container);\r\n    this._container.style.overflow = 'hidden';\r\n    this._container.style.outline = String(0);\r\n    this._container.classList.add(this.uid);\r\n    this._container.classList.add('ui-widget');\r\n    this._container.setAttribute('role', 'grid');\r\n\r\n    const containerStyles = window.getComputedStyle(this._container);\r\n    if (!(/relative|absolute|fixed/).test(containerStyles.position)) {\r\n      this._container.style.position = 'relative';\r\n    }\r\n\r\n    this._focusSink = Utils.createDomElement('div', { tabIndex: 0, style: { position: 'fixed', width: '0px', height: '0px', top: '0px', left: '0px', outline: '0px' } }, this._container);\r\n\r\n    // Containers used for scrolling frozen columns and rows\r\n    this._paneHeaderL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-header slick-pane-left', tabIndex: 0 }, this._container);\r\n    this._paneHeaderR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-header slick-pane-right', tabIndex: 0 }, this._container);\r\n    this._paneTopL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-top slick-pane-left', tabIndex: 0 }, this._container);\r\n    this._paneTopR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-top slick-pane-right', tabIndex: 0 }, this._container);\r\n    this._paneBottomL = Utils.createDomElement('div', { className: 'slick-pane slick-pane-bottom slick-pane-left', tabIndex: 0 }, this._container);\r\n    this._paneBottomR = Utils.createDomElement('div', { className: 'slick-pane slick-pane-bottom slick-pane-right', tabIndex: 0 }, this._container);\r\n\r\n    if (this._options.createPreHeaderPanel) {\r\n      this._preHeaderPanelScroller = Utils.createDomElement('div', { className: 'slick-preheader-panel ui-state-default slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._paneHeaderL);\r\n      this._preHeaderPanelScroller.appendChild(document.createElement('div'));\r\n      this._preHeaderPanel = Utils.createDomElement('div', null, this._preHeaderPanelScroller);\r\n      this._preHeaderPanelSpacer = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._preHeaderPanelScroller);\r\n\r\n      this._preHeaderPanelScrollerR = Utils.createDomElement('div', { className: 'slick-preheader-panel ui-state-default slick-state-default', style: { overflow: 'hidden', position: 'relative' } }, this._paneHeaderR);\r\n      this._preHeaderPanelR = Utils.createDomElement('div', null, this._preHeaderPanelScrollerR);\r\n      this._preHeaderPanelSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._preHeaderPanelScrollerR);\r\n\r\n      if (!this._options.showPreHeaderPanel) {\r\n        Utils.hide(this._preHeaderPanelScroller);\r\n        Utils.hide(this._preHeaderPanelScrollerR);\r\n      }\r\n    }\r\n\r\n    // Append the header scroller containers\r\n    this._headerScrollerL = Utils.createDomElement('div', { className: 'slick-header ui-state-default slick-state-default slick-header-left' }, this._paneHeaderL);\r\n    this._headerScrollerR = Utils.createDomElement('div', { className: 'slick-header ui-state-default slick-state-default slick-header-right' }, this._paneHeaderR);\r\n\r\n    // Cache the header scroller containers\r\n    this._headerScroller.push(this._headerScrollerL);\r\n    this._headerScroller.push(this._headerScrollerR);\r\n\r\n    // Append the columnn containers to the headers\r\n    this._headerL = Utils.createDomElement('div', { className: 'slick-header-columns slick-header-columns-left', role: 'row', style: { left: '-1000px' } }, this._headerScrollerL);\r\n    this._headerR = Utils.createDomElement('div', { className: 'slick-header-columns slick-header-columns-right', role: 'row', style: { left: '-1000px' } }, this._headerScrollerR);\r\n\r\n    // Cache the header columns\r\n    this._headers = [this._headerL, this._headerR];\r\n\r\n    this._headerRowScrollerL = Utils.createDomElement('div', { className: 'slick-headerrow ui-state-default slick-state-default' }, this._paneTopL);\r\n    this._headerRowScrollerR = Utils.createDomElement('div', { className: 'slick-headerrow ui-state-default slick-state-default' }, this._paneTopR);\r\n\r\n    this._headerRowScroller = [this._headerRowScrollerL, this._headerRowScrollerR];\r\n\r\n    this._headerRowSpacerL = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._headerRowScrollerL);\r\n    this._headerRowSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._headerRowScrollerR);\r\n\r\n    this._headerRowL = Utils.createDomElement('div', { className: 'slick-headerrow-columns slick-headerrow-columns-left' }, this._headerRowScrollerL);\r\n    this._headerRowR = Utils.createDomElement('div', { className: 'slick-headerrow-columns slick-headerrow-columns-right' }, this._headerRowScrollerR);\r\n\r\n    this._headerRows = [this._headerRowL, this._headerRowR];\r\n\r\n    // Append the top panel scroller\r\n    this._topPanelScrollerL = Utils.createDomElement('div', { className: 'slick-top-panel-scroller ui-state-default slick-state-default' }, this._paneTopL);\r\n    this._topPanelScrollerR = Utils.createDomElement('div', { className: 'slick-top-panel-scroller ui-state-default slick-state-default' }, this._paneTopR);\r\n\r\n    this._topPanelScrollers = [this._topPanelScrollerL, this._topPanelScrollerR];\r\n\r\n    // Append the top panel\r\n    this._topPanelL = Utils.createDomElement('div', { className: 'slick-top-panel', style: { width: '10000px' } }, this._topPanelScrollerL);\r\n    this._topPanelR = Utils.createDomElement('div', { className: 'slick-top-panel', style: { width: '10000px' } }, this._topPanelScrollerR);\r\n\r\n    this._topPanels = [this._topPanelL, this._topPanelR];\r\n\r\n    if (!this._options.showColumnHeader) {\r\n      this._headerScroller.forEach((el) => {\r\n        Utils.hide(el);\r\n      });\r\n    }\r\n\r\n    if (!this._options.showTopPanel) {\r\n      this._topPanelScrollers.forEach((scroller) => {\r\n        Utils.hide(scroller);\r\n      });\r\n    }\r\n\r\n    if (!this._options.showHeaderRow) {\r\n      this._headerRowScroller.forEach((scroller) => {\r\n        Utils.hide(scroller);\r\n      });\r\n    }\r\n\r\n    // Append the viewport containers\r\n    this._viewportTopL = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-top slick-viewport-left', tabIndex: 0 }, this._paneTopL);\r\n    this._viewportTopR = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-top slick-viewport-right', tabIndex: 0 }, this._paneTopR);\r\n    this._viewportBottomL = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-bottom slick-viewport-left', tabIndex: 0 }, this._paneBottomL);\r\n    this._viewportBottomR = Utils.createDomElement('div', { className: 'slick-viewport slick-viewport-bottom slick-viewport-right', tabIndex: 0 }, this._paneBottomR);\r\n\r\n    // Cache the viewports\r\n    this._viewport = [this._viewportTopL, this._viewportTopR, this._viewportBottomL, this._viewportBottomR];\r\n    if (this._options.viewportClass) {\r\n      this._viewport.forEach((view) => {\r\n        view.classList.add(...Utils.classNameToList((this._options.viewportClass)));\r\n      });\r\n    }\r\n\r\n    // Default the active viewport to the top left\r\n    this._activeViewportNode = this._viewportTopL;\r\n\r\n    // Append the canvas containers\r\n    this._canvasTopL = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-top grid-canvas-left', tabIndex: 0 }, this._viewportTopL);\r\n    this._canvasTopR = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-top grid-canvas-right', tabIndex: 0 }, this._viewportTopR);\r\n    this._canvasBottomL = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-bottom grid-canvas-left', tabIndex: 0 }, this._viewportBottomL);\r\n    this._canvasBottomR = Utils.createDomElement('div', { className: 'grid-canvas grid-canvas-bottom grid-canvas-right', tabIndex: 0 }, this._viewportBottomR);\r\n\r\n    // Cache the canvases\r\n    this._canvas = [this._canvasTopL, this._canvasTopR, this._canvasBottomL, this._canvasBottomR];\r\n\r\n    this.scrollbarDimensions = this.scrollbarDimensions || this.measureScrollbar();\r\n\r\n    // Default the active canvas to the top left\r\n    this._activeCanvasNode = this._canvasTopL;\r\n\r\n    // pre-header\r\n    if (this._preHeaderPanelSpacer) {\r\n      Utils.width(this._preHeaderPanelSpacer, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n    }\r\n\r\n    this._headers.forEach((el) => {\r\n      Utils.width(el, this.getHeadersWidth());\r\n    });\r\n\r\n    Utils.width(this._headerRowSpacerL, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n    Utils.width(this._headerRowSpacerR, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n\r\n    // footer Row\r\n    if (this._options.createFooterRow) {\r\n      this._footerRowScrollerR = Utils.createDomElement('div', { className: 'slick-footerrow ui-state-default slick-state-default' }, this._paneTopR);\r\n      this._footerRowScrollerL = Utils.createDomElement('div', { className: 'slick-footerrow ui-state-default slick-state-default' }, this._paneTopL);\r\n\r\n      this._footerRowScroller = [this._footerRowScrollerL, this._footerRowScrollerR];\r\n\r\n      this._footerRowSpacerL = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._footerRowScrollerL);\r\n      Utils.width(this._footerRowSpacerL, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n      this._footerRowSpacerR = Utils.createDomElement('div', { style: { display: 'block', height: '1px', position: 'absolute', top: '0px', left: '0px' } }, this._footerRowScrollerR);\r\n      Utils.width(this._footerRowSpacerR, this.getCanvasWidth() + this.scrollbarDimensions.width);\r\n\r\n      this._footerRowL = Utils.createDomElement('div', { className: 'slick-footerrow-columns slick-footerrow-columns-left' }, this._footerRowScrollerL);\r\n      this._footerRowR = Utils.createDomElement('div', { className: 'slick-footerrow-columns slick-footerrow-columns-right' }, this._footerRowScrollerR);\r\n\r\n      this._footerRow = [this._footerRowL, this._footerRowR];\r\n\r\n      if (!this._options.showFooterRow) {\r\n        this._footerRowScroller.forEach((scroller) => {\r\n          Utils.hide(scroller);\r\n        });\r\n      }\r\n    }\r\n\r\n    this._focusSink2 = this._focusSink.cloneNode(true) as HTMLDivElement;\r\n    this._container.appendChild(this._focusSink2);\r\n\r\n    if (!this._options.explicitInitialization) {\r\n      this.finishInitialization();\r\n    }\r\n  }\r\n\r\n  protected finishInitialization() {\r\n    if (!this.initialized) {\r\n      this.initialized = true;\r\n\r\n      this.getViewportWidth();\r\n      this.getViewportHeight();\r\n\r\n      // header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)\r\n      // calculate the diff so we can set consistent sizes\r\n      this.measureCellPaddingAndBorder();\r\n\r\n      // for usability reasons, all text selection in SlickGrid is disabled\r\n      // with the exception of input and textarea elements (selection must\r\n      // be enabled there so that editors work as expected); note that\r\n      // selection in grid cells (grid body) is already unavailable in\r\n      // all browsers except IE\r\n      this.disableSelection(this._headers); // disable all text selection in header (including input and textarea)\r\n\r\n      if (!this._options.enableTextSelectionOnCells) {\r\n        // disable text selection in grid cells except in input and textarea elements\r\n        // (this is IE-specific, because selectstart event will only fire in IE)\r\n        this._viewport.forEach((view) => {\r\n          this._bindingEventService.bind(view, 'selectstart', (event) => {\r\n            if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {\r\n              return;\r\n            }\r\n          });\r\n        });\r\n      }\r\n\r\n      this.setFrozenOptions();\r\n      this.setPaneVisibility();\r\n      this.setScroller();\r\n      this.setOverflow();\r\n\r\n      this.updateColumnCaches();\r\n      this.createColumnHeaders();\r\n      this.createColumnFooter();\r\n      this.setupColumnSort();\r\n      this.createCssRules();\r\n      this.resizeCanvas();\r\n      this.bindAncestorScrollEvents();\r\n\r\n      this._bindingEventService.bind(this._container, 'resize', this.resizeCanvas.bind(this));\r\n      this._viewport.forEach((view) => {\r\n        this._bindingEventService.bind(view, 'scroll', this.handleScroll.bind(this));\r\n      });\r\n\r\n      if (this._options.enableMouseWheelScrollHandler) {\r\n        this._viewport.forEach((view) => {\r\n          this.slickMouseWheelInstances.push(MouseWheel({\r\n            element: view,\r\n            onMouseWheel: this.handleMouseWheel.bind(this)\r\n          }));\r\n        });\r\n      }\r\n\r\n      this._headerScroller.forEach((el) => {\r\n        this._bindingEventService.bind(el, 'contextmenu', this.handleHeaderContextMenu.bind(this) as EventListener);\r\n        this._bindingEventService.bind(el, 'click', this.handleHeaderClick.bind(this) as EventListener);\r\n      });\r\n\r\n      this._headerRowScroller.forEach((scroller) => {\r\n        this._bindingEventService.bind(scroller, 'scroll', this.handleHeaderRowScroll.bind(this) as EventListener);\r\n      });\r\n\r\n      if (this._options.createFooterRow) {\r\n        this._footerRow.forEach((footer) => {\r\n          this._bindingEventService.bind(footer, 'contextmenu', this.handleFooterContextMenu.bind(this) as EventListener);\r\n          this._bindingEventService.bind(footer, 'click', this.handleFooterClick.bind(this) as EventListener);\r\n        });\r\n\r\n        this._footerRowScroller.forEach((scroller) => {\r\n          this._bindingEventService.bind(scroller, 'scroll', this.handleFooterRowScroll.bind(this) as EventListener);\r\n        });\r\n      }\r\n\r\n      if (this._options.createPreHeaderPanel) {\r\n        this._bindingEventService.bind(this._preHeaderPanelScroller, 'scroll', this.handlePreHeaderPanelScroll.bind(this) as EventListener);\r\n      }\r\n\r\n      this._bindingEventService.bind(this._focusSink, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n      this._bindingEventService.bind(this._focusSink2, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n\r\n      this._canvas.forEach((element) => {\r\n        this._bindingEventService.bind(element, 'keydown', this.handleKeyDown.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'click', this.handleClick.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'dblclick', this.handleDblClick.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'contextmenu', this.handleContextMenu.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'mouseover', this.handleCellMouseOver.bind(this) as EventListener);\r\n        this._bindingEventService.bind(element, 'mouseout', this.handleCellMouseOut.bind(this) as EventListener);\r\n      });\r\n\r\n      if (Draggable) {\r\n        this.slickDraggableInstance = Draggable({\r\n          containerElement: this._container,\r\n          allowDragFrom: 'div.slick-cell',\r\n          // the slick cell parent must always contain `.dnd` and/or `.cell-reorder` class to be identified as draggable\r\n          allowDragFromClosest: 'div.slick-cell.dnd, div.slick-cell.cell-reorder',\r\n          onDragInit: this.handleDragInit.bind(this),\r\n          onDragStart: this.handleDragStart.bind(this),\r\n          onDrag: this.handleDrag.bind(this),\r\n          onDragEnd: this.handleDragEnd.bind(this)\r\n        });\r\n      }\r\n\r\n      if (!this._options.suppressCssChangesOnHiddenInit) {\r\n        this.restoreCssFromHiddenInit();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** handles \"display:none\" on container or container parents, related to issue: https://github.com/6pac/SlickGrid/issues/568 */\r\n  cacheCssForHiddenInit() {\r\n    this._hiddenParents = Utils.parents(this._container, ':hidden') as HTMLElement[];\r\n    this._hiddenParents.forEach(el => {\r\n      const old: Partial<CSSStyleDeclaration> = {};\r\n      Object.keys(this.cssShow).forEach(name => {\r\n        if (this.cssShow) {\r\n          old[name as any] = el.style[name as 'position' | 'visibility' | 'display'];\r\n          el.style[name as any] = this.cssShow[name as 'position' | 'visibility' | 'display'];\r\n        }\r\n      });\r\n      this.oldProps.push(old);\r\n    });\r\n  }\r\n\r\n  restoreCssFromHiddenInit() {\r\n    // finish handle display:none on container or container parents\r\n    // - put values back the way they were\r\n    let i = 0;\r\n    if (this._hiddenParents) {\r\n      this._hiddenParents.forEach(el => {\r\n        const old = this.oldProps[i++];\r\n        Object.keys(this.cssShow).forEach(name => {\r\n          if (this.cssShow) {\r\n            el.style[name as CSSStyleDeclarationWritable] = (old as any)[name];\r\n          }\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  protected hasFrozenColumns() {\r\n    return this._options.frozenColumn! > -1;\r\n  }\r\n\r\n  /** Register an external Plugin */\r\n  registerPlugin<T extends SlickPlugin>(plugin: T) {\r\n    this.plugins.unshift(plugin);\r\n    plugin.init(this as unknown as SlickGridModel);\r\n  }\r\n\r\n  /** Unregister (destroy) an external Plugin */\r\n  unregisterPlugin(plugin: SlickPlugin) {\r\n    for (let i = this.plugins.length; i >= 0; i--) {\r\n      if (this.plugins[i] === plugin) {\r\n        this.plugins[i]?.destroy();\r\n        this.plugins.splice(i, 1);\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Get a Plugin (addon) by its name */\r\n  getPluginByName<P extends SlickPlugin | undefined = undefined>(name: string) {\r\n    for (let i = this.plugins.length - 1; i >= 0; i--) {\r\n      if (this.plugins[i]?.pluginName === name) {\r\n        return this.plugins[i] as P;\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Unregisters a current selection model and registers a new one. See the definition of SelectionModel for more information.\r\n   * @param {Object} selectionModel A SelectionModel.\r\n   */\r\n  setSelectionModel(model: SelectionModel) {\r\n    if (this.selectionModel) {\r\n      this.selectionModel.onSelectedRangesChanged.unsubscribe(this.handleSelectedRangesChanged.bind(this));\r\n      if (this.selectionModel.destroy) {\r\n        this.selectionModel.destroy();\r\n      }\r\n    }\r\n\r\n    this.selectionModel = model;\r\n    if (this.selectionModel) {\r\n      this.selectionModel.init(this as unknown as SlickGridModel);\r\n      this.selectionModel.onSelectedRangesChanged.subscribe(this.handleSelectedRangesChanged.bind(this));\r\n    }\r\n  }\r\n\r\n  /** Returns the current SelectionModel. See here for more information about SelectionModels. */\r\n  getSelectionModel() {\r\n    return this.selectionModel;\r\n  }\r\n\r\n  /** Get Grid Canvas Node DOM Element */\r\n  getCanvasNode(columnIdOrIdx?: number | string, rowIndex?: number) {\r\n    return this._getContainerElement(this.getCanvases(), columnIdOrIdx, rowIndex) as HTMLDivElement;\r\n  }\r\n\r\n  /** Get the canvas DOM element */\r\n  getActiveCanvasNode(e?: Event | SlickEventData_) {\r\n    if (e === undefined) {\r\n      return this._activeCanvasNode;\r\n    }\r\n\r\n    if (e instanceof SlickEventData) {\r\n      e = e.getNativeEvent<Event>();\r\n    }\r\n\r\n    this._activeCanvasNode = (e as any)?.target.closest('.grid-canvas');\r\n    return this._activeCanvasNode;\r\n  }\r\n\r\n  /** Get the canvas DOM element */\r\n  getCanvases() {\r\n    return this._canvas;\r\n  }\r\n\r\n  /** Get the Viewport DOM node element */\r\n  getViewportNode(columnIdOrIdx?: number | string, rowIndex?: number) {\r\n    return this._getContainerElement(this.getViewports(), columnIdOrIdx, rowIndex);\r\n  }\r\n\r\n  /** Get all the Viewport node elements */\r\n  getViewports() {\r\n    return this._viewport;\r\n  }\r\n\r\n  getActiveViewportNode(e: Event | SlickEventData_) {\r\n    this.setActiveViewportNode(e);\r\n\r\n    return this._activeViewportNode;\r\n  }\r\n\r\n  /** Sets an active viewport node */\r\n  setActiveViewportNode(e: Event | SlickEventData_) {\r\n    if (e instanceof SlickEventData) {\r\n      e = e.getNativeEvent<Event>();\r\n    }\r\n    this._activeViewportNode = (e as any)?.target.closest('.slick-viewport');\r\n    return this._activeViewportNode;\r\n  }\r\n\r\n  protected _getContainerElement(targetContainers: HTMLElement[], columnIdOrIdx?: number | string, rowIndex?: number) {\r\n    if (!targetContainers) { return; }\r\n    if (!columnIdOrIdx) { columnIdOrIdx = 0; }\r\n    if (!rowIndex) { rowIndex = 0; }\r\n\r\n    const idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n\r\n    const isBottomSide = this.hasFrozenRows && rowIndex >= this.actualFrozenRow + (this._options.frozenBottom ? 0 : 1);\r\n    const isRightSide = this.hasFrozenColumns() && idx > this._options.frozenColumn!;\r\n\r\n    return targetContainers[(isBottomSide ? 2 : 0) + (isRightSide ? 1 : 0)];\r\n  }\r\n\r\n  protected measureScrollbar() {\r\n    let className = '';\r\n    this._viewport.forEach(v => className += v.className);\r\n    const outerdiv = Utils.createDomElement('div', { className, style: { position: 'absolute', top: '-10000px', left: '-10000px', overflow: 'auto', width: '100px', height: '100px' } }, document.body);\r\n    const innerdiv = Utils.createDomElement('div', { style: { width: '200px', height: '200px', overflow: 'auto' } }, outerdiv);\r\n    const dim = {\r\n      width: outerdiv.offsetWidth - outerdiv.clientWidth,\r\n      height: outerdiv.offsetHeight - outerdiv.clientHeight\r\n    };\r\n    innerdiv.remove();\r\n    outerdiv.remove();\r\n    return dim;\r\n  }\r\n\r\n  /** Get the headers width in pixel */\r\n  getHeadersWidth() {\r\n    this.headersWidth = this.headersWidthL = this.headersWidthR = 0;\r\n    const includeScrollbar = !this._options.autoHeight;\r\n\r\n    let i = 0;\r\n    const ii = this.columns.length;\r\n    for (i = 0; i < ii; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      const width = this.columns[i].width;\r\n\r\n      if ((this._options.frozenColumn!) > -1 && (i > this._options.frozenColumn!)) {\r\n        this.headersWidthR += width || 0;\r\n      } else {\r\n        this.headersWidthL += width || 0;\r\n      }\r\n    }\r\n\r\n    if (includeScrollbar) {\r\n      if ((this._options.frozenColumn!) > -1 && (i > this._options.frozenColumn!)) {\r\n        this.headersWidthR += this.scrollbarDimensions?.width ?? 0;\r\n      } else {\r\n        this.headersWidthL += this.scrollbarDimensions?.width ?? 0;\r\n      }\r\n    }\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      this.headersWidthL = this.headersWidthL + 1000;\r\n\r\n      this.headersWidthR = Math.max(this.headersWidthR, this.viewportW) + this.headersWidthL;\r\n      this.headersWidthR += this.scrollbarDimensions?.width ?? 0;\r\n    } else {\r\n      this.headersWidthL += this.scrollbarDimensions?.width ?? 0;\r\n      this.headersWidthL = Math.max(this.headersWidthL, this.viewportW) + 1000;\r\n    }\r\n\r\n    this.headersWidth = this.headersWidthL + this.headersWidthR;\r\n    return Math.max(this.headersWidth, this.viewportW) + 1000;\r\n  }\r\n\r\n  /** Get the grid canvas width */\r\n  getCanvasWidth(): number {\r\n    const availableWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n    let i = this.columns.length;\r\n\r\n    this.canvasWidthL = this.canvasWidthR = 0;\r\n\r\n    while (i--) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      if (this.hasFrozenColumns() && (i > this._options.frozenColumn!)) {\r\n        this.canvasWidthR += this.columns[i].width || 0;\r\n      } else {\r\n        this.canvasWidthL += this.columns[i].width || 0;\r\n      }\r\n    }\r\n    let totalRowWidth = this.canvasWidthL + this.canvasWidthR;\r\n    if (this._options.fullWidthRows) {\r\n      const extraWidth = Math.max(totalRowWidth, availableWidth) - totalRowWidth;\r\n      if (extraWidth > 0) {\r\n        totalRowWidth += extraWidth;\r\n        if (this.hasFrozenColumns()) {\r\n          this.canvasWidthR += extraWidth;\r\n        } else {\r\n          this.canvasWidthL += extraWidth;\r\n        }\r\n      }\r\n    }\r\n    return totalRowWidth;\r\n  }\r\n\r\n  protected updateCanvasWidth(forceColumnWidthsUpdate?: boolean) {\r\n    const oldCanvasWidth = this.canvasWidth;\r\n    const oldCanvasWidthL = this.canvasWidthL;\r\n    const oldCanvasWidthR = this.canvasWidthR;\r\n    this.canvasWidth = this.getCanvasWidth();\r\n\r\n    const widthChanged = this.canvasWidth !== oldCanvasWidth || this.canvasWidthL !== oldCanvasWidthL || this.canvasWidthR !== oldCanvasWidthR;\r\n\r\n    if (widthChanged || this.hasFrozenColumns() || this.hasFrozenRows) {\r\n      Utils.width(this._canvasTopL, this.canvasWidthL);\r\n\r\n      this.getHeadersWidth();\r\n\r\n      Utils.width(this._headerL, this.headersWidthL);\r\n      Utils.width(this._headerR, this.headersWidthR);\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        const cWidth = Utils.width(this._container) || 0;\r\n        if (cWidth > 0 && this.canvasWidthL > cWidth && this._options.throwWhenFrozenNotAllViewable) {\r\n          throw new Error('[SlickGrid] Frozen columns cannot be wider than the actual grid container width. '\r\n            + 'Make sure to have less columns freezed or make your grid container wider');\r\n        }\r\n        Utils.width(this._canvasTopR, this.canvasWidthR);\r\n\r\n        Utils.width(this._paneHeaderL, this.canvasWidthL);\r\n        Utils.setStyleSize(this._paneHeaderR, 'left', this.canvasWidthL);\r\n        Utils.setStyleSize(this._paneHeaderR, 'width', this.viewportW - this.canvasWidthL);\r\n\r\n        Utils.width(this._paneTopL, this.canvasWidthL);\r\n        Utils.setStyleSize(this._paneTopR, 'left', this.canvasWidthL);\r\n        Utils.width(this._paneTopR, this.viewportW - this.canvasWidthL);\r\n\r\n        Utils.width(this._headerRowScrollerL, this.canvasWidthL);\r\n        Utils.width(this._headerRowScrollerR, this.viewportW - this.canvasWidthL);\r\n\r\n        Utils.width(this._headerRowL, this.canvasWidthL);\r\n        Utils.width(this._headerRowR, this.canvasWidthR);\r\n\r\n        if (this._options.createFooterRow) {\r\n          Utils.width(this._footerRowScrollerL, this.canvasWidthL);\r\n          Utils.width(this._footerRowScrollerR, this.viewportW - this.canvasWidthL);\r\n\r\n          Utils.width(this._footerRowL, this.canvasWidthL);\r\n          Utils.width(this._footerRowR, this.canvasWidthR);\r\n        }\r\n        if (this._options.createPreHeaderPanel) {\r\n          Utils.width(this._preHeaderPanel, this.canvasWidth);\r\n        }\r\n        Utils.width(this._viewportTopL, this.canvasWidthL);\r\n        Utils.width(this._viewportTopR, this.viewportW - this.canvasWidthL);\r\n\r\n        if (this.hasFrozenRows) {\r\n          Utils.width(this._paneBottomL, this.canvasWidthL);\r\n          Utils.setStyleSize(this._paneBottomR, 'left', this.canvasWidthL);\r\n\r\n          Utils.width(this._viewportBottomL, this.canvasWidthL);\r\n          Utils.width(this._viewportBottomR, this.viewportW - this.canvasWidthL);\r\n\r\n          Utils.width(this._canvasBottomL, this.canvasWidthL);\r\n          Utils.width(this._canvasBottomR, this.canvasWidthR);\r\n        }\r\n      } else {\r\n        Utils.width(this._paneHeaderL, '100%');\r\n        Utils.width(this._paneTopL, '100%');\r\n        Utils.width(this._headerRowScrollerL, '100%');\r\n        Utils.width(this._headerRowL, this.canvasWidth);\r\n\r\n        if (this._options.createFooterRow) {\r\n          Utils.width(this._footerRowScrollerL, '100%');\r\n          Utils.width(this._footerRowL, this.canvasWidth);\r\n        }\r\n\r\n        if (this._options.createPreHeaderPanel) {\r\n          Utils.width(this._preHeaderPanel, this.canvasWidth);\r\n        }\r\n        Utils.width(this._viewportTopL, '100%');\r\n\r\n        if (this.hasFrozenRows) {\r\n          Utils.width(this._viewportBottomL, '100%');\r\n          Utils.width(this._canvasBottomL, this.canvasWidthL);\r\n        }\r\n      }\r\n    }\r\n\r\n    this.viewportHasHScroll = (this.canvasWidth >= this.viewportW - (this.scrollbarDimensions?.width ?? 0));\r\n\r\n    Utils.width(this._headerRowSpacerL, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n    Utils.width(this._headerRowSpacerR, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n\r\n    if (this._options.createFooterRow) {\r\n      Utils.width(this._footerRowSpacerL, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n      Utils.width(this._footerRowSpacerR, this.canvasWidth + (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0));\r\n    }\r\n\r\n    if (widthChanged || forceColumnWidthsUpdate) {\r\n      this.applyColumnWidths();\r\n    }\r\n  }\r\n\r\n  protected disableSelection(target: HTMLElement[]) {\r\n    target.forEach((el) => {\r\n      el.setAttribute('unselectable', 'on');\r\n      (el.style as any).mozUserSelect = 'none';\r\n      this._bindingEventService.bind(el, 'selectstart', () => false);\r\n    });\r\n  }\r\n\r\n  protected getMaxSupportedCssHeight() {\r\n    let supportedHeight = 1000000;\r\n    // FF reports the height back but still renders blank after ~6M px\r\n    // let testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\r\n    const testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? this._options.ffMaxSupportedCssHeight : this._options.maxSupportedCssHeight;\r\n    const div = Utils.createDomElement('div', { style: { display: 'hidden' } }, document.body);\r\n\r\n    while (true) {\r\n      const test = supportedHeight * 2;\r\n      Utils.height(div, test);\r\n      const height = Utils.height(div);\r\n\r\n      if (test > testUpTo! || height !== test) {\r\n        break;\r\n      } else {\r\n        supportedHeight = test;\r\n      }\r\n    }\r\n\r\n    div.remove();\r\n    return supportedHeight;\r\n  }\r\n\r\n  /** Get grid unique identifier */\r\n  getUID() {\r\n    return this.uid;\r\n  }\r\n\r\n  /** Get Header Column Width Difference in pixel */\r\n  getHeaderColumnWidthDiff() {\r\n    return this.headerColumnWidthDiff;\r\n  }\r\n\r\n  /** Get scrollbar dimensions */\r\n  getScrollbarDimensions() {\r\n    return this.scrollbarDimensions;\r\n  }\r\n\r\n  /** Get the displayed scrollbar dimensions */\r\n  getDisplayedScrollbarDimensions() {\r\n    return {\r\n      width: this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0,\r\n      height: this.viewportHasHScroll ? (this.scrollbarDimensions?.height ?? 0) : 0\r\n    };\r\n  }\r\n\r\n  /** Get the absolute column minimum width */\r\n  getAbsoluteColumnMinWidth(): number {\r\n    return this.absoluteColumnMinWidth;\r\n  }\r\n\r\n  getPubSubService(): BasePubSub | undefined {\r\n    return this._pubSubService;\r\n  }\r\n\r\n  // TODO:  this is static.  need to handle page mutation.\r\n  protected bindAncestorScrollEvents() {\r\n    let elem: HTMLElement | null = (this.hasFrozenRows && !this._options.frozenBottom) ? this._canvasBottomL : this._canvasTopL;\r\n    while ((elem = elem!.parentNode as HTMLElement) !== document.body && elem) {\r\n      // bind to scroll containers only\r\n      if (elem === this._viewportTopL || elem.scrollWidth !== elem.clientWidth || elem.scrollHeight !== elem.clientHeight) {\r\n        this._boundAncestors.push(elem);\r\n        this._bindingEventService.bind(elem, 'scroll', this.handleActiveCellPositionChange.bind(this));\r\n      }\r\n    }\r\n  }\r\n\r\n  protected unbindAncestorScrollEvents() {\r\n    this._boundAncestors.forEach((ancestor) => {\r\n      this._bindingEventService.unbindByEventName(ancestor, 'scroll');\r\n    });\r\n    this._boundAncestors = [];\r\n  }\r\n\r\n  /**\r\n   * Updates an existing column definition and a corresponding header DOM element with the new title and tooltip.\r\n   * @param {Number|String} columnId Column id.\r\n   * @param {string | HTMLElement | DocumentFragment} [title] New column name.\r\n   * @param {String} [toolTip] New column tooltip.\r\n   */\r\n  updateColumnHeader(columnId: number | string, title?: string | HTMLElement | DocumentFragment, toolTip?: string) {\r\n    if (this.initialized) {\r\n      const idx = this.getColumnIndex(columnId);\r\n      if (!Utils.isDefined(idx)) {\r\n        return;\r\n      }\r\n\r\n      const columnDef = this.columns[idx];\r\n      const header: HTMLElement | undefined = this.getColumnByIndex(idx);\r\n      if (header) {\r\n        if (title !== undefined) {\r\n          this.columns[idx].name = title;\r\n        }\r\n        if (toolTip !== undefined) {\r\n          this.columns[idx].toolTip = toolTip;\r\n        }\r\n\r\n        this.trigger(this.onBeforeHeaderCellDestroy, {\r\n          node: header,\r\n          column: columnDef,\r\n          grid: this\r\n        });\r\n\r\n        header.setAttribute('title', toolTip || '');\r\n        if (title !== undefined) {\r\n          this.applyHtmlCode(header.children[0] as HTMLElement, title);\r\n        }\r\n\r\n        this.trigger(this.onHeaderCellRendered, {\r\n          node: header,\r\n          column: columnDef,\r\n          grid: this\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get the Header DOM element\r\n   * @param {C} columnDef - column definition\r\n   */\r\n  getHeader(columnDef: C) {\r\n    if (!columnDef) {\r\n      return this.hasFrozenColumns() ? this._headers : this._headerL;\r\n    }\r\n    const idx = this.getColumnIndex(columnDef.id);\r\n    return this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n  }\r\n\r\n  /**\r\n   * Get a specific Header Column DOM element by its column Id or index\r\n   * @param {Number|String} columnIdOrIdx - column Id or index\r\n   */\r\n  getHeaderColumn(columnIdOrIdx: number | string) {\r\n    const idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n    const targetHeader = this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n    const targetIndex = this.hasFrozenColumns() ? ((idx <= this._options.frozenColumn!) ? idx : idx - this._options.frozenColumn! - 1) : idx;\r\n\r\n    return targetHeader.children[targetIndex] as HTMLDivElement;\r\n  }\r\n\r\n  /** Get the Header Row DOM element */\r\n  getHeaderRow() {\r\n    return this.hasFrozenColumns() ? this._headerRows : this._headerRows[0];\r\n  }\r\n\r\n  /** Get the Footer DOM element */\r\n  getFooterRow() {\r\n    return this.hasFrozenColumns() ? this._footerRow : this._footerRow[0];\r\n  }\r\n\r\n  /** @alias `getPreHeaderPanelLeft` */\r\n  getPreHeaderPanel() {\r\n    return this._preHeaderPanel;\r\n  }\r\n\r\n  /** Get the Pre-Header Panel Left DOM node element */\r\n  getPreHeaderPanelLeft() {\r\n    return this._preHeaderPanel;\r\n  }\r\n\r\n  /** Get the Pre-Header Panel Right DOM node element */\r\n  getPreHeaderPanelRight() {\r\n    return this._preHeaderPanelR;\r\n  }\r\n\r\n  /**\r\n   * Get Header Row Column DOM element by its column Id or index\r\n   * @param {Number|String} columnIdOrIdx - column Id or index\r\n   */\r\n  getHeaderRowColumn(columnIdOrIdx: number | string) {\r\n    let idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n    let headerRowTarget: HTMLDivElement;\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      if (idx <= this._options.frozenColumn!) {\r\n        headerRowTarget = this._headerRowL;\r\n      } else {\r\n        headerRowTarget = this._headerRowR;\r\n        idx -= this._options.frozenColumn! + 1;\r\n      }\r\n    } else {\r\n      headerRowTarget = this._headerRowL;\r\n    }\r\n\r\n    return headerRowTarget.children[idx] as HTMLDivElement;\r\n  }\r\n\r\n  /**\r\n   * Get the Footer Row Column DOM element by its column Id or index\r\n   * @param {Number|String} columnIdOrIdx - column Id or index\r\n   */\r\n  getFooterRowColumn(columnIdOrIdx: number | string) {\r\n    let idx = (typeof columnIdOrIdx === 'number' ? columnIdOrIdx : this.getColumnIndex(columnIdOrIdx));\r\n    let footerRowTarget: HTMLDivElement;\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      if (idx <= this._options.frozenColumn!) {\r\n        footerRowTarget = this._footerRowL;\r\n      } else {\r\n        footerRowTarget = this._footerRowR;\r\n\r\n        idx -= this._options.frozenColumn! + 1;\r\n      }\r\n    } else {\r\n      footerRowTarget = this._footerRowL;\r\n    }\r\n\r\n    return footerRowTarget.children[idx] as HTMLDivElement;\r\n  }\r\n\r\n  protected createColumnFooter() {\r\n    if (this._options.createFooterRow) {\r\n      this._footerRow.forEach((footer) => {\r\n        const columnElements = footer.querySelectorAll('.slick-footerrow-column');\r\n        columnElements.forEach((column) => {\r\n          const columnDef = Utils.storage.get(column, 'column');\r\n          this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n            node: column,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        });\r\n      });\r\n\r\n      Utils.emptyElement(this._footerRowL);\r\n      Utils.emptyElement(this._footerRowR);\r\n\r\n      for (let i = 0; i < this.columns.length; i++) {\r\n        const m = this.columns[i];\r\n        if (!m || m.hidden) { continue; }\r\n\r\n        const footerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-footerrow-column l${i} r${i}` }, this.hasFrozenColumns() && (i > this._options.frozenColumn!) ? this._footerRowR : this._footerRowL);\r\n        const className = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n        if (className) {\r\n          footerRowCell.classList.add(className);\r\n        }\r\n\r\n        Utils.storage.put(footerRowCell, 'column', m);\r\n\r\n        this.trigger(this.onFooterRowCellRendered, {\r\n          node: footerRowCell,\r\n          column: m,\r\n          grid: this\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  protected handleHeaderMouseHoverOn(e: Event | SlickEventData_) {\r\n    (e as any)?.target.classList.add('ui-state-hover', 'slick-state-hover');\r\n  }\r\n\r\n  protected handleHeaderMouseHoverOff(e: Event | SlickEventData_) {\r\n    (e as any)?.target.classList.remove('ui-state-hover', 'slick-state-hover');\r\n  }\r\n\r\n  protected createColumnHeaders() {\r\n    this._headers.forEach((header) => {\r\n      const columnElements = header.querySelectorAll('.slick-header-column');\r\n      columnElements.forEach((column) => {\r\n        const columnDef = Utils.storage.get(column, 'column');\r\n        if (columnDef) {\r\n          this.trigger(this.onBeforeHeaderCellDestroy, {\r\n            node: column,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        }\r\n      });\r\n    });\r\n\r\n    Utils.emptyElement(this._headerL);\r\n    Utils.emptyElement(this._headerR);\r\n\r\n    this.getHeadersWidth();\r\n\r\n    Utils.width(this._headerL, this.headersWidthL);\r\n    Utils.width(this._headerR, this.headersWidthR);\r\n\r\n    this._headerRows.forEach((row) => {\r\n      const columnElements = row.querySelectorAll('.slick-headerrow-column');\r\n      columnElements.forEach((column) => {\r\n        const columnDef = Utils.storage.get(column, 'column');\r\n        if (columnDef) {\r\n          this.trigger(this.onBeforeHeaderRowCellDestroy, {\r\n            node: this,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        }\r\n      });\r\n    });\r\n\r\n    Utils.emptyElement(this._headerRowL);\r\n    Utils.emptyElement(this._headerRowR);\r\n\r\n    if (this._options.createFooterRow) {\r\n      const footerRowLColumnElements = this._footerRowL.querySelectorAll('.slick-footerrow-column');\r\n      footerRowLColumnElements.forEach((column) => {\r\n        const columnDef = Utils.storage.get(column, 'column');\r\n        if (columnDef) {\r\n          this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n            node: this,\r\n            column: columnDef,\r\n            grid: this\r\n          });\r\n        }\r\n      });\r\n      Utils.emptyElement(this._footerRowL);\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        const footerRowRColumnElements = this._footerRowR.querySelectorAll('.slick-footerrow-column');\r\n        footerRowRColumnElements.forEach((column) => {\r\n          const columnDef = Utils.storage.get(column, 'column');\r\n          if (columnDef) {\r\n            this.trigger(this.onBeforeFooterRowCellDestroy, {\r\n              node: this,\r\n              column: columnDef,\r\n              grid: this\r\n            });\r\n          }\r\n        });\r\n        Utils.emptyElement(this._footerRowR);\r\n      }\r\n    }\r\n\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      const m: C = this.columns[i];\r\n      if (m.hidden) { continue; }\r\n\r\n      const headerTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._headerL : this._headerR) : this._headerL;\r\n      const headerRowTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._headerRowL : this._headerRowR) : this._headerRowL;\r\n\r\n      const header = Utils.createDomElement('div', { id: `${this.uid + m.id}`, dataset: { id: String(m.id) }, role: 'columnheader', className: 'ui-state-default slick-state-default slick-header-column' }, headerTarget);\r\n      if (m.toolTip) {\r\n        header.title = m.toolTip;\r\n      }\r\n      if (!m.reorderable) {\r\n        header.classList.add(this._options.unorderableColumnCssClass!);\r\n      }\r\n      const colNameElm = Utils.createDomElement('span', { className: 'slick-column-name' }, header);\r\n      this.applyHtmlCode(colNameElm, m.name as string);\r\n\r\n      Utils.width(header, m.width! - this.headerColumnWidthDiff);\r\n\r\n      let classname = m.headerCssClass || null;\r\n      if (classname) {\r\n        header.classList.add(...Utils.classNameToList(classname));\r\n      }\r\n      classname = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n      if (classname) {\r\n        header.classList.add(classname);\r\n      }\r\n\r\n      this._bindingEventService.bind(header, 'mouseenter', this.handleHeaderMouseEnter.bind(this) as EventListener);\r\n      this._bindingEventService.bind(header, 'mouseleave', this.handleHeaderMouseLeave.bind(this) as EventListener);\r\n\r\n      Utils.storage.put(header, 'column', m);\r\n\r\n      if (this._options.enableColumnReorder || m.sortable) {\r\n        this._bindingEventService.bind(header, 'mouseenter', this.handleHeaderMouseHoverOn.bind(this) as EventListener);\r\n        this._bindingEventService.bind(header, 'mouseleave', this.handleHeaderMouseHoverOff.bind(this) as EventListener);\r\n      }\r\n\r\n      if (m.hasOwnProperty('headerCellAttrs') && m.headerCellAttrs instanceof Object) {\r\n        Object.keys(m.headerCellAttrs).forEach(key => {\r\n          if (m.headerCellAttrs.hasOwnProperty(key)) {\r\n            header.setAttribute(key, m.headerCellAttrs[key]);\r\n          }\r\n        });\r\n      }\r\n\r\n      if (m.sortable) {\r\n        header.classList.add('slick-header-sortable');\r\n        Utils.createDomElement('div', { className: `slick-sort-indicator ${this._options.numberedMultiColumnSort && !this._options.sortColNumberInSeparateSpan ? ' slick-sort-indicator-numbered' : ''}` }, header);\r\n        if (this._options.numberedMultiColumnSort && this._options.sortColNumberInSeparateSpan) {\r\n          Utils.createDomElement('div', { className: 'slick-sort-indicator-numbered' }, header);\r\n        }\r\n      }\r\n\r\n      this.trigger(this.onHeaderCellRendered, {\r\n        node: header,\r\n        column: m,\r\n        grid: this\r\n      });\r\n\r\n      if (this._options.showHeaderRow) {\r\n        const headerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-headerrow-column l${i} r${i}` }, headerRowTarget);\r\n        const frozenClasses = this.hasFrozenColumns() && i <= this._options.frozenColumn! ? 'frozen' : null;\r\n        if (frozenClasses) {\r\n          headerRowCell.classList.add(frozenClasses);\r\n        }\r\n\r\n        this._bindingEventService.bind(headerRowCell, 'mouseenter', this.handleHeaderRowMouseEnter.bind(this) as EventListener);\r\n        this._bindingEventService.bind(headerRowCell, 'mouseleave', this.handleHeaderRowMouseLeave.bind(this) as EventListener);\r\n\r\n        Utils.storage.put(headerRowCell, 'column', m);\r\n\r\n        this.trigger(this.onHeaderRowCellRendered, {\r\n          node: headerRowCell,\r\n          column: m,\r\n          grid: this\r\n        });\r\n      }\r\n      if (this._options.createFooterRow && this._options.showFooterRow) {\r\n        const footerRowTarget = this.hasFrozenColumns() ? ((i <= this._options.frozenColumn!) ? this._footerRow[0] : this._footerRow[1]) : this._footerRow[0];\r\n        const footerRowCell = Utils.createDomElement('div', { className: `ui-state-default slick-state-default slick-footerrow-column l${i} r${i}` }, footerRowTarget);\r\n        Utils.storage.put(footerRowCell, 'column', m);\r\n\r\n        this.trigger(this.onFooterRowCellRendered, {\r\n          node: footerRowCell,\r\n          column: m,\r\n          grid: this\r\n        });\r\n      }\r\n    }\r\n\r\n    this.setSortColumns(this.sortColumns);\r\n    this.setupColumnResize();\r\n    if (this._options.enableColumnReorder) {\r\n      if (typeof this._options.enableColumnReorder === 'function') {\r\n        this._options.enableColumnReorder(this as unknown as SlickGridModel, this._headers, this.headerColumnWidthDiff, this.setColumns as any, this.setupColumnResize, this.columns, this.getColumnIndex, this.uid, this.trigger);\r\n      } else {\r\n        this.setupColumnReorder();\r\n      }\r\n    }\r\n  }\r\n\r\n  protected setupColumnSort() {\r\n    this._headers.forEach((header) => {\r\n      this._bindingEventService.bind(header, 'click', (e: any) => {\r\n        if (this.columnResizeDragging) {\r\n          return;\r\n        }\r\n\r\n        if (e.target.classList.contains('slick-resizable-handle')) {\r\n          return;\r\n        }\r\n\r\n        const coll = e.target.closest('.slick-header-column');\r\n        if (!coll) {\r\n          return;\r\n        }\r\n\r\n        const column = Utils.storage.get(coll, 'column');\r\n        if (column.sortable) {\r\n          if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n            return;\r\n          }\r\n\r\n          const previousSortColumns = this.sortColumns.slice();\r\n          let sortColumn: ColumnSort | null = null;\r\n          let i = 0;\r\n          for (; i < this.sortColumns.length; i++) {\r\n            if (this.sortColumns[i].columnId === column.id) {\r\n              sortColumn = this.sortColumns[i];\r\n              sortColumn.sortAsc = !sortColumn.sortAsc;\r\n              break;\r\n            }\r\n          }\r\n          const hadSortCol = !!sortColumn;\r\n\r\n          if (this._options.tristateMultiColumnSort) {\r\n            if (!sortColumn) {\r\n              sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc, sortCol: column };\r\n            }\r\n            if (hadSortCol && sortColumn.sortAsc) {\r\n              // three state: remove sort rather than go back to ASC\r\n              this.sortColumns.splice(i, 1);\r\n              sortColumn = null;\r\n            }\r\n            if (!this._options.multiColumnSort) {\r\n              this.sortColumns = [];\r\n            }\r\n            if (sortColumn && (!hadSortCol || !this._options.multiColumnSort)) {\r\n              this.sortColumns.push(sortColumn);\r\n            }\r\n          } else {\r\n            // legacy behaviour\r\n            if (e.metaKey && this._options.multiColumnSort) {\r\n              if (sortColumn) {\r\n                this.sortColumns.splice(i, 1);\r\n              }\r\n            } else {\r\n              if ((!e.shiftKey && !e.metaKey) || !this._options.multiColumnSort) {\r\n                this.sortColumns = [];\r\n              }\r\n\r\n              if (!sortColumn) {\r\n                sortColumn = { columnId: column.id, sortAsc: column.defaultSortAsc, sortCol: column };\r\n                this.sortColumns.push(sortColumn);\r\n              } else if (this.sortColumns.length === 0) {\r\n                this.sortColumns.push(sortColumn);\r\n              }\r\n            }\r\n          }\r\n\r\n          let onSortArgs;\r\n          if (!this._options.multiColumnSort) {\r\n            onSortArgs = {\r\n              multiColumnSort: false,\r\n              previousSortColumns,\r\n              columnId: (this.sortColumns.length > 0 ? column.id : null),\r\n              sortCol: (this.sortColumns.length > 0 ? column : null),\r\n              sortAsc: (this.sortColumns.length > 0 ? this.sortColumns[0].sortAsc : true)\r\n            };\r\n          } else {\r\n            onSortArgs = {\r\n              multiColumnSort: true,\r\n              previousSortColumns,\r\n              sortCols: this.sortColumns.map((col) => {\r\n                const tempCol = this.columns[this.getColumnIndex(col.columnId)];\r\n                return !tempCol || tempCol.hidden ? null : { columnId: tempCol.id, sortCol: tempCol, sortAsc: col.sortAsc };\r\n              }).filter((el) => el)\r\n            };\r\n          }\r\n\r\n          if (this.trigger(this.onBeforeSort, onSortArgs, e).getReturnValue() !== false) {\r\n            this.setSortColumns(this.sortColumns);\r\n            this.trigger(this.onSort, onSortArgs, e);\r\n          }\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  protected setupColumnReorder() {\r\n    this.sortableSideLeftInstance?.destroy();\r\n    this.sortableSideRightInstance?.destroy();\r\n\r\n    let columnScrollTimer: any = null;\r\n\r\n    const scrollColumnsRight = () => this._viewportScrollContainerX.scrollLeft = this._viewportScrollContainerX.scrollLeft + 10;\r\n    const scrollColumnsLeft = () => this._viewportScrollContainerX.scrollLeft = this._viewportScrollContainerX.scrollLeft - 10;\r\n\r\n    let canDragScroll = false;\r\n    const sortableOptions = {\r\n      animation: 50,\r\n      direction: 'horizontal',\r\n      chosenClass: 'slick-header-column-active',\r\n      ghostClass: 'slick-sortable-placeholder',\r\n      draggable: '.slick-header-column',\r\n      dragoverBubble: false,\r\n      revertClone: true,\r\n      scroll: !this.hasFrozenColumns(), // enable auto-scroll\r\n      // lock unorderable columns by using a combo of filter + onMove\r\n      filter: `.${this._options.unorderableColumnCssClass}`,\r\n      onMove: (event: MouseEvent & { related: HTMLElement; }) => {\r\n        return !event.related.classList.contains(this._options.unorderableColumnCssClass as string);\r\n      },\r\n      onStart: (e: { item: any; originalEvent: MouseEvent; }) => {\r\n        canDragScroll = !this.hasFrozenColumns() ||\r\n          Utils.offset(e.item)!.left > Utils.offset(this._viewportScrollContainerX)!.left;\r\n\r\n        if (canDragScroll && e.originalEvent.pageX > this._container.clientWidth) {\r\n          if (!(columnScrollTimer)) {\r\n            columnScrollTimer = setInterval(scrollColumnsRight, 100);\r\n          }\r\n        } else if (canDragScroll && e.originalEvent.pageX < Utils.offset(this._viewportScrollContainerX)!.left) {\r\n          if (!(columnScrollTimer)) {\r\n            columnScrollTimer = setInterval(scrollColumnsLeft, 100);\r\n          }\r\n        } else {\r\n          clearInterval(columnScrollTimer);\r\n          columnScrollTimer = null;\r\n        }\r\n      },\r\n      onEnd: (e: MouseEvent & { item: any; originalEvent: MouseEvent; }) => {\r\n        clearInterval(columnScrollTimer);\r\n        columnScrollTimer = null;\r\n\r\n        if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n          return;\r\n        }\r\n\r\n        let reorderedIds = this.sortableSideLeftInstance?.toArray() ?? [];\r\n        reorderedIds = reorderedIds.concat(this.sortableSideRightInstance?.toArray() ?? []);\r\n\r\n        const reorderedColumns: C[] = [];\r\n        for (let i = 0; i < reorderedIds.length; i++) {\r\n          reorderedColumns.push(this.columns[this.getColumnIndex(reorderedIds[i])]);\r\n        }\r\n        this.setColumns(reorderedColumns);\r\n\r\n        this.trigger(this.onColumnsReordered, { impactedColumns: this.columns });\r\n        e.stopPropagation();\r\n        this.setupColumnResize();\r\n        if (this.activeCellNode) {\r\n          this.setFocus(); // refocus on active cell\r\n        }\r\n      }\r\n    };\r\n\r\n    this.sortableSideLeftInstance = Sortable.create(this._headerL, sortableOptions);\r\n    this.sortableSideRightInstance = Sortable.create(this._headerR, sortableOptions);\r\n  }\r\n\r\n  protected getHeaderChildren() {\r\n    const a = Array.from(this._headers[0].children);\r\n    const b = Array.from(this._headers[1].children);\r\n    return a.concat(b) as HTMLElement[];\r\n  }\r\n\r\n  protected handleResizeableDoubleClick(evt: MouseEvent & { target: HTMLDivElement; }) {\r\n    const triggeredByColumn = evt.target.parentElement!.id.replace(this.uid, '');\r\n    this.trigger(this.onColumnsResizeDblClick, { triggeredByColumn });\r\n  }\r\n\r\n  protected setupColumnResize() {\r\n    if (typeof Resizable === 'undefined') {\r\n      throw new Error(`Slick.Resizable is undefined, make sure to import \"slick.interactions.js\"`);\r\n    }\r\n\r\n    let j: number;\r\n    let k: number;\r\n    let c: C;\r\n    let pageX: number;\r\n    let minPageX: number;\r\n    let maxPageX: number;\r\n    let firstResizable: number | undefined;\r\n    let lastResizable = -1;\r\n    let frozenLeftColMaxWidth = 0;\r\n\r\n    const children: HTMLElement[] = this.getHeaderChildren();\r\n    const vc = this.getVisibleColumns();\r\n    for (let i = 0; i < children.length; i++) {\r\n      const child = children[i];\r\n      const handles = child.querySelectorAll('.slick-resizable-handle');\r\n      handles.forEach((handle) => handle.remove());\r\n\r\n      if (i >= vc.length || !vc[i]) {\r\n        continue;\r\n      }\r\n\r\n      if (vc[i].resizable) {\r\n        if (firstResizable === undefined) {\r\n          firstResizable = i;\r\n        }\r\n        lastResizable = i;\r\n      }\r\n    }\r\n\r\n    if (firstResizable === undefined) {\r\n      return;\r\n    }\r\n\r\n    for (let i = 0; i < children.length; i++) {\r\n      const colElm = children[i];\r\n\r\n      if (i >= vc.length || !vc[i]) {\r\n        continue;\r\n      }\r\n      if (i < firstResizable || (this._options.forceFitColumns && i >= lastResizable)) {\r\n        continue;\r\n      }\r\n\r\n      const resizeableHandle = Utils.createDomElement('div', { className: 'slick-resizable-handle', role: 'separator', ariaOrientation: 'horizontal' }, colElm);\r\n      this._bindingEventService.bind(resizeableHandle, 'dblclick', this.handleResizeableDoubleClick.bind(this) as EventListener);\r\n\r\n      this.slickResizableInstances.push(\r\n        Resizable({\r\n          resizeableElement: colElm as HTMLElement,\r\n          resizeableHandleElement: resizeableHandle,\r\n          onResizeStart: (e, resizeElms): boolean | void => {\r\n            const targetEvent = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n            if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n              return false;\r\n            }\r\n            pageX = (targetEvent as MouseEvent).pageX;\r\n            frozenLeftColMaxWidth = 0;\r\n            resizeElms.resizeableElement.classList.add('slick-header-column-active');\r\n            let shrinkLeewayOnRight: number | null = null;\r\n            let stretchLeewayOnRight: number | null = null;\r\n            // lock each column's width option to current width\r\n            for (let pw = 0; pw < children.length; pw++) {\r\n              if (pw >= vc.length || !vc[pw]) {\r\n                continue;\r\n              }\r\n              vc[pw].previousWidth = children[pw].offsetWidth;\r\n            }\r\n            if (this._options.forceFitColumns) {\r\n              shrinkLeewayOnRight = 0;\r\n              stretchLeewayOnRight = 0;\r\n              // colums on right affect maxPageX/minPageX\r\n              for (j = i + 1; j < vc.length; j++) {\r\n                c = vc[j];\r\n                if (c?.resizable) {\r\n                  if (stretchLeewayOnRight !== null) {\r\n                    if (c.maxWidth) {\r\n                      stretchLeewayOnRight += c.maxWidth - (c.previousWidth || 0);\r\n                    } else {\r\n                      stretchLeewayOnRight = null;\r\n                    }\r\n                  }\r\n                  shrinkLeewayOnRight += (c.previousWidth || 0) - Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n                }\r\n              }\r\n            }\r\n            let shrinkLeewayOnLeft = 0;\r\n            let stretchLeewayOnLeft: number | null = 0;\r\n            for (j = 0; j <= i; j++) {\r\n              // columns on left only affect minPageX\r\n              c = vc[j];\r\n              if (c?.resizable) {\r\n                if (stretchLeewayOnLeft !== null) {\r\n                  if (c.maxWidth) {\r\n                    stretchLeewayOnLeft += c.maxWidth - (c.previousWidth || 0);\r\n                  } else {\r\n                    stretchLeewayOnLeft = null;\r\n                  }\r\n                }\r\n                shrinkLeewayOnLeft += (c.previousWidth || 0) - Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n              }\r\n            }\r\n            if (shrinkLeewayOnRight === null) {\r\n              shrinkLeewayOnRight = 100000;\r\n            }\r\n            if (shrinkLeewayOnLeft === null) {\r\n              shrinkLeewayOnLeft = 100000;\r\n            }\r\n            if (stretchLeewayOnRight === null) {\r\n              stretchLeewayOnRight = 100000;\r\n            }\r\n            if (stretchLeewayOnLeft === null) {\r\n              stretchLeewayOnLeft = 100000;\r\n            }\r\n            maxPageX = pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft);\r\n            minPageX = pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight);\r\n          },\r\n          onResize: (e, resizeElms) => {\r\n            const targetEvent = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\r\n            this.columnResizeDragging = true;\r\n            let actualMinWidth;\r\n            const d = Math.min(maxPageX, Math.max(minPageX, (targetEvent as MouseEvent).pageX)) - pageX;\r\n            let x;\r\n            let newCanvasWidthL = 0;\r\n            let newCanvasWidthR = 0;\r\n            const viewportWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n\r\n            if (d < 0) { // shrink column\r\n              x = d;\r\n\r\n              for (j = i; j >= 0; j--) {\r\n                c = vc[j];\r\n                if (c?.resizable && !c.hidden) {\r\n                  actualMinWidth = Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n                  if (x && (c.previousWidth || 0) + x < actualMinWidth) {\r\n                    x += (c.previousWidth || 0) - actualMinWidth;\r\n                    c.width = actualMinWidth;\r\n                  } else {\r\n                    c.width = (c.previousWidth || 0) + x;\r\n                    x = 0;\r\n                  }\r\n                }\r\n              }\r\n\r\n              for (k = 0; k <= i; k++) {\r\n                c = vc[k];\r\n                if (!c || c.hidden) { continue; }\r\n\r\n                if (this.hasFrozenColumns() && (k > this._options.frozenColumn!)) {\r\n                  newCanvasWidthR += c.width || 0;\r\n                } else {\r\n                  newCanvasWidthL += c.width || 0;\r\n                }\r\n              }\r\n\r\n              if (this._options.forceFitColumns) {\r\n                x = -d;\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n                  if (c.resizable) {\r\n                    if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n                      x -= c.maxWidth - (c.previousWidth || 0);\r\n                      c.width = c.maxWidth;\r\n                    } else {\r\n                      c.width = (c.previousWidth || 0) + x;\r\n                      x = 0;\r\n                    }\r\n\r\n                    if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                      newCanvasWidthR += c.width || 0;\r\n                    } else {\r\n                      newCanvasWidthL += c.width || 0;\r\n                    }\r\n                  }\r\n                }\r\n              } else {\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n\r\n                  if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                    newCanvasWidthR += c.width || 0;\r\n                  } else {\r\n                    newCanvasWidthL += c.width || 0;\r\n                  }\r\n                }\r\n              }\r\n\r\n              if (this._options.forceFitColumns) {\r\n                x = -d;\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n                  if (c.resizable) {\r\n                    if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n                      x -= c.maxWidth - (c.previousWidth || 0);\r\n                      c.width = c.maxWidth;\r\n                    } else {\r\n                      c.width = (c.previousWidth || 0) + x;\r\n                      x = 0;\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            } else { // stretch column\r\n              x = d;\r\n\r\n              newCanvasWidthL = 0;\r\n              newCanvasWidthR = 0;\r\n\r\n              for (j = i; j >= 0; j--) {\r\n                c = vc[j];\r\n                if (!c || c.hidden) { continue; }\r\n                if (c.resizable) {\r\n                  if (x && c.maxWidth && (c.maxWidth - (c.previousWidth || 0) < x)) {\r\n                    x -= c.maxWidth - (c.previousWidth || 0);\r\n                    c.width = c.maxWidth;\r\n                  } else {\r\n                    const newWidth = (c.previousWidth || 0) + x;\r\n                    const resizedCanvasWidthL = this.canvasWidthL + x;\r\n\r\n                    if (this.hasFrozenColumns() && (j <= this._options.frozenColumn!)) {\r\n                      // if we're on the left frozen side, we need to make sure that our left section width never goes over the total viewport width\r\n                      if (newWidth > frozenLeftColMaxWidth && resizedCanvasWidthL < (viewportWidth - this._options.frozenRightViewportMinWidth!)) {\r\n                        frozenLeftColMaxWidth = newWidth; // keep max column width ref, if we go over the limit this number will stop increasing\r\n                      }\r\n                      c.width = ((resizedCanvasWidthL + this._options.frozenRightViewportMinWidth!) > viewportWidth) ? frozenLeftColMaxWidth : newWidth;\r\n                    } else {\r\n                      c.width = newWidth;\r\n                    }\r\n                    x = 0;\r\n                  }\r\n                }\r\n              }\r\n\r\n              for (k = 0; k <= i; k++) {\r\n                c = vc[k];\r\n                if (!c || c.hidden) { continue; }\r\n\r\n                if (this.hasFrozenColumns() && (k > this._options.frozenColumn!)) {\r\n                  newCanvasWidthR += c.width || 0;\r\n                } else {\r\n                  newCanvasWidthL += c.width || 0;\r\n                }\r\n              }\r\n\r\n              if (this._options.forceFitColumns) {\r\n                x = -d;\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n                  if (c.resizable) {\r\n                    actualMinWidth = Math.max(c.minWidth || 0, this.absoluteColumnMinWidth);\r\n                    if (x && (c.previousWidth || 0) + x < actualMinWidth) {\r\n                      x += (c.previousWidth || 0) - actualMinWidth;\r\n                      c.width = actualMinWidth;\r\n                    } else {\r\n                      c.width = (c.previousWidth || 0) + x;\r\n                      x = 0;\r\n                    }\r\n\r\n                    if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                      newCanvasWidthR += c.width || 0;\r\n                    } else {\r\n                      newCanvasWidthL += c.width || 0;\r\n                    }\r\n                  }\r\n                }\r\n              } else {\r\n                for (j = i + 1; j < vc.length; j++) {\r\n                  c = vc[j];\r\n                  if (!c || c.hidden) { continue; }\r\n\r\n                  if (this.hasFrozenColumns() && (j > this._options.frozenColumn!)) {\r\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n                    newCanvasWidthR += c.width || 0;\r\n                  } else {\r\n                    newCanvasWidthL += c.width || 0;\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            if (this.hasFrozenColumns() && newCanvasWidthL !== this.canvasWidthL) {\r\n              Utils.width(this._headerL, newCanvasWidthL + 1000);\r\n              Utils.setStyleSize(this._paneHeaderR, 'left', newCanvasWidthL);\r\n            }\r\n\r\n            this.applyColumnHeaderWidths();\r\n            if (this._options.syncColumnCellResize) {\r\n              this.applyColumnWidths();\r\n            }\r\n            this.trigger(this.onColumnsDrag, {\r\n              triggeredByColumn: resizeElms.resizeableElement,\r\n              resizeHandle: resizeElms.resizeableHandleElement\r\n            });\r\n          },\r\n          onResizeEnd: (_e, resizeElms) => {\r\n            resizeElms.resizeableElement.classList.remove('slick-header-column-active');\r\n\r\n            const triggeredByColumn = resizeElms.resizeableElement.id.replace(this.uid, '');\r\n            if (this.trigger(this.onBeforeColumnsResize, { triggeredByColumn }).getReturnValue() === true) {\r\n              this.applyColumnHeaderWidths();\r\n            }\r\n            let newWidth;\r\n            for (j = 0; j < vc.length; j++) {\r\n              c = vc[j];\r\n              if (!c || c.hidden) { continue; }\r\n              newWidth = children[j].offsetWidth;\r\n\r\n              if (c.previousWidth !== newWidth && c.rerenderOnResize) {\r\n                this.invalidateAllRows();\r\n              }\r\n            }\r\n            this.updateCanvasWidth(true);\r\n            this.render();\r\n            this.trigger(this.onColumnsResized, { triggeredByColumn });\r\n            clearTimeout(this._columnResizeTimer);\r\n            this._columnResizeTimer = setTimeout(() => { this.columnResizeDragging = false; }, 300);\r\n          }\r\n        })\r\n      );\r\n    }\r\n  }\r\n\r\n  protected getVBoxDelta(el: HTMLElement) {\r\n    const p = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];\r\n    const styles = getComputedStyle(el);\r\n    let delta = 0;\r\n    p.forEach((val) => delta += Utils.toFloat(styles[val as any]));\r\n    return delta;\r\n  }\r\n\r\n  protected setFrozenOptions() {\r\n    this._options.frozenColumn = (this._options.frozenColumn! >= 0 && this._options.frozenColumn! < this.columns.length)\r\n      ? parseInt(this._options.frozenColumn as unknown as string, 10)\r\n      : -1;\r\n\r\n    if (this._options.frozenRow! > -1) {\r\n      this.hasFrozenRows = true;\r\n      this.frozenRowsHeight = (this._options.frozenRow!) * this._options.rowHeight!;\r\n      const dataLength = this.getDataLength();\r\n\r\n      this.actualFrozenRow = (this._options.frozenBottom)\r\n        ? (dataLength - this._options.frozenRow!)\r\n        : this._options.frozenRow!;\r\n    } else {\r\n      this.hasFrozenRows = false;\r\n    }\r\n  }\r\n\r\n  protected setPaneVisibility() {\r\n    if (this.hasFrozenColumns()) {\r\n      Utils.show(this._paneHeaderR);\r\n      Utils.show(this._paneTopR);\r\n\r\n      if (this.hasFrozenRows) {\r\n        Utils.show(this._paneBottomL);\r\n        Utils.show(this._paneBottomR);\r\n      } else {\r\n        Utils.hide(this._paneBottomR);\r\n        Utils.hide(this._paneBottomL);\r\n      }\r\n    } else {\r\n      Utils.hide(this._paneHeaderR);\r\n      Utils.hide(this._paneTopR);\r\n      Utils.hide(this._paneBottomR);\r\n\r\n      if (this.hasFrozenRows) {\r\n        Utils.show(this._paneBottomL);\r\n      } else {\r\n        Utils.hide(this._paneBottomR);\r\n        Utils.hide(this._paneBottomL);\r\n      }\r\n    }\r\n  }\r\n\r\n  protected setOverflow() {\r\n    this._viewportTopL.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'scroll') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'auto');\r\n    this._viewportTopL.style.overflowY = (!this.hasFrozenColumns() && this._options.alwaysShowVerticalScroll) ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'hidden' : 'hidden') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n    this._viewportTopR.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'scroll') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'hidden' : 'auto');\r\n    this._viewportTopR.style.overflowY = this._options.alwaysShowVerticalScroll ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'scroll' : 'auto') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n    this._viewportBottomL.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'scroll' : 'auto') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'auto' : 'auto');\r\n    this._viewportBottomL.style.overflowY = (!this.hasFrozenColumns() && this._options.alwaysShowVerticalScroll) ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'hidden' : 'hidden') : (this.hasFrozenRows ? 'scroll' : 'auto'));\r\n\r\n    this._viewportBottomR.style.overflowX = (this.hasFrozenColumns()) ? (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'scroll' : 'auto') : (this.hasFrozenRows && !this._options.alwaysAllowHorizontalScroll ? 'auto' : 'auto');\r\n    this._viewportBottomR.style.overflowY = this._options.alwaysShowVerticalScroll ? 'scroll' : ((this.hasFrozenColumns()) ? (this.hasFrozenRows ? 'auto' : 'auto') : (this.hasFrozenRows ? 'auto' : 'auto'));\r\n\r\n    if (this._options.viewportClass) {\r\n      const viewportClassList = Utils.classNameToList(this._options.viewportClass);\r\n      this._viewportTopL.classList.add(...viewportClassList);\r\n      this._viewportTopR.classList.add(...viewportClassList);\r\n      this._viewportBottomL.classList.add(...viewportClassList);\r\n      this._viewportBottomR.classList.add(...viewportClassList);\r\n    }\r\n  }\r\n\r\n  protected setScroller() {\r\n    if (this.hasFrozenColumns()) {\r\n      this._headerScrollContainer = this._headerScrollerR;\r\n      this._headerRowScrollContainer = this._headerRowScrollerR;\r\n      this._footerRowScrollContainer = this._footerRowScrollerR;\r\n\r\n      if (this.hasFrozenRows) {\r\n        if (this._options.frozenBottom) {\r\n          this._viewportScrollContainerX = this._viewportBottomR;\r\n          this._viewportScrollContainerY = this._viewportTopR;\r\n        } else {\r\n          this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportBottomR;\r\n        }\r\n      } else {\r\n        this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportTopR;\r\n      }\r\n    } else {\r\n      this._headerScrollContainer = this._headerScrollerL;\r\n      this._headerRowScrollContainer = this._headerRowScrollerL;\r\n      this._footerRowScrollContainer = this._footerRowScrollerL;\r\n\r\n      if (this.hasFrozenRows) {\r\n        if (this._options.frozenBottom) {\r\n          this._viewportScrollContainerX = this._viewportBottomL;\r\n          this._viewportScrollContainerY = this._viewportTopL;\r\n        } else {\r\n          this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportBottomL;\r\n        }\r\n      } else {\r\n        this._viewportScrollContainerX = this._viewportScrollContainerY = this._viewportTopL;\r\n      }\r\n    }\r\n  }\r\n\r\n  protected measureCellPaddingAndBorder() {\r\n    const h = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];\r\n    const v = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];\r\n    const header = this._headers[0];\r\n\r\n    this.headerColumnWidthDiff = this.headerColumnHeightDiff = 0;\r\n    this.cellWidthDiff = this.cellHeightDiff = 0;\r\n\r\n    let el = Utils.createDomElement('div', { className: 'ui-state-default slick-state-default slick-header-column', style: { visibility: 'hidden' }, textContent: '-' }, header);\r\n    let style = getComputedStyle(el);\r\n    if (style.boxSizing !== 'border-box') {\r\n      h.forEach((val) => this.headerColumnWidthDiff += Utils.toFloat(style[val as any]));\r\n      v.forEach((val) => this.headerColumnHeightDiff += Utils.toFloat(style[val as any]));\r\n    }\r\n    el.remove();\r\n\r\n    const r = Utils.createDomElement('div', { className: 'slick-row' }, this._canvas[0]);\r\n    el = Utils.createDomElement('div', { className: 'slick-cell', id: '', style: { visibility: 'hidden' }, textContent: '-' }, r);\r\n    style = getComputedStyle(el);\r\n    if (style.boxSizing !== 'border-box') {\r\n      h.forEach((val) => this.cellWidthDiff += Utils.toFloat(style[val as any]));\r\n      v.forEach((val) => this.cellHeightDiff += Utils.toFloat(style[val as any]));\r\n    }\r\n    r.remove();\r\n\r\n    this.absoluteColumnMinWidth = Math.max(this.headerColumnWidthDiff, this.cellWidthDiff);\r\n  }\r\n\r\n  protected createCssRules() {\r\n    this._style = document.createElement('style');\r\n    this._style.nonce = this._options.nonce || '';\r\n    (this._options.shadowRoot || document.head).appendChild(this._style);\r\n\r\n    const rowHeight = (this._options.rowHeight! - this.cellHeightDiff);\r\n    const rules = [\r\n      `.${this.uid} .slick-group-header-column { left: 1000px; }`,\r\n      `.${this.uid} .slick-header-column { left: 1000px; }`,\r\n      `.${this.uid} .slick-top-panel { height: ${this._options.topPanelHeight}px; }`,\r\n      `.${this.uid} .slick-preheader-panel { height: ${this._options.preHeaderPanelHeight}px; }`,\r\n      `.${this.uid} .slick-headerrow-columns { height: ${this._options.headerRowHeight}px; }`,\r\n      `.${this.uid} .slick-footerrow-columns { height: ${this._options.footerRowHeight}px; }`,\r\n      `.${this.uid} .slick-cell { height: ${rowHeight}px; }`,\r\n      `.${this.uid} .slick-row { height: ${this._options.rowHeight}px; }`,\r\n    ];\r\n\r\n    const sheet = this._style.sheet;\r\n    if (sheet) {\r\n      rules.forEach(rule => {\r\n        sheet.insertRule(rule);\r\n      });\r\n\r\n      for (let i = 0; i < this.columns.length; i++) {\r\n        if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n        sheet.insertRule(`.${this.uid} .l${i} { }`);\r\n        sheet.insertRule(`.${this.uid} .r${i} { }`);\r\n      }\r\n    } else {\r\n      // fallback in case the 1st approach doesn't work, let's use our previous way of creating the css rules which is what works in Salesforce :(\r\n      this.createCssRulesAlternative(rules);\r\n    }\r\n  }\r\n\r\n  /** Create CSS rules via template in case the first approach with createElement('style') doesn't work */\r\n  protected createCssRulesAlternative(rules: string[]) {\r\n    const template = document.createElement('template');\r\n    template.innerHTML = '<style type=\"text/css\" rel=\"stylesheet\" />';\r\n    this._style = template.content.firstChild as HTMLStyleElement;\r\n    (this._options.shadowRoot || document.head).appendChild(this._style);\r\n\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      rules.push(`.${this.uid} .l${i} { }`);\r\n      rules.push(`.${this.uid} .r${i} { }`);\r\n    }\r\n\r\n    if ((this._style as any).styleSheet) { // IE\r\n      (this._style as any).styleSheet.cssText = rules.join(' ');\r\n    } else {\r\n      this._style.appendChild(document.createTextNode(rules.join(' ')));\r\n    }\r\n  }\r\n\r\n  protected getColumnCssRules(idx: number) {\r\n    let i: number;\r\n    if (!this.stylesheet) {\r\n      const sheets: any = (this._options.shadowRoot || document).styleSheets;\r\n\r\n      if (this._options.devMode && typeof this._options.devMode?.ownerNodeIndex === 'number' && this._options.devMode.ownerNodeIndex >= 0) {\r\n        sheets[this._options.devMode.ownerNodeIndex].ownerNode = this._style;\r\n      }\r\n\r\n      for (i = 0; i < sheets.length; i++) {\r\n        if ((sheets[i].ownerNode || sheets[i].owningElement) === this._style) {\r\n          this.stylesheet = sheets[i];\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (!this.stylesheet) {\r\n        throw new Error('SlickGrid Cannot find stylesheet.');\r\n      }\r\n\r\n      // find and cache column CSS rules\r\n      this.columnCssRulesL = [];\r\n      this.columnCssRulesR = [];\r\n      const cssRules = (this.stylesheet.cssRules || this.stylesheet.rules);\r\n      let matches;\r\n      let columnIdx;\r\n      for (i = 0; i < cssRules.length; i++) {\r\n        const selector = cssRules[i].selectorText;\r\n        if (matches = /\\.l\\d+/.exec(selector)) {\r\n          columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n          this.columnCssRulesL[columnIdx] = cssRules[i];\r\n        } else if (matches = /\\.r\\d+/.exec(selector)) {\r\n          columnIdx = parseInt(matches[0].substr(2, matches[0].length - 2), 10);\r\n          this.columnCssRulesR[columnIdx] = cssRules[i];\r\n        }\r\n      }\r\n    }\r\n\r\n    return {\r\n      left: this.columnCssRulesL![idx],\r\n      right: this.columnCssRulesR![idx]\r\n    };\r\n  }\r\n\r\n  protected removeCssRules() {\r\n    this._style?.remove();\r\n    this.stylesheet = null;\r\n  }\r\n\r\n  /** Clear all highlight timers that might have been left opened */\r\n  protected clearAllTimers() {\r\n    clearTimeout(this._columnResizeTimer);\r\n    clearTimeout(this._executionBlockTimer);\r\n    clearTimeout(this._flashCellTimer);\r\n    clearTimeout(this._highlightRowTimer);\r\n    clearTimeout(this.h_editorLoader);\r\n  }\r\n\r\n  /**\r\n   * Destroy (dispose) of SlickGrid\r\n   * @param {boolean} shouldDestroyAllElements - do we want to destroy (nullify) all DOM elements as well? This help in avoiding mem leaks\r\n   */\r\n  destroy(shouldDestroyAllElements?: boolean) {\r\n    this._bindingEventService.unbindAll();\r\n    this.slickDraggableInstance = this.destroyAllInstances(this.slickDraggableInstance) as null;\r\n    this.slickMouseWheelInstances = this.destroyAllInstances(this.slickMouseWheelInstances) as InteractionBase[];\r\n    this.slickResizableInstances = this.destroyAllInstances(this.slickResizableInstances) as InteractionBase[];\r\n    this.getEditorLock()?.cancelCurrentEdit();\r\n\r\n    this.trigger(this.onBeforeDestroy, {});\r\n\r\n    let i = this.plugins.length;\r\n    while (i--) {\r\n      this.unregisterPlugin(this.plugins[i]);\r\n    }\r\n\r\n    if (this._options.enableColumnReorder && typeof this.sortableSideLeftInstance?.destroy === 'function') {\r\n      this.sortableSideLeftInstance?.destroy();\r\n      this.sortableSideRightInstance?.destroy();\r\n    }\r\n\r\n    this.unbindAncestorScrollEvents();\r\n    this._bindingEventService.unbindByEventName(this._container, 'resize');\r\n    this.removeCssRules();\r\n\r\n    this._canvas.forEach((element) => {\r\n      this._bindingEventService.unbindByEventName(element, 'keydown');\r\n      this._bindingEventService.unbindByEventName(element, 'click');\r\n      this._bindingEventService.unbindByEventName(element, 'dblclick');\r\n      this._bindingEventService.unbindByEventName(element, 'contextmenu');\r\n      this._bindingEventService.unbindByEventName(element, 'mouseover');\r\n      this._bindingEventService.unbindByEventName(element, 'mouseout');\r\n    });\r\n    this._viewport.forEach((view) => {\r\n      this._bindingEventService.unbindByEventName(view, 'scroll');\r\n    });\r\n\r\n    this._headerScroller.forEach((el) => {\r\n      this._bindingEventService.unbindByEventName(el, 'contextmenu');\r\n      this._bindingEventService.unbindByEventName(el, 'click');\r\n    });\r\n\r\n    this._headerRowScroller.forEach((scroller) => {\r\n      this._bindingEventService.unbindByEventName(scroller, 'scroll');\r\n    });\r\n\r\n    if (this._footerRow) {\r\n      this._footerRow.forEach((footer) => {\r\n        this._bindingEventService.unbindByEventName(footer, 'contextmenu');\r\n        this._bindingEventService.unbindByEventName(footer, 'click');\r\n      });\r\n    }\r\n\r\n    if (this._footerRowScroller) {\r\n      this._footerRowScroller.forEach((scroller) => {\r\n        this._bindingEventService.unbindByEventName(scroller, 'scroll');\r\n      });\r\n    }\r\n\r\n    if (this._preHeaderPanelScroller) {\r\n      this._bindingEventService.unbindByEventName(this._preHeaderPanelScroller, 'scroll');\r\n    }\r\n\r\n    this._bindingEventService.unbindByEventName(this._focusSink, 'keydown');\r\n    this._bindingEventService.unbindByEventName(this._focusSink2, 'keydown');\r\n\r\n    const resizeHandles = this._container.querySelectorAll('.slick-resizable-handle');\r\n    [].forEach.call(resizeHandles, (handle) => {\r\n      this._bindingEventService.unbindByEventName(handle, 'dblclick');\r\n    });\r\n\r\n    const headerColumns = this._container.querySelectorAll('.slick-header-column');\r\n    [].forEach.call(headerColumns, (column) => {\r\n      this._bindingEventService.unbindByEventName(column, 'mouseenter');\r\n      this._bindingEventService.unbindByEventName(column, 'mouseleave');\r\n\r\n      this._bindingEventService.unbindByEventName(column, 'mouseenter');\r\n      this._bindingEventService.unbindByEventName(column, 'mouseleave');\r\n    });\r\n\r\n    Utils.emptyElement(this._container);\r\n    this._container.classList.remove(this.uid);\r\n    this.clearAllTimers();\r\n\r\n    if (shouldDestroyAllElements) {\r\n      this.destroyAllElements();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * call destroy method, when exists, on all the instance(s) it found\r\n   * @params instances - can be a single instance or a an array of instances\r\n   */\r\n  protected destroyAllInstances(inputInstances: null | InteractionBase | Array<InteractionBase>) {\r\n    if (inputInstances) {\r\n      const instances = Array.isArray(inputInstances) ? inputInstances : [inputInstances];\r\n      let instance: InteractionBase | undefined;\r\n      while (Utils.isDefined(instance = instances.pop())) {\r\n        if (instance && typeof instance.destroy === 'function') {\r\n          instance.destroy();\r\n        }\r\n      }\r\n    }\r\n    // reset instance(s)\r\n    inputInstances = (Array.isArray(inputInstances) ? [] : null);\r\n    return inputInstances;\r\n  }\r\n\r\n  protected destroyAllElements() {\r\n    this._activeCanvasNode = null as any;\r\n    this._activeViewportNode = null as any;\r\n    this._boundAncestors = null as any;\r\n    this._canvas = null as any;\r\n    this._canvasTopL = null as any;\r\n    this._canvasTopR = null as any;\r\n    this._canvasBottomL = null as any;\r\n    this._canvasBottomR = null as any;\r\n    this._container = null as any;\r\n    this._focusSink = null as any;\r\n    this._focusSink2 = null as any;\r\n    this._groupHeaders = null as any;\r\n    this._groupHeadersL = null as any;\r\n    this._groupHeadersR = null as any;\r\n    this._headerL = null as any;\r\n    this._headerR = null as any;\r\n    this._headers = null as any;\r\n    this._headerRows = null as any;\r\n    this._headerRowL = null as any;\r\n    this._headerRowR = null as any;\r\n    this._headerRowSpacerL = null as any;\r\n    this._headerRowSpacerR = null as any;\r\n    this._headerRowScrollContainer = null as any;\r\n    this._headerRowScroller = null as any;\r\n    this._headerRowScrollerL = null as any;\r\n    this._headerRowScrollerR = null as any;\r\n    this._headerScrollContainer = null as any;\r\n    this._headerScroller = null as any;\r\n    this._headerScrollerL = null as any;\r\n    this._headerScrollerR = null as any;\r\n    this._hiddenParents = null as any;\r\n    this._footerRow = null as any;\r\n    this._footerRowL = null as any;\r\n    this._footerRowR = null as any;\r\n    this._footerRowSpacerL = null as any;\r\n    this._footerRowSpacerR = null as any;\r\n    this._footerRowScroller = null as any;\r\n    this._footerRowScrollerL = null as any;\r\n    this._footerRowScrollerR = null as any;\r\n    this._footerRowScrollContainer = null as any;\r\n    this._preHeaderPanel = null as any;\r\n    this._preHeaderPanelR = null as any;\r\n    this._preHeaderPanelScroller = null as any;\r\n    this._preHeaderPanelScrollerR = null as any;\r\n    this._preHeaderPanelSpacer = null as any;\r\n    this._preHeaderPanelSpacerR = null as any;\r\n    this._topPanels = null as any;\r\n    this._topPanelScrollers = null as any;\r\n    this._style = null as any;\r\n    this._topPanelScrollerL = null as any;\r\n    this._topPanelScrollerR = null as any;\r\n    this._topPanelL = null as any;\r\n    this._topPanelR = null as any;\r\n    this._paneHeaderL = null as any;\r\n    this._paneHeaderR = null as any;\r\n    this._paneTopL = null as any;\r\n    this._paneTopR = null as any;\r\n    this._paneBottomL = null as any;\r\n    this._paneBottomR = null as any;\r\n    this._viewport = null as any;\r\n    this._viewportTopL = null as any;\r\n    this._viewportTopR = null as any;\r\n    this._viewportBottomL = null as any;\r\n    this._viewportBottomR = null as any;\r\n    this._viewportScrollContainerX = null as any;\r\n    this._viewportScrollContainerY = null as any;\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Column Autosizing\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n  /** Proportionally resize a specific column by its name, index or Id */\r\n  autosizeColumn(columnOrIndexOrId: number | string, isInit?: boolean) {\r\n    let colDef: C | null = null;\r\n    let colIndex = -1;\r\n    if (typeof columnOrIndexOrId === 'number') {\r\n      colDef = this.columns[columnOrIndexOrId];\r\n      colIndex = columnOrIndexOrId;\r\n    } else if (typeof columnOrIndexOrId === 'string') {\r\n      for (let i = 0; i < this.columns.length; i++) {\r\n        if (this.columns[i].id === columnOrIndexOrId) { colDef = this.columns[i]; colIndex = i; }\r\n      }\r\n    }\r\n    if (!colDef) {\r\n      return;\r\n    }\r\n    const gridCanvas = this.getCanvasNode(0, 0) as HTMLElement;\r\n    this.getColAutosizeWidth(colDef, colIndex, gridCanvas, isInit || false, colIndex);\r\n  }\r\n\r\n  protected treatAsLocked(autoSize: AutoSize = {}) {\r\n    // treat as locked (don't resize) if small and header is the widest part\r\n    return !autoSize.ignoreHeaderText\r\n      && !autoSize.sizeToRemaining\r\n      && (autoSize.contentSizePx === autoSize.headerWidthPx)\r\n      && ((autoSize.widthPx ?? 0) < 100);\r\n  }\r\n\r\n  /** Proportionately resizes all columns to fill available horizontal space. This does not take the cell contents into consideration. */\r\n  autosizeColumns(autosizeMode?: string, isInit?: boolean) {\r\n    this.cacheCssForHiddenInit();\r\n    this.internalAutosizeColumns(autosizeMode, isInit);\r\n    this.restoreCssFromHiddenInit();\r\n  }\r\n\r\n  protected internalAutosizeColumns(autosizeMode?: string, isInit?: boolean) {\r\n    // LogColWidths();\r\n    autosizeMode = autosizeMode || this._options.autosizeColsMode;\r\n    if (autosizeMode === GridAutosizeColsMode.LegacyForceFit || autosizeMode === GridAutosizeColsMode.LegacyOff) {\r\n      this.legacyAutosizeColumns();\r\n      return;\r\n    }\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.None) {\r\n      return;\r\n    }\r\n\r\n    // test for brower canvas support, canvas_context!=null if supported\r\n    this.canvas = document.createElement('canvas');\r\n    if (this.canvas?.getContext) { this.canvas_context = this.canvas.getContext('2d'); }\r\n\r\n    // pass in the grid canvas\r\n    const gridCanvas = this.getCanvasNode(0, 0) as HTMLElement;\r\n    const viewportWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n\r\n    // iterate columns to get autosizes\r\n    let i: number;\r\n    let c: C;\r\n    let colWidth: number;\r\n    let reRender = false;\r\n    let totalWidth = 0;\r\n    let totalWidthLessSTR = 0;\r\n    let strColsMinWidth = 0;\r\n    let totalMinWidth = 0;\r\n    let totalLockedColWidth = 0;\r\n    for (i = 0; i < this.columns.length; i++) {\r\n      c = this.columns[i];\r\n      this.getColAutosizeWidth(c, i, gridCanvas, isInit || false, i);\r\n      totalLockedColWidth += (c.autoSize?.autosizeMode === ColAutosizeMode.Locked ? (c.width || 0) : (this.treatAsLocked(c.autoSize) ? c.autoSize?.widthPx || 0 : 0));\r\n      totalMinWidth += (c.autoSize?.autosizeMode === ColAutosizeMode.Locked ? (c.width || 0) : (this.treatAsLocked(c.autoSize) ? c.autoSize?.widthPx || 0 : c.minWidth || 0));\r\n      totalWidth += (c.autoSize?.widthPx || 0);\r\n      totalWidthLessSTR += (c.autoSize?.sizeToRemaining ? 0 : c.autoSize?.widthPx || 0);\r\n      strColsMinWidth += (c.autoSize?.sizeToRemaining ? c.minWidth || 0 : 0);\r\n    }\r\n    const strColTotalGuideWidth = totalWidth - totalWidthLessSTR;\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.FitViewportToCols) {\r\n      // - if viewport with is outside MinViewportWidthPx and MaxViewportWidthPx, then the viewport is set to\r\n      //   MinViewportWidthPx or MaxViewportWidthPx and the FitColsToViewport algorithm is used\r\n      // - viewport is resized to fit columns\r\n      let setWidth = totalWidth + (this.scrollbarDimensions?.width ?? 0);\r\n      autosizeMode = GridAutosizeColsMode.IgnoreViewport;\r\n\r\n      if (this._options.viewportMaxWidthPx && setWidth > this._options.viewportMaxWidthPx) {\r\n        setWidth = this._options.viewportMaxWidthPx;\r\n        autosizeMode = GridAutosizeColsMode.FitColsToViewport;\r\n      } else if (this._options.viewportMinWidthPx && setWidth < this._options.viewportMinWidthPx) {\r\n        setWidth = this._options.viewportMinWidthPx;\r\n        autosizeMode = GridAutosizeColsMode.FitColsToViewport;\r\n      } else {\r\n        // falling back to IgnoreViewport will size the columns as-is, with render checking\r\n        // for (i = 0; i < columns.length; i++) { columns[i].width = columns[i].autoSize.widthPx; }\r\n      }\r\n      Utils.width(this._container, setWidth);\r\n    }\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.FitColsToViewport) {\r\n      if (strColTotalGuideWidth > 0 && totalWidthLessSTR < viewportWidth - strColsMinWidth) {\r\n        // if addl space remains in the viewport and there are SizeToRemaining cols, just the SizeToRemaining cols expand proportionally to fill viewport\r\n        for (i = 0; i < this.columns.length; i++) {\r\n          c = this.columns[i];\r\n          if (!c || c.hidden) { continue; }\r\n\r\n          const totalSTRViewportWidth = viewportWidth - totalWidthLessSTR;\r\n          if (c.autoSize?.sizeToRemaining) {\r\n            colWidth = totalSTRViewportWidth * (c.autoSize?.widthPx || 0) / strColTotalGuideWidth;\r\n          } else {\r\n            colWidth = (c.autoSize?.widthPx || 0);\r\n          }\r\n          if (c.rerenderOnResize && (c.width || 0) !== colWidth) {\r\n            reRender = true;\r\n          }\r\n          c.width = colWidth;\r\n        }\r\n      } else if ((this._options.viewportSwitchToScrollModeWidthPercent && totalWidthLessSTR + strColsMinWidth > viewportWidth * this._options.viewportSwitchToScrollModeWidthPercent / 100)\r\n        || (totalMinWidth > viewportWidth)) {\r\n        // if the total columns width is wider than the viewport by switchToScrollModeWidthPercent, switch to IgnoreViewport mode\r\n        autosizeMode = GridAutosizeColsMode.IgnoreViewport;\r\n      } else {\r\n        // otherwise (ie. no SizeToRemaining cols or viewport smaller than columns) all cols other than 'Locked' scale in proportion to fill viewport\r\n        // and SizeToRemaining get minWidth\r\n        let unallocatedColWidth = totalWidthLessSTR - totalLockedColWidth;\r\n        let unallocatedViewportWidth = viewportWidth - totalLockedColWidth - strColsMinWidth;\r\n        for (i = 0; i < this.columns.length; i++) {\r\n          c = this.columns[i];\r\n          if (!c || c.hidden) { continue; }\r\n\r\n          colWidth = c.width || 0;\r\n          if (c.autoSize?.autosizeMode !== ColAutosizeMode.Locked && !this.treatAsLocked(c.autoSize)) {\r\n            if (c.autoSize?.sizeToRemaining) {\r\n              colWidth = c.minWidth || 0;\r\n            } else {\r\n              // size width proportionally to free space (we know we have enough room due to the earlier calculations)\r\n              colWidth = unallocatedViewportWidth / unallocatedColWidth * (c.autoSize?.widthPx || 0) - 1;\r\n              if (colWidth < (c.minWidth || 0)) {\r\n                colWidth = c.minWidth || 0;\r\n              }\r\n\r\n              // remove the just allocated widths from the allocation pool\r\n              unallocatedColWidth -= (c.autoSize?.widthPx || 0);\r\n              unallocatedViewportWidth -= colWidth;\r\n            }\r\n          }\r\n          if (this.treatAsLocked(c.autoSize)) {\r\n            colWidth = (c.autoSize?.widthPx || 0);\r\n            if (colWidth < (c.minWidth || 0)) {\r\n              colWidth = c.minWidth || 0;\r\n            }\r\n          }\r\n          if (c.rerenderOnResize && c.width !== colWidth) {\r\n            reRender = true;\r\n          }\r\n          c.width = colWidth;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (autosizeMode === GridAutosizeColsMode.IgnoreViewport) {\r\n      // just size columns as-is\r\n      for (i = 0; i < this.columns.length; i++) {\r\n        if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n        colWidth = this.columns[i].autoSize?.widthPx || 0;\r\n        if (this.columns[i].rerenderOnResize && this.columns[i].width !== colWidth) {\r\n          reRender = true;\r\n        }\r\n        this.columns[i].width = colWidth;\r\n      }\r\n    }\r\n\r\n    this.reRenderColumns(reRender);\r\n  }\r\n\r\n  protected LogColWidths() {\r\n    let s = 'Col Widths:';\r\n    for (let i = 0; i < this.columns.length; i++) { s += ' ' + (this.columns[i].hidden ? 'H' : this.columns[i].width); }\r\n    console.log(s);\r\n  }\r\n\r\n  protected getColAutosizeWidth(columnDef: C, colIndex: number, gridCanvas: HTMLElement, isInit: boolean, colArrayIndex: number) {\r\n    const autoSize = columnDef.autoSize as AutoSize;\r\n\r\n    // set to width as default\r\n    autoSize.widthPx = columnDef.width;\r\n    if (autoSize.autosizeMode === ColAutosizeMode.Locked\r\n      || autoSize.autosizeMode === ColAutosizeMode.Guide) {\r\n      return;\r\n    }\r\n\r\n    const dl = this.getDataLength(); // getDataItem();\r\n    const isoDateRegExp = new RegExp(/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z/);\r\n\r\n    // ContentIntelligent takes settings from column data type\r\n    if (autoSize.autosizeMode === ColAutosizeMode.ContentIntelligent) {\r\n      // default to column colDataTypeOf (can be used if initially there are no data rows)\r\n      let colDataTypeOf = autoSize.colDataTypeOf;\r\n      let colDataItem: any;\r\n      if (dl > 0) {\r\n        const tempRow = this.getDataItem(0);\r\n        if (tempRow) {\r\n          colDataItem = tempRow[columnDef.field as keyof TData];\r\n\r\n          // check for dates in hiding\r\n          if (isoDateRegExp.test(colDataItem)) { colDataItem = Date.parse(colDataItem); }\r\n\r\n          colDataTypeOf = typeof colDataItem;\r\n          if (colDataTypeOf === 'object') {\r\n            if (colDataItem instanceof Date) { colDataTypeOf = 'date'; }\r\n            if (typeof moment !== 'undefined' && colDataItem instanceof moment) { colDataTypeOf = 'moment'; }\r\n          }\r\n        }\r\n      }\r\n      if (colDataTypeOf === 'boolean') {\r\n        autoSize.colValueArray = [true, false];\r\n      }\r\n      if (colDataTypeOf === 'number') {\r\n        autoSize.valueFilterMode = ValueFilterMode.GetGreatestAndSub;\r\n        autoSize.rowSelectionMode = RowSelectionMode.AllRows;\r\n      }\r\n      if (colDataTypeOf === 'string') {\r\n        autoSize.valueFilterMode = ValueFilterMode.GetLongestText;\r\n        autoSize.rowSelectionMode = RowSelectionMode.AllRows;\r\n        autoSize.allowAddlPercent = 5;\r\n      }\r\n      if (colDataTypeOf === 'date') {\r\n        autoSize.colValueArray = [new Date(2009, 8, 30, 12, 20, 20)]; // Sep 30th 2009, 12:20:20 AM\r\n      }\r\n      if (colDataTypeOf === 'moment' && typeof moment !== 'undefined') {\r\n        autoSize.colValueArray = [moment([2009, 8, 30, 12, 20, 20])]; // Sep 30th 2009, 12:20:20 AM\r\n      }\r\n    }\r\n\r\n    // at this point, the autosizeMode is effectively 'Content', so proceed to get size\r\n    let colWidth = autoSize.contentSizePx = this.getColContentSize(columnDef, colIndex, gridCanvas, isInit, colArrayIndex);\r\n\r\n    if (colWidth === 0) {\r\n      colWidth = autoSize.widthPx || 0;\r\n    }\r\n\r\n    const addlPercentMultiplier = (autoSize.allowAddlPercent ? (1 + autoSize.allowAddlPercent / 100) : 1);\r\n    colWidth = colWidth * addlPercentMultiplier + (this._options.autosizeColPaddingPx || 0);\r\n    if (columnDef.minWidth && colWidth < columnDef.minWidth) { colWidth = columnDef.minWidth; }\r\n    if (columnDef.maxWidth && colWidth > columnDef.maxWidth) { colWidth = columnDef.maxWidth; }\r\n\r\n    if (autoSize.autosizeMode === ColAutosizeMode.ContentExpandOnly || ((columnDef?.editor as any)?.ControlFillsColumn)) {\r\n      // only use content width if it's wider than the default column width (this is used for dropdowns and other fixed width controls)\r\n      if (colWidth < (columnDef.width || 0)) {\r\n        colWidth = columnDef.width || 0;\r\n      }\r\n    }\r\n    autoSize.widthPx = colWidth;\r\n  }\r\n\r\n  protected getColContentSize(columnDef: C, colIndex: number, gridCanvas: HTMLElement, isInit: boolean, colArrayIndex: number) {\r\n    const autoSize = columnDef.autoSize as AutoSize;\r\n    let widthAdjustRatio = 1;\r\n\r\n    // at this point, the autosizeMode is effectively 'Content', so proceed to get size\r\n\r\n    // get header width, if we are taking notice of it\r\n    let i: number;\r\n    let tempVal: any;\r\n    let maxLen = 0;\r\n    let maxColWidth = 0;\r\n    autoSize.headerWidthPx = 0;\r\n    if (!autoSize.ignoreHeaderText) {\r\n      autoSize.headerWidthPx = this.getColHeaderWidth(columnDef);\r\n    }\r\n    if (autoSize.headerWidthPx === 0) {\r\n      autoSize.headerWidthPx = (columnDef.width ? columnDef.width\r\n        : (columnDef.maxWidth ? columnDef.maxWidth\r\n          : (columnDef.minWidth ? columnDef.minWidth : 20)\r\n        )\r\n      );\r\n    }\r\n\r\n    if (autoSize.colValueArray) {\r\n      // if an array of values are specified, just pass them in instead of data\r\n      maxColWidth = this.getColWidth(columnDef, gridCanvas, autoSize.colValueArray as any);\r\n      return Math.max(autoSize.headerWidthPx, maxColWidth);\r\n    }\r\n\r\n    // select rows to evaluate using rowSelectionMode and rowSelectionCount\r\n    const rowInfo = {} as RowInfo;\r\n    rowInfo.colIndex = colIndex;\r\n    rowInfo.rowCount = this.getDataLength();\r\n    rowInfo.startIndex = 0;\r\n    rowInfo.endIndex = rowInfo.rowCount - 1;\r\n    rowInfo.valueArr = null;\r\n    rowInfo.getRowVal = (j: number) => this.getDataItem(j)[columnDef.field as keyof TData];\r\n\r\n    const rowSelectionMode = (isInit ? autoSize.rowSelectionModeOnInit : undefined) || autoSize.rowSelectionMode;\r\n\r\n    if (rowSelectionMode === RowSelectionMode.FirstRow) { rowInfo.endIndex = 0; }\r\n    if (rowSelectionMode === RowSelectionMode.LastRow) { rowInfo.endIndex = rowInfo.startIndex = rowInfo.rowCount - 1; }\r\n    if (rowSelectionMode === RowSelectionMode.FirstNRows) { rowInfo.endIndex = Math.min(autoSize.rowSelectionCount || 0, rowInfo.rowCount) - 1; }\r\n\r\n    // now use valueFilterMode to further filter selected rows\r\n    if (autoSize.valueFilterMode === ValueFilterMode.DeDuplicate) {\r\n      const rowsDict: any = {};\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        rowsDict[rowInfo.getRowVal(i)] = true;\r\n      }\r\n      if (Object.keys) {\r\n        rowInfo.valueArr = Object.keys(rowsDict);\r\n      } else {\r\n        rowInfo.valueArr = [];\r\n        for (const v in rowsDict) {\r\n          if (rowsDict) {\r\n            rowInfo.valueArr.push(v);\r\n          }\r\n        }\r\n      }\r\n      rowInfo.startIndex = 0;\r\n      rowInfo.endIndex = rowInfo.length - 1;\r\n    }\r\n\r\n    if (autoSize.valueFilterMode === ValueFilterMode.GetGreatestAndSub) {\r\n      // get greatest abs value in data\r\n      let maxVal;\r\n      let maxAbsVal = 0;\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        tempVal = rowInfo.getRowVal(i);\r\n        if (Math.abs(tempVal) > maxAbsVal) {\r\n          maxVal = tempVal; maxAbsVal = Math.abs(tempVal);\r\n        }\r\n      }\r\n      // now substitute a '9' for all characters (to get widest width) and convert back to a number\r\n      maxVal = '' + maxVal;\r\n      maxVal = Array(maxVal.length + 1).join('9');\r\n      maxVal = +maxVal;\r\n\r\n      rowInfo.valueArr = [maxVal];\r\n      rowInfo.startIndex = rowInfo.endIndex = 0;\r\n    }\r\n\r\n    if (autoSize.valueFilterMode === ValueFilterMode.GetLongestTextAndSub) {\r\n      // get greatest abs value in data\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        tempVal = rowInfo.getRowVal(i);\r\n        if ((tempVal || '').length > maxLen) { maxLen = tempVal.length; }\r\n      }\r\n      // now substitute a 'm' for all characters\r\n      tempVal = Array(maxLen + 1).join('m');\r\n      widthAdjustRatio = this._options.autosizeTextAvgToMWidthRatio || 0;\r\n\r\n      rowInfo.maxLen = maxLen;\r\n      rowInfo.valueArr = [tempVal];\r\n      rowInfo.startIndex = rowInfo.endIndex = 0;\r\n    }\r\n\r\n    if (autoSize.valueFilterMode === ValueFilterMode.GetLongestText) {\r\n      // get greatest abs value in data\r\n      maxLen = 0; let maxIndex = 0;\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        tempVal = rowInfo.getRowVal(i);\r\n        if ((tempVal || '').length > maxLen) { maxLen = tempVal.length; maxIndex = i; }\r\n      }\r\n      // now substitute a 'c' for all characters\r\n      tempVal = rowInfo.getRowVal(maxIndex);\r\n      rowInfo.maxLen = maxLen;\r\n      rowInfo.valueArr = [tempVal];\r\n      rowInfo.startIndex = rowInfo.endIndex = 0;\r\n    }\r\n\r\n    // !!! HACK !!!!\r\n    if (rowInfo.maxLen && rowInfo.maxLen > 30 && colArrayIndex > 1) { autoSize.sizeToRemaining = true; }\r\n    maxColWidth = this.getColWidth(columnDef, gridCanvas, rowInfo) * widthAdjustRatio;\r\n    return Math.max(autoSize.headerWidthPx, maxColWidth);\r\n  }\r\n\r\n  protected getColWidth(columnDef: C, gridCanvas: HTMLElement, rowInfo: RowInfo) {\r\n    const rowEl = Utils.createDomElement('div', { className: 'slick-row ui-widget-content' }, gridCanvas);\r\n    const cellEl = Utils.createDomElement('div', { className: 'slick-cell' }, rowEl);\r\n\r\n    cellEl.style.position = 'absolute';\r\n    cellEl.style.visibility = 'hidden';\r\n    cellEl.style.textOverflow = 'initial';\r\n    cellEl.style.whiteSpace = 'nowrap';\r\n\r\n    let i: number;\r\n    let len: number;\r\n    let max = 0;\r\n    let maxText = '';\r\n    let formatterResult: string | FormatterResultWithHtml | FormatterResultWithText | HTMLElement | DocumentFragment;\r\n    let val: any;\r\n\r\n    // get mode - if text only display, use canvas otherwise html element\r\n    let useCanvas = (columnDef.autoSize!.widthEvalMode === WidthEvalMode.TextOnly);\r\n\r\n    if (columnDef.autoSize?.widthEvalMode === WidthEvalMode.Auto) {\r\n      const noFormatter = !columnDef.formatterOverride && !columnDef.formatter;\r\n      const formatterIsText = ((columnDef?.formatterOverride as { ReturnsTextOnly: boolean })?.ReturnsTextOnly)\r\n        || (!columnDef.formatterOverride && (columnDef.formatter as any)?.ReturnsTextOnly);\r\n      useCanvas = noFormatter || formatterIsText;\r\n    }\r\n\r\n    // use canvas - very fast, but text-only\r\n    if (this.canvas_context && useCanvas) {\r\n      const style = getComputedStyle(cellEl);\r\n      this.canvas_context.font = style.fontSize + ' ' + style.fontFamily;\r\n      for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n        // row is either an array or values or a single value\r\n        val = (rowInfo.valueArr ? rowInfo.valueArr[i] : rowInfo.getRowVal(i));\r\n        if (columnDef.formatterOverride) {\r\n          // use formatterOverride as first preference\r\n          formatterResult = (columnDef.formatterOverride as FormatterOverrideCallback)(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n        } else if (columnDef.formatter) {\r\n          // otherwise, use formatter\r\n          formatterResult = columnDef.formatter(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n        } else {\r\n          // otherwise, use plain text\r\n          formatterResult = '' + val;\r\n        }\r\n        len = formatterResult ? this.canvas_context.measureText(formatterResult as string).width : 0;\r\n        if (len > max) {\r\n          max = len;\r\n          maxText = formatterResult as string;\r\n        }\r\n      }\r\n\r\n      cellEl.textContent = maxText;\r\n      len = cellEl.offsetWidth;\r\n\r\n      rowEl.remove();\r\n      return len;\r\n    }\r\n\r\n    for (i = rowInfo.startIndex; i <= rowInfo.endIndex; i++) {\r\n      val = (rowInfo.valueArr ? rowInfo.valueArr[i] : rowInfo.getRowVal(i));\r\n      if (columnDef.formatterOverride) {\r\n        // use formatterOverride as first preference\r\n        formatterResult = (columnDef.formatterOverride as FormatterOverrideCallback)(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n      } else if (columnDef.formatter) {\r\n        // otherwise, use formatter\r\n        formatterResult = columnDef.formatter(i, rowInfo.colIndex, val, columnDef, this.getDataItem(i), this as unknown as SlickGridModel);\r\n      } else {\r\n        // otherwise, use plain text\r\n        formatterResult = '' + val;\r\n      }\r\n      this.applyFormatResultToCellNode(formatterResult, cellEl);\r\n      len = cellEl.offsetWidth;\r\n      if (len > max) { max = len; }\r\n    }\r\n\r\n    rowEl.remove();\r\n    return max;\r\n  }\r\n\r\n  protected getColHeaderWidth(columnDef: C) {\r\n    let width = 0;\r\n    // if (columnDef && (!columnDef.resizable || columnDef._autoCalcWidth === true)) { return; }\r\n    const headerColElId = this.getUID() + columnDef.id;\r\n    let headerColEl = document.getElementById(headerColElId) as HTMLElement;\r\n    const dummyHeaderColElId = `${headerColElId}_`;\r\n    const clone = headerColEl.cloneNode(true) as HTMLElement;\r\n    if (headerColEl) {\r\n      // headers have been created, use clone technique\r\n      clone.id = dummyHeaderColElId;\r\n      clone.style.cssText = 'position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;';\r\n      headerColEl.parentNode!.insertBefore(clone, headerColEl);\r\n      width = clone.offsetWidth;\r\n      clone.parentNode!.removeChild(clone);\r\n    } else {\r\n      // headers have not yet been created, create a new node\r\n      const header = this.getHeader(columnDef) as HTMLElement;\r\n      headerColEl = Utils.createDomElement('div', { id: dummyHeaderColElId, className: 'ui-state-default slick-state-default slick-header-column' }, header);\r\n      const colNameElm = Utils.createDomElement('span', { className: 'slick-column-name' }, headerColEl);\r\n      this.applyHtmlCode(colNameElm, columnDef.name!);\r\n      clone.style.cssText = 'position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;';\r\n      if (columnDef.headerCssClass) {\r\n        headerColEl.classList.add(...Utils.classNameToList(columnDef.headerCssClass));\r\n      }\r\n      width = headerColEl.offsetWidth;\r\n      header.removeChild(headerColEl);\r\n    }\r\n    return width;\r\n  }\r\n\r\n  protected legacyAutosizeColumns() {\r\n    let i;\r\n    let c: C | undefined;\r\n    let shrinkLeeway = 0;\r\n    let total = 0;\r\n    let prevTotal = 0;\r\n    const widths: number[] = [];\r\n    const availWidth = this.viewportHasVScroll ? this.viewportW - (this.scrollbarDimensions?.width ?? 0) : this.viewportW;\r\n\r\n    for (i = 0; i < this.columns.length; i++) {\r\n      c = this.columns[i];\r\n      if (!c || c.hidden) {\r\n        widths.push(0);\r\n        continue;\r\n      }\r\n      widths.push(c.width || 0);\r\n      total += c.width || 0;\r\n      if (c.resizable) {\r\n        shrinkLeeway += (c.width || 0) - Math.max((c.minWidth || 0), this.absoluteColumnMinWidth);\r\n      }\r\n    }\r\n\r\n    // shrink\r\n    prevTotal = total;\r\n    while (total > availWidth && shrinkLeeway) {\r\n      const shrinkProportion = (total - availWidth) / shrinkLeeway;\r\n      for (i = 0; i < this.columns.length && total > availWidth; i++) {\r\n        c = this.columns[i];\r\n        if (!c || c.hidden) { continue; }\r\n        const width = widths[i];\r\n        if (!c.resizable || width <= c.minWidth! || width <= this.absoluteColumnMinWidth) {\r\n          continue;\r\n        }\r\n        const absMinWidth = Math.max(c.minWidth!, this.absoluteColumnMinWidth);\r\n        let shrinkSize = Math.floor(shrinkProportion * (width - absMinWidth)) || 1;\r\n        shrinkSize = Math.min(shrinkSize, width - absMinWidth);\r\n        total -= shrinkSize;\r\n        shrinkLeeway -= shrinkSize;\r\n        widths[i] -= shrinkSize;\r\n      }\r\n      if (prevTotal <= total) {  // avoid infinite loop\r\n        break;\r\n      }\r\n      prevTotal = total;\r\n    }\r\n\r\n    // grow\r\n    prevTotal = total;\r\n    while (total < availWidth) {\r\n      const growProportion = availWidth / total;\r\n      for (i = 0; i < this.columns.length && total < availWidth; i++) {\r\n        c = this.columns[i];\r\n        if (!c || c.hidden) { continue; }\r\n        const currentWidth = widths[i];\r\n        let growSize;\r\n\r\n        if (!c.resizable || c.maxWidth! <= currentWidth) {\r\n          growSize = 0;\r\n        } else {\r\n          growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, (c.maxWidth! - currentWidth) || 1000000) || 1;\r\n        }\r\n        total += growSize;\r\n        widths[i] += (total <= availWidth ? growSize : 0);\r\n      }\r\n      if (prevTotal >= total) {  // avoid infinite loop\r\n        break;\r\n      }\r\n      prevTotal = total;\r\n    }\r\n\r\n    let reRender = false;\r\n    for (i = 0; i < this.columns.length; i++) {\r\n      if (!c || c.hidden) { continue; }\r\n\r\n      if (this.columns[i].rerenderOnResize && this.columns[i].width !== widths[i]) {\r\n        reRender = true;\r\n      }\r\n      this.columns[i].width = widths[i];\r\n    }\r\n\r\n    this.reRenderColumns(reRender);\r\n  }\r\n\r\n  /**\r\n   * Apply Columns Widths in the UI and optionally invalidate & re-render the columns when specified\r\n   * @param {Boolean} shouldReRender - should we invalidate and re-render the grid?\r\n   */\r\n  reRenderColumns(reRender?: boolean) {\r\n    this.applyColumnHeaderWidths();\r\n    this.updateCanvasWidth(true);\r\n\r\n    this.trigger(this.onAutosizeColumns, { columns: this.columns });\r\n\r\n    if (reRender) {\r\n      this.invalidateAllRows();\r\n      this.render();\r\n    }\r\n  }\r\n\r\n  getVisibleColumns() {\r\n    return this.columns.filter(c => !c.hidden);\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // General\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n  protected trigger<ArgType = any>(evt: SlickEvent_, args?: ArgType, e?: Event | SlickEventData_) {\r\n    const event: SlickEventData_ = (e || new SlickEventData(e, args)) as SlickEventData_;\r\n    const eventArgs = (args || {}) as ArgType & { grid: SlickGrid<TData, C, O>; };\r\n    eventArgs.grid = this;\r\n    return evt.notify(eventArgs, event, this);\r\n  }\r\n\r\n  /** Get Editor lock */\r\n  getEditorLock() {\r\n    return this._options.editorLock as SlickEditorLock;\r\n  }\r\n\r\n  /** Get Editor Controller */\r\n  getEditController() {\r\n    return this.editController;\r\n  }\r\n\r\n  /**\r\n   * Returns the index of a column with a given id. Since columns can be reordered by the user, this can be used to get the column definition independent of the order:\r\n   * @param {String | Number} id A column id.\r\n   */\r\n  getColumnIndex(id: number | string): number {\r\n    return this.columnsById[id];\r\n  }\r\n\r\n  protected applyColumnHeaderWidths() {\r\n    if (!this.initialized) {\r\n      return;\r\n    }\r\n\r\n    let columnIndex = 0;\r\n    const vc = this.getVisibleColumns();\r\n    this._headers.forEach((header) => {\r\n      for (let i = 0; i < header.children.length; i++, columnIndex++) {\r\n        const h = header.children[i] as HTMLElement;\r\n        const col = vc[columnIndex] || {};\r\n        const width = (col.width || 0) - this.headerColumnWidthDiff;\r\n        if (Utils.width(h) !== width) {\r\n          Utils.width(h, width);\r\n        }\r\n      }\r\n    });\r\n\r\n    this.updateColumnCaches();\r\n  }\r\n\r\n  protected applyColumnWidths() {\r\n    let x = 0;\r\n    let w = 0;\r\n    let rule: any;\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      if (!this.columns[i]?.hidden) {\r\n        w = this.columns[i].width || 0;\r\n\r\n        rule = this.getColumnCssRules(i);\r\n        rule.left.style.left = `${x}px`;\r\n        rule.right.style.right = (((this._options.frozenColumn !== -1 && i > this._options.frozenColumn!) ? this.canvasWidthR : this.canvasWidthL) - x - w) + 'px';\r\n\r\n        // If this column is frozen, reset the css left value since the\r\n        // column starts in a new viewport.\r\n        if (this._options.frozenColumn !== i) {\r\n          x += this.columns[i].width!;\r\n        }\r\n      }\r\n      if (this._options.frozenColumn === i) {\r\n        x = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Accepts a columnId string and an ascending boolean. Applies a sort glyph in either ascending or descending form to the header of the column. Note that this does not actually sort the column. It only adds the sort glyph to the header.\r\n   * @param {String | Number} columnId\r\n   * @param {Boolean} ascending\r\n   */\r\n  setSortColumn(columnId: number | string, ascending: boolean) {\r\n    this.setSortColumns([{ columnId, sortAsc: ascending }]);\r\n  }\r\n\r\n  /**\r\n   * Get column by index\r\n   * @param {Number} id - column index\r\n   * @returns\r\n   */\r\n  getColumnByIndex(id: number) {\r\n    let result: HTMLElement | undefined;\r\n    this._headers.every((header) => {\r\n      const length = header.children.length;\r\n      if (id < length) {\r\n        result = header.children[id] as HTMLElement;\r\n        return false;\r\n      }\r\n      id -= length;\r\n      return true;\r\n    });\r\n\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Accepts an array of objects in the form [ { columnId: [string], sortAsc: [boolean] }, ... ]. When called, this will apply a sort glyph in either ascending or descending form to the header of each column specified in the array. Note that this does not actually sort the column. It only adds the sort glyph to the header\r\n   * @param {ColumnSort[]} cols - column sort\r\n   */\r\n  setSortColumns(cols: ColumnSort[]) {\r\n    this.sortColumns = cols;\r\n\r\n    const numberCols = this._options.numberedMultiColumnSort && this.sortColumns.length > 1;\r\n    this._headers.forEach((header) => {\r\n      let indicators = header.querySelectorAll('.slick-header-column-sorted');\r\n      indicators.forEach((indicator) => {\r\n        indicator.classList.remove('slick-header-column-sorted');\r\n      });\r\n\r\n      indicators = header.querySelectorAll('.slick-sort-indicator');\r\n      indicators.forEach((indicator) => {\r\n        indicator.classList.remove('slick-sort-indicator-asc');\r\n        indicator.classList.remove('slick-sort-indicator-desc');\r\n      });\r\n      indicators = header.querySelectorAll('.slick-sort-indicator-numbered');\r\n      indicators.forEach((el) => {\r\n        el.textContent = '';\r\n      });\r\n    });\r\n\r\n    let i = 1;\r\n    this.sortColumns.forEach((col) => {\r\n      if (!Utils.isDefined(col.sortAsc)) {\r\n        col.sortAsc = true;\r\n      }\r\n\r\n      const columnIndex = this.getColumnIndex(col.columnId);\r\n      if (Utils.isDefined(columnIndex)) {\r\n        const column = this.getColumnByIndex(columnIndex);\r\n        if (column) {\r\n          column.classList.add('slick-header-column-sorted');\r\n          let indicator = column.querySelector('.slick-sort-indicator');\r\n          indicator?.classList.add(col.sortAsc ? 'slick-sort-indicator-asc' : 'slick-sort-indicator-desc');\r\n\r\n          if (numberCols) {\r\n            indicator = column.querySelector('.slick-sort-indicator-numbered');\r\n            if (indicator) {\r\n              indicator.textContent = String(i);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      i++;\r\n    });\r\n  }\r\n\r\n  /** Get sorted columns **/\r\n  getSortColumns(): ColumnSort[] {\r\n    return this.sortColumns;\r\n  }\r\n\r\n  protected handleSelectedRangesChanged(e: SlickEventData_, ranges: SlickRange_[]) {\r\n    const ne = e.getNativeEvent<CustomEvent>();\r\n    const previousSelectedRows = this.selectedRows.slice(0); // shallow copy previously selected rows for later comparison\r\n    this.selectedRows = [];\r\n    const hash: CssStyleHash = {};\r\n    for (let i = 0; i < ranges.length; i++) {\r\n      for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\r\n        if (!hash[j]) {  // prevent duplicates\r\n          this.selectedRows.push(j);\r\n          hash[j] = {};\r\n        }\r\n        for (let k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\r\n          if (this.canCellBeSelected(j, k)) {\r\n            hash[j][this.columns[k].id] = this._options.selectedCellCssClass;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    this.setCellCssStyles(this._options.selectedCellCssClass || '', hash);\r\n\r\n    if (this.simpleArrayEquals(previousSelectedRows, this.selectedRows)) {\r\n      const caller = ne?.detail?.caller ?? 'click';\r\n      const newSelectedAdditions = this.getSelectedRows().filter((i) => previousSelectedRows.indexOf(i) < 0);\r\n      const newSelectedDeletions = previousSelectedRows.filter((i) => this.getSelectedRows().indexOf(i) < 0);\r\n\r\n      this.trigger(this.onSelectedRowsChanged, {\r\n        rows: this.getSelectedRows(),\r\n        previousSelectedRows,\r\n        caller,\r\n        changedSelectedRows: newSelectedAdditions,\r\n        changedUnselectedRows: newSelectedDeletions\r\n      }, e);\r\n    }\r\n  }\r\n\r\n  // compare 2 simple arrays (integers or strings only, do not use to compare object arrays)\r\n  simpleArrayEquals(arr1: any[], arr2: any[]) {\r\n    return Array.isArray(arr1) && Array.isArray(arr2) && arr2.sort().toString() !== arr1.sort().toString();\r\n  }\r\n\r\n  /** Returns an array of column definitions. */\r\n  getColumns() {\r\n    return this.columns;\r\n  }\r\n\r\n  protected updateColumnCaches() {\r\n    // Pre-calculate cell boundaries.\r\n    this.columnPosLeft = [];\r\n    this.columnPosRight = [];\r\n    let x = 0;\r\n    for (let i = 0, ii = this.columns.length; i < ii; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      this.columnPosLeft[i] = x;\r\n      this.columnPosRight[i] = x + (this.columns[i].width || 0);\r\n\r\n      if (this._options.frozenColumn === i) {\r\n        x = 0;\r\n      } else {\r\n        x += this.columns[i].width || 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  protected updateColumnProps() {\r\n    this.columnsById = {};\r\n    for (let i = 0; i < this.columns.length; i++) {\r\n      let m: C = this.columns[i];\r\n      if (m.width) {\r\n        m.widthRequest = m.width;\r\n      }\r\n\r\n      if (this._options.mixinDefaults) {\r\n        Utils.applyDefaults(m, this._columnDefaults);\r\n        if (!m.autoSize) { m.autoSize = {}; }\r\n        Utils.applyDefaults(m.autoSize, this._columnAutosizeDefaults);\r\n      } else {\r\n        m = this.columns[i] = Utils.extend({}, this._columnDefaults, m);\r\n        m.autoSize = Utils.extend({}, this._columnAutosizeDefaults, m.autoSize);\r\n      }\r\n\r\n      this.columnsById[m.id] = i;\r\n      if (m.minWidth && ((m.width || 0) < m.minWidth)) {\r\n        m.width = m.minWidth;\r\n      }\r\n      if (m.maxWidth && ((m.width || 0) > m.maxWidth)) {\r\n        m.width = m.maxWidth;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets grid columns. Column headers will be recreated and all rendered rows will be removed. To rerender the grid (if necessary), call render().\r\n   * @param {Column[]} columnDefinitions An array of column definitions.\r\n   */\r\n  setColumns(columnDefinitions: C[]) {\r\n    this.trigger(this.onBeforeSetColumns, { previousColumns: this.columns, newColumns: columnDefinitions, grid: this });\r\n    this.columns = columnDefinitions;\r\n    this.updateColumnsInternal();\r\n  }\r\n\r\n  /** Update columns for when a hidden property has changed but the column list itself has not changed. */\r\n  updateColumns() {\r\n    this.trigger(this.onBeforeUpdateColumns, { columns: this.columns, grid: this });\r\n    this.updateColumnsInternal();\r\n  }\r\n\r\n  protected updateColumnsInternal() {\r\n    this.updateColumnProps();\r\n    this.updateColumnCaches();\r\n\r\n    if (this.initialized) {\r\n      this.setPaneVisibility();\r\n      this.setOverflow();\r\n\r\n      this.invalidateAllRows();\r\n      this.createColumnHeaders();\r\n      this.createColumnFooter();\r\n      this.removeCssRules();\r\n      this.createCssRules();\r\n      this.resizeCanvas();\r\n      this.updateCanvasWidth();\r\n      this.applyColumnHeaderWidths();\r\n      this.applyColumnWidths();\r\n      this.handleScroll();\r\n      this.getSelectionModel()?.refreshSelections();\r\n    }\r\n  }\r\n\r\n  /** Returns an object containing all of the Grid options set on the grid. See a list of Grid Options here.  */\r\n  getOptions() {\r\n    return this._options;\r\n  }\r\n\r\n  /**\r\n   * Extends grid options with a given hash. If an there is an active edit, the grid will attempt to commit the changes and only continue if the attempt succeeds.\r\n   * @param {Object} options - an object with configuration options.\r\n   * @param {Boolean} [suppressRender] - do we want to supress the grid re-rendering? (defaults to false)\r\n   * @param {Boolean} [suppressColumnSet] - do we want to supress the columns set, via \"setColumns()\" method? (defaults to false)\r\n   * @param {Boolean} [suppressSetOverflow] - do we want to suppress the call to `setOverflow`\r\n   */\r\n  setOptions(newOptions: Partial<O>, suppressRender?: boolean, suppressColumnSet?: boolean, suppressSetOverflow?: boolean): void {\r\n    this.prepareForOptionsChange();\r\n\r\n    if (this._options.enableAddRow !== newOptions.enableAddRow) {\r\n      this.invalidateRow(this.getDataLength());\r\n    }\r\n\r\n    // before applying column freeze, we need our viewports to be scrolled back to left to avoid misaligned column headers\r\n    if (newOptions.frozenColumn) {\r\n      this.getViewports().forEach(vp => vp.scrollLeft = 0);\r\n      this.handleScroll(); // trigger scroll to realign column headers as well\r\n    }\r\n\r\n    const originalOptions = Utils.extend(true, {}, this._options);\r\n    this._options = Utils.extend(this._options, newOptions);\r\n    this.trigger(this.onSetOptions, { optionsBefore: originalOptions, optionsAfter: this._options });\r\n\r\n    this.internal_setOptions(suppressRender, suppressColumnSet, suppressSetOverflow);\r\n  }\r\n\r\n  /**\r\n   * If option.mixinDefaults is true then external code maintains a reference to the options object. In this case there is no need\r\n   * to call setOptions() - changes can be made directly to the object. However setOptions() also performs some recalibration of the\r\n   * grid in reaction to changed options. activateChangedOptions call the same recalibration routines as setOptions() would have.\r\n   * @param {Boolean} [suppressRender] - do we want to supress the grid re-rendering? (defaults to false)\r\n   * @param {Boolean} [suppressColumnSet] - do we want to supress the columns set, via \"setColumns()\" method? (defaults to false)\r\n   * @param {Boolean} [suppressSetOverflow] - do we want to suppress the call to `setOverflow`\r\n   */\r\n  activateChangedOptions(suppressRender?: boolean, suppressColumnSet?: boolean, suppressSetOverflow?: boolean): void {\r\n    this.prepareForOptionsChange();\r\n    this.invalidateRow(this.getDataLength());\r\n\r\n    this.trigger(this.onActivateChangedOptions, { options: this._options });\r\n\r\n    this.internal_setOptions(suppressRender, suppressColumnSet, suppressSetOverflow);\r\n  }\r\n\r\n  protected prepareForOptionsChange() {\r\n    if (!this.getEditorLock().commitCurrentEdit()) {\r\n      return;\r\n    }\r\n\r\n    this.makeActiveCellNormal();\r\n  }\r\n\r\n  protected internal_setOptions(suppressRender?: boolean, suppressColumnSet?: boolean, suppressSetOverflow?: boolean): void {\r\n    if (this._options.showColumnHeader !== undefined) {\r\n      this.setColumnHeaderVisibility(this._options.showColumnHeader);\r\n    }\r\n    this.validateAndEnforceOptions();\r\n    this.setFrozenOptions();\r\n\r\n    // when user changed frozen row option, we need to force a recalculation of each viewport heights\r\n    if (this._options.frozenBottom !== undefined) {\r\n      this.enforceFrozenRowHeightRecalc = true;\r\n    }\r\n\r\n    this._viewport.forEach((view) => {\r\n      view.style.overflowY = this._options.autoHeight ? 'hidden' : 'auto';\r\n    });\r\n    if (!suppressRender) {\r\n      this.render();\r\n    }\r\n\r\n    this.setScroller();\r\n    if (!suppressSetOverflow) {\r\n      this.setOverflow();\r\n    }\r\n\r\n    if (!suppressColumnSet) {\r\n      this.setColumns(this.columns);\r\n    }\r\n\r\n    if (this._options.enableMouseWheelScrollHandler && this._viewport && (!this.slickMouseWheelInstances || this.slickMouseWheelInstances.length === 0)) {\r\n      this._viewport.forEach((view) => {\r\n        this.slickMouseWheelInstances.push(MouseWheel({\r\n          element: view,\r\n          onMouseWheel: this.handleMouseWheel.bind(this)\r\n        }));\r\n      });\r\n    } else if (this._options.enableMouseWheelScrollHandler === false) {\r\n      this.destroyAllInstances(this.slickMouseWheelInstances); // remove scroll handler when option is disable\r\n    }\r\n  }\r\n\r\n  validateAndEnforceOptions(): void {\r\n    if (this._options.autoHeight) {\r\n      this._options.leaveSpaceForNewRows = false;\r\n    }\r\n    if (this._options.forceFitColumns) {\r\n      this._options.autosizeColsMode = GridAutosizeColsMode.LegacyForceFit;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets a new source for databinding and removes all rendered rows. Note that this doesn't render the new rows - you can follow it with a call to render() to do that.\r\n   * @param {CustomDataView|Array<*>} newData New databinding source using a regular JavaScript array.. or a custom object exposing getItem(index) and getLength() functions.\r\n   * @param {Number} [scrollToTop] If true, the grid will reset the vertical scroll position to the top of the grid.\r\n   */\r\n  setData(newData: CustomDataView<TData> | TData[], scrollToTop?: boolean) {\r\n    this.data = newData;\r\n    this.invalidateAllRows();\r\n    this.updateRowCount();\r\n    if (scrollToTop) {\r\n      this.scrollTo(0);\r\n    }\r\n  }\r\n\r\n  /** Returns an array of every data object, unless you're using DataView in which case it returns a DataView object. */\r\n  getData<U extends CustomDataView<TData> | U[]>(): U {\r\n    return this.data as U;\r\n  }\r\n\r\n  /** Returns the size of the databinding source. */\r\n  getDataLength() {\r\n    if ((this.data as CustomDataView<TData>).getLength) {\r\n      return (this.data as CustomDataView<TData>).getLength();\r\n    } else {\r\n      return (this.data as TData[])?.length ?? 0;\r\n    }\r\n  }\r\n\r\n  protected getDataLengthIncludingAddNew() {\r\n    return this.getDataLength() + (!this._options.enableAddRow ? 0\r\n      : (!this.pagingActive || this.pagingIsLastPage ? 1 : 0)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Returns the databinding item at a given position.\r\n   * @param {Number} index Item row index.\r\n   */\r\n  getDataItem(i: number): TData {\r\n    if ((this.data as CustomDataView).getItem) {\r\n      return (this.data as CustomDataView<TData>).getItem(i) as TData;\r\n    } else {\r\n      return (this.data as TData[])[i] as TData;\r\n    }\r\n  }\r\n\r\n  /** Get Top Panel DOM element */\r\n  getTopPanel() {\r\n    return this._topPanels[0];\r\n  }\r\n\r\n  /** Get Top Panels (left/right) DOM element */\r\n  getTopPanels() {\r\n    return this._topPanels;\r\n  }\r\n\r\n  /** Are we using a DataView? */\r\n  hasDataView() {\r\n    return !Array.isArray(this.data);\r\n  }\r\n\r\n  protected togglePanelVisibility(option: 'showTopPanel' | 'showHeaderRow' | 'showColumnHeader' | 'showFooterRow' | 'showPreHeaderPanel', container: HTMLElement | HTMLElement[], visible?: boolean, animate?: boolean) {\r\n    const animated = (animate === false) ? false : true;\r\n\r\n    if (this._options[option] !== visible) {\r\n      this._options[option] = visible as boolean;\r\n      if (visible) {\r\n        if (animated) {\r\n          Utils.slideDown(container, this.resizeCanvas.bind(this));\r\n          return;\r\n        }\r\n        Utils.show(container);\r\n        this.resizeCanvas();\r\n      } else {\r\n        if (animated) {\r\n          Utils.slideUp(container, this.resizeCanvas.bind(this));\r\n          return;\r\n        }\r\n        Utils.hide(container);\r\n        this.resizeCanvas();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Set the Top Panel Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if top panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setTopPanelVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showTopPanel', this._topPanelScrollers, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Header Row Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if header row panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setHeaderRowVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showHeaderRow', this._headerRowScroller, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Column Header Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if column header is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setColumnHeaderVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showColumnHeader', this._headerScroller, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Footer Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if footer row panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setFooterRowVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showFooterRow', this._footerRowScroller, visible, animate);\r\n  }\r\n\r\n  /**\r\n   * Set the Pre-Header Visibility and optionally enable/disable animation (enabled by default)\r\n   * @param {Boolean} [visible] - optionally set if pre-header panel is visible or not\r\n   * @param {Boolean} [animate] - optionally enable an animation while toggling the panel\r\n   */\r\n  setPreHeaderPanelVisibility(visible?: boolean, animate?: boolean) {\r\n    this.togglePanelVisibility('showPreHeaderPanel', [this._preHeaderPanelScroller, this._preHeaderPanelScrollerR], visible, animate);\r\n  }\r\n\r\n  /** Get Grid Canvas Node DOM Element */\r\n  getContainerNode() {\r\n    return this._container;\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Rendering / Scrolling\r\n\r\n  protected getRowTop(row: number) {\r\n    return this._options.rowHeight! * row - this.offset;\r\n  }\r\n\r\n  protected getRowFromPosition(y: number) {\r\n    return Math.floor((y + this.offset) / this._options.rowHeight!);\r\n  }\r\n\r\n  /**\r\n   * Scroll to an Y position in the grid\r\n   * @param {Number} y\r\n   */\r\n  scrollTo(y: number) {\r\n    y = Math.max(y, 0);\r\n    y = Math.min(y, (this.th || 0) - (Utils.height(this._viewportScrollContainerY) as number) + ((this.viewportHasHScroll || this.hasFrozenColumns()) ? (this.scrollbarDimensions?.height ?? 0) : 0));\r\n\r\n    const oldOffset = this.offset;\r\n    this.offset = Math.round(this.page * (this.cj || 0));\r\n    this.page = Math.min((this.n || 0) - 1, Math.floor(y / (this.ph || 0)));\r\n    const newScrollTop = (y - this.offset) as number;\r\n\r\n    if (this.offset !== oldOffset) {\r\n      const range = this.getVisibleRange(newScrollTop);\r\n      this.cleanupRows(range);\r\n      this.updateRowPositions();\r\n    }\r\n\r\n    if (this.prevScrollTop !== newScrollTop) {\r\n      this.vScrollDir = (this.prevScrollTop + oldOffset < newScrollTop + this.offset) ? 1 : -1;\r\n      this.lastRenderedScrollTop = (this.scrollTop = this.prevScrollTop = newScrollTop);\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        this._viewportTopL.scrollTop = newScrollTop;\r\n      }\r\n\r\n      if (this.hasFrozenRows) {\r\n        this._viewportBottomL.scrollTop = this._viewportBottomR.scrollTop = newScrollTop;\r\n      }\r\n\r\n      if (this._viewportScrollContainerY) {\r\n        this._viewportScrollContainerY.scrollTop = newScrollTop;\r\n      }\r\n\r\n      this.trigger(this.onViewportChanged, {});\r\n    }\r\n  }\r\n\r\n  protected defaultFormatter(_row: number, _cell: number, value: any) {\r\n    if (!Utils.isDefined(value)) {\r\n      return '';\r\n    } else {\r\n      return (value + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\r\n    }\r\n  }\r\n\r\n  protected getFormatter(row: number, column: C): Formatter {\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n\r\n    // look up by id, then index\r\n    const columnOverrides = rowMetadata?.columns &&\r\n      (rowMetadata.columns[column.id] || rowMetadata.columns[this.getColumnIndex(column.id)]);\r\n\r\n    return ((columnOverrides?.formatter) ||\r\n      (rowMetadata?.formatter) ||\r\n      column.formatter ||\r\n      (this._options.formatterFactory?.getFormatter(column)) ||\r\n      this._options.defaultFormatter) as Formatter;\r\n  }\r\n\r\n  protected getEditor(row: number, cell: number): Editor | EditorConstructor | null | undefined {\r\n    const column = this.columns[cell];\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    const columnMetadata = rowMetadata?.columns;\r\n\r\n    if (columnMetadata?.[column.id]?.editor !== undefined) {\r\n      return columnMetadata[column.id].editor;\r\n    }\r\n    if (columnMetadata?.[cell]?.editor !== undefined) {\r\n      return columnMetadata[cell].editor;\r\n    }\r\n\r\n    return (column.editor || (this._options?.editorFactory?.getEditor(column)));\r\n  }\r\n\r\n  protected getDataItemValueForColumn(item: TData, columnDef: C) {\r\n    if (this._options.dataItemColumnValueExtractor) {\r\n      return this._options.dataItemColumnValueExtractor(item, columnDef) as TData;\r\n    }\r\n    return item[columnDef.field as keyof TData];\r\n  }\r\n\r\n  protected appendRowHtml(divArrayL: HTMLElement[], divArrayR: HTMLElement[], row: number, range: CellViewportRange, dataLength: number) {\r\n    const d = this.getDataItem(row);\r\n    const dataLoading = row < dataLength && !d;\r\n    let rowCss = 'slick-row' +\r\n      (this.hasFrozenRows && row <= this._options.frozenRow! ? ' frozen' : '') +\r\n      (dataLoading ? ' loading' : '') +\r\n      (row === this.activeRow && this._options.showCellSelection ? ' active' : '') +\r\n      (row % 2 === 1 ? ' odd' : ' even');\r\n\r\n    if (!d) {\r\n      rowCss += ' ' + this._options.addNewRowCssClass;\r\n    }\r\n\r\n    const metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n\r\n    if (metadata?.cssClasses) {\r\n      rowCss += ' ' + metadata.cssClasses;\r\n    }\r\n\r\n    const frozenRowOffset = this.getFrozenRowOffset(row);\r\n    const rowDiv = Utils.createDomElement('div', { className: `ui-widget-content ${rowCss}`, role: 'row', style: { top: `${this.getRowTop(row) - frozenRowOffset}px` } });\r\n    let rowDivR: HTMLElement | undefined;\r\n    divArrayL.push(rowDiv);\r\n    if (this.hasFrozenColumns()) {\r\n      // it has to be a deep copy otherwise we will have issues with pass by reference in js since\r\n      // attempting to add the same element to 2 different arrays will just move 1 item to the other array\r\n      rowDivR = rowDiv.cloneNode(true) as HTMLElement;\r\n      divArrayR.push(rowDivR);\r\n    }\r\n\r\n    let colspan: number | string;\r\n    let m: C;\r\n    for (let i = 0, ii = this.columns.length; i < ii; i++) {\r\n      m = this.columns[i];\r\n      if (!m || m.hidden) { continue; }\r\n\r\n      colspan = 1;\r\n      if (metadata?.columns) {\r\n        const columnData = metadata.columns[m.id] || metadata.columns[i];\r\n        colspan = columnData?.colspan || 1;\r\n        if (colspan === '*') {\r\n          colspan = ii - i;\r\n        }\r\n      }\r\n\r\n      // Do not render cells outside of the viewport.\r\n      if (this.columnPosRight[Math.min(ii - 1, i + (colspan as number) - 1)] > range.leftPx) {\r\n        if (!m.alwaysRenderColumn && this.columnPosLeft[i] > range.rightPx) {\r\n          // All columns to the right are outside the range.\r\n          break;\r\n        }\r\n\r\n        if (this.hasFrozenColumns() && (i > this._options.frozenColumn!)) {\r\n          this.appendCellHtml(rowDivR!, row, i, (colspan as number), d);\r\n        } else {\r\n          this.appendCellHtml(rowDiv, row, i, (colspan as number), d);\r\n        }\r\n      } else if (m.alwaysRenderColumn || (this.hasFrozenColumns() && i <= this._options.frozenColumn!)) {\r\n        this.appendCellHtml(rowDiv, row, i, (colspan as number), d);\r\n      }\r\n\r\n      if ((colspan as number) > 1) {\r\n        i += ((colspan as number) - 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  protected appendCellHtml(divRow: HTMLElement, row: number, cell: number, colspan: number, item: TData) {\r\n    // divRow: the html element to append items too\r\n    // row, cell: row and column index\r\n    // colspan: HTML colspan\r\n    // item: grid data for row\r\n\r\n    const m = this.columns[cell];\r\n    let cellCss = 'slick-cell l' + cell + ' r' + Math.min(this.columns.length - 1, cell + colspan - 1) + (m.cssClass ? ' ' + m.cssClass : '');\r\n\r\n    if (this.hasFrozenColumns() && cell <= this._options.frozenColumn!) {\r\n      cellCss += (' frozen');\r\n    }\r\n\r\n    if (row === this.activeRow && cell === this.activeCell && this._options.showCellSelection) {\r\n      cellCss += (' active');\r\n    }\r\n\r\n    // TODO: merge them together in the setter\r\n    Object.keys(this.cellCssClasses).forEach(key => {\r\n      if (this.cellCssClasses[key][row]?.[m.id]) {\r\n        cellCss += (' ' + this.cellCssClasses[key][row][m.id]);\r\n      }\r\n    });\r\n\r\n    let value: any = null;\r\n    let formatterResult: FormatterResultWithHtml | FormatterResultWithText | HTMLElement | DocumentFragment | string = '';\r\n    if (item) {\r\n      value = this.getDataItemValueForColumn(item, m);\r\n      formatterResult = this.getFormatter(row, m)(row, cell, value, m, item, this as unknown as SlickGridModel);\r\n      if (formatterResult === null || formatterResult === undefined) {\r\n        formatterResult = '';\r\n      }\r\n    }\r\n\r\n    // get addl css class names from object type formatter return and from string type return of onBeforeAppendCell\r\n    // we will only use the event result as CSS classes when it is a string type (undefined event always return a true boolean which is not a valid css class)\r\n    const evt = this.trigger(this.onBeforeAppendCell, { row, cell, value, dataContext: item });\r\n    const appendCellResult = evt.getReturnValue();\r\n    let addlCssClasses = typeof appendCellResult === 'string' ? appendCellResult : '';\r\n    if ((formatterResult as FormatterResultObject)?.addClasses) {\r\n      addlCssClasses += Utils.classNameToList((addlCssClasses ? ' ' : '') + (formatterResult as FormatterResultObject).addClasses).join(' ');\r\n    }\r\n\r\n    const toolTipText = (formatterResult as FormatterResultObject)?.toolTip ? `${(formatterResult as FormatterResultObject).toolTip}` : '';\r\n    const cellDiv = Utils.createDomElement('div', {\r\n      className: Utils.classNameToList(`${cellCss} ${addlCssClasses || ''}`).join(' '),\r\n      role: 'gridcell',\r\n      tabIndex: -1\r\n    });\r\n    cellDiv.setAttribute('aria-describedby', this.uid + m.id);\r\n    if (toolTipText) {\r\n      cellDiv.setAttribute('title', toolTipText);\r\n    }\r\n\r\n    if (m.hasOwnProperty('cellAttrs') && m.cellAttrs instanceof Object) {\r\n      Object.keys(m.cellAttrs).forEach(key => {\r\n        if (m.cellAttrs.hasOwnProperty(key)) {\r\n          cellDiv.setAttribute(key, m.cellAttrs[key]);\r\n        }\r\n      });\r\n    }\r\n\r\n    // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)\r\n    if (item) {\r\n      const cellResult = (Object.prototype.toString.call(formatterResult) !== '[object Object]' ? formatterResult : (formatterResult as FormatterResultWithHtml).html || (formatterResult as FormatterResultWithText).text);\r\n      this.applyHtmlCode(cellDiv, cellResult as string | HTMLElement);\r\n    }\r\n    divRow.appendChild(cellDiv);\r\n\r\n    // Formatter can optional add an \"insertElementAfterTarget\" option but it must be inserted only after the `.slick-row` div exists\r\n    if ((formatterResult as FormatterResultObject).insertElementAfterTarget) {\r\n      Utils.insertAfterElement(cellDiv, (formatterResult as FormatterResultObject).insertElementAfterTarget as HTMLElement);\r\n    }\r\n\r\n    this.rowsCache[row].cellRenderQueue.push(cell);\r\n    this.rowsCache[row].cellColSpans[cell] = colspan;\r\n  }\r\n\r\n  protected cleanupRows(rangeToKeep: { bottom: number; top: number; }) {\r\n    Object.keys(this.rowsCache).forEach(rowId => {\r\n      if (this.rowsCache) {\r\n        let i = +rowId;\r\n        let removeFrozenRow = true;\r\n\r\n        if (this.hasFrozenRows\r\n          && ((this._options.frozenBottom && (i as unknown as number) >= this.actualFrozenRow) // Frozen bottom rows\r\n            || (!this._options.frozenBottom && (i as unknown as number) <= this.actualFrozenRow) // Frozen top rows\r\n          )\r\n        ) {\r\n          removeFrozenRow = false;\r\n        }\r\n\r\n        if (((i = parseInt(rowId, 10)) !== this.activeRow)\r\n          && (i < rangeToKeep.top || i > rangeToKeep.bottom)\r\n          && (removeFrozenRow)\r\n        ) {\r\n          this.removeRowFromCache(i);\r\n        }\r\n      }\r\n    });\r\n    if (this._options.enableAsyncPostRenderCleanup) {\r\n      this.startPostProcessingCleanup();\r\n    }\r\n  }\r\n\r\n  /** Invalidate all grid rows and re-render the grid rows */\r\n  invalidate() {\r\n    this.updateRowCount();\r\n    this.invalidateAllRows();\r\n    this.render();\r\n  }\r\n\r\n  /** Invalidate all grid rows */\r\n  invalidateAllRows() {\r\n    if (this.currentEditor) {\r\n      this.makeActiveCellNormal();\r\n    }\r\n\r\n    if (typeof this.rowsCache === 'object') {\r\n      Object.keys(this.rowsCache).forEach(row => {\r\n        if (this.rowsCache) {\r\n          this.removeRowFromCache(+row);\r\n        }\r\n      });\r\n    }\r\n\r\n    if (this._options.enableAsyncPostRenderCleanup) {\r\n      this.startPostProcessingCleanup();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Invalidate a specific set of row numbers\r\n   * @param {Number[]} rows\r\n   */\r\n  invalidateRows(rows: number[]) {\r\n    if (!rows || !rows.length) {\r\n      return;\r\n    }\r\n    this.vScrollDir = 0;\r\n    const rl = rows.length;\r\n    for (let i = 0; i < rl; i++) {\r\n      if (this.currentEditor && this.activeRow === rows[i]) {\r\n        this.makeActiveCellNormal();\r\n      }\r\n      if (this.rowsCache[rows[i]]) {\r\n        this.removeRowFromCache(rows[i]);\r\n      }\r\n    }\r\n    if (this._options.enableAsyncPostRenderCleanup) { this.startPostProcessingCleanup(); }\r\n  }\r\n\r\n  /**\r\n   * Invalidate a specific row number\r\n   * @param {Number} row\r\n   */\r\n  invalidateRow(row: number) {\r\n    if (!row && row !== 0) { return; }\r\n    this.invalidateRows([row]);\r\n  }\r\n\r\n  protected queuePostProcessedRowForCleanup(cacheEntry: RowCaching, postProcessedRow: any, rowIdx: number) {\r\n    this.postProcessgroupId++;\r\n\r\n    // store and detach node for later async cleanup\r\n    if (typeof postProcessedRow === 'object') {\r\n      Object.keys(postProcessedRow).forEach(columnIdx => {\r\n        if (postProcessedRow.hasOwnProperty(columnIdx)) {\r\n          this.postProcessedCleanupQueue.push({\r\n            actionType: 'C',\r\n            groupId: this.postProcessgroupId,\r\n            node: cacheEntry.cellNodesByColumnIdx[+columnIdx],\r\n            columnIdx: +columnIdx,\r\n            rowIdx\r\n          });\r\n        }\r\n      });\r\n    }\r\n\r\n    if (!cacheEntry.rowNode) {\r\n      cacheEntry.rowNode = [];\r\n    }\r\n    this.postProcessedCleanupQueue.push({\r\n      actionType: 'R',\r\n      groupId: this.postProcessgroupId,\r\n      node: cacheEntry.rowNode as HTMLElement[]\r\n    });\r\n    cacheEntry.rowNode?.forEach((node) => node.remove());\r\n  }\r\n\r\n  protected queuePostProcessedCellForCleanup(cellnode: HTMLElement, columnIdx: number, rowIdx: number) {\r\n    this.postProcessedCleanupQueue.push({\r\n      actionType: 'C',\r\n      groupId: this.postProcessgroupId,\r\n      node: cellnode,\r\n      columnIdx,\r\n      rowIdx\r\n    });\r\n    cellnode.remove();\r\n  }\r\n\r\n  protected removeRowFromCache(row: number) {\r\n    const cacheEntry = this.rowsCache[row];\r\n    if (!cacheEntry || !cacheEntry.rowNode) {\r\n      return;\r\n    }\r\n\r\n    if (this._options.enableAsyncPostRenderCleanup && this.postProcessedRows[row]) {\r\n      this.queuePostProcessedRowForCleanup(cacheEntry, this.postProcessedRows[row], row);\r\n    } else {\r\n      cacheEntry.rowNode?.forEach((node: HTMLElement) => node.parentElement?.removeChild(node));\r\n    }\r\n\r\n    delete this.rowsCache[row];\r\n    delete this.postProcessedRows[row];\r\n    this.renderedRows--;\r\n    this.counter_rows_removed++;\r\n  }\r\n\r\n  /** Apply a Formatter Result to a Cell DOM Node */\r\n  applyFormatResultToCellNode(formatterResult: FormatterResultWithHtml | FormatterResultWithText | string | HTMLElement | DocumentFragment, cellNode: HTMLDivElement, suppressRemove?: boolean) {\r\n    if (formatterResult === null || formatterResult === undefined) { formatterResult = ''; }\r\n    if (Object.prototype.toString.call(formatterResult) !== '[object Object]') {\r\n      this.applyHtmlCode(cellNode, formatterResult as string | HTMLElement);\r\n      return;\r\n    }\r\n\r\n    const formatterVal: HTMLElement | string = (formatterResult as FormatterResultWithHtml).html || (formatterResult as FormatterResultWithText).text;\r\n    this.applyHtmlCode(cellNode, formatterVal);\r\n\r\n    if ((formatterResult as FormatterResultObject).removeClasses && !suppressRemove) {\r\n      cellNode.classList.remove(...Utils.classNameToList((formatterResult as FormatterResultObject).removeClasses));\r\n    }\r\n    if ((formatterResult as FormatterResultObject).addClasses) {\r\n      cellNode.classList.add(...Utils.classNameToList((formatterResult as FormatterResultObject).addClasses));\r\n    }\r\n    if ((formatterResult as FormatterResultObject).toolTip) {\r\n      cellNode.setAttribute('title', (formatterResult as FormatterResultObject).toolTip!);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update a specific cell by its row and column index\r\n   * @param {Number} row - grid row number\r\n   * @param {Number} cell - grid cell column number\r\n   */\r\n  updateCell(row: number, cell: number) {\r\n    const cellNode = this.getCellNode(row, cell);\r\n    if (!cellNode) {\r\n      return;\r\n    }\r\n\r\n    const m = this.columns[cell];\r\n    const d = this.getDataItem(row);\r\n    if (this.currentEditor && this.activeRow === row && this.activeCell === cell) {\r\n      this.currentEditor.loadValue(d);\r\n    } else {\r\n      const formatterResult = d ? this.getFormatter(row, m)(row, cell, this.getDataItemValueForColumn(d, m), m, d, this as unknown as SlickGridModel) : '';\r\n      this.applyFormatResultToCellNode(formatterResult, cellNode);\r\n      this.invalidatePostProcessingResults(row);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update a specific row by its row index\r\n   * @param {Number} row - grid row number\r\n   */\r\n  updateRow(row: number) {\r\n    const cacheEntry = this.rowsCache[row];\r\n    if (!cacheEntry) {\r\n      return;\r\n    }\r\n\r\n    this.ensureCellNodesInRowsCache(row);\r\n\r\n    let formatterResult;\r\n    const d = this.getDataItem(row);\r\n\r\n    Object.keys(cacheEntry.cellNodesByColumnIdx).forEach(colIdx => {\r\n      if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(colIdx)) {\r\n        return;\r\n      }\r\n\r\n      const columnIdx = +colIdx;\r\n      const m = this.columns[columnIdx];\r\n      const node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n\r\n      if (row === this.activeRow && columnIdx === this.activeCell && this.currentEditor) {\r\n        this.currentEditor.loadValue(d);\r\n      } else if (d) {\r\n        formatterResult = this.getFormatter(row, m)(row, columnIdx, this.getDataItemValueForColumn(d, m), m, d, this as unknown as SlickGridModel);\r\n        this.applyFormatResultToCellNode(formatterResult, node as HTMLDivElement);\r\n      } else {\r\n        Utils.emptyElement(node);\r\n      }\r\n    });\r\n\r\n    this.invalidatePostProcessingResults(row);\r\n  }\r\n\r\n  /**\r\n   * Get the number of rows displayed in the viewport\r\n   * Note that the row count is an approximation because it is a calculated value using this formula (viewport / rowHeight = rowCount),\r\n   * the viewport must also be displayed for this calculation to work.\r\n   * @return {Number} rowCount\r\n   */\r\n  getViewportRowCount() {\r\n    const vh = this.getViewportHeight();\r\n    const scrollbarHeight = this.getScrollbarDimensions()?.height ?? 0;\r\n    return Math.floor((vh - scrollbarHeight) / this._options.rowHeight!);\r\n  }\r\n\r\n  getViewportHeight() {\r\n    if (!this._options.autoHeight || this._options.frozenColumn !== -1) {\r\n      this.topPanelH = (this._options.showTopPanel) ? this._options.topPanelHeight! + this.getVBoxDelta(this._topPanelScrollers[0]) : 0;\r\n      this.headerRowH = (this._options.showHeaderRow) ? this._options.headerRowHeight! + this.getVBoxDelta(this._headerRowScroller[0]) : 0;\r\n      this.footerRowH = (this._options.showFooterRow) ? this._options.footerRowHeight! + this.getVBoxDelta(this._footerRowScroller[0]) : 0;\r\n    }\r\n\r\n    if (this._options.autoHeight) {\r\n      let fullHeight = this._paneHeaderL.offsetHeight;\r\n      fullHeight += (this._options.showHeaderRow) ? this._options.headerRowHeight! + this.getVBoxDelta(this._headerRowScroller[0]) : 0;\r\n      fullHeight += (this._options.showFooterRow) ? this._options.footerRowHeight! + this.getVBoxDelta(this._footerRowScroller[0]) : 0;\r\n      fullHeight += (this.getCanvasWidth() > this.viewportW) ? (this.scrollbarDimensions?.height ?? 0) : 0;\r\n\r\n      this.viewportH = this._options.rowHeight!\r\n        * this.getDataLengthIncludingAddNew()\r\n        + ((this._options.frozenColumn === -1) ? fullHeight : 0);\r\n    } else {\r\n      const columnNamesH = (this._options.showColumnHeader) ? Utils.toFloat(Utils.height(this._headerScroller[0]) as number) + this.getVBoxDelta(this._headerScroller[0]) : 0;\r\n      const preHeaderH = (this._options.createPreHeaderPanel && this._options.showPreHeaderPanel) ? this._options.preHeaderPanelHeight! + this.getVBoxDelta(this._preHeaderPanelScroller) : 0;\r\n\r\n      const style = getComputedStyle(this._container);\r\n      this.viewportH = Utils.toFloat(style.height)\r\n        - Utils.toFloat(style.paddingTop)\r\n        - Utils.toFloat(style.paddingBottom)\r\n        - columnNamesH\r\n        - this.topPanelH\r\n        - this.headerRowH\r\n        - this.footerRowH\r\n        - preHeaderH;\r\n    }\r\n\r\n    this.numVisibleRows = Math.ceil(this.viewportH / this._options.rowHeight!);\r\n    return this.viewportH;\r\n  }\r\n\r\n  getViewportWidth() {\r\n    this.viewportW = parseFloat(Utils.innerSize(this._container, 'width') as unknown as string) || (this._options.devMode && this._options.devMode.containerClientWidth) || 0;\r\n    return this.viewportW;\r\n  }\r\n\r\n  /** Execute a Resize of the Grid Canvas */\r\n  resizeCanvas() {\r\n    if (!this.initialized) { return; }\r\n    this.paneTopH = 0;\r\n    this.paneBottomH = 0;\r\n    this.viewportTopH = 0;\r\n    this.viewportBottomH = 0;\r\n\r\n    this.getViewportWidth();\r\n    this.getViewportHeight();\r\n\r\n    // Account for Frozen Rows\r\n    if (this.hasFrozenRows) {\r\n      if (this._options.frozenBottom) {\r\n        this.paneTopH = this.viewportH - this.frozenRowsHeight - (this.scrollbarDimensions?.height ?? 0);\r\n        this.paneBottomH = this.frozenRowsHeight + (this.scrollbarDimensions?.height ?? 0);\r\n      } else {\r\n        this.paneTopH = this.frozenRowsHeight;\r\n        this.paneBottomH = this.viewportH - this.frozenRowsHeight;\r\n      }\r\n    } else {\r\n      this.paneTopH = this.viewportH;\r\n    }\r\n\r\n    // The top pane includes the top panel and the header row\r\n    this.paneTopH += this.topPanelH + this.headerRowH + this.footerRowH;\r\n\r\n    if (this.hasFrozenColumns() && this._options.autoHeight) {\r\n      this.paneTopH += (this.scrollbarDimensions?.height ?? 0);\r\n    }\r\n\r\n    // The top viewport does not contain the top panel or header row\r\n    this.viewportTopH = this.paneTopH - this.topPanelH - this.headerRowH - this.footerRowH;\r\n\r\n    if (this._options.autoHeight) {\r\n      if (this.hasFrozenColumns()) {\r\n        const style = getComputedStyle(this._headerScrollerL);\r\n        Utils.height(this._container, this.paneTopH + Utils.toFloat(style.height));\r\n      }\r\n\r\n      this._paneTopL.style.position = 'relative';\r\n    }\r\n\r\n    Utils.setStyleSize(this._paneTopL, 'top', Utils.height(this._paneHeaderL) || (this._options.showHeaderRow ? this._options.headerRowHeight! : 0) + (this._options.showPreHeaderPanel ? this._options.preHeaderPanelHeight! : 0));\r\n    Utils.height(this._paneTopL, this.paneTopH);\r\n\r\n    const paneBottomTop = this._paneTopL.offsetTop + this.paneTopH;\r\n\r\n    if (!this._options.autoHeight) {\r\n      Utils.height(this._viewportTopL, this.viewportTopH);\r\n    }\r\n\r\n    if (this.hasFrozenColumns()) {\r\n      Utils.setStyleSize(this._paneTopR, 'top', Utils.height(this._paneHeaderL) as number);\r\n      Utils.height(this._paneTopR, this.paneTopH);\r\n      Utils.height(this._viewportTopR, this.viewportTopH);\r\n\r\n      if (this.hasFrozenRows) {\r\n        Utils.setStyleSize(this._paneBottomL, 'top', paneBottomTop);\r\n        Utils.height(this._paneBottomL, this.paneBottomH);\r\n        Utils.setStyleSize(this._paneBottomR, 'top', paneBottomTop);\r\n        Utils.height(this._paneBottomR, this.paneBottomH);\r\n        Utils.height(this._viewportBottomR, this.paneBottomH);\r\n      }\r\n    } else {\r\n      if (this.hasFrozenRows) {\r\n        Utils.width(this._paneBottomL, '100%');\r\n        Utils.height(this._paneBottomL, this.paneBottomH);\r\n        Utils.setStyleSize(this._paneBottomL, 'top', paneBottomTop);\r\n      }\r\n    }\r\n\r\n    if (this.hasFrozenRows) {\r\n      Utils.height(this._viewportBottomL, this.paneBottomH);\r\n\r\n      if (this._options.frozenBottom) {\r\n        Utils.height(this._canvasBottomL, this.frozenRowsHeight);\r\n\r\n        if (this.hasFrozenColumns()) {\r\n          Utils.height(this._canvasBottomR, this.frozenRowsHeight);\r\n        }\r\n      } else {\r\n        Utils.height(this._canvasTopL, this.frozenRowsHeight);\r\n\r\n        if (this.hasFrozenColumns()) {\r\n          Utils.height(this._canvasTopR, this.frozenRowsHeight);\r\n        }\r\n      }\r\n    } else {\r\n      Utils.height(this._viewportTopR, this.viewportTopH);\r\n    }\r\n\r\n    if (!this.scrollbarDimensions || !this.scrollbarDimensions.width) {\r\n      this.scrollbarDimensions = this.measureScrollbar();\r\n    }\r\n\r\n    if (this._options.autosizeColsMode === GridAutosizeColsMode.LegacyForceFit) {\r\n      this.autosizeColumns();\r\n    }\r\n\r\n    this.updateRowCount();\r\n    this.handleScroll();\r\n    // Since the width has changed, force the render() to reevaluate virtually rendered cells.\r\n    this.lastRenderedScrollLeft = -1;\r\n    this.render();\r\n  }\r\n\r\n  /**\r\n   * Update paging information status from the View\r\n   * @param {PagingInfo} pagingInfo\r\n   */\r\n  updatePagingStatusFromView(pagingInfo: Pick<PagingInfo, 'pageSize' | 'pageNum' | 'totalPages'>) {\r\n    this.pagingActive = (pagingInfo.pageSize !== 0);\r\n    this.pagingIsLastPage = (pagingInfo.pageNum === pagingInfo.totalPages - 1);\r\n  }\r\n\r\n  /** Update the dataset row count */\r\n  updateRowCount() {\r\n    if (!this.initialized) { return; }\r\n\r\n    const dataLength = this.getDataLength();\r\n    const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n    let numberOfRows = 0;\r\n    let oldH = ((this.hasFrozenRows && !this._options.frozenBottom) ? Utils.height(this._canvasBottomL) : Utils.height(this._canvasTopL)) as number;\r\n\r\n    if (this.hasFrozenRows) {\r\n      numberOfRows = this.getDataLength() - this._options.frozenRow!;\r\n    } else {\r\n      numberOfRows = dataLengthIncludingAddNew + (this._options.leaveSpaceForNewRows ? this.numVisibleRows - 1 : 0);\r\n    }\r\n\r\n    const tempViewportH = Utils.height(this._viewportScrollContainerY) as number;\r\n    const oldViewportHasVScroll = this.viewportHasVScroll;\r\n    // with autoHeight, we do not need to accommodate the vertical scroll bar\r\n    this.viewportHasVScroll = this._options.alwaysShowVerticalScroll || !this._options.autoHeight && (numberOfRows * this._options.rowHeight! > tempViewportH);\r\n\r\n    this.makeActiveCellNormal();\r\n\r\n    // remove the rows that are now outside of the data range\r\n    // this helps avoid redundant calls to .removeRow() when the size of the data decreased by thousands of rows\r\n    const r1 = dataLength - 1;\r\n    if (typeof this.rowsCache === 'object') {\r\n      Object.keys(this.rowsCache).forEach(row => {\r\n        const cachedRow = +row;\r\n        if (cachedRow > r1) {\r\n          this.removeRowFromCache(cachedRow);\r\n        }\r\n      });\r\n    }\r\n\r\n    if (this._options.enableAsyncPostRenderCleanup) {\r\n      this.startPostProcessingCleanup();\r\n    }\r\n\r\n    if (this.activeCellNode && this.activeRow > r1) {\r\n      this.resetActiveCell();\r\n    }\r\n\r\n    oldH = this.h;\r\n    if (this._options.autoHeight) {\r\n      this.h = this._options.rowHeight! * numberOfRows;\r\n    } else {\r\n      this.th = Math.max(this._options.rowHeight! * numberOfRows, tempViewportH - (this.scrollbarDimensions?.height ?? 0));\r\n      if (this.th < this.maxSupportedCssHeight) {\r\n        // just one page\r\n        this.h = this.ph = this.th;\r\n        this.n = 1;\r\n        this.cj = 0;\r\n      } else {\r\n        // break into pages\r\n        this.h = this.maxSupportedCssHeight;\r\n        this.ph = this.h / 100;\r\n        this.n = Math.floor(this.th / this.ph);\r\n        this.cj = (this.th - this.h) / (this.n - 1);\r\n      }\r\n    }\r\n\r\n    if (this.h !== oldH || this.enforceFrozenRowHeightRecalc) {\r\n      if (this.hasFrozenRows && !this._options.frozenBottom) {\r\n        Utils.height(this._canvasBottomL, this.h);\r\n\r\n        if (this.hasFrozenColumns()) {\r\n          Utils.height(this._canvasBottomR, this.h);\r\n        }\r\n      } else {\r\n        Utils.height(this._canvasTopL, this.h);\r\n        Utils.height(this._canvasTopR, this.h);\r\n      }\r\n\r\n      this.scrollTop = this._viewportScrollContainerY.scrollTop;\r\n      this.enforceFrozenRowHeightRecalc = false; // reset enforce flag\r\n    }\r\n\r\n    const oldScrollTopInRange = (this.scrollTop + this.offset <= this.th - tempViewportH);\r\n\r\n    if (this.th === 0 || this.scrollTop === 0) {\r\n      this.page = this.offset = 0;\r\n    } else if (oldScrollTopInRange) {\r\n      // maintain virtual position\r\n      this.scrollTo(this.scrollTop + this.offset);\r\n    } else {\r\n      // scroll to bottom\r\n      this.scrollTo(this.th - tempViewportH + (this.scrollbarDimensions?.height ?? 0));\r\n    }\r\n\r\n    if (this.h !== oldH && this._options.autoHeight) {\r\n      this.resizeCanvas();\r\n    }\r\n\r\n    if (this._options.autosizeColsMode === GridAutosizeColsMode.LegacyForceFit && oldViewportHasVScroll !== this.viewportHasVScroll) {\r\n      this.autosizeColumns();\r\n    }\r\n    this.updateCanvasWidth(false);\r\n  }\r\n\r\n  /** @alias `getVisibleRange` */\r\n  getViewport(viewportTop?: number, viewportLeft?: number) {\r\n    return this.getVisibleRange(viewportTop, viewportLeft);\r\n  }\r\n\r\n  getVisibleRange(viewportTop?: number, viewportLeft?: number) {\r\n    viewportTop ??= this.scrollTop;\r\n    viewportLeft ??= this.scrollLeft;\r\n\r\n    return {\r\n      top: this.getRowFromPosition(viewportTop),\r\n      bottom: this.getRowFromPosition(viewportTop + this.viewportH) + 1,\r\n      leftPx: viewportLeft,\r\n      rightPx: viewportLeft + this.viewportW\r\n    };\r\n  }\r\n\r\n  /** Get rendered range */\r\n  getRenderedRange(viewportTop?: number, viewportLeft?: number) {\r\n    const range = this.getVisibleRange(viewportTop, viewportLeft);\r\n    const buffer = Math.round(this.viewportH / this._options.rowHeight!);\r\n    const minBuffer = this._options.minRowBuffer as number;\r\n\r\n    if (this.vScrollDir === -1) {\r\n      range.top -= buffer;\r\n      range.bottom += minBuffer;\r\n    } else if (this.vScrollDir === 1) {\r\n      range.top -= minBuffer;\r\n      range.bottom += buffer;\r\n    } else {\r\n      range.top -= minBuffer;\r\n      range.bottom += minBuffer;\r\n    }\r\n\r\n    range.top = Math.max(0, range.top);\r\n    range.bottom = Math.min(this.getDataLengthIncludingAddNew() - 1, range.bottom);\r\n\r\n    range.leftPx -= this.viewportW;\r\n    range.rightPx += this.viewportW;\r\n\r\n    range.leftPx = Math.max(0, range.leftPx);\r\n    range.rightPx = Math.min(this.canvasWidth, range.rightPx);\r\n\r\n    return range;\r\n  }\r\n\r\n  protected ensureCellNodesInRowsCache(row: number) {\r\n    const cacheEntry = this.rowsCache[row];\r\n    if (cacheEntry?.cellRenderQueue.length && cacheEntry.rowNode?.length) {\r\n      const rowNode = cacheEntry.rowNode as HTMLElement[];\r\n      let children = Array.from(rowNode[0].children) as HTMLElement[];\r\n      if (rowNode.length > 1) {\r\n        children = children.concat(Array.from(rowNode[1].children) as HTMLElement[]);\r\n      }\r\n\r\n      let i = children.length - 1;\r\n      while (cacheEntry.cellRenderQueue.length) {\r\n        const columnIdx = cacheEntry.cellRenderQueue.pop();\r\n        (cacheEntry.cellNodesByColumnIdx as HTMLElement[])[columnIdx] = children[i--];\r\n      }\r\n    }\r\n  }\r\n\r\n  protected cleanUpCells(range: CellViewportRange, row: number) {\r\n    // Ignore frozen rows\r\n    if (this.hasFrozenRows\r\n      && ((this._options.frozenBottom && row > this.actualFrozenRow) // Frozen bottom rows\r\n        || (row <= this.actualFrozenRow)                     // Frozen top rows\r\n      )\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    let totalCellsRemoved = 0;\r\n    const cacheEntry = this.rowsCache[row];\r\n\r\n    // Remove cells outside the range.\r\n    const cellsToRemove: number[] = [];\r\n    Object.keys(cacheEntry.cellNodesByColumnIdx).forEach(cellNodeIdx => {\r\n      // I really hate it when people mess with Array.prototype.\r\n      if (!cacheEntry.cellNodesByColumnIdx.hasOwnProperty(cellNodeIdx)) {\r\n        return;\r\n      }\r\n\r\n      // This is a string, so it needs to be cast back to a number.\r\n      const i = +cellNodeIdx;\r\n\r\n      // Ignore frozen columns\r\n      if (i <= this._options.frozenColumn!) {\r\n        return;\r\n      }\r\n\r\n      // Ignore alwaysRenderedColumns\r\n      if (Array.isArray(this.columns) && this.columns[i] && this.columns[i].alwaysRenderColumn) {\r\n        return;\r\n      }\r\n\r\n      const colspan = cacheEntry.cellColSpans[i];\r\n      if (this.columnPosLeft[i] > range.rightPx ||\r\n        this.columnPosRight[Math.min(this.columns.length - 1, (i || 0) + (colspan as number) - 1)] < range.leftPx) {\r\n        if (!(row === this.activeRow && Number(i) === this.activeCell)) {\r\n          cellsToRemove.push((i as unknown as number));\r\n        }\r\n      }\r\n    });\r\n\r\n    let cellToRemove;\r\n    let cellNode;\r\n    while (Utils.isDefined(cellToRemove = cellsToRemove.pop())) {\r\n      cellNode = cacheEntry.cellNodesByColumnIdx[cellToRemove];\r\n\r\n      if (this._options.enableAsyncPostRenderCleanup && this.postProcessedRows[row]?.[cellToRemove]) {\r\n        this.queuePostProcessedCellForCleanup(cellNode, cellToRemove, row);\r\n      } else {\r\n        cellNode.parentElement?.removeChild(cellNode);\r\n      }\r\n\r\n      delete cacheEntry.cellColSpans[cellToRemove];\r\n      delete cacheEntry.cellNodesByColumnIdx[cellToRemove];\r\n      if (this.postProcessedRows[row]) {\r\n        delete this.postProcessedRows[row][cellToRemove];\r\n      }\r\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n      totalCellsRemoved++;\r\n    }\r\n  }\r\n\r\n  protected cleanUpAndRenderCells(range: CellViewportRange) {\r\n    let cacheEntry;\r\n    const divRow: HTMLElement = document.createElement('div');\r\n    const processedRows: number[] = [];\r\n    let cellsAdded: number;\r\n    let totalCellsAdded = 0;\r\n    let colspan: number | string;\r\n\r\n    for (let row = range.top as number, btm = range.bottom as number; row <= btm; row++) {\r\n      cacheEntry = this.rowsCache[row];\r\n      if (!cacheEntry) {\r\n        continue;\r\n      }\r\n\r\n      // cellRenderQueue populated in renderRows() needs to be cleared first\r\n      this.ensureCellNodesInRowsCache(row);\r\n\r\n      this.cleanUpCells(range, row);\r\n      // Render missing cells.\r\n      cellsAdded = 0;\r\n\r\n      let metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row) ?? {} as ItemMetadata;\r\n      metadata = metadata?.columns as ItemMetadata;\r\n\r\n      const d = this.getDataItem(row);\r\n\r\n      // TODO:  shorten this loop (index? heuristics? binary search?)\r\n      for (let i = 0, ii = this.columns.length; i < ii; i++) {\r\n        if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n        // Cells to the right are outside the range.\r\n        if (this.columnPosLeft[i] > range.rightPx) {\r\n          break;\r\n        }\r\n\r\n        // Already rendered.\r\n        if (Utils.isDefined(colspan = cacheEntry.cellColSpans[i] as number)) {\r\n          i += (colspan > 1 ? colspan - 1 : 0);\r\n          continue;\r\n        }\r\n\r\n        colspan = 1;\r\n        if (metadata) {\r\n          const columnData = metadata[this.columns[i].id as keyof ItemMetadata] || (metadata as any)[i];\r\n          colspan = columnData?.colspan ?? 1;\r\n          if (colspan === '*') {\r\n            colspan = ii - i;\r\n          }\r\n        }\r\n\r\n        const colspanNb = colspan as number; // at this point colspan is for sure a number\r\n        if (this.columnPosRight[Math.min(ii - 1, i + colspanNb - 1)] > range.leftPx) {\r\n          this.appendCellHtml(divRow, row, i, colspanNb, d);\r\n          cellsAdded++;\r\n        }\r\n\r\n        i += (colspanNb > 1 ? colspanNb - 1 : 0);\r\n      }\r\n\r\n      if (cellsAdded) {\r\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n        totalCellsAdded += cellsAdded;\r\n        processedRows.push(row);\r\n      }\r\n    }\r\n    if (!divRow.children.length) {\r\n      return;\r\n    }\r\n\r\n    let processedRow: number | null | undefined;\r\n    let node: HTMLElement;\r\n    while (Utils.isDefined(processedRow = processedRows.pop())) {\r\n      cacheEntry = this.rowsCache[processedRow];\r\n      let columnIdx;\r\n      while (Utils.isDefined(columnIdx = cacheEntry.cellRenderQueue.pop())) {\r\n        node = divRow.lastChild as HTMLElement;\r\n\r\n        //no idea why node would be null here but apparently it is..\r\n        if (!node) {\r\n          continue;\r\n        }\r\n        if (this.hasFrozenColumns() && (columnIdx > this._options.frozenColumn!)) {\r\n          cacheEntry.rowNode![1].appendChild(node);\r\n        } else {\r\n          cacheEntry.rowNode![0].appendChild(node);\r\n        }\r\n        cacheEntry.cellNodesByColumnIdx![columnIdx] = node;\r\n      }\r\n    }\r\n  }\r\n\r\n  protected renderRows(range: { top: number; bottom: number; leftPx: number; rightPx: number; }) {\r\n    const divArrayL: HTMLElement[] = [];\r\n    const divArrayR: HTMLElement[] = [];\r\n    const rows: number[] = [];\r\n    let needToReselectCell = false;\r\n    const dataLength = this.getDataLength();\r\n\r\n    for (let i = range.top as number, ii = range.bottom as number; i <= ii; i++) {\r\n      if (this.rowsCache[i] || (this.hasFrozenRows && this._options.frozenBottom && i === this.getDataLength())) {\r\n        continue;\r\n      }\r\n      this.renderedRows++;\r\n      rows.push(i);\r\n\r\n      // Create an entry right away so that appendRowHtml() can\r\n      // start populating it.\r\n      this.rowsCache[i] = {\r\n        rowNode: null,\r\n\r\n        // ColSpans of rendered cells (by column idx).\r\n        // Can also be used for checking whether a cell has been rendered.\r\n        cellColSpans: [],\r\n\r\n        // Cell nodes (by column idx).  Lazy-populated by ensureCellNodesInRowsCache().\r\n        cellNodesByColumnIdx: [],\r\n\r\n        // Column indices of cell nodes that have been rendered, but not yet indexed in\r\n        // cellNodesByColumnIdx.  These are in the same order as cell nodes added at the\r\n        // end of the row.\r\n        cellRenderQueue: []\r\n      };\r\n\r\n      this.appendRowHtml(divArrayL, divArrayR, i, range, dataLength);\r\n      if (this.activeCellNode && this.activeRow === i) {\r\n        needToReselectCell = true;\r\n      }\r\n      this.counter_rows_rendered++;\r\n    }\r\n\r\n    if (!rows.length) { return; }\r\n\r\n    const x = document.createElement('div');\r\n    const xRight = document.createElement('div');\r\n\r\n    divArrayL.forEach(elm => x.appendChild(elm as HTMLElement));\r\n    divArrayR.forEach(elm => xRight.appendChild(elm as HTMLElement));\r\n\r\n    for (let i = 0, ii = rows.length; i < ii; i++) {\r\n      if ((this.hasFrozenRows) && (rows[i] >= this.actualFrozenRow)) {\r\n        if (this.hasFrozenColumns()) {\r\n          if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild && xRight.firstChild) {\r\n            this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement, xRight.firstChild as HTMLElement];\r\n            this._canvasBottomL.appendChild(x.firstChild as ChildNode);\r\n            this._canvasBottomR.appendChild(xRight.firstChild as ChildNode);\r\n          }\r\n        } else {\r\n          if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild) {\r\n            this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement];\r\n            this._canvasBottomL.appendChild(x.firstChild as ChildNode);\r\n          }\r\n        }\r\n      } else if (this.hasFrozenColumns()) {\r\n        if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild && xRight.firstChild) {\r\n          this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement, xRight.firstChild as HTMLElement];\r\n          this._canvasTopL.appendChild(x.firstChild as ChildNode);\r\n          this._canvasTopR.appendChild(xRight.firstChild as ChildNode);\r\n        }\r\n      } else {\r\n        if (this.rowsCache?.hasOwnProperty(rows[i]) && x.firstChild) {\r\n          this.rowsCache[rows[i]].rowNode = [x.firstChild as HTMLElement];\r\n          this._canvasTopL.appendChild(x.firstChild as ChildNode);\r\n        }\r\n      }\r\n    }\r\n\r\n    if (needToReselectCell) {\r\n      this.activeCellNode = this.getCellNode(this.activeRow, this.activeCell);\r\n    }\r\n  }\r\n\r\n  protected startPostProcessing() {\r\n    if (!this._options.enableAsyncPostRender) {\r\n      return;\r\n    }\r\n    clearTimeout(this.h_postrender);\r\n    this.h_postrender = setTimeout(this.asyncPostProcessRows.bind(this), this._options.asyncPostRenderDelay);\r\n  }\r\n\r\n  protected startPostProcessingCleanup() {\r\n    if (!this._options.enableAsyncPostRenderCleanup) {\r\n      return;\r\n    }\r\n    clearTimeout(this.h_postrenderCleanup);\r\n    this.h_postrenderCleanup = setTimeout(this.asyncPostProcessCleanupRows.bind(this), this._options.asyncPostRenderCleanupDelay);\r\n  }\r\n\r\n  protected invalidatePostProcessingResults(row: number) {\r\n    // change status of columns to be re-rendered\r\n    if (typeof this.postProcessedRows[row] === 'object') {\r\n      Object.keys(this.postProcessedRows[row]).forEach(columnIdx => {\r\n        if (this.postProcessedRows[row].hasOwnProperty(columnIdx)) {\r\n          this.postProcessedRows[row][columnIdx] = 'C';\r\n        }\r\n      });\r\n    }\r\n    this.postProcessFromRow = Math.min(this.postProcessFromRow as number, row);\r\n    this.postProcessToRow = Math.max(this.postProcessToRow as number, row);\r\n    this.startPostProcessing();\r\n  }\r\n\r\n  protected updateRowPositions() {\r\n    for (const row in this.rowsCache) {\r\n      if (this.rowsCache) {\r\n        const rowNumber = row ? parseInt(row, 10) : 0;\r\n        Utils.setStyleSize(this.rowsCache[rowNumber].rowNode![0], 'top', this.getRowTop(rowNumber));\r\n      }\r\n    }\r\n  }\r\n\r\n  /** (re)Render the grid */\r\n  render() {\r\n    if (!this.initialized) { return; }\r\n\r\n    this.scrollThrottle.dequeue();\r\n\r\n    const visible = this.getVisibleRange();\r\n    const rendered = this.getRenderedRange();\r\n\r\n    // remove rows no longer in the viewport\r\n    this.cleanupRows(rendered);\r\n\r\n    // add new rows & missing cells in existing rows\r\n    if (this.lastRenderedScrollLeft !== this.scrollLeft) {\r\n      if (this.hasFrozenRows) {\r\n        const renderedFrozenRows = Utils.extend(true, {}, rendered);\r\n\r\n        if (this._options.frozenBottom) {\r\n          renderedFrozenRows.top = this.actualFrozenRow;\r\n          renderedFrozenRows.bottom = this.getDataLength();\r\n        } else {\r\n          renderedFrozenRows.top = 0;\r\n          renderedFrozenRows.bottom = this._options.frozenRow;\r\n        }\r\n        this.cleanUpAndRenderCells(renderedFrozenRows);\r\n      }\r\n      this.cleanUpAndRenderCells(rendered);\r\n    }\r\n\r\n    // render missing rows\r\n    this.renderRows(rendered);\r\n\r\n    // Render frozen rows\r\n    if (this.hasFrozenRows) {\r\n      if (this._options.frozenBottom) {\r\n        this.renderRows({\r\n          top: this.actualFrozenRow, bottom: this.getDataLength() - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n        });\r\n      } else {\r\n        this.renderRows({\r\n          top: 0, bottom: this._options.frozenRow! - 1, leftPx: rendered.leftPx, rightPx: rendered.rightPx\r\n        });\r\n      }\r\n    }\r\n\r\n    this.postProcessFromRow = visible.top;\r\n    this.postProcessToRow = Math.min(this.getDataLengthIncludingAddNew() - 1, visible.bottom);\r\n    this.startPostProcessing();\r\n\r\n    this.lastRenderedScrollTop = this.scrollTop;\r\n    this.lastRenderedScrollLeft = this.scrollLeft;\r\n    this.h_render = null;\r\n    this.trigger(this.onRendered, { startRow: visible.top, endRow: visible.bottom, grid: this });\r\n  }\r\n\r\n  protected handleHeaderRowScroll() {\r\n    const scrollLeft = this._headerRowScrollContainer.scrollLeft;\r\n    if (scrollLeft !== this._viewportScrollContainerX.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = scrollLeft;\r\n    }\r\n  }\r\n\r\n  protected handleFooterRowScroll() {\r\n    const scrollLeft = this._footerRowScrollContainer.scrollLeft;\r\n    if (scrollLeft !== this._viewportScrollContainerX.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = scrollLeft;\r\n    }\r\n  }\r\n\r\n  protected handlePreHeaderPanelScroll() {\r\n    this.handleElementScroll(this._preHeaderPanelScroller);\r\n  }\r\n\r\n  protected handleElementScroll(element: HTMLElement) {\r\n    const scrollLeft = element.scrollLeft;\r\n    if (scrollLeft !== this._viewportScrollContainerX.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = scrollLeft;\r\n    }\r\n  }\r\n\r\n  protected handleScroll() {\r\n    this.scrollTop = this._viewportScrollContainerY.scrollTop;\r\n    this.scrollLeft = this._viewportScrollContainerX.scrollLeft;\r\n    return this._handleScroll(false);\r\n  }\r\n\r\n  protected _handleScroll(isMouseWheel: boolean) {\r\n    let maxScrollDistanceY = this._viewportScrollContainerY.scrollHeight - this._viewportScrollContainerY.clientHeight;\r\n    let maxScrollDistanceX = this._viewportScrollContainerY.scrollWidth - this._viewportScrollContainerY.clientWidth;\r\n\r\n    // Protect against erroneous clientHeight/Width greater than scrollHeight/Width.\r\n    // Sometimes seen in Chrome.\r\n    maxScrollDistanceY = Math.max(0, maxScrollDistanceY);\r\n    maxScrollDistanceX = Math.max(0, maxScrollDistanceX);\r\n\r\n    // Ceiling the max scroll values\r\n    if (this.scrollTop > maxScrollDistanceY) {\r\n      this.scrollTop = maxScrollDistanceY;\r\n    }\r\n    if (this.scrollLeft > maxScrollDistanceX) {\r\n      this.scrollLeft = maxScrollDistanceX;\r\n    }\r\n\r\n    const vScrollDist = Math.abs(this.scrollTop - this.prevScrollTop);\r\n    const hScrollDist = Math.abs(this.scrollLeft - this.prevScrollLeft);\r\n\r\n    if (hScrollDist) {\r\n      this.prevScrollLeft = this.scrollLeft;\r\n\r\n      // adjust scroll position of all div containers when scrolling the grid\r\n      this._viewportScrollContainerX.scrollLeft = this.scrollLeft;\r\n      this._headerScrollContainer.scrollLeft = this.scrollLeft;\r\n      this._topPanelScrollers[0].scrollLeft = this.scrollLeft;\r\n      if (this._options.createFooterRow) {\r\n        this._footerRowScrollContainer.scrollLeft = this.scrollLeft;\r\n      }\r\n      if (this._options.createPreHeaderPanel) {\r\n        if (this.hasFrozenColumns()) {\r\n          this._preHeaderPanelScrollerR.scrollLeft = this.scrollLeft;\r\n        } else {\r\n          this._preHeaderPanelScroller.scrollLeft = this.scrollLeft;\r\n        }\r\n      }\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        if (this.hasFrozenRows) {\r\n          this._viewportTopR.scrollLeft = this.scrollLeft;\r\n        }\r\n        this._headerRowScrollerR.scrollLeft = this.scrollLeft; // right header row scrolling with frozen grid\r\n      } else {\r\n        if (this.hasFrozenRows) {\r\n          this._viewportTopL.scrollLeft = this.scrollLeft;\r\n        }\r\n        this._headerRowScrollerL.scrollLeft = this.scrollLeft; // left header row scrolling with regular grid\r\n      }\r\n    }\r\n\r\n    // autoheight suppresses vertical scrolling, but editors can create a div larger than\r\n    // the row vertical size, which can lead to a vertical scroll bar appearing temporarily\r\n    // while the editor is displayed. this is not part of the grid scrolling, so we should ignore it\r\n    if (vScrollDist && !this._options.autoHeight) {\r\n      this.vScrollDir = this.prevScrollTop < this.scrollTop ? 1 : -1;\r\n      this.prevScrollTop = this.scrollTop;\r\n\r\n      if (isMouseWheel) {\r\n        this._viewportScrollContainerY.scrollTop = this.scrollTop;\r\n      }\r\n\r\n      if (this.hasFrozenColumns()) {\r\n        if (this.hasFrozenRows && !this._options.frozenBottom) {\r\n          this._viewportBottomL.scrollTop = this.scrollTop;\r\n        } else {\r\n          this._viewportTopL.scrollTop = this.scrollTop;\r\n        }\r\n      }\r\n\r\n      // switch virtual pages if needed\r\n      if (vScrollDist < this.viewportH) {\r\n        this.scrollTo(this.scrollTop + this.offset);\r\n      } else {\r\n        const oldOffset = this.offset;\r\n        if (this.h === this.viewportH) {\r\n          this.page = 0;\r\n        } else {\r\n          this.page = Math.min(this.n - 1, Math.floor(this.scrollTop * ((this.th - this.viewportH) / (this.h - this.viewportH)) * (1 / this.ph)));\r\n        }\r\n        this.offset = Math.round(this.page * this.cj);\r\n        if (oldOffset !== this.offset) {\r\n          this.invalidateAllRows();\r\n        }\r\n      }\r\n    }\r\n\r\n    if (hScrollDist || vScrollDist) {\r\n      const dx = Math.abs(this.lastRenderedScrollLeft - this.scrollLeft);\r\n      const dy = Math.abs(this.lastRenderedScrollTop - this.scrollTop);\r\n      if (dx > 20 || dy > 20) {\r\n        // if rendering is forced or scrolling is small enough to be \"easy\", just render\r\n        if (this._options.forceSyncScrolling || (dy < this.viewportH && dx < this.viewportW)) {\r\n          this.render();\r\n        } else {\r\n          // otherwise, perform \"difficult\" renders at a capped frequency\r\n          this.scrollThrottle.enqueue();\r\n        }\r\n\r\n        this.trigger(this.onViewportChanged, {});\r\n      }\r\n    }\r\n\r\n    this.trigger(this.onScroll, { scrollLeft: this.scrollLeft, scrollTop: this.scrollTop });\r\n\r\n    if (hScrollDist || vScrollDist) { return true; }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * limits the frequency at which the provided action is executed.\r\n   * call enqueue to execute the action - it will execute either immediately or, if it was executed less than minPeriod_ms in the past, as soon as minPeriod_ms has expired.\r\n   * call dequeue to cancel any pending action.\r\n   */\r\n  protected actionThrottle(action: () => void, minPeriod_ms: number) {\r\n    let blocked = false;\r\n    let queued = false;\r\n\r\n    const enqueue = () => {\r\n      if (!blocked) {\r\n        blockAndExecute();\r\n      } else {\r\n        queued = true;\r\n      }\r\n    };\r\n\r\n    const dequeue = () => {\r\n      queued = false;\r\n    };\r\n\r\n    const blockAndExecute = () => {\r\n      blocked = true;\r\n      clearTimeout(this._executionBlockTimer);\r\n      this._executionBlockTimer = setTimeout(unblock, minPeriod_ms);\r\n      action.call(this);\r\n    };\r\n\r\n    const unblock = () => {\r\n      if (queued) {\r\n        dequeue();\r\n        blockAndExecute();\r\n      } else {\r\n        blocked = false;\r\n      }\r\n    };\r\n\r\n    return {\r\n      enqueue: enqueue.bind(this),\r\n      dequeue: dequeue.bind(this)\r\n    };\r\n  }\r\n\r\n  protected asyncPostProcessRows() {\r\n    const dataLength = this.getDataLength();\r\n    while (this.postProcessFromRow <= this.postProcessToRow) {\r\n      const row = (this.vScrollDir >= 0) ? this.postProcessFromRow++ : this.postProcessToRow--;\r\n      const cacheEntry = this.rowsCache[row];\r\n      if (!cacheEntry || row >= dataLength) {\r\n        continue;\r\n      }\r\n\r\n      if (!this.postProcessedRows[row]) {\r\n        this.postProcessedRows[row] = {};\r\n      }\r\n\r\n      this.ensureCellNodesInRowsCache(row);\r\n      Object.keys(cacheEntry.cellNodesByColumnIdx).forEach(colIdx => {\r\n        if (cacheEntry.cellNodesByColumnIdx.hasOwnProperty(colIdx)) {\r\n          const columnIdx = +colIdx;\r\n          const m = this.columns[columnIdx];\r\n          const processedStatus = this.postProcessedRows[row][columnIdx]; // C=cleanup and re-render, R=rendered\r\n          if (m.asyncPostRender && processedStatus !== 'R') {\r\n            const node = cacheEntry.cellNodesByColumnIdx[columnIdx];\r\n            if (node) {\r\n              m.asyncPostRender(node, row, this.getDataItem(row), m, (processedStatus === 'C'));\r\n            }\r\n            this.postProcessedRows[row][columnIdx] = 'R';\r\n          }\r\n        }\r\n      });\r\n\r\n      this.h_postrender = setTimeout(this.asyncPostProcessRows.bind(this), this._options.asyncPostRenderDelay);\r\n      return;\r\n    }\r\n  }\r\n\r\n  protected asyncPostProcessCleanupRows() {\r\n    if (this.postProcessedCleanupQueue.length > 0) {\r\n      const groupId = this.postProcessedCleanupQueue[0].groupId;\r\n\r\n      // loop through all queue members with this groupID\r\n      while (this.postProcessedCleanupQueue.length > 0 && this.postProcessedCleanupQueue[0].groupId === groupId) {\r\n        const entry = this.postProcessedCleanupQueue.shift();\r\n        if (entry?.actionType === 'R') {\r\n          (entry.node as HTMLElement[]).forEach((node) => {\r\n            node.remove();\r\n          });\r\n        }\r\n        if (entry?.actionType === 'C') {\r\n          const column = this.columns[entry.columnIdx as number];\r\n          if (column.asyncPostRenderCleanup && entry.node) {\r\n            // cleanup must also remove element\r\n            column.asyncPostRenderCleanup(entry.node as HTMLDivElement, entry.rowIdx as number, column);\r\n          }\r\n        }\r\n      }\r\n\r\n      // call this function again after the specified delay\r\n      this.h_postrenderCleanup = setTimeout(this.asyncPostProcessCleanupRows.bind(this), this._options.asyncPostRenderCleanupDelay);\r\n    }\r\n  }\r\n\r\n  protected updateCellCssStylesOnRenderedRows(addedHash?: CssStyleHash | null, removedHash?: CssStyleHash | null) {\r\n    let node: HTMLElement | null;\r\n    let addedRowHash: any;\r\n    let removedRowHash: any;\r\n    if (typeof this.rowsCache === 'object') {\r\n      Object.keys(this.rowsCache).forEach(row => {\r\n        if (this.rowsCache) {\r\n          removedRowHash = removedHash?.[row];\r\n          addedRowHash = addedHash?.[row];\r\n\r\n          if (removedRowHash) {\r\n            Object.keys(removedRowHash).forEach(columnId => {\r\n              if (!addedRowHash || removedRowHash[columnId] !== addedRowHash[columnId]) {\r\n                node = this.getCellNode(+row, this.getColumnIndex(columnId));\r\n                if (node) {\r\n                  node.classList.remove(removedRowHash[columnId]);\r\n                }\r\n              }\r\n            });\r\n          }\r\n\r\n          if (addedRowHash) {\r\n            Object.keys(addedRowHash).forEach(columnId => {\r\n              if (!removedRowHash || removedRowHash[columnId] !== addedRowHash[columnId]) {\r\n                node = this.getCellNode(+row, this.getColumnIndex(columnId));\r\n                if (node) {\r\n                  node.classList.add(addedRowHash[columnId]);\r\n                }\r\n              }\r\n            });\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adds an \"overlay\" of CSS classes to cell DOM elements. SlickGrid can have many such overlays associated with different keys and they are frequently used by plugins. For example, SlickGrid uses this method internally to decorate selected cells with selectedCellCssClass (see options).\r\n   * @param {String} key A unique key you can use in calls to setCellCssStyles and removeCellCssStyles. If a hash with that key has already been set, an exception will be thrown.\r\n   * @param {CssStyleHash} hash A hash of additional cell CSS classes keyed by row number and then by column id. Multiple CSS classes can be specified and separated by space.\r\n   * @example\r\n   * `{\r\n   * \t 0: { number_column: SlickEvent; title_column: SlickEvent;\t},\r\n   * \t 4: { percent_column: SlickEvent; }\r\n   * }`\r\n   */\r\n  addCellCssStyles(key: string, hash: CssStyleHash) {\r\n    if (this.cellCssClasses[key]) {\r\n      throw new Error(`SlickGrid addCellCssStyles: cell CSS hash with key \"${key}\" already exists.`);\r\n    }\r\n\r\n    this.cellCssClasses[key] = hash;\r\n    this.updateCellCssStylesOnRenderedRows(hash, null);\r\n    this.trigger(this.onCellCssStylesChanged, { key, hash, grid: this });\r\n  }\r\n\r\n  /**\r\n   * Removes an \"overlay\" of CSS classes from cell DOM elements. See setCellCssStyles for more.\r\n   * @param {String} key A string key.\r\n   */\r\n  removeCellCssStyles(key: string) {\r\n    if (!this.cellCssClasses[key]) {\r\n      return;\r\n    }\r\n\r\n    this.updateCellCssStylesOnRenderedRows(null, this.cellCssClasses[key]);\r\n    delete this.cellCssClasses[key];\r\n    this.trigger(this.onCellCssStylesChanged, { key, hash: null, grid: this });\r\n  }\r\n\r\n  /**\r\n   * Sets CSS classes to specific grid cells by calling removeCellCssStyles(key) followed by addCellCssStyles(key, hash). key is name for this set of styles so you can reference it later - to modify it or remove it, for example. hash is a per-row-index, per-column-name nested hash of CSS classes to apply.\r\n   * Suppose you have a grid with columns:\r\n   * [\"login\", \"name\", \"birthday\", \"age\", \"likes_icecream\", \"favorite_cake\"]\r\n   * ...and you'd like to highlight the \"birthday\" and \"age\" columns for people whose birthday is today, in this case, rows at index 0 and 9. (The first and tenth row in the grid).\r\n   * @param {String} key A string key. Will overwrite any data already associated with this key.\r\n   * @param {Object} hash A hash of additional cell CSS classes keyed by row number and then by column id. Multiple CSS classes can be specified and separated by space.\r\n   */\r\n  setCellCssStyles(key: string, hash: CssStyleHash) {\r\n    const prevHash = this.cellCssClasses[key];\r\n\r\n    this.cellCssClasses[key] = hash;\r\n    this.updateCellCssStylesOnRenderedRows(hash, prevHash);\r\n    this.trigger(this.onCellCssStylesChanged, { key, hash, grid: this });\r\n  }\r\n\r\n  /**\r\n   * Accepts a key name, returns the group of CSS styles defined under that name. See setCellCssStyles for more info.\r\n   * @param {String} key A string.\r\n   */\r\n  getCellCssStyles(key: string): CssStyleHash {\r\n    return this.cellCssClasses[key];\r\n  }\r\n\r\n  /**\r\n   * Flashes the cell twice by toggling the CSS class 4 times.\r\n   * @param {Number} row A row index.\r\n   * @param {Number} cell A column index.\r\n   * @param {Number} [speed] (optional) - The milliseconds delay between the toggling calls. Defaults to 250 ms.\r\n   */\r\n  flashCell(row: number, cell: number, speed = 250) {\r\n    const toggleCellClass = (cellNode: HTMLElement, times: number) => {\r\n      if (times < 1) {\r\n        return;\r\n      }\r\n\r\n      clearTimeout(this._flashCellTimer);\r\n      this._flashCellTimer = setTimeout(() => {\r\n        if (times % 2 === 0) {\r\n          cellNode.classList.add(this._options.cellFlashingCssClass || '');\r\n        } else {\r\n          cellNode.classList.remove(this._options.cellFlashingCssClass || '');\r\n        }\r\n        toggleCellClass(cellNode, times - 1);\r\n      }, speed);\r\n    };\r\n\r\n    if (this.rowsCache[row]) {\r\n      const cellNode = this.getCellNode(row, cell);\r\n      if (cellNode) {\r\n        toggleCellClass(cellNode, 5);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Highlight a row for a certain duration (ms) of time.\r\n   * @param {Number} row - grid row number\r\n   * @param {Number} [duration] - duration (ms), defaults to 400ms\r\n   */\r\n  highlightRow(row: number, duration?: number) {\r\n    const rowCache = this.rowsCache[row];\r\n    duration ||= this._options.rowHighlightDuration;\r\n\r\n    if (Array.isArray(rowCache?.rowNode) && this._options.rowHighlightCssClass) {\r\n      rowCache.rowNode.forEach(node => node.classList.add(...Utils.classNameToList(this._options.rowHighlightCssClass)));\r\n      clearTimeout(this._highlightRowTimer);\r\n      this._highlightRowTimer = setTimeout(() => {\r\n        rowCache.rowNode?.forEach(node => node.classList.remove(...Utils.classNameToList(this._options.rowHighlightCssClass)));\r\n      }, duration);\r\n    }\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Interactivity\r\n\r\n  protected handleMouseWheel(e: MouseEvent, _delta: number, deltaX: number, deltaY: number) {\r\n    this.scrollTop = Math.max(0, this._viewportScrollContainerY.scrollTop - (deltaY * this._options.rowHeight!));\r\n    this.scrollLeft = this._viewportScrollContainerX.scrollLeft + (deltaX * 10);\r\n    const handled = this._handleScroll(true);\r\n    if (handled) {\r\n      e.preventDefault();\r\n    }\r\n  }\r\n\r\n  protected handleDragInit(e: DragEvent, dd: DragPosition) {\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || !this.cellExists(cell.row, cell.cell)) {\r\n      return false;\r\n    }\r\n\r\n    const retval = this.trigger(this.onDragInit, dd, e);\r\n    if (retval.isImmediatePropagationStopped()) {\r\n      return retval.getReturnValue();\r\n    }\r\n\r\n    // if nobody claims to be handling drag'n'drop by stopping immediate propagation,\r\n    // cancel out of it\r\n    return false;\r\n  }\r\n\r\n  protected handleDragStart(e: DragEvent, dd: DragPosition) {\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || !this.cellExists(cell.row, cell.cell)) {\r\n      return false;\r\n    }\r\n\r\n    const retval = this.trigger(this.onDragStart, dd, e);\r\n    if (retval.isImmediatePropagationStopped()) {\r\n      return retval.getReturnValue();\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  protected handleDrag(e: DragEvent, dd: DragPosition) {\r\n    return this.trigger(this.onDrag, dd, e).getReturnValue();\r\n  }\r\n\r\n  protected handleDragEnd(e: DragEvent, dd: DragPosition) {\r\n    this.trigger(this.onDragEnd, dd, e);\r\n  }\r\n\r\n  protected handleKeyDown(e: KeyboardEvent & { originalEvent: Event; }) {\r\n    const retval = this.trigger(this.onKeyDown, { row: this.activeRow, cell: this.activeCell }, e);\r\n    let handled: boolean | undefined | void = retval.isImmediatePropagationStopped();\r\n\r\n    if (!handled) {\r\n      if (!e.shiftKey && !e.altKey) {\r\n        if (this._options.editable && this.currentEditor?.keyCaptureList) {\r\n          if (this.currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n            return;\r\n          }\r\n        }\r\n        if (e.which === keyCode.HOME) {\r\n          handled = (e.ctrlKey) ? this.navigateTop() : this.navigateRowStart();\r\n        } else if (e.which === keyCode.END) {\r\n          handled = (e.ctrlKey) ? this.navigateBottom() : this.navigateRowEnd();\r\n        }\r\n      }\r\n    }\r\n    if (!handled) {\r\n      if (!e.shiftKey && !e.altKey && !e.ctrlKey) {\r\n        // editor may specify an array of keys to bubble\r\n        if (this._options.editable && this.currentEditor?.keyCaptureList) {\r\n          if (this.currentEditor.keyCaptureList.indexOf(e.which) > -1) {\r\n            return;\r\n          }\r\n        }\r\n        if (e.which === keyCode.ESCAPE) {\r\n          if (!this.getEditorLock()?.isActive()) {\r\n            return; // no editing mode to cancel, allow bubbling and default processing (exit without cancelling the event)\r\n          }\r\n          this.cancelEditAndSetFocus();\r\n        } else if (e.which === keyCode.PAGE_DOWN) {\r\n          this.navigatePageDown();\r\n          handled = true;\r\n        } else if (e.which === keyCode.PAGE_UP) {\r\n          this.navigatePageUp();\r\n          handled = true;\r\n        } else if (e.which === keyCode.LEFT) {\r\n          handled = this.navigateLeft();\r\n        } else if (e.which === keyCode.RIGHT) {\r\n          handled = this.navigateRight();\r\n        } else if (e.which === keyCode.UP) {\r\n          handled = this.navigateUp();\r\n        } else if (e.which === keyCode.DOWN) {\r\n          handled = this.navigateDown();\r\n        } else if (e.which === keyCode.TAB) {\r\n          handled = this.navigateNext();\r\n        } else if (e.which === keyCode.ENTER) {\r\n          if (this._options.editable) {\r\n            if (this.currentEditor) {\r\n              // adding new row\r\n              if (this.activeRow === this.getDataLength()) {\r\n                this.navigateDown();\r\n              } else {\r\n                this.commitEditAndSetFocus();\r\n              }\r\n            } else {\r\n              if (this.getEditorLock()?.commitCurrentEdit()) {\r\n                this.makeActiveCellEditable(undefined, undefined, e);\r\n              }\r\n            }\r\n          }\r\n          handled = true;\r\n        }\r\n      } else if (e.which === keyCode.TAB && e.shiftKey && !e.ctrlKey && !e.altKey) {\r\n        handled = this.navigatePrev();\r\n      }\r\n    }\r\n\r\n    if (handled) {\r\n      // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it\r\n      e.stopPropagation();\r\n      e.preventDefault();\r\n      try {\r\n        (e as any).originalEvent.keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.)\r\n      }\r\n      // ignore exceptions - setting the original event's keycode throws access denied exception for \"Ctrl\"\r\n      // (hitting control key only, nothing else), \"Shift\" (maybe others)\r\n      // eslint-disable-next-line no-empty\r\n      catch (error) { }\r\n    }\r\n  }\r\n\r\n  protected handleClick(evt: DOMEvent<HTMLDivElement> | SlickEventData_) {\r\n    const e = evt instanceof SlickEventData ? evt.getNativeEvent() : evt;\r\n\r\n    if (!this.currentEditor) {\r\n      // if this click resulted in some cell child node getting focus,\r\n      // don't steal it back - keyboard events will still bubble up\r\n      // IE9+ seems to default DIVs to tabIndex=0 instead of -1, so check for cell clicks directly.\r\n      if ((e as DOMEvent<HTMLDivElement>).target !== document.activeElement || (e as DOMEvent<HTMLDivElement>).target.classList.contains('slick-cell')) {\r\n        const selection = this.getTextSelection(); // store text-selection and restore it after\r\n        this.setFocus();\r\n        this.setTextSelection(selection as Range);\r\n      }\r\n    }\r\n\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || (this.currentEditor !== null && this.activeRow === cell.row && this.activeCell === cell.cell)) {\r\n      return;\r\n    }\r\n\r\n    evt = this.trigger(this.onClick, { row: cell.row, cell: cell.cell }, evt || e);\r\n    if ((evt as any).isImmediatePropagationStopped()) {\r\n      return;\r\n    }\r\n\r\n    // this optimisation causes trouble - MLeibman #329\r\n    // if ((activeCell !== cell.cell || activeRow !== cell.row) && canCellBeActive(cell.row, cell.cell)) {\r\n    if (this.canCellBeActive(cell.row, cell.cell)) {\r\n      if (!this.getEditorLock()?.isActive() || this.getEditorLock()?.commitCurrentEdit()) {\r\n        this.scrollRowIntoView(cell.row, false);\r\n\r\n        const preClickModeOn = ((e as DOMEvent<HTMLDivElement>).target?.className === preClickClassName);\r\n        const column = this.columns[cell.cell];\r\n        const suppressActiveCellChangedEvent = !!(this._options.editable && column?.editor && this._options.suppressActiveCellChangeOnEdit);\r\n        this.setActiveCellInternal(this.getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, (e as DOMEvent<HTMLDivElement>));\r\n      }\r\n    }\r\n  }\r\n\r\n  protected handleContextMenu(e: Event & { target: HTMLElement; }) {\r\n    const cell = e.target.closest('.slick-cell');\r\n    if (!cell) {\r\n      return;\r\n    }\r\n\r\n    // are we editing this cell?\r\n    if (this.activeCellNode === cell && this.currentEditor !== null) {\r\n      return;\r\n    }\r\n\r\n    this.trigger(this.onContextMenu, {}, e);\r\n  }\r\n\r\n  protected handleDblClick(e: MouseEvent) {\r\n    const cell = this.getCellFromEvent(e);\r\n    if (!cell || (this.currentEditor !== null && this.activeRow === cell.row && this.activeCell === cell.cell)) {\r\n      return;\r\n    }\r\n\r\n    this.trigger(this.onDblClick, { row: cell.row, cell: cell.cell }, e);\r\n    if (e.defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this._options.editable) {\r\n      this.gotoCell(cell.row, cell.cell, true, e);\r\n    }\r\n  }\r\n\r\n  protected handleHeaderMouseEnter(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-header-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderMouseEnter, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderMouseLeave(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-header-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderMouseLeave, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderRowMouseEnter(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-headerrow-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderRowMouseEnter, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderRowMouseLeave(e: MouseEvent & { target: HTMLElement; }) {\r\n    const c = Utils.storage.get(e.target.closest('.slick-headerrow-column'), 'column');\r\n    if (!c) {\r\n      return;\r\n    }\r\n    this.trigger(this.onHeaderRowMouseLeave, {\r\n      column: c,\r\n      grid: this\r\n    }, e);\r\n  }\r\n\r\n  protected handleHeaderContextMenu(e: MouseEvent & { target: HTMLElement; }) {\r\n    const header = e.target.closest('.slick-header-column');\r\n    const column = header && Utils.storage.get(header, 'column');\r\n    this.trigger(this.onHeaderContextMenu, { column }, e);\r\n  }\r\n\r\n  protected handleHeaderClick(e: MouseEvent & { target: HTMLElement; }) {\r\n    if (this.columnResizeDragging) {\r\n      return;\r\n    }\r\n\r\n    const header = e.target.closest('.slick-header-column');\r\n    const column = header && Utils.storage.get(header, 'column');\r\n    if (column) {\r\n      this.trigger(this.onHeaderClick, { column }, e);\r\n    }\r\n  }\r\n\r\n  protected handleFooterContextMenu(e: MouseEvent & { target: HTMLElement; }) {\r\n    const footer = e.target.closest('.slick-footerrow-column');\r\n    const column = footer && Utils.storage.get(footer, 'column');\r\n    this.trigger(this.onFooterContextMenu, { column }, e);\r\n  }\r\n\r\n  protected handleFooterClick(e: MouseEvent & { target: HTMLElement; }) {\r\n    const footer = e.target.closest('.slick-footerrow-column');\r\n    const column = footer && Utils.storage.get(footer, 'column');\r\n    this.trigger(this.onFooterClick, { column }, e);\r\n  }\r\n\r\n  protected handleCellMouseOver(e: MouseEvent & { target: HTMLElement; }) {\r\n    this.trigger(this.onMouseEnter, {}, e);\r\n  }\r\n\r\n  protected handleCellMouseOut(e: MouseEvent & { target: HTMLElement; }) {\r\n    this.trigger(this.onMouseLeave, {}, e);\r\n  }\r\n\r\n  protected cellExists(row: number, cell: number) {\r\n    return !(row < 0 || row >= this.getDataLength() || cell < 0 || cell >= this.columns.length);\r\n  }\r\n\r\n  /**\r\n   * Returns row and cell indexes by providing x,y coordinates.\r\n   * Coordinates are relative to the top left corner of the grid beginning with the first row (not including the column headers).\r\n   * @param x An x coordinate.\r\n   * @param y A y coordinate.\r\n   */\r\n  getCellFromPoint(x: number, y: number) {\r\n    let row = this.getRowFromPosition(y);\r\n    let cell = 0;\r\n\r\n    let w = 0;\r\n    for (let i = 0; i < this.columns.length && w <= x; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) {\r\n        continue;\r\n      }\r\n      w += this.columns[i].width as number;\r\n      cell++;\r\n    }\r\n    cell -= 1;\r\n\r\n    // we'll return -1 when coordinate falls outside the grid canvas\r\n    if (row < -1) {\r\n      row = -1;\r\n    }\r\n\r\n    return { row, cell };\r\n  }\r\n\r\n  protected getCellFromNode(cellNode: HTMLElement) {\r\n    // read column number from .l<columnNumber> CSS class\r\n    const cls = /l\\d+/.exec(cellNode.className);\r\n    if (!cls) {\r\n      throw new Error(`SlickGrid getCellFromNode: cannot get cell - ${cellNode.className}`);\r\n    }\r\n    return parseInt(cls[0].substr(1, cls[0].length - 1), 10);\r\n  }\r\n\r\n  protected getRowFromNode(rowNode: HTMLElement): number | null {\r\n    for (const row in this.rowsCache) {\r\n      if (this.rowsCache) {\r\n        for (const i in this.rowsCache[row].rowNode) {\r\n          if (this.rowsCache[row].rowNode?.[+i] === rowNode) {\r\n            return (row ? parseInt(row, 10) : 0);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Get frozen (pinned) row offset\r\n   * @param {Number} row - grid row number\r\n   */\r\n  getFrozenRowOffset(row: number) {\r\n    // let offset = ( hasFrozenRows ) ? ( this._options.frozenBottom ) ? ( row >= actualFrozenRow ) ? ( h < viewportTopH ) ? ( actualFrozenRow * this._options.rowHeight ) : h : 0 : ( row >= actualFrozenRow ) ? frozenRowsHeight : 0 : 0; // WTF?\r\n    let offset = 0;\r\n    if (this.hasFrozenRows) {\r\n      if (this._options.frozenBottom) {\r\n        if (row >= this.actualFrozenRow) {\r\n          if (this.h < this.viewportTopH) {\r\n            offset = (this.actualFrozenRow * this._options.rowHeight!);\r\n          } else {\r\n            offset = this.h;\r\n          }\r\n        } else {\r\n          offset = 0;\r\n        }\r\n      }\r\n      else {\r\n        if (row >= this.actualFrozenRow) {\r\n          offset = this.frozenRowsHeight;\r\n        } else {\r\n          offset = 0;\r\n        }\r\n      }\r\n    } else {\r\n      offset = 0;\r\n    }\r\n\r\n    return offset;\r\n  }\r\n\r\n  /**\r\n   * Returns a hash containing row and cell indexes from a standard W3C event.\r\n   * @param {*} event A standard W3C event.\r\n   */\r\n  getCellFromEvent(evt: Event | SlickEventData_) {\r\n    const e = evt instanceof SlickEventData ? evt.getNativeEvent() : evt;\r\n    const targetEvent: any = (e as TouchEvent).touches ? (e as TouchEvent).touches[0] : e;\r\n\r\n    const cellNode = (e as Event & { target: HTMLElement }).target.closest('.slick-cell');\r\n    if (!cellNode) {\r\n      return null;\r\n    }\r\n\r\n    let row = this.getRowFromNode(cellNode.parentNode as HTMLElement);\r\n\r\n    if (this.hasFrozenRows) {\r\n      let rowOffset = 0;\r\n      const c = Utils.offset(Utils.parents(cellNode, '.grid-canvas')[0] as HTMLElement);\r\n      const isBottom = Utils.parents(cellNode, '.grid-canvas-bottom').length;\r\n\r\n      if (isBottom) {\r\n        rowOffset = (this._options.frozenBottom) ? Utils.height(this._canvasTopL) as number : this.frozenRowsHeight;\r\n      }\r\n\r\n      row = this.getCellFromPoint(targetEvent.clientX - c!.left, targetEvent.clientY - c!.top + rowOffset + document.documentElement.scrollTop).row;\r\n    }\r\n\r\n    const cell = this.getCellFromNode(cellNode as HTMLElement);\r\n\r\n    if (!Utils.isDefined(row) || !Utils.isDefined(cell)) {\r\n      return null;\r\n    } else {\r\n      return { row, cell };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns an object representing information about a cell's position. All coordinates are absolute and take into consideration the visibility and scrolling position of all ancestors.\r\n   * @param {Number} row - A row number.\r\n   * @param {Number} cell - A column number.\r\n   */\r\n  getCellNodeBox(row: number, cell: number) {\r\n    if (!this.cellExists(row, cell)) {\r\n      return null;\r\n    }\r\n\r\n    const frozenRowOffset = this.getFrozenRowOffset(row);\r\n\r\n    const y1 = this.getRowTop(row) - frozenRowOffset;\r\n    const y2 = y1 + this._options.rowHeight! - 1;\r\n    let x1 = 0;\r\n    for (let i = 0; i < cell; i++) {\r\n      if (!this.columns[i] || this.columns[i].hidden) { continue; }\r\n\r\n      x1 += (this.columns[i].width || 0);\r\n\r\n      if (this._options.frozenColumn === i) {\r\n        x1 = 0;\r\n      }\r\n    }\r\n    const x2 = x1 + (this.columns[cell]?.width || 0);\r\n\r\n    return {\r\n      top: y1,\r\n      left: x1,\r\n      bottom: y2,\r\n      right: x2\r\n    };\r\n  }\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // Cell switching\r\n\r\n  /**  Resets active cell. */\r\n  resetActiveCell() {\r\n    this.setActiveCellInternal(null, false);\r\n  }\r\n\r\n  /** @alias `setFocus` */\r\n  focus() {\r\n    this.setFocus();\r\n  }\r\n\r\n  protected setFocus() {\r\n    if (this.tabbingDirection === -1) {\r\n      this._focusSink.focus();\r\n    } else {\r\n      this._focusSink2.focus();\r\n    }\r\n  }\r\n\r\n  /** Scroll to a specific cell and make it into the view */\r\n  scrollCellIntoView(row: number, cell: number, doPaging?: boolean) {\r\n    this.scrollRowIntoView(row, doPaging);\r\n\r\n    if (cell <= this._options.frozenColumn!) {\r\n      return;\r\n    }\r\n\r\n    const colspan = this.getColspan(row, cell);\r\n    this.internalScrollColumnIntoView(this.columnPosLeft[cell], this.columnPosRight[cell + (colspan > 1 ? colspan - 1 : 0)]);\r\n  }\r\n\r\n  protected internalScrollColumnIntoView(left: number, right: number) {\r\n    const scrollRight = this.scrollLeft + (Utils.width(this._viewportScrollContainerX) as number) - (this.viewportHasVScroll ? (this.scrollbarDimensions?.width ?? 0) : 0);\r\n\r\n    if (left < this.scrollLeft) {\r\n      this._viewportScrollContainerX.scrollLeft = left;\r\n      this.handleScroll();\r\n      this.render();\r\n    } else if (right > scrollRight) {\r\n      this._viewportScrollContainerX.scrollLeft = Math.min(left, right - this._viewportScrollContainerX.clientWidth);\r\n      this.handleScroll();\r\n      this.render();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Scroll to a specific column and show it into the viewport\r\n   * @param {Number} cell - cell column number\r\n   */\r\n  scrollColumnIntoView(cell: number) {\r\n    this.internalScrollColumnIntoView(this.columnPosLeft[cell], this.columnPosRight[cell]);\r\n  }\r\n\r\n  protected setActiveCellInternal(newCell: HTMLDivElement | null, opt_editMode?: boolean | null, preClickModeOn?: boolean | null, suppressActiveCellChangedEvent?: boolean, e?: Event | SlickEvent_) {\r\n    if (Utils.isDefined(this.activeCellNode)) {\r\n      this.makeActiveCellNormal();\r\n      this.activeCellNode.classList.remove('active');\r\n      this.rowsCache[this.activeRow]?.rowNode?.forEach((node) => node.classList.remove('active'));\r\n    }\r\n\r\n    // let activeCellChanged = (this.activeCellNode !== newCell);\r\n    this.activeCellNode = newCell;\r\n\r\n    if (Utils.isDefined(this.activeCellNode)) {\r\n      const activeCellOffset = Utils.offset(this.activeCellNode);\r\n      let rowOffset = Math.floor(Utils.offset(Utils.parents(this.activeCellNode, '.grid-canvas')[0] as HTMLElement)!.top);\r\n      const isBottom = Utils.parents(this.activeCellNode, '.grid-canvas-bottom').length;\r\n\r\n      if (this.hasFrozenRows && isBottom) {\r\n        rowOffset -= (this._options.frozenBottom)\r\n          ? Utils.height(this._canvasTopL) as number\r\n          : this.frozenRowsHeight;\r\n      }\r\n\r\n      const cell = this.getCellFromPoint(activeCellOffset!.left, Math.ceil(activeCellOffset!.top) - rowOffset);\r\n      this.activeRow = cell.row;\r\n      this.activeCell = this.activePosX = this.activeCell = this.activePosX = this.getCellFromNode(this.activeCellNode);\r\n\r\n      if (!Utils.isDefined(opt_editMode) && this._options.autoEditNewRow) {\r\n        opt_editMode = (this.activeRow === this.getDataLength()) || this._options.autoEdit;\r\n      }\r\n\r\n      if (this._options.showCellSelection) {\r\n        this.activeCellNode.classList.add('active');\r\n        this.rowsCache[this.activeRow]?.rowNode?.forEach((node) => node.classList.add('active'));\r\n      }\r\n\r\n      if (this._options.editable && opt_editMode && this.isCellPotentiallyEditable(this.activeRow, this.activeCell)) {\r\n        clearTimeout(this.h_editorLoader);\r\n\r\n        if (this._options.asyncEditorLoading) {\r\n          this.h_editorLoader = setTimeout(() => {\r\n            this.makeActiveCellEditable(undefined, preClickModeOn, e);\r\n          }, this._options.asyncEditorLoadDelay);\r\n        } else {\r\n          this.makeActiveCellEditable(undefined, preClickModeOn, e);\r\n        }\r\n      }\r\n    } else {\r\n      this.activeRow = this.activeCell = null as any;\r\n    }\r\n\r\n    // this optimisation causes trouble - MLeibman #329\r\n    // if (activeCellChanged) {\r\n    if (!suppressActiveCellChangedEvent) {\r\n      this.trigger<OnActiveCellChangedEventArgs | null>(this.onActiveCellChanged, this.getActiveCell() as OnActiveCellChangedEventArgs);\r\n    }\r\n    // }\r\n  }\r\n\r\n  protected clearTextSelection() {\r\n    if ((document as any).selection?.empty) {\r\n      try {\r\n        // IE fails here if selected element is not in dom\r\n        (document as any).selection.empty();\r\n        // eslint-disable-next-line no-empty\r\n      } catch (e) { }\r\n    } else if (window.getSelection) {\r\n      const sel = window.getSelection();\r\n      if (sel?.removeAllRanges) {\r\n        sel.removeAllRanges();\r\n      }\r\n    }\r\n  }\r\n\r\n  protected isCellPotentiallyEditable(row: number, cell: number) {\r\n    const dataLength = this.getDataLength();\r\n    // is the data for this row loaded?\r\n    if (row < dataLength && !this.getDataItem(row)) {\r\n      return false;\r\n    }\r\n\r\n    // are we in the Add New row? Can we create new from this cell?\r\n    if (this.columns[cell].cannotTriggerInsert && row >= dataLength) {\r\n      return false;\r\n    }\r\n\r\n    // does this cell have an editor?\r\n    if (!this.columns[cell] || this.columns[cell].hidden || !this.getEditor(row, cell)) {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Make the cell normal again (for example after destroying cell editor),\r\n   * we can also optionally refocus on the current active cell (again possibly after closing cell editor)\r\n   * @param {Boolean} [refocusActiveCell]\r\n   */\r\n  protected makeActiveCellNormal(refocusActiveCell = false) {\r\n    if (!this.currentEditor) {\r\n      return;\r\n    }\r\n    this.trigger(this.onBeforeCellEditorDestroy, { editor: this.currentEditor });\r\n    this.currentEditor.destroy();\r\n    this.currentEditor = null;\r\n\r\n    if (this.activeCellNode) {\r\n      const d = this.getDataItem(this.activeRow);\r\n      this.activeCellNode.classList.remove('editable');\r\n      this.activeCellNode.classList.remove('invalid');\r\n      if (d) {\r\n        const column = this.columns[this.activeCell];\r\n        const formatter = this.getFormatter(this.activeRow, column);\r\n        const formatterResult = formatter(this.activeRow, this.activeCell, this.getDataItemValueForColumn(d, column), column, d, this as unknown as SlickGridModel);\r\n        this.applyFormatResultToCellNode(formatterResult, this.activeCellNode);\r\n        this.invalidatePostProcessingResults(this.activeRow);\r\n      }\r\n      if (refocusActiveCell) {\r\n        this.setFocus();\r\n      }\r\n    }\r\n\r\n    // if there previously was text selected on a page (such as selected text in the edit cell just removed),\r\n    // IE can't set focus to anything else correctly\r\n    if (navigator.userAgent.toLowerCase().match(/msie/)) {\r\n      this.clearTextSelection();\r\n    }\r\n\r\n    this.getEditorLock()?.deactivate(this.editController as EditController);\r\n  }\r\n\r\n\r\n  editActiveCell(editor: EditorConstructor, preClickModeOn?: boolean | null, e?: Event) {\r\n    this.makeActiveCellEditable(editor, preClickModeOn, e);\r\n  }\r\n\r\n  protected makeActiveCellEditable(editor?: EditorConstructor, preClickModeOn?: boolean | null, e?: Event | SlickEvent_) {\r\n    if (!this.activeCellNode) {\r\n      return;\r\n    }\r\n    if (!this._options.editable) {\r\n      throw new Error('SlickGrid makeActiveCellEditable : should never get called when this._options.editable is false');\r\n    }\r\n\r\n    // cancel pending async call if there is one\r\n    clearTimeout(this.h_editorLoader);\r\n\r\n    if (!this.isCellPotentiallyEditable(this.activeRow, this.activeCell)) {\r\n      return;\r\n    }\r\n\r\n    const columnDef = this.columns[this.activeCell];\r\n    const item = this.getDataItem(this.activeRow);\r\n\r\n    if (this.trigger(this.onBeforeEditCell, { row: this.activeRow, cell: this.activeCell, item, column: columnDef, target: 'grid' }).getReturnValue() === false) {\r\n      this.setFocus();\r\n      return;\r\n    }\r\n\r\n    this.getEditorLock()?.activate(this.editController as EditController);\r\n    this.activeCellNode.classList.add('editable');\r\n\r\n    const useEditor = editor || this.getEditor(this.activeRow, this.activeCell);\r\n    // editor was null and columnMetadata and editorFactory returned null or undefined\r\n    // the editor must be constructable. Also makes sure that useEditor is of type EditorConstructor\r\n    if (!useEditor || typeof useEditor !== 'function') {\r\n      return;\r\n    }\r\n\r\n    // don't clear the cell if a custom editor is passed through\r\n    if (!editor && !useEditor.suppressClearOnEdit) {\r\n      Utils.emptyElement(this.activeCellNode);\r\n    }\r\n\r\n    let metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(this.activeRow);\r\n    metadata = metadata?.columns as any;\r\n    const columnMetaData = metadata && (metadata[columnDef.id as keyof ItemMetadata] || (metadata as any)[this.activeCell]);\r\n\r\n\r\n    const editorArgs: EditorArguments<TData, C, O> = {\r\n      grid: this,\r\n      gridPosition: this.absBox(this._container),\r\n      position: this.absBox(this.activeCellNode),\r\n      container: this.activeCellNode,\r\n      column: columnDef,\r\n      columnMetaData,\r\n      item: item || {},\r\n      event: e as Event,\r\n      commitChanges: this.commitEditAndSetFocus.bind(this),\r\n      cancelChanges: this.cancelEditAndSetFocus.bind(this)\r\n    };\r\n\r\n    this.currentEditor = new useEditor(editorArgs);\r\n\r\n    if (item && this.currentEditor) {\r\n      this.currentEditor.loadValue(item);\r\n      if (preClickModeOn && this.currentEditor?.preClick) {\r\n        this.currentEditor.preClick();\r\n      }\r\n    }\r\n\r\n    this.serializedEditorValue = this.currentEditor?.serializeValue();\r\n\r\n    if (this.currentEditor?.position) {\r\n      this.handleActiveCellPositionChange();\r\n    }\r\n  }\r\n\r\n  protected commitEditAndSetFocus() {\r\n    // if the commit fails, it would do so due to a validation error\r\n    // if so, do not steal the focus from the editor\r\n    if (this.getEditorLock()?.commitCurrentEdit()) {\r\n      this.setFocus();\r\n      if (this._options.autoEdit && !this._options.autoCommitEdit) {\r\n        this.navigateDown();\r\n      }\r\n    }\r\n  }\r\n\r\n  protected cancelEditAndSetFocus() {\r\n    if (this.getEditorLock()?.cancelCurrentEdit()) {\r\n      this.setFocus();\r\n    }\r\n  }\r\n\r\n  protected absBox(elem: HTMLElement) {\r\n    const box = {\r\n      top: elem.offsetTop,\r\n      left: elem.offsetLeft,\r\n      bottom: 0,\r\n      right: 0,\r\n      width: elem.offsetWidth,\r\n      height: elem.offsetWidth,\r\n      visible: true\r\n    };\r\n    box.bottom = box.top + box.height;\r\n    box.right = box.left + box.width;\r\n\r\n    // walk up the tree\r\n    let offsetParent = elem.offsetParent;\r\n    while ((elem = elem.parentNode as HTMLElement) !== document.body) {\r\n      if (!elem || !elem.parentNode) {\r\n        break;\r\n      }\r\n\r\n      const styles = getComputedStyle(elem);\r\n      if (box.visible && elem.scrollHeight !== elem.offsetHeight && styles['overflowY'] !== 'visible') {\r\n        box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight;\r\n      }\r\n\r\n      if (box.visible && elem.scrollWidth !== elem.offsetWidth && styles['overflowX'] !== 'visible') {\r\n        box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth;\r\n      }\r\n\r\n      box.left -= elem.scrollLeft;\r\n      box.top -= elem.scrollTop;\r\n\r\n      if (elem === offsetParent) {\r\n        box.left += elem.offsetLeft;\r\n        box.top += elem.offsetTop;\r\n        offsetParent = elem.offsetParent;\r\n      }\r\n\r\n      box.bottom = box.top + box.height;\r\n      box.right = box.left + box.width;\r\n    }\r\n\r\n    return box;\r\n  }\r\n\r\n  /** Returns an object representing information about the active cell's position. All coordinates are absolute and take into consideration the visibility and scrolling position of all ancestors. */\r\n  getActiveCellPosition() {\r\n    return this.absBox(this.activeCellNode as HTMLElement);\r\n  }\r\n\r\n  /** Get the Grid Position */\r\n  getGridPosition() {\r\n    return this.absBox(this._container);\r\n  }\r\n\r\n  protected handleActiveCellPositionChange() {\r\n    if (!this.activeCellNode) {\r\n      return;\r\n    }\r\n\r\n    this.trigger(this.onActiveCellPositionChanged, {});\r\n\r\n    if (this.currentEditor) {\r\n      const cellBox = this.getActiveCellPosition();\r\n      if (this.currentEditor.show && this.currentEditor.hide) {\r\n        if (!cellBox.visible) {\r\n          this.currentEditor.hide();\r\n        } else {\r\n          this.currentEditor.show();\r\n        }\r\n      }\r\n\r\n      if (this.currentEditor.position) {\r\n        this.currentEditor.position(cellBox);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Returns the active cell editor. If there is no actively edited cell, null is returned.   */\r\n  getCellEditor() {\r\n    return this.currentEditor;\r\n  }\r\n\r\n  /**\r\n   * Returns an object representing the coordinates of the currently active cell:\r\n   * @example\t`{ row: activeRow, cell: activeCell }`\r\n   */\r\n  getActiveCell() {\r\n    if (!this.activeCellNode) {\r\n      return null;\r\n    }\r\n    return { row: this.activeRow, cell: this.activeCell };\r\n  }\r\n\r\n  /** Returns the DOM element containing the currently active cell. If no cell is active, null is returned. */\r\n  getActiveCellNode() {\r\n    return this.activeCellNode;\r\n  }\r\n\r\n  // This get/set methods are used for keeping text-selection. These don't consider IE because they don't loose text-selection.\r\n  // Fix for firefox selection. See https://github.com/mleibman/SlickGrid/pull/746/files\r\n  protected getTextSelection() {\r\n    let textSelection: Range | null = null;\r\n    if (window.getSelection) {\r\n      const selection = window.getSelection();\r\n      if ((selection?.rangeCount ?? 0) > 0) {\r\n        textSelection = selection!.getRangeAt(0);\r\n      }\r\n    }\r\n    return textSelection;\r\n  }\r\n\r\n  protected setTextSelection(selection: Range) {\r\n    if (window.getSelection && selection) {\r\n      const target = window.getSelection();\r\n      if (target) {\r\n        target.removeAllRanges();\r\n        target.addRange(selection);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Scroll to a specific row and make it into the view\r\n   * @param {Number} row - grid row number\r\n   * @param {Boolean} doPaging - scroll when pagination is enabled\r\n   */\r\n  scrollRowIntoView(row: number, doPaging?: boolean) {\r\n    if (!this.hasFrozenRows ||\r\n      (!this._options.frozenBottom && row > this.actualFrozenRow - 1) ||\r\n      (this._options.frozenBottom && row < this.actualFrozenRow - 1)) {\r\n\r\n      const viewportScrollH = Utils.height(this._viewportScrollContainerY) as number;\r\n\r\n      // if frozen row on top\r\n      // subtract number of frozen row\r\n      const rowNumber = (this.hasFrozenRows && !this._options.frozenBottom ? row - this._options.frozenRow! : row);\r\n\r\n      const rowAtTop = rowNumber * this._options.rowHeight!;\r\n      const rowAtBottom = (rowNumber + 1) * this._options.rowHeight!\r\n        - viewportScrollH\r\n        + (this.viewportHasHScroll ? (this.scrollbarDimensions?.height ?? 0) : 0);\r\n\r\n      // need to page down?\r\n      if ((rowNumber + 1) * this._options.rowHeight! > this.scrollTop + viewportScrollH + this.offset) {\r\n        this.scrollTo(doPaging ? rowAtTop : rowAtBottom);\r\n        this.render();\r\n      }\r\n      // or page up?\r\n      else if (rowNumber * this._options.rowHeight! < this.scrollTop + this.offset) {\r\n        this.scrollTo(doPaging ? rowAtBottom : rowAtTop);\r\n        this.render();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Scroll to the top row and make it into the view\r\n   * @param {Number} row - grid row number\r\n   */\r\n  scrollRowToTop(row: number) {\r\n    this.scrollTo(row * this._options.rowHeight!);\r\n    this.render();\r\n  }\r\n\r\n  protected scrollPage(dir: number) {\r\n    const deltaRows = dir * this.numVisibleRows;\r\n    /// First fully visible row crosses the line with\r\n    /// y === bottomOfTopmostFullyVisibleRow\r\n    const bottomOfTopmostFullyVisibleRow = this.scrollTop + this._options.rowHeight! - 1;\r\n    this.scrollTo((this.getRowFromPosition(bottomOfTopmostFullyVisibleRow) + deltaRows) * this._options.rowHeight!);\r\n    this.render();\r\n\r\n    if (this._options.enableCellNavigation && Utils.isDefined(this.activeRow)) {\r\n      let row = this.activeRow + deltaRows;\r\n      const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n      if (row >= dataLengthIncludingAddNew) {\r\n        row = dataLengthIncludingAddNew - 1;\r\n      }\r\n      if (row < 0) {\r\n        row = 0;\r\n      }\r\n\r\n      let cell = 0;\r\n      let prevCell: number | null = null;\r\n      const prevActivePosX = this.activePosX;\r\n      while (cell <= this.activePosX) {\r\n        if (this.canCellBeActive(row, cell)) {\r\n          prevCell = cell;\r\n        }\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (prevCell !== null) {\r\n        this.setActiveCellInternal(this.getCellNode(row, prevCell));\r\n        this.activePosX = prevActivePosX;\r\n      } else {\r\n        this.resetActiveCell();\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Navigate (scroll) by a page down */\r\n  navigatePageDown() {\r\n    this.scrollPage(1);\r\n  }\r\n\r\n  /** Navigate (scroll) by a page up */\r\n  navigatePageUp() {\r\n    this.scrollPage(-1);\r\n  }\r\n\r\n  /** Navigate to the top of the grid */\r\n  navigateTop() {\r\n    this.navigateToRow(0);\r\n  }\r\n\r\n  /** Navigate to the bottom of the grid */\r\n  navigateBottom() {\r\n    this.navigateToRow(this.getDataLength() - 1);\r\n  }\r\n\r\n  protected navigateToRow(row: number) {\r\n    const num_rows = this.getDataLength();\r\n    if (!num_rows) { return true; }\r\n\r\n    if (row < 0) {\r\n      row = 0;\r\n    } else if (row >= num_rows) {\r\n      row = num_rows - 1;\r\n    }\r\n\r\n    this.scrollCellIntoView(row, 0, true);\r\n    if (this._options.enableCellNavigation && Utils.isDefined(this.activeRow)) {\r\n      let cell = 0;\r\n      let prevCell: number | null = null;\r\n      const prevActivePosX = this.activePosX;\r\n      while (cell <= this.activePosX) {\r\n        if (this.canCellBeActive(row, cell)) {\r\n          prevCell = cell;\r\n        }\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (prevCell !== null) {\r\n        this.setActiveCellInternal(this.getCellNode(row, prevCell));\r\n        this.activePosX = prevActivePosX;\r\n      } else {\r\n        this.resetActiveCell();\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  protected getColspan(row: number, cell: number): number {\r\n    const metadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    if (!metadata || !metadata.columns) {\r\n      return 1;\r\n    }\r\n\r\n    const columnData = metadata.columns[this.columns[cell].id] || metadata.columns[cell];\r\n    let colspan = columnData?.colspan;\r\n    if (colspan === '*') {\r\n      colspan = this.columns.length - cell;\r\n    } else {\r\n      colspan = colspan || 1;\r\n    }\r\n\r\n    return colspan as number;\r\n  }\r\n\r\n  protected findFirstFocusableCell(row: number) {\r\n    let cell = 0;\r\n    while (cell < this.columns.length) {\r\n      if (this.canCellBeActive(row, cell)) {\r\n        return cell;\r\n      }\r\n      cell += this.getColspan(row, cell);\r\n    }\r\n    return null;\r\n  }\r\n\r\n  protected findLastFocusableCell(row: number) {\r\n    let cell = 0;\r\n    let lastFocusableCell: number | null = null;\r\n    while (cell < this.columns.length) {\r\n      if (this.canCellBeActive(row, cell)) {\r\n        lastFocusableCell = cell;\r\n      }\r\n      cell += this.getColspan(row, cell);\r\n    }\r\n    return lastFocusableCell;\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  protected gotoRight(row: number, cell: number, _posX?: number) {\r\n    if (cell >= this.columns.length) {\r\n      return null;\r\n    }\r\n\r\n    do {\r\n      cell += this.getColspan(row, cell);\r\n    }\r\n    while (cell < this.columns.length && !this.canCellBeActive(row, cell));\r\n\r\n    if (cell < this.columns.length) {\r\n      return {\r\n        row,\r\n        cell,\r\n        posX: cell\r\n      };\r\n    }\r\n    return null;\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  protected gotoLeft(row: number, cell: number, _posX?: number) {\r\n    if (cell <= 0) {\r\n      return null;\r\n    }\r\n\r\n    const firstFocusableCell = this.findFirstFocusableCell(row);\r\n    if (firstFocusableCell === null || firstFocusableCell >= cell) {\r\n      return null;\r\n    }\r\n\r\n    let prev = {\r\n      row,\r\n      cell: firstFocusableCell,\r\n      posX: firstFocusableCell\r\n    };\r\n    let pos;\r\n    while (true) {\r\n      pos = this.gotoRight(prev.row, prev.cell, prev.posX);\r\n      if (!pos) {\r\n        return null;\r\n      }\r\n      if (pos.cell >= cell) {\r\n        return prev;\r\n      }\r\n      prev = pos;\r\n    }\r\n  }\r\n\r\n  protected gotoDown(row: number, cell: number, posX: number) {\r\n    let prevCell;\r\n    const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n    while (true) {\r\n      if (++row >= dataLengthIncludingAddNew) {\r\n        return null;\r\n      }\r\n\r\n      prevCell = cell = 0;\r\n      while (cell <= posX) {\r\n        prevCell = cell;\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (this.canCellBeActive(row, prevCell)) {\r\n        return {\r\n          row,\r\n          cell: prevCell,\r\n          posX\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  protected gotoUp(row: number, cell: number, posX: number) {\r\n    let prevCell;\r\n    while (true) {\r\n      if (--row < 0) {\r\n        return null;\r\n      }\r\n\r\n      prevCell = cell = 0;\r\n      while (cell <= posX) {\r\n        prevCell = cell;\r\n        cell += this.getColspan(row, cell);\r\n      }\r\n\r\n      if (this.canCellBeActive(row, prevCell)) {\r\n        return {\r\n          row,\r\n          cell: prevCell,\r\n          posX\r\n        };\r\n      }\r\n    }\r\n  }\r\n\r\n  protected gotoNext(row: number, cell: number, posX?: number) {\r\n    if (!Utils.isDefined(row) && !Utils.isDefined(cell)) {\r\n      row = cell = posX = 0;\r\n      if (this.canCellBeActive(row, cell)) {\r\n        return {\r\n          row,\r\n          cell,\r\n          posX: cell\r\n        };\r\n      }\r\n    }\r\n\r\n    const pos = this.gotoRight(row, cell, posX);\r\n    if (pos) {\r\n      return pos;\r\n    }\r\n\r\n    let firstFocusableCell: number | null = null;\r\n    const dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\r\n\r\n    // if at last row, cycle through columns rather than get stuck in the last one\r\n    if (row === dataLengthIncludingAddNew - 1) { row--; }\r\n\r\n    while (++row < dataLengthIncludingAddNew) {\r\n      firstFocusableCell = this.findFirstFocusableCell(row);\r\n      if (firstFocusableCell !== null) {\r\n        return {\r\n          row,\r\n          cell: firstFocusableCell,\r\n          posX: firstFocusableCell\r\n        };\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  protected gotoPrev(row: number, cell: number, posX?: number) {\r\n    if (!Utils.isDefined(row) && !Utils.isDefined(cell)) {\r\n      row = this.getDataLengthIncludingAddNew() - 1;\r\n      cell = posX = this.columns.length - 1;\r\n      if (this.canCellBeActive(row, cell)) {\r\n        return {\r\n          row,\r\n          cell,\r\n          posX: cell\r\n        };\r\n      }\r\n    }\r\n\r\n    let pos;\r\n    let lastSelectableCell;\r\n    while (!pos) {\r\n      pos = this.gotoLeft(row, cell, posX);\r\n      if (pos) {\r\n        break;\r\n      }\r\n      if (--row < 0) {\r\n        return null;\r\n      }\r\n\r\n      cell = 0;\r\n      lastSelectableCell = this.findLastFocusableCell(row);\r\n      if (lastSelectableCell !== null) {\r\n        pos = {\r\n          row,\r\n          cell: lastSelectableCell,\r\n          posX: lastSelectableCell\r\n        };\r\n      }\r\n    }\r\n    return pos;\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  protected gotoRowStart(row: number, _cell: number, _posX?: number) {\r\n    const newCell = this.findFirstFocusableCell(row);\r\n    if (newCell === null) { return null; }\r\n\r\n    return {\r\n      row,\r\n      cell: newCell,\r\n      posX: newCell\r\n    };\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  protected gotoRowEnd(row: number, _cell: number, _posX?: number) {\r\n    const newCell = this.findLastFocusableCell(row);\r\n    if (newCell === null) { return null; }\r\n\r\n    return {\r\n      row,\r\n      cell: newCell,\r\n      posX: newCell\r\n    };\r\n  }\r\n\r\n  /** Switches the active cell one cell right skipping unselectable cells. Unline navigateNext, navigateRight stops at the last cell of the row. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateRight() {\r\n    return this.navigate('right');\r\n  }\r\n\r\n  /** Switches the active cell one cell left skipping unselectable cells. Unline navigatePrev, navigateLeft stops at the first cell of the row. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateLeft() {\r\n    return this.navigate('left');\r\n  }\r\n\r\n  /** Switches the active cell one row down skipping unselectable cells. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateDown() {\r\n    return this.navigate('down');\r\n  }\r\n\r\n  /** Switches the active cell one row up skipping unselectable cells. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateUp() {\r\n    return this.navigate('up');\r\n  }\r\n\r\n  /** Tabs over active cell to the next selectable cell. Returns a boolean saying whether it was able to complete or not. */\r\n  navigateNext() {\r\n    return this.navigate('next');\r\n  }\r\n\r\n  /** Tabs over active cell to the previous selectable cell. Returns a boolean saying whether it was able to complete or not. */\r\n  navigatePrev() {\r\n    return this.navigate('prev');\r\n  }\r\n\r\n  /** Navigate to the start row in the grid */\r\n  navigateRowStart() {\r\n    return this.navigate('home');\r\n  }\r\n\r\n  /** Navigate to the end row in the grid */\r\n  navigateRowEnd() {\r\n    return this.navigate('end');\r\n  }\r\n\r\n  /**\r\n   * @param {string} dir Navigation direction.\r\n   * @return {boolean} Whether navigation resulted in a change of active cell.\r\n   */\r\n  protected navigate(dir: 'up' | 'down' | 'left' | 'right' | 'prev' | 'next' | 'home' | 'end') {\r\n    if (!this._options.enableCellNavigation) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.activeCellNode && dir !== 'prev' && dir !== 'next') {\r\n      return false;\r\n    }\r\n\r\n    if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n      return true;\r\n    }\r\n    this.setFocus();\r\n\r\n    const tabbingDirections = {\r\n      'up': -1,\r\n      'down': 1,\r\n      'left': -1,\r\n      'right': 1,\r\n      'prev': -1,\r\n      'next': 1,\r\n      'home': -1,\r\n      'end': 1\r\n    };\r\n    this.tabbingDirection = tabbingDirections[dir];\r\n\r\n    const stepFunctions = {\r\n      'up': this.gotoUp,\r\n      'down': this.gotoDown,\r\n      'left': this.gotoLeft,\r\n      'right': this.gotoRight,\r\n      'prev': this.gotoPrev,\r\n      'next': this.gotoNext,\r\n      'home': this.gotoRowStart,\r\n      'end': this.gotoRowEnd\r\n    };\r\n    const stepFn = stepFunctions[dir];\r\n    const pos = stepFn.call(this, this.activeRow, this.activeCell, this.activePosX);\r\n    if (pos) {\r\n      if (this.hasFrozenRows && this._options.frozenBottom && pos.row === this.getDataLength()) {\r\n        return;\r\n      }\r\n\r\n      const isAddNewRow = (pos.row === this.getDataLength());\r\n\r\n      if ((!this._options.frozenBottom && pos.row >= this.actualFrozenRow)\r\n        || (this._options.frozenBottom && pos.row < this.actualFrozenRow)\r\n      ) {\r\n        this.scrollCellIntoView(pos.row, pos.cell, !isAddNewRow && this._options.emulatePagingWhenScrolling);\r\n      }\r\n      this.setActiveCellInternal(this.getCellNode(pos.row, pos.cell));\r\n      this.activePosX = pos.posX;\r\n      return true;\r\n    } else {\r\n      this.setActiveCellInternal(this.getCellNode(this.activeRow, this.activeCell));\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns a DOM element containing a cell at a given row and cell.\r\n   * @param row A row index.\r\n   * @param cell A column index.\r\n   */\r\n  getCellNode(row: number, cell: number): HTMLDivElement | null {\r\n    if (this.rowsCache[row]) {\r\n      this.ensureCellNodesInRowsCache(row);\r\n      try {\r\n        if (this.rowsCache[row].cellNodesByColumnIdx.length > cell) {\r\n          return this.rowsCache[row].cellNodesByColumnIdx[cell] as HTMLDivElement | null;\r\n        }\r\n        else {\r\n          return null;\r\n        }\r\n      } catch (e) {\r\n        return this.rowsCache[row].cellNodesByColumnIdx[cell] as HTMLDivElement | null;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Sets an active cell.\r\n   * @param {number} row - A row index.\r\n   * @param {number} cell - A column index.\r\n   * @param {boolean} [optionEditMode] Option Edit Mode is Auto-Edit?\r\n   * @param {boolean} [preClickModeOn] Pre-Click Mode is Enabled?\r\n   * @param {boolean} [suppressActiveCellChangedEvent] Are we suppressing Active Cell Changed Event (defaults to false)\r\n   */\r\n  setActiveCell(row: number, cell: number, opt_editMode?: boolean, preClickModeOn?: boolean, suppressActiveCellChangedEvent?: boolean) {\r\n    if (!this.initialized) { return; }\r\n    if (row > this.getDataLength() || row < 0 || cell >= this.columns.length || cell < 0) {\r\n      return;\r\n    }\r\n\r\n    if (!this._options.enableCellNavigation) {\r\n      return;\r\n    }\r\n\r\n    this.scrollCellIntoView(row, cell, false);\r\n    this.setActiveCellInternal(this.getCellNode(row, cell), opt_editMode, preClickModeOn, suppressActiveCellChangedEvent);\r\n  }\r\n\r\n  /**\r\n   * Sets an active cell.\r\n   * @param {number} row - A row index.\r\n   * @param {number} cell - A column index.\r\n   * @param {boolean} [suppressScrollIntoView] - optionally suppress the ScrollIntoView that happens by default (defaults to false)\r\n   */\r\n  setActiveRow(row: number, cell?: number, suppressScrollIntoView?: boolean) {\r\n    if (!this.initialized) { return; }\r\n    if (row > this.getDataLength() || row < 0 || (cell ?? 0) >= this.columns.length || (cell ?? 0) < 0) {\r\n      return;\r\n    }\r\n\r\n    this.activeRow = row;\r\n    if (!suppressScrollIntoView) {\r\n      this.scrollCellIntoView(row, cell || 0, false);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns true if you can click on a given cell and make it the active focus.\r\n   * @param {number} row A row index.\r\n   * @param {number} col A column index.\r\n   */\r\n  canCellBeActive(row: number, cell: number) {\r\n    if (!this._options.enableCellNavigation || row >= this.getDataLengthIncludingAddNew() ||\r\n      row < 0 || cell >= this.columns.length || cell < 0) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.columns[cell] || this.columns[cell].hidden) {\r\n      return false;\r\n    }\r\n\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    if (rowMetadata?.focusable !== undefined) {\r\n      return !!rowMetadata.focusable;\r\n    }\r\n\r\n    const columnMetadata = rowMetadata?.columns;\r\n    if (columnMetadata?.[this.columns[cell].id]?.focusable !== undefined) {\r\n      return !!columnMetadata[this.columns[cell].id].focusable;\r\n    }\r\n    if (columnMetadata?.[cell]?.focusable !== undefined) {\r\n      return !!columnMetadata[cell].focusable;\r\n    }\r\n\r\n    return !!(this.columns[cell].focusable);\r\n  }\r\n\r\n  /**\r\n   * Returns true if selecting the row causes this particular cell to have the selectedCellCssClass applied to it. A cell can be selected if it exists and if it isn't on an empty / \"Add New\" row and if it is not marked as \"unselectable\" in the column definition.\r\n   * @param {number} row A row index.\r\n   * @param {number} col A column index.\r\n   */\r\n  canCellBeSelected(row: number, cell: number) {\r\n    if (row >= this.getDataLength() || row < 0 || cell >= this.columns.length || cell < 0) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.columns[cell] || this.columns[cell].hidden) {\r\n      return false;\r\n    }\r\n\r\n    const rowMetadata = (this.data as CustomDataView<TData>)?.getItemMetadata?.(row);\r\n    if (rowMetadata?.selectable !== undefined) {\r\n      return !!rowMetadata.selectable;\r\n    }\r\n\r\n    const columnMetadata = rowMetadata?.columns && (rowMetadata.columns[this.columns[cell].id] || rowMetadata.columns[cell]);\r\n    if (columnMetadata?.selectable !== undefined) {\r\n      return !!columnMetadata.selectable;\r\n    }\r\n\r\n    return !!this.columns[cell].selectable;\r\n  }\r\n\r\n  /**\r\n   * Accepts a row integer and a cell integer, scrolling the view to the row where row is its row index, and cell is its cell index. Optionally accepts a forceEdit boolean which, if true, will attempt to initiate the edit dialogue for the field in the specified cell.\r\n   * Unlike setActiveCell, this scrolls the row into the viewport and sets the keyboard focus.\r\n   * @param {Number} row A row index.\r\n   * @param {Number} cell A column index.\r\n   * @param {Boolean} [forceEdit] If true, will attempt to initiate the edit dialogue for the field in the specified cell.\r\n   */\r\n  gotoCell(row: number, cell: number, forceEdit?: boolean, e?: Event | SlickEvent_) {\r\n    if (!this.initialized) { return; }\r\n    if (!this.canCellBeActive(row, cell)) {\r\n      return;\r\n    }\r\n\r\n    if (!this.getEditorLock()?.commitCurrentEdit()) {\r\n      return;\r\n    }\r\n\r\n    this.scrollCellIntoView(row, cell, false);\r\n\r\n    const newCell = this.getCellNode(row, cell);\r\n\r\n    // if selecting the 'add new' row, start editing right away\r\n    const column = this.columns[cell];\r\n    const suppressActiveCellChangedEvent = !!(this._options.editable && column?.editor && this._options.suppressActiveCellChangeOnEdit);\r\n    this.setActiveCellInternal(newCell, (forceEdit || (row === this.getDataLength()) || this._options.autoEdit), null, suppressActiveCellChangedEvent, e);\r\n\r\n    // if no editor was created, set the focus back on the grid\r\n    if (!this.currentEditor) {\r\n      this.setFocus();\r\n    }\r\n  }\r\n\r\n\r\n  //////////////////////////////////////////////////////////////////////////////////////////////\r\n  // IEditor implementation for the editor lock\r\n\r\n  protected commitCurrentEdit() {\r\n    const self = this as SlickGrid<TData, C, O>;\r\n    const item = self.getDataItem(self.activeRow);\r\n    const column = self.columns[self.activeCell];\r\n\r\n    if (self.currentEditor) {\r\n      if (self.currentEditor.isValueChanged()) {\r\n        const validationResults = self.currentEditor.validate();\r\n\r\n        if (validationResults.valid) {\r\n          const row = self.activeRow;\r\n          const cell = self.activeCell;\r\n          const editor = self.currentEditor;\r\n          const serializedValue = self.currentEditor.serializeValue();\r\n          const prevSerializedValue = self.serializedEditorValue;\r\n\r\n          if (self.activeRow < self.getDataLength()) {\r\n            const editCommand = {\r\n              row,\r\n              cell,\r\n              editor,\r\n              serializedValue,\r\n              prevSerializedValue,\r\n              execute: () => {\r\n                editor.applyValue(item, serializedValue);\r\n                self.updateRow(row);\r\n                self.trigger(self.onCellChange, { command: 'execute', row, cell, item, column });\r\n              },\r\n              undo: () => {\r\n                editor.applyValue(item, prevSerializedValue);\r\n                self.updateRow(row);\r\n                self.trigger(self.onCellChange, { command: 'undo', row, cell, item, column, });\r\n              }\r\n            };\r\n\r\n            if (self._options.editCommandHandler) {\r\n              self.makeActiveCellNormal(true);\r\n              self._options.editCommandHandler(item, column, editCommand);\r\n            } else {\r\n              editCommand.execute();\r\n              self.makeActiveCellNormal(true);\r\n            }\r\n\r\n          } else {\r\n            const newItem = {};\r\n            self.currentEditor.applyValue(newItem, self.currentEditor.serializeValue());\r\n            self.makeActiveCellNormal(true);\r\n            self.trigger(self.onAddNewRow, { item: newItem, column });\r\n          }\r\n\r\n          // check whether the lock has been re-acquired by event handlers\r\n          return !self.getEditorLock()?.isActive();\r\n        } else {\r\n          // Re-add the CSS class to trigger transitions, if any.\r\n          if (self.activeCellNode) {\r\n            self.activeCellNode.classList.remove('invalid');\r\n            Utils.width(self.activeCellNode);// force layout\r\n            self.activeCellNode.classList.add('invalid');\r\n          }\r\n\r\n          self.trigger(self.onValidationError, {\r\n            editor: self.currentEditor,\r\n            cellNode: self.activeCellNode,\r\n            validationResults,\r\n            row: self.activeRow,\r\n            cell: self.activeCell,\r\n            column\r\n          });\r\n\r\n          self.currentEditor.focus();\r\n          return false;\r\n        }\r\n      }\r\n\r\n      self.makeActiveCellNormal(true);\r\n    }\r\n    return true;\r\n  }\r\n\r\n  protected cancelCurrentEdit() {\r\n    this.makeActiveCellNormal();\r\n    return true;\r\n  }\r\n\r\n  protected rowsToRanges(rows: number[]) {\r\n    const ranges: SlickRange_[] = [];\r\n    const lastCell = this.columns.length - 1;\r\n    for (let i = 0; i < rows.length; i++) {\r\n      ranges.push(new SlickRange(rows[i], 0, rows[i], lastCell));\r\n    }\r\n    return ranges;\r\n  }\r\n\r\n  /** Returns an array of row indices corresponding to the currently selected rows. */\r\n  getSelectedRows() {\r\n    if (!this.selectionModel) {\r\n      throw new Error('SlickGrid Selection model is not set');\r\n    }\r\n    return this.selectedRows.slice(0);\r\n  }\r\n\r\n  /**\r\n   * Accepts an array of row indices and applies the current selectedCellCssClass to the cells in the row, respecting whether cells have been flagged as selectable.\r\n   * @param {Array<number>} rowsArray - an array of row numbers.\r\n   * @param {String} [caller] - an optional string to identify who called the method\r\n   */\r\n  setSelectedRows(rows: number[], caller?: string) {\r\n    if (!this.selectionModel) {\r\n      throw new Error('SlickGrid Selection model is not set');\r\n    }\r\n    if (this && this.getEditorLock && !this.getEditorLock()?.isActive()) {\r\n      this.selectionModel.setSelectedRanges(this.rowsToRanges(rows), caller || 'SlickGrid.setSelectedRows');\r\n    }\r\n  }\r\n\r\n  /** html sanitizer to avoid scripting attack */\r\n  sanitizeHtmlString(dirtyHtml: string, suppressLogging?: boolean) {\r\n    if (!this._options.sanitizer || typeof dirtyHtml !== 'string') {\r\n      return dirtyHtml;\r\n    }\r\n\r\n    const cleanHtml = this._options.sanitizer(dirtyHtml);\r\n\r\n    if (!suppressLogging && this._options.logSanitizedHtml && this.logMessageCount <= this.logMessageMaxCount && cleanHtml !== dirtyHtml) {\r\n      console.log(`sanitizer altered html: ${dirtyHtml} --> ${cleanHtml}`);\r\n      if (this.logMessageCount === this.logMessageMaxCount) {\r\n        console.log(`sanitizer: silencing messages after first ${this.logMessageMaxCount}`);\r\n      }\r\n      this.logMessageCount++;\r\n    }\r\n    return cleanHtml;\r\n  }\r\n}\r\n\r\n// extend Slick namespace on window object when building as iife\r\nif (IIFE_ONLY && window.Slick) {\r\n  Utils.extend(Slick, {\r\n    Grid: SlickGrid,\r\n  });\r\n}", "/***\n * A sample AJAX data store implementation.\n * Right now, it's hooked up to load Hackernews stories, but can\n * easily be extended to support any JSONP-compatible backend that accepts paging parameters.\n */\nexport class SlickRemoteModelYahoo {\n  // protected\n  protected PAGESIZE = 10;\n  protected data: any = { length: 0 };\n  protected h_request: any = null;\n  protected req: any = null; // ajax request\n\n  // events\n  protected onDataLoading = new Slick.Event('onDataLoading');\n  protected onDataLoaded = new Slick.Event('onDataLoaded');\n\n  constructor() {\n    if (!(window.$ || window.jQuery) || !window.$.jsonp) {\n      throw new Error('SlickRemoteModel requires both jQuery and jQuery jsonp library to be loaded.');\n    }\n    this.init();\n  }\n\n  init() { }\n\n  isDataLoaded(from: number, to: number) {\n    for (let i = from; i <= to; i++) {\n      if (this.data[i] === undefined || this.data[i] === null) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  clear() {\n    for (const key in this.data) {\n      delete this.data[key];\n    }\n    this.data.length = 0;\n  }\n\n  ensureData(from: number, to: number) {\n    if (this.req) {\n      this.req.abort();\n      for (let i = this.req.fromPage; i <= this.req.toPage; i++) {\n        this.data[i * this.PAGESIZE] = undefined;\n      }\n    }\n\n    if (from < 0) {\n      from = 0;\n    }\n\n    if (this.data.length > 0) {\n      to = Math.min(to, this.data.length - 1);\n    }\n\n    let fromPage = Math.floor(from / this.PAGESIZE);\n    let toPage = Math.floor(to / this.PAGESIZE);\n\n    while (this.data[fromPage * this.PAGESIZE] !== undefined && fromPage < toPage) {\n      fromPage++;\n    }\n    while (this.data[toPage * this.PAGESIZE] !== undefined && fromPage < toPage) {\n      toPage--;\n    }\n    if (fromPage > toPage || ((fromPage === toPage) && this.data[fromPage * this.PAGESIZE] !== undefined)) {\n      // TODO:  look-ahead\n      this.onDataLoaded.notify({ from, to });\n      return;\n    }\n\n    const recStart = (fromPage * this.PAGESIZE);\n    const recCount = (((toPage - fromPage) * this.PAGESIZE) + this.PAGESIZE);\n\n    const url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20rss'\n      + '(' + recStart + '%2C' + recCount + ')'\n      + '%20where%20url%3D%22http%3A%2F%2Frss.news.yahoo.com%2Frss%2Ftopstories%22'\n      + '&format=json';\n\n    if (this.h_request !== null) {\n      clearTimeout(this.h_request);\n    }\n\n    this.h_request = setTimeout(() => {\n      for (let i = fromPage; i <= toPage; i++) {\n        this.data[i * this.PAGESIZE] = null; // null indicates a 'requested but not available yet'\n      }\n      this.onDataLoading.notify({ from, to });\n\n      this.req = window.$.jsonp({\n        url,\n        callbackParameter: 'callback',\n        cache: true,\n        success: (json: any) => {\n          this.onSuccess(json, recStart);\n        },\n        error: () => {\n          this.onError(fromPage, toPage);\n        }\n      });\n\n      this.req.fromPage = fromPage;\n      this.req.toPage = toPage;\n    }, 50);\n  }\n\n\n  onError(fromPage: number, toPage: number) {\n    alert('error loading pages ' + fromPage + ' to ' + toPage);\n  }\n\n  // SAMPLE DATA\n  //    {\n  //      \"query\": {\n  //        \"count\": 40,\n  //        \"created\": \"2015-03-03T00:34:00Z\",\n  //        \"lang\": \"en-US\",\n  //        \"results\": {\n  //          \"item\": [\n  //            {\n  //              \"title\": \"Netanyahu assails Iran deal, touts US-Israel ties\",\n  //              \"description\": \"<p><a href=\\\"http://news.yahoo.com/netanyahu-us-officials-face-off-iran-133539021--politics.html\\\"><img src=\\\"http://l2.yimg.com/bt/api/res/1.2/4eoBxbJStrbGAKbmBYOJfg--/YXBwaWQ9eW5ld3M7Zmk9ZmlsbDtoPTg2O3E9NzU7dz0xMzA-/http://media.zenfs.com/en_us/News/ap_webfeeds/2f3a20c2d46d9f096f0f6a706700d430.jpg\\\" width=\\\"130\\\" height=\\\"86\\\" alt=\\\"Israeli Prime Minister Benjamin Netanyahu addresses the 2015 American Israel Public Affairs Committee (AIPAC) Policy Conference in Washington, Monday, March 2, 2015. (AP Photo/Cliff Owen)\\\" align=\\\"left\\\" title=\\\"Israeli Prime Minister Benjamin Netanyahu addresses the 2015 American Israel Public Affairs Committee (AIPAC) Policy Conference in Washington, Monday, March 2, 2015. (AP Photo/Cliff Owen)\\\" border=\\\"0\\\" /></a>WASHINGTON (AP) \u2014 Seeking to lower tensions, Benjamin Netanyahu and U.S. officials cast their dispute over Iran as a family squabble on Monday, even as the Israeli leader claimed President Barack Obama did not \u2014 and could not \u2014 fully understand his nation&#039;s vital security concerns.</p><br clear=\\\"all\\\"/>\",\n  //              \"link\": \"http://news.yahoo.com/netanyahu-us-officials-face-off-iran-133539021--politics.html\",\n  //              \"pubDate\": \"Mon, 02 Mar 2015 19:17:36 -0500\",\n  //              \"source\": {\n  //                \"url\": \"http://www.ap.org/\",\n  //                \"content\": \"Associated Press\"\n  //              },\n  //              \"guid\": {\n  //                \"isPermaLink\": \"false\",\n  //                \"content\": \"netanyahu-us-officials-face-off-iran-133539021--politics\"\n  //              },\n  //              \"content\": {\n  //                \"height\": \"86\",\n  //                \"type\": \"image/jpeg\",\n  //                \"url\": \"http://l2.yimg.com/bt/api/res/1.2/4eoBxbJStrbGAKbmBYOJfg--/YXBwaWQ9eW5ld3M7Zmk9ZmlsbDtoPTg2O3E9NzU7dz0xMzA-/http://media.zenfs.com/en_us/News/ap_webfeeds/2f3a20c2d46d9f096f0f6a706700d430.jpg\",\n  //                \"width\": \"130\"\n  //              },\n  //              \"text\": {\n  //                \"type\": \"html\",\n  //                \"content\": \"<p><a href=\\\"http://news.yahoo.com/netanyahu-us-officials-face-off-iran-133539021--politics.html\\\"><img src=\\\"http://l2.yimg.com/bt/api/res/1.2/4eoBxbJStrbGAKbmBYOJfg--/YXBwaWQ9eW5ld3M7Zmk9ZmlsbDtoPTg2O3E9NzU7dz0xMzA-/http://media.zenfs.com/en_us/News/ap_webfeeds/2f3a20c2d46d9f096f0f6a706700d430.jpg\\\" width=\\\"130\\\" height=\\\"86\\\" alt=\\\"Israeli Prime Minister Benjamin Netanyahu addresses the 2015 American Israel Public Affairs Committee (AIPAC) Policy Conference in Washington, Monday, March 2, 2015. (AP Photo/Cliff Owen)\\\" align=\\\"left\\\" title=\\\"Israeli Prime Minister Benjamin Netanyahu addresses the 2015 American Israel Public Affairs Committee (AIPAC) Policy Conference in Washington, Monday, March 2, 2015. (AP Photo/Cliff Owen)\\\" border=\\\"0\\\" /></a>WASHINGTON (AP) \u2014 Seeking to lower tensions, Benjamin Netanyahu and U.S. officials cast their dispute over Iran as a family squabble on Monday, even as the Israeli leader claimed President Barack Obama did not \u2014 and could not \u2014 fully understand his nation&#039;s vital security concerns.</p><br clear=\\\"all\\\"/>\"\n  //              },\n  //              \"credit\": {\n  //                \"role\": \"publishing company\"\n  //              }\n  //            },\n  //            {... },\n  //            {... },\n  //          ]\n  //        }\n  //      }\n  //    }\n\n  onSuccess(json: any, recStart: number) {\n    let recEnd = recStart;\n    if (json.query.count > 0) {\n      const results = json.query.results.item;\n      recEnd = recStart + results.length;\n      this.data.length = 100;// Math.min(parseInt(results.length),1000); // limitation of the API\n\n      for (let i = 0; i < results.length; i++) {\n        const item = results[i];\n\n        item.pubDate = new Date(item.pubDate);\n\n        this.data[recStart + i] = { index: recStart + i };\n        this.data[recStart + i].pubDate = item.pubDate;\n        this.data[recStart + i].title = item.title;\n        this.data[recStart + i].url = item.link;\n        this.data[recStart + i].text = item.description;\n      }\n    }\n    this.req = null;\n\n    this.onDataLoaded.notify({ from: recStart, to: recEnd });\n  }\n\n\n  reloadData(from: number, to: number) {\n    for (let i = from; i <= to; i++) {\n      delete this.data[i];\n    }\n    this.ensureData(from, to);\n  }\n\n\n  // return {\n  //   // properties\n  //   \"data\": data,\n\n  //   // methods\n  //   \"clear\": clear,\n  //   \"isDataLoaded\": isDataLoaded,\n  //   \"ensureData\": ensureData,\n  //   \"reloadData\": reloadData,\n\n  //   // events\n  //   \"onDataLoading\": onDataLoading,\n  //   \"onDataLoaded\": onDataLoaded\n  // };\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Data = window.Slick.Data || {};\n  window.Slick.Data.RemoteModelYahoo = SlickRemoteModelYahoo;\n}", "import type { ColumnSort } from './models/index';\n\n/***\n * A sample AJAX data store implementation.\n * Right now, it's hooked up to load search results from Octopart, but can\n * easily be extended to support any JSONP-compatible backend that accepts paging parameters.\n */\nexport class SlickRemoteModel {\n  // private\n  protected PAGESIZE = 50;\n  protected data: any = { length: 0 };\n  protected searchstr = '';\n  protected sortcol: ColumnSort | null = null;\n  protected sortdir = 1;\n  protected h_request: any = null;\n  protected req: any = null; // ajax request\n\n  // events\n  onDataLoading = new Slick.Event('onDataLoading');\n  onDataLoaded = new Slick.Event('onDataLoaded');\n\n  constructor() {\n    if (!(window.$ || window.jQuery) || !window.$.jsonp) {\n      throw new Error('SlickRemoteModel requires both jQuery and jQuery jsonp library to be loaded.');\n    }\n    this.init();\n  }\n\n  init() { }\n\n  isDataLoaded(from: number, to: number) {\n    for (let i = from; i <= to; i++) {\n      if (this.data[i] === undefined || this.data[i] === null) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  clear() {\n    for (const key in this.data) {\n      delete this.data[key];\n    }\n    this.data.length = 0;\n  }\n\n  ensureData(from: number, to: number) {\n    if (this.req) {\n      this.req.abort();\n      for (let i = this.req.fromPage; i <= this.req.toPage; i++) {\n        this.data[i * this.PAGESIZE] = undefined;\n      }\n    }\n\n    if (from < 0) {\n      from = 0;\n    }\n\n    if (this.data.length > 0) {\n      to = Math.min(to, this.data.length - 1);\n    }\n\n    let fromPage = Math.floor(from / this.PAGESIZE);\n    let toPage = Math.floor(to / this.PAGESIZE);\n\n    while (this.data[fromPage * this.PAGESIZE] !== undefined && fromPage < toPage) {\n      fromPage++;\n    }\n\n    while (this.data[toPage * this.PAGESIZE] !== undefined && fromPage < toPage) {\n      toPage--;\n    }\n\n    if (fromPage > toPage || ((fromPage === toPage) && this.data[fromPage * this.PAGESIZE] !== undefined)) {\n      // TODO:  look-ahead\n      this.onDataLoaded.notify({ from, to });\n      return;\n    }\n\n    let url = 'http://octopart.com/api/v3/parts/search?apikey=68b25f31&include[]=short_description&show[]=uid&show[]=manufacturer&show[]=mpn&show[]=brand&show[]=octopart_url&show[]=short_description&q=' + this.searchstr + '&start=' + (fromPage * this.PAGESIZE) + '&limit=' + (((toPage - fromPage) * this.PAGESIZE) + this.PAGESIZE);\n\n    if (this.sortcol !== null) {\n      url += ('&sortby=' + this.sortcol + ((this.sortdir > 0) ? '+asc' : '+desc'));\n    }\n\n    if (this.h_request !== null) {\n      clearTimeout(this.h_request);\n    }\n\n    this.h_request = setTimeout(() => {\n      for (let i = fromPage; i <= toPage; i++) {\n        this.data[i * this.PAGESIZE] = null; // null indicates a 'requested but not available yet'\n      }\n      this.onDataLoading.notify({ from, to });\n\n      this.req = window.$.jsonp({\n        url,\n        callbackParameter: 'callback',\n        cache: true,\n        success: this.onSuccess,\n        error: () => this.onError(fromPage, toPage)\n      });\n      this.req.fromPage = fromPage;\n      this.req.toPage = toPage;\n    }, 50);\n  }\n\n  protected onError(fromPage: number | string, toPage: number | string) {\n    alert('error loading pages ' + fromPage + ' to ' + toPage);\n  }\n\n  protected onSuccess(resp: any) {\n    const from = resp.request.start, to = from + resp.results.length;\n    this.data.length = Math.min(parseInt(resp.hits), 1000); // limitation of the API\n\n    for (let i = 0; i < resp.results.length; i++) {\n      const item = resp.results[i].item;\n      this.data[from + i] = item;\n      this.data[from + i].index = from + i;\n    }\n\n    this.req = null;\n    this.onDataLoaded.notify({ from, to });\n  }\n\n  reloadData(from: number, to: number) {\n    for (let i = from; i <= to; i++) {\n      delete this.data[i];\n    }\n    this.ensureData(from, to);\n  }\n\n\n  setSort(column: ColumnSort, dir: number) {\n    this.sortcol = column;\n    this.sortdir = dir;\n    this.clear();\n  }\n\n  setSearch(str: string) {\n    this.searchstr = str;\n    this.clear();\n  }\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  window.Slick.Data = window.Slick.Data || {};\n  window.Slick.Data.RemoteModel = SlickRemoteModel;\n}", "window.GobiertoAdmin.GobiertoPlansPlanProjectsController = (function() {\n  function GobiertoPlansPlanProjectsController() {}\n\n  GobiertoPlansPlanProjectsController.prototype.index = function(opts) {\n    _handleSubmitChangeBehaviors();\n  };\n\n  function _handleSubmitChangeBehaviors() {\n    $(document).on(\"change\", \"select[data-behavior]\", function(e) {\n      if ($(this).data(\"behavior\") === \"submit_change\") {\n        $(\"form#edit_projects_filter\").submit();\n      }\n    });\n\n    $(document).on(\"datepicker-change\", \"input[data-behavior]\", function(e) {\n      if ($(this).data(\"behavior\") === \"submit_change\") {\n        if ($(this).data(\"datepicker\").selectedDates.length < 2) return\n\n        $(\"form#edit_projects_filter\").submit();\n      }\n    })\n  }\n\n  function _handleCategoriesSelectBehaviors() {\n    $(\"select#project_category_id\").select2()\n\n    // This should be controlled via css\n    $(\".select2-container\").css(\"padding-top\", \"22px\");\n  }\n\n  function _handleMinorChangeCheckbox() {\n    var minorChangeCheckbox = document.querySelector('.js-minor-change-checkbox');\n    var saveButton = document.querySelector('.js-save-button');\n\n    if (minorChangeCheckbox && saveButton) {\n      // Store the original data-confirm value\n      var originalConfirmData = saveButton.dataset.confirm;\n\n      minorChangeCheckbox.addEventListener('change', function() {\n        if (this.checked) {\n          // Remove data-confirm when minor_change is checked\n          if (saveButton.dataset.confirm) {\n            delete saveButton.dataset.confirm;\n          }\n        } else {\n          // Restore data-confirm when minor_change is unchecked\n          if (originalConfirmData) {\n            saveButton.dataset.confirm = originalConfirmData;\n          }\n        }\n      });\n\n      // Initialize on page load in case checkbox is already checked\n      if (minorChangeCheckbox.checked && saveButton.dataset.confirm) {\n        delete saveButton.dataset.confirm;\n      }\n    }\n  }\n\n  GobiertoPlansPlanProjectsController.prototype.form = function(opts) {\n    $(\".js-admin-widget-save label\").click(function(e) {\n      var styleClass = $(e.target).attr(\"data-status-style\")\n      let $dropdownToggle = $(e.target).closest(\".js-admin-widget-save\").find(\"span.i_p_status\")\n\n      $dropdownToggle.removeClass()\n      $dropdownToggle.addClass(`i_p_status ${styleClass}`)\n\n      var newStateText = e.target.textContent.trim();\n      $(\".g_popup_context .i_p_status a\").text(newStateText);\n    })\n    _handleCategoriesSelectBehaviors()\n    _handleMinorChangeCheckbox()\n  };\n\n  return GobiertoPlansPlanProjectsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_plans_plan_projects_controller = new GobiertoAdmin.GobiertoPlansPlanProjectsController;\n", "$(document).on('turbolinks:load', function() {\n\n  var header_height = $('header.main').height() + 1;\n  $('menu.main').css('top', header_height);\n  $('.admin_content_column').css('padding-top', header_height);\n\n  $('.js-collapse-menu').click(function(e) {\n    e.preventDefault();\n    if ($('menu.main').attr('data-menu-status') == 'open') {\n      $('menu.main').attr('data-menu-status', 'closed');\n      $('.container').removeClass('admin_content_column_with_menu_opened');\n      $('.container').addClass('admin_content_column_with_menu_closed');\n    }\n    else if ($('menu.main').attr('data-menu-status') == 'closed') {\n      $('menu.main').attr('data-menu-status', 'open');\n      $('.container').addClass('admin_content_column_with_menu_opened');\n      $('.container').removeClass('admin_content_column_with_menu_closed');\n    }\n  });\n\n  $('.open-new_row_content').click(function(e) {\n    e.preventDefault();\n    $('.new_row_add').hide();\n    $('.new_row_content').show();\n  });\n\n  $('.close-new_row_content').click(function(e) {\n    e.preventDefault();\n    $('.new_row_add').show();\n    $('.new_row_content').hide();\n  });\n\n  $('.open-new_block').click(function(e) {\n    e.preventDefault();\n    $('.new_block_content').show();\n  });\n\n});\n", "import 'devbridge-autocomplete';\nimport { AUTOCOMPLETE_DEFAULTS } from '../../lib/shared';\n\n$(document).on('turbolinks:load', function() {\n  var $input_admin = $('input#pages_search')\n  var $resultsContainerAdmin = $('#search_pages')\n  var initial_search_html = $resultsContainerAdmin.html()\n\n  function truncateOnWord(str, limit) {\n    var trimmable = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u2028\\u2029\\u3000\\uFEFF'\n    var reg = new RegExp('(?=[' + trimmable + '])')\n    var words = str.split(reg)\n    var count = 0\n    return words.filter(function(word) {\n      count += word.length\n      return count <= limit\n    }).join('')\n  }\n\n  function itemUpdatedAt(d){\n    if (d['searchable_updated_at'] == null)\n      return\n\n    return `${I18n.t(\"layouts.search.updated\")}: ${I18n.l(\"date.formats.short\", d['searchable_updated_at'])}`\n  }\n\n  function itemDescription(d){\n    if (d[\"meta\"] == null)\n      return ''\n\n    let maxLength = 200\n    let description_translations = (d['meta']['collection_title_translations'] || {})\n    let description = (description_translations[I18n.locale] || '')\n    if (description === '' || description.length < maxLength)\n      return description\n    return truncateOnWord(description, maxLength) + '...'\n  }\n\n  function itemCollectionId(d){\n    if (d[\"meta\"] == null)\n      return\n\n    return d[\"meta\"][\"collection_id\"]\n  }\n\n  function formattedResult(d){\n    return '<div class=\"activity_item\">' +\n             `<h2><a class=\"tipsit\" href=\"${[\"/admin/cms/pages/\", d['searchable_id'], \"/edit?collection_id=\", itemCollectionId(d)].join('')}\"` +\n             ` original-title=\"${I18n.t(\"layouts.search.drag_drop_instructions\")}\"` +\n             ` data-title=\"${d['title']}\"` +\n             ` data-id=${d['searchable_id']}>` +\n             d['title'] +\n             `<span class=\"secondary\">${itemDescription(d)}</span>` +\n             '</a></h2>' +\n             `<div class=\"date\">${itemUpdatedAt(d)}</div>` +\n           '</div>'\n  }\n\n  var searchOptions = {\n    serviceUrl: '/api/v1/search',\n    minChars: 1,\n    dataType: 'json',\n    params: window.searchClient === undefined ?\n      {} :\n      {\n      filters:\n        {\n        searchable_type: window.searchClient.searchable_types\n      }\n    },\n    beforeRender(container) {\n      container.css({ width: '100%' })\n    },\n    triggerSelectOnValidInput: false,\n    transformResult: function(response) {\n      return {\n        suggestions: response.data.map(item => ({\n          value: item.attributes.title,\n          data: item.attributes\n        }))\n      }\n    },\n    formatResult: function(){\n      return ''\n    },\n    onSearchComplete: function(query, suggestions){\n      $(\"div.autocomplete-suggestions\").hide()\n      $resultsContainerAdmin.html('')\n      if (suggestions.length > 0 ) {\n\n        suggestions.forEach(function(suggestion){\n          let result = formattedResult(suggestion.data)\n\n          let div = $(result)\n          div.appendTo($resultsContainerAdmin)\n        })\n\n      // After reload partial with pages we have to do pages like draggable\n      $(\".tipsit\").draggable({ revert: true })\n    } else {\n      $('<div class=\"result\"><p>'+I18n.t(\"layouts.search.no_results\")+'</p></div>').appendTo($resultsContainerAdmin)\n    }\n    },\n    showNoSuggestionNotice: false\n  }\n\n  $input_admin.devbridgeAutocomplete($.extend({}, AUTOCOMPLETE_DEFAULTS, searchOptions))\n\n  $input_admin.on('keyup', function(){\n    var q = $(this).val()\n    if (q.length == 0)\n      $resultsContainerAdmin.html(initial_search_html)\n  })\n\n  $input_admin.focusin(function() {\n    $resultsContainerAdmin.show()\n  })\n})\n", "window.GobiertoAdmin.PeopleController = (function() {\n  function PeopleController() {}\n\n  PeopleController.prototype.index = function() {\n    _handleSortableList();\n  };\n\n  function _handleSortableList() {\n    var wrapper = \"tbody[data-behavior=sortable]\";\n\n    $(wrapper).sortable({\n      items: 'tr',\n      forcePlaceholderSize: true,\n      placeholder: '<tr><td colspan=\"8\">&nbsp;&nbsp;</td></tr>',\n      update: function() {\n        _refreshPositions(wrapper);\n        _requestUpdate(wrapper, _buildPositions(wrapper));\n      },\n      helper: _fixWidthHelper\n    });\n  }\n\n  function _fixWidthHelper(e, ui) {\n    ui.children().each(function() {\n      $(this).width($(this).width());\n    });\n    return ui;\n  }\n\n  function _refreshPositions(wrapper) {\n    $(wrapper).find(\"tr\").each(function(index) {\n      $(this).attr(\"data-pos\", index + 1);\n    });\n  }\n\n  function _buildPositions(wrapper) {\n    var positions = [];\n\n    $(wrapper).find(\"tr\").each(function(index) {\n      positions.push({\n        id: $(this).data(\"id\"),\n        position: index + 1\n      });\n    });\n\n    return positions;\n  }\n\n  function _requestUpdate(wrapper, positions) {\n    $.ajax({\n      url: $(wrapper).data(\"sortable-target\"),\n      method: \"POST\",\n      data: { positions: positions }\n    });\n  }\n\n  return PeopleController;\n})();\n\nwindow.GobiertoAdmin.people_controller = new GobiertoAdmin.PeopleController;\n", "import Cropper from 'cropperjs'\n\nwindow.GobiertoAdmin.PersonController = (function() {\n  function PersonController() {}\n\n  PersonController.prototype.form = function() {\n    _selectByDefault();\n    _handlePositionSelector();\n    _cropImage();\n  };\n\n  function _cropImage() {\n    var uid = \"person_avatar_image\";\n\n    $(`#${ uid }`).change(function () {\n      var $loaded_image = this;\n\n      validatesImageDimensionsToCrop($loaded_image);\n    });\n\n    $('#btnCrop').click(function() {\n      var output = document.getElementById(\"image\");\n\n      $.magnificPopup.close();\n\n      $('#saved_image').hide();\n\n      output.cropper.getCroppedCanvas().toBlob((blob) => {\n        // https://pqina.nl/blog/set-value-to-file-input/\n        const file = new File([blob], document.getElementById(uid).files[0].name, { type: blob.type })\n        const dt = new DataTransfer()\n        dt.items.add(file)\n\n        document.getElementById(uid).files = dt.files\n      });\n    });\n  }\n\n  function _handlePositionSelector() {\n    $('#person_category_politician').on('change', function(){\n      var $target = $('[data-target]');\n      $target.show();\n    });\n    $('#person_category_executive').on('change', function(){\n      var $target = $('[data-target]');\n      $target.hide();\n    });\n  }\n\n  function _selectByDefault(){\n    if (!$('#person_party_government').is(':checked') && !$('#person_party_opposition').is(':checked'))\n      $('#person_party_government').prop('checked', true);\n  }\n\n  function openCropModal(loaded_image) {\n    $.magnificPopup.open({\n      items: {\n        src: '#crop-popup'\n      },\n      type: 'inline',\n      callbacks: {\n        open: function() {\n          if (loaded_image.files && loaded_image.files[0]) {\n            var reader = new FileReader();\n            reader.onload = function () {\n              var dataURL = reader.result;\n\n              var output = document.getElementById('image');\n\n              // Hack: Clear cropper\n              if (output.classList.contains(\"cropper-hidden\")) {\n                output.src= \"\";\n                output.cropper.destroy();\n              }\n\n              output.src = dataURL;\n\n              new Cropper(output, {\n                aspectRatio: 1 / 1,\n                minCropBoxWidth: 500,\n                minCropBoxHeight: 500\n              });\n            }\n            reader.readAsDataURL(loaded_image.files[0]);\n          }\n        }\n      }\n    });\n  }\n\n  function validatesImageDimensionsToCrop(loaded_image) {\n    var reader = new FileReader();\n\n    reader.readAsDataURL(loaded_image.files[0]);\n    reader.onload = function (e) {\n      var image = new Image();\n\n      image.src = e.target.result;\n\n      image.onload = function () {\n        var height = this.height;\n        var width = this.width;\n        if ((height > 500 || width > 500)) {\n          openCropModal(loaded_image);\n        } else {\n          $('#saved_image').hide();\n        }\n      };\n    };\n  }\n\n  return PersonController;\n})();\n\nwindow.GobiertoAdmin.person_controller = new GobiertoAdmin.PersonController;\n", "window.GobiertoAdmin.PersonEventsController = (function() {\n  function PersonEventsController() {}\n\n  PersonEventsController.prototype.edit = function(wrapper, namespace) {\n    GobiertoAdmin.dynamic_content_component.handle(wrapper, namespace);\n  };\n\n  return PersonEventsController;\n})();\n\nwindow.GobiertoAdmin.person_events_controller = new GobiertoAdmin.PersonEventsController;\n", "import 'jqtree';\n\nwindow.GobiertoAdmin.SectionsController = (function() {\n  function SectionsController() {}\n\n  SectionsController.prototype.show = function() {\n    _tree();\n  };\n\n  function _endpoint(nodeId = undefined) {\n    var endpoint = window.location.pathname + '/section_items';\n    if (nodeId) { endpoint += ('/' + nodeId); }\n    return endpoint;\n  }\n\n  function _tree() {\n    let nodeMouseOver = undefined;\n\n    var $tree = $('#tree1');\n    $.getJSON(\n      _endpoint(),\n      function(data) {\n        $('#tree1').tree({\n          data: data['section_items'],\n          autoOpen: true,\n          dragAndDrop: true,\n          onDragStop: handle_drag_stop,\n          onCreateLi: function(node, $li) {\n            // Append a link to the jqtree-element div.\n            // The link has an url '#node-[id]' and a data property 'node-id'.\n\n            if (node.visibility_level === \"draft\") {\n              var newName = $li.find(\"span\").text() + \" (\"+ I18n.t(\"gobierto_admin.shared.draft\") +\")\"\n              $li.find(\"span\").text(newName);\n              $li.find(\".jqtree-title\").addClass(\"draft\");\n            }\n\n            $li.find('.jqtree-element').append(\n              '<a remote=true href=\"#node-' + node.id + '\" class=\"delete tipsit\" title=\"' + I18n.t('gobierto_admin.gobierto_cms.sections.show.delete_element') + '\"><i class=\"fas fa-trash-o\" data-node-id=\"' +\n              node.id + '\"></i></a>'\n            );\n\n            $li.find('.jqtree-element').on('mouseenter', function(e) {\n              nodeMouseOver = $tree.tree('getNodeByHtmlElement', e.target)\n            });\n          }\n        });\n      }\n    );\n\n    function handle_drag_stop(node) {\n      $.ajax({\n        url: _endpoint(node.id),\n        type: 'PUT',\n        dataType: 'json',\n        data: {\n          tree: $('#tree1').tree('toJson')\n        },\n        success: function() {},\n        error: function() {}\n      });\n    }\n\n    // Handle a click on the edit link\n    $tree.on(\n      'click', '.delete',\n      function(e) {\n        // Get the id from the 'node-id' data property\n        var node_id = $(e.target).data('node-id');\n\n        // Get the node from the tree\n        var node = $tree.tree('getNodeById', node_id);\n\n        if (node) {\n          // Display the node name\n          $tree.tree('removeNode', node);\n          $(\".tipsy\").remove()\n        }\n\n        $.ajax({\n          type: \"POST\",\n          url: _endpoint(node_id),\n          dataType: \"json\",\n          data: {\n            \"_method\": \"delete\"\n          },\n          complete: function() {}\n        });\n\n        return false;\n      }\n    );\n\n    $tree.droppable({\n      drop: function(event, ui) {\n        $.ajax({\n          url: _endpoint(),\n          type: 'POST',\n          dataType: 'json',\n          data: {\n            page_id: ui.draggable.attr(\"data-id\")\n          },\n          success: function(data) {\n            var node = $tree.tree('getNodeById', nodeMouseOver.id);\n\n            $('#tree1').tree(\n              'addNodeAfter', {\n                name: ui.draggable.attr(\"data-title\"),\n                id: data.id\n              },\n              node\n            );\n          },\n          error: function() {}\n        });\n      }\n    });\n\n    // Define the elements that can be dragged\n    $(\".draggable\").draggable({\n      revert: true,\n      start: function (event) {\n        $(event.target).css(\"pointer-events\", \"none\")\n      },\n      stop: function (event) {\n        $(event.target).css(\"pointer-events\", \"auto\")\n      }\n    });\n\n    $('#collapse').click(function() {\n      var $tree = $('#tree1');\n      var tree = $tree.tree('getTree');\n      tree.iterate(function(node) {\n\n        if (node.hasChildren()) {\n          $tree.tree('closeNode', node, true);\n        }\n        return false;\n      });\n    });\n\n    $('#expand').click(function() {\n      var $tree = $('#tree1');\n      var tree = $tree.tree('getTree');\n      tree.iterate(function(node) {\n\n        if (node.hasChildren()) {\n          $tree.tree('openNode', node, true);\n        }\n        return false;\n      });\n    });\n  }\n\n  return SectionsController;\n})();\n\nwindow.GobiertoAdmin.sections_controller = new GobiertoAdmin.SectionsController;\n", "import Sortable from 'sortablejs';\n\nwindow.GobiertoAdmin.TermsController = (function() {\n  function TermsController() {}\n\n  TermsController.prototype.index = function() {\n    _handleTermsList();\n    _handleSortableList();\n  };\n\n  function _handleTermsList() {\n    // Toggle selected element child\n    $('.v_container .v_el .icon-caret').click(function(e) {\n      e.preventDefault();\n\n      // ToDo: Don't relay on icon specific names\n      if ($(this).is('.fa-caret-right')) {\n        $(this).removeClass('fa-caret-right');\n        $(this).addClass('fa-caret-down');\n      }\n      else {\n        $(this).removeClass('fa-caret-down');\n        $(this).addClass('fa-caret-right');\n      }\n\n      $(this).parent().parent().parent().parent().find('> .list-group > .v_el').toggleClass('el-opened');\n\n    });\n\n    // Close all elements except first level\n    $('.v_container .v_heading .fa-caret-square-right').click(function(e) {\n      e.preventDefault();\n      // closes all elements\n      $('.v_container .v_el_level .v_el').removeClass('el-opened');\n      $('.fa-caret-down').removeClass('fa-caret-down').addClass('fa-caret-right');\n    });\n\n    // Open all elements except first level\n    $('.v_container .v_heading .fa-caret-square-down').click(function(e) {\n      e.preventDefault();\n      // Opens all elements\n      $('.v_container .v_el_level .v_el').addClass('el-opened');\n      $('.fa-caret-right').removeClass('fa-caret-right').addClass('fa-caret-down');\n    });\n\n    // show only action buttons (edit, delete) when hovering an item\n    // ToDo: Control that only elements for the item are shown, not for it's parents\n    $('.v_el').hover(\n      function(e) {\n        $(this).first('.v_el_actions').addClass('v_el_active');\n      },\n      function(e) {\n        $(this).first('.v_el_actions').removeClass('v_el_active');\n      }\n    );\n  }\n\n  function _handleSortableList() {\n    var nestedSortables = [].slice.call(document.querySelectorAll('.list-group[data-sortable-enabled=\"true\"]'));\n\n    // Loop through each nested sortable element\n    if (!nestedSortables.length) { return; }\n\n    for (let i = 0; i < nestedSortables.length; i++) {\n      Sortable.create(nestedSortables[i], {\n        animation: 150,\n        fallbackOnBody: true,\n        swapThreshold: 0.65,\n        onEnd: function (e) {\n          $(e.item).addClass('el-opened');\n          let idsTree = {};\n          $('.list-group').children().each((index, node) => {\n            idsTree[index] = { id: node.dataset.id, position: index, class: node.dataset.class };\n          });\n          _requestUpdate('[data-behavior=\"sortable\"]', idsTree);\n        }\n      });\n    }\n  }\n\n  function _refreshCalculations(wrapper) {\n    $.ajax({\n      url: $(wrapper).data(\"calculated-values-target\"),\n      dataType: 'json',\n      success: function(values) {\n        for (let id in values) {\n          for (let key in values[id]) {\n            $(`.v_el_decorated.values#${id}`).find(`div.${key}`).html(values[id][key]);\n          }\n        }\n      }\n    });\n  }\n\n  function _requestUpdate(wrapper, positions) {\n    $.ajax({\n      url: $(wrapper).data(\"sortable-target\"),\n      method: \"POST\",\n      data: { positions: positions },\n      success: function() {\n        _refreshCalculations('[data-behavior=\"calculated-values\"]');\n      }\n    });\n  }\n\n  TermsController.prototype.form = function() {\n    _handleTermsSelectBehaviors()\n  }\n\n  function _handleTermsSelectBehaviors() {\n    $(\"select#term_term_id\").select2()\n\n    // This should be controlled via css\n    $(\".select2-container\").css(\"padding-top\", \"22px\");\n  }\n\n  return TermsController;\n})();\n\nwindow.GobiertoAdmin.terms_controller = new GobiertoAdmin.TermsController;\n", "function userAgent(pattern) {\n  if (typeof window !== \"undefined\" && window.navigator) {\n    return !!(/*@__PURE__*/ navigator.userAgent.match(pattern));\n  }\n}\n\nexport const IE11OrLess = userAgent(\n  /(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i\n);\nexport const Edge = userAgent(/Edge/i);\nexport const FireFox = userAgent(/firefox/i);\nexport const Safari =\n  userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nexport const IOS = userAgent(/iP(ad|od|hone)/i);\nexport const ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n", "import { IE11OrLess } from \"./browser-info\";\nimport Sortable from \"../../sortable/src/Sortable\";\n\nconst captureMode = {\n  capture: false,\n  passive: false,\n};\n\nfunction on(el, event, fn) {\n  el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n  el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(/**HTMLElement*/ el, /**String*/ selector) {\n  if (!selector) return;\n\n  selector[0] === \">\" && (selector = selector.substring(1));\n\n  if (el) {\n    try {\n      if (el.matches) {\n        return el.matches(selector);\n      } else if (el.msMatchesSelector) {\n        return el.msMatchesSelector(selector);\n      } else if (el.webkitMatchesSelector) {\n        return el.webkitMatchesSelector(selector);\n      }\n    } catch (_) {\n      return false;\n    }\n  }\n\n  return false;\n}\n\nfunction getParentOrHost(el) {\n  return el.host && el !== document && el.host.nodeType\n    ? el.host\n    : el.parentNode;\n}\n\nfunction closest(\n  /**HTMLElement*/ el,\n  /**String*/ selector,\n  /**HTMLElement*/ ctx,\n  includeCTX\n) {\n  if (el) {\n    ctx = ctx || document;\n\n    do {\n      if (\n        (selector != null &&\n          (selector[0] === \">\"\n            ? el.parentNode === ctx && matches(el, selector)\n            : matches(el, selector))) ||\n        (includeCTX && el === ctx)\n      ) {\n        return el;\n      }\n\n      if (el === ctx) break;\n      /* jshint boss:true */\n    } while ((el = getParentOrHost(el)));\n  }\n\n  return null;\n}\n\nconst R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n  if (el && name) {\n    if (el.classList) {\n      el.classList[state ? \"add\" : \"remove\"](name);\n    } else {\n      let className = (\" \" + el.className + \" \")\n        .replace(R_SPACE, \" \")\n        .replace(\" \" + name + \" \", \" \");\n      el.className = (className + (state ? \" \" + name : \"\")).replace(\n        R_SPACE,\n        \" \"\n      );\n    }\n  }\n}\n\nfunction css(el, prop, val) {\n  let style = el && el.style;\n\n  if (style) {\n    if (val === void 0) {\n      if (document.defaultView && document.defaultView.getComputedStyle) {\n        val = document.defaultView.getComputedStyle(el, \"\");\n      } else if (el.currentStyle) {\n        val = el.currentStyle;\n      }\n\n      return prop === void 0 ? val : val[prop];\n    } else {\n      if (!(prop in style) && prop.indexOf(\"webkit\") === -1) {\n        prop = \"-webkit-\" + prop;\n      }\n\n      style[prop] = val + (typeof val === \"string\" ? \"\" : \"px\");\n    }\n  }\n}\n\nfunction matrix(el, selfOnly) {\n  let appliedTransforms = \"\";\n  if (typeof el === \"string\") {\n    appliedTransforms = el;\n  } else {\n    do {\n      //@ts-ignore\n      let transform = css(el, \"transform\");\n\n      if (transform && transform !== \"none\") {\n        appliedTransforms = transform + \" \" + appliedTransforms;\n      }\n      /* jshint boss:true */\n    } while (!selfOnly && (el = el.parentNode));\n  }\n\n  const matrixFn =\n    window.DOMMatrix ||\n    window.WebKitCSSMatrix ||\n    //@ts-ignore\n    window.CSSMatrix ||\n    //@ts-ignore\n    window.MSCSSMatrix;\n  /*jshint -W056 */\n  return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n  if (ctx) {\n    let list = ctx.getElementsByTagName(tagName),\n      i = 0,\n      n = list.length;\n\n    if (iterator) {\n      for (; i < n; i++) {\n        iterator(list[i], i);\n      }\n    }\n\n    return list;\n  }\n\n  return [];\n}\n\nfunction getWindowScrollingElement() {\n  let scrollingElement = document.scrollingElement;\n\n  if (scrollingElement) {\n    return scrollingElement;\n  } else {\n    return document.documentElement;\n  }\n}\n\n/**\n * Returns the \"bounding client rect\" of given element\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\n * @param  {[HTMLElement]} container              The parent the element will be placed in\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\n */\nfunction getRect(\n  el,\n  relativeToContainingBlock,\n  relativeToNonStaticParent,\n  undoScale,\n  container\n) {\n  if (!el.getBoundingClientRect && el !== window) return;\n\n  let elRect, top, left, bottom, right, height, width;\n\n  if (el !== window && el !== getWindowScrollingElement()) {\n    elRect = el.getBoundingClientRect();\n    top = elRect.top;\n    left = elRect.left;\n    bottom = elRect.bottom;\n    right = elRect.right;\n    height = elRect.height;\n    width = elRect.width;\n  } else {\n    top = 0;\n    left = 0;\n    bottom = window.innerHeight;\n    right = window.innerWidth;\n    height = window.innerHeight;\n    width = window.innerWidth;\n  }\n\n  if (\n    (relativeToContainingBlock || relativeToNonStaticParent) &&\n    el !== window\n  ) {\n    // Adjust for translate()\n    container = container || el.parentNode;\n\n    // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n    if (!IE11OrLess) {\n      do {\n        if (\n          container &&\n          container.getBoundingClientRect &&\n          //@ts-ignore\n          (css(container, \"transform\") !== \"none\" ||\n            (relativeToNonStaticParent &&\n              //@ts-ignore\n              css(container, \"position\") !== \"static\"))\n        ) {\n          let containerRect = container.getBoundingClientRect();\n\n          // Set relative to edges of padding box of container\n          top -=\n            //@ts-ignore\n            containerRect.top + parseInt(css(container, \"border-top-width\"));\n          left -=\n            //@ts-ignore\n            containerRect.left + parseInt(css(container, \"border-left-width\"));\n          bottom = top + elRect.height;\n          right = left + elRect.width;\n\n          break;\n        }\n        /* jshint boss:true */\n      } while ((container = container.parentNode));\n    }\n  }\n\n  if (undoScale && el !== window) {\n    // Adjust for scale()\n    //@ts-ignore\n    let elMatrix = matrix(container || el),\n      scaleX = elMatrix && elMatrix.a,\n      scaleY = elMatrix && elMatrix.d;\n\n    if (elMatrix) {\n      top /= scaleY;\n      left /= scaleX;\n\n      width /= scaleX;\n      height /= scaleY;\n\n      bottom = top + height;\n      right = left + width;\n    }\n  }\n\n  return {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    width: width,\n    height: height,\n  };\n}\n\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n  let parent = getParentAutoScrollElement(el, true),\n    //@ts-ignore\n    elSideVal = getRect(el)[elSide];\n\n  /* jshint boss:true */\n  while (parent) {\n    //@ts-ignore\n    let parentSideVal = getRect(parent)[parentSide],\n      visible;\n\n    if (parentSide === \"top\" || parentSide === \"left\") {\n      visible = elSideVal >= parentSideVal;\n    } else {\n      visible = elSideVal <= parentSideVal;\n    }\n\n    if (!visible) return parent;\n\n    if (parent === getWindowScrollingElement()) break;\n\n    parent = getParentAutoScrollElement(parent, false);\n  }\n\n  return false;\n}\n\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param  {HTMLElement} el       The parent element\n * @param  {Number} childNum      The index of the child\n * @param  {Object} options       Parent Sortable's options\n * @return {HTMLElement}          The child at index childNum, or null if not found\n */\nfunction getChild(el, childNum, options) {\n  let currentChild = 0,\n    i = 0,\n    children = el.children;\n\n  while (i < children.length) {\n    if (\n      children[i].style.display !== \"none\" &&\n      //@ts-ignore\n      children[i] !== Sortable.ghost &&\n      //@ts-ignore\n      children[i] !== Sortable.dragged &&\n      closest(children[i], options.draggable, el, false)\n    ) {\n      if (currentChild === childNum) {\n        return children[i];\n      }\n      currentChild++;\n    }\n\n    i++;\n  }\n  return null;\n}\n\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param  {HTMLElement} el       Parent element\n * @param  {selector} selector    Any other elements that should be ignored\n * @return {HTMLElement}          The last child, ignoring ghostEl\n */\nfunction lastChild(el, selector) {\n  let last = el.lastElementChild;\n\n  while (\n    last &&\n    //@ts-ignore\n    (last === Sortable.ghost ||\n      //@ts-ignore\n      css(last, \"display\") === \"none\" ||\n      (selector && !matches(last, selector)))\n  ) {\n    last = last.previousElementSibling;\n  }\n\n  return last || null;\n}\n\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param  {HTMLElement} el\n * @param  {selector} selector\n * @return {number}\n */\nfunction index(el, selector) {\n  let index = 0;\n\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n\n  /* jshint boss:true */\n  while ((el = el.previousElementSibling)) {\n    if (\n      el.nodeName.toUpperCase() !== \"TEMPLATE\" &&\n      //@ts-ignore\n      el !== Sortable.clone &&\n      (!selector || matches(el, selector))\n    ) {\n      index++;\n    }\n  }\n\n  return index;\n}\n\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param  {HTMLElement} el\n * @return {Array}             Offsets in the format of [left, top]\n */\nfunction getRelativeScrollOffset(el) {\n  let offsetLeft = 0,\n    offsetTop = 0,\n    winScroller = getWindowScrollingElement();\n\n  if (el) {\n    do {\n      //@ts-ignore\n      let elMatrix = matrix(el),\n        scaleX = elMatrix.a,\n        scaleY = elMatrix.d;\n\n      offsetLeft += el.scrollLeft * scaleX;\n      offsetTop += el.scrollTop * scaleY;\n    } while (el !== winScroller && (el = el.parentNode));\n  }\n\n  return [offsetLeft, offsetTop];\n}\n\n/**\n * Returns the index of the object within the given array\n * @param  {Array} arr   Array that may or may not hold the object\n * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number}      The index of the object in the array, or -1\n */\nfunction indexOfObject(arr, obj) {\n  for (let i in arr) {\n    if (!arr.hasOwnProperty(i)) continue;\n    for (let key in obj) {\n      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n    }\n  }\n  return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n  // skip to window\n  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n\n  let elem = el;\n  let gotSelf = false;\n  do {\n    // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n    if (\n      elem.clientWidth < elem.scrollWidth ||\n      elem.clientHeight < elem.scrollHeight\n    ) {\n      //@ts-ignore\n      let elemCSS = css(elem);\n      if (\n        (elem.clientWidth < elem.scrollWidth &&\n          (elemCSS.overflowX == \"auto\" || elemCSS.overflowX == \"scroll\")) ||\n        (elem.clientHeight < elem.scrollHeight &&\n          (elemCSS.overflowY == \"auto\" || elemCSS.overflowY == \"scroll\"))\n      ) {\n        if (!elem.getBoundingClientRect || elem === document.body)\n          return getWindowScrollingElement();\n\n        if (gotSelf || includeSelf) return elem;\n        gotSelf = true;\n      }\n    }\n    /* jshint boss:true */\n  } while ((elem = elem.parentNode));\n\n  return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n  if (dst && src) {\n    for (let key in src) {\n      if (src.hasOwnProperty(key)) {\n        dst[key] = src[key];\n      }\n    }\n  }\n\n  return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n  return (\n    Math.round(rect1.top) === Math.round(rect2.top) &&\n    Math.round(rect1.left) === Math.round(rect2.left) &&\n    Math.round(rect1.height) === Math.round(rect2.height) &&\n    Math.round(rect1.width) === Math.round(rect2.width)\n  );\n}\n\nlet _throttleTimeout;\nfunction throttle(callback, ms) {\n  return function () {\n    if (!_throttleTimeout) {\n      let args = arguments,\n        _this = this;\n\n      if (args.length === 1) {\n        callback.call(_this, args[0]);\n      } else {\n        callback.apply(_this, args);\n      }\n\n      _throttleTimeout = setTimeout(function () {\n        _throttleTimeout = void 0;\n      }, ms);\n    }\n  };\n}\n\nfunction cancelThrottle() {\n  clearTimeout(_throttleTimeout);\n  _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n  el.scrollLeft += x;\n  el.scrollTop += y;\n}\n\nfunction clone(el) {\n  //@ts-ignore\n  let Polymer = window.Polymer;\n  //@ts-ignore\n  let $ = window.jQuery || window.Zepto;\n\n  if (Polymer && Polymer.dom) {\n    return Polymer.dom(el).cloneNode(true);\n  } else if ($) {\n    return $(el).clone(true)[0];\n  } else {\n    return el.cloneNode(true);\n  }\n}\n\nfunction setRect(el, rect) {\n  css(el, \"position\", \"absolute\");\n  css(el, \"top\", rect.top);\n  css(el, \"left\", rect.left);\n  css(el, \"width\", rect.width);\n  css(el, \"height\", rect.height);\n}\n\nfunction unsetRect(el) {\n  css(el, \"position\", \"\");\n  css(el, \"top\", \"\");\n  css(el, \"left\", \"\");\n  css(el, \"width\", \"\");\n  css(el, \"height\", \"\");\n}\n\nconst expando = \"Sortable\" + new Date().getTime();\n\nexport {\n  on,\n  off,\n  matches,\n  getParentOrHost,\n  closest,\n  toggleClass,\n  css,\n  matrix,\n  find,\n  getWindowScrollingElement,\n  getRect,\n  isScrolledPast,\n  getChild,\n  lastChild,\n  index,\n  getRelativeScrollOffset,\n  indexOfObject,\n  getParentAutoScrollElement,\n  extend,\n  isRectEqual,\n  throttle,\n  cancelThrottle,\n  scrollBy,\n  clone,\n  setRect,\n  unsetRect,\n  expando,\n};\n", "let plugins = [];\n\nconst defaults = {\n  initializeByDefault: true,\n};\n\nconst pluginManager = {\n  mount(plugin) {\n    // Set default static properties\n    for (let option in defaults) {\n      if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n        plugin[option] = defaults[option];\n      }\n    }\n    plugins.push(plugin);\n  },\n  pluginEvent(eventName, sortable, evt) {\n    this.eventCanceled = false;\n    evt.cancel = () => {\n      this.eventCanceled = true;\n    };\n    const eventNameGlobal = eventName + \"Global\";\n    plugins.forEach((plugin) => {\n      if (!sortable[plugin.pluginName]) return;\n      // Fire global events if it exists in this sortable\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt });\n      }\n\n      // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n      if (\n        sortable.options[plugin.pluginName] &&\n        sortable[plugin.pluginName][eventName]\n      ) {\n        sortable[plugin.pluginName][eventName]({ sortable, ...evt });\n      }\n    });\n  },\n  initializePlugins(sortable, el, defaults, options) {\n    plugins.forEach((plugin) => {\n      const pluginName = plugin.pluginName;\n      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n\n      let initialized = new plugin(sortable, el, sortable.options);\n      initialized.sortable = sortable;\n      initialized.options = sortable.options;\n      sortable[pluginName] = initialized;\n\n      // Add default options from plugin\n      Object.assign(defaults, initialized.defaults);\n    });\n\n    for (let option in sortable.options) {\n      if (!sortable.options.hasOwnProperty(option)) continue;\n      let modified = this.modifyOption(\n        sortable,\n        option,\n        sortable.options[option]\n      );\n      if (typeof modified !== \"undefined\") {\n        sortable.options[option] = modified;\n      }\n    }\n  },\n  getEventProperties(name, sortable) {\n    let eventProperties = {};\n    plugins.forEach((plugin) => {\n      if (typeof plugin.eventProperties !== \"function\") return;\n      Object.assign(\n        eventProperties,\n        plugin.eventProperties.call(sortable[plugin.pluginName], name)\n      );\n    });\n\n    return eventProperties;\n  },\n  modifyOption(sortable, name, value) {\n    let modifiedValue;\n    plugins.forEach((plugin) => {\n      // Plugin must exist on the Sortable\n      if (!sortable[plugin.pluginName]) return;\n\n      // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n      if (\n        plugin.optionListeners &&\n        typeof plugin.optionListeners[name] === \"function\"\n      ) {\n        modifiedValue = plugin.optionListeners[name].call(\n          sortable[plugin.pluginName],\n          value\n        );\n      }\n    });\n\n    return modifiedValue;\n  },\n};\n\nexport default pluginManager;\n", "import { expando, IE11OrLess, Edge } from \"../../utils/src\";\nimport PluginManager from \"./PluginManager\";\n\nexport default function dispatchEvent({\n  sortable,\n  rootEl,\n  name,\n  targetEl,\n  cloneEl,\n  toEl,\n  fromEl,\n  oldIndex,\n  newIndex,\n  oldDraggableIndex,\n  newDraggableIndex,\n  originalEvent,\n  putSortable,\n  extraEventProperties,\n}) {\n  sortable = sortable || (rootEl && rootEl[expando]);\n  if (!sortable) return;\n\n  let evt,\n    options = sortable.options,\n    onName = \"on\" + name.charAt(0).toUpperCase() + name.substr(1);\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true,\n    });\n  } else {\n    evt = document.createEvent(\"Event\");\n    evt.initEvent(name, true, true);\n  }\n\n  evt.to = toEl || rootEl;\n  evt.from = fromEl || rootEl;\n  evt.item = targetEl || rootEl;\n  evt.clone = cloneEl;\n\n  evt.oldIndex = oldIndex;\n  evt.newIndex = newIndex;\n\n  evt.oldDraggableIndex = oldDraggableIndex;\n  evt.newDraggableIndex = newDraggableIndex;\n\n  evt.originalEvent = originalEvent;\n  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n  let allEventProperties = {\n    ...extraEventProperties,\n    ...PluginManager.getEventProperties(name, sortable),\n  };\n  for (let option in allEventProperties) {\n    evt[option] = allEventProperties[option];\n  }\n\n  if (rootEl) {\n    rootEl.dispatchEvent(evt);\n  }\n\n  if (options[onName]) {\n    options[onName].call(sortable, evt);\n  }\n}\n", "import { version } from \"../package.json\";\nimport AnimationStateManager from \"./Animation\";\nimport PluginManager from \"./PluginManager\";\nimport dispatchEvent from \"./EventDispatcher\";\n/**\n * @todo import as namespace: import * as utils from \"../../utils/src\"\n */\nimport {\n  on,\n  off,\n  closest,\n  toggleClass,\n  css,\n  matrix,\n  find,\n  getWindowScrollingElement,\n  getRect,\n  isScrolledPast,\n  getChild,\n  lastChild,\n  index,\n  getRelativeScrollOffset,\n  extend,\n  throttle,\n  scrollBy,\n  clone,\n  expando,\n  IE11OrLess,\n  Edge,\n  FireFox,\n  Safari,\n  IOS,\n  ChromeForAndroid,\n} from \"../../utils/src\";\n\nlet pluginEvent = function (\n  eventName,\n  sortable,\n  //@ts-ignore\n  { evt: originalEvent, ...data } = {}\n) {\n  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, {\n    dragEl,\n    parentEl,\n    ghostEl,\n    rootEl,\n    nextEl,\n    lastDownEl,\n    cloneEl,\n    cloneHidden,\n    dragStarted: moved,\n    putSortable,\n    //@ts-ignore\n    activeSortable: Sortable.active,\n    originalEvent,\n\n    oldIndex,\n    oldDraggableIndex,\n    newIndex,\n    newDraggableIndex,\n\n    hideGhostForTarget: _hideGhostForTarget,\n    unhideGhostForTarget: _unhideGhostForTarget,\n\n    cloneNowHidden() {\n      cloneHidden = true;\n    },\n    cloneNowShown() {\n      cloneHidden = false;\n    },\n\n    dispatchSortableEvent(name) {\n      _dispatchEvent({ sortable, name, originalEvent });\n    },\n\n    ...data,\n  });\n};\n\nfunction _dispatchEvent(info) {\n  dispatchEvent({\n    putSortable,\n    cloneEl,\n    targetEl: dragEl,\n    rootEl,\n    oldIndex,\n    oldDraggableIndex,\n    newIndex,\n    newDraggableIndex,\n    ...info,\n  });\n}\n\nlet dragEl,\n  parentEl,\n  ghostEl,\n  rootEl,\n  nextEl,\n  lastDownEl,\n  cloneEl,\n  cloneHidden,\n  oldIndex,\n  newIndex,\n  oldDraggableIndex,\n  newDraggableIndex,\n  activeGroup,\n  putSortable,\n  awaitingDragStarted = false,\n  ignoreNextClick = false,\n  sortables = [],\n  tapEvt,\n  touchEvt,\n  lastDx,\n  lastDy,\n  tapDistanceLeft,\n  tapDistanceTop,\n  moved,\n  lastTarget,\n  lastDirection,\n  pastFirstInvertThresh = false,\n  isCircumstantialInvert = false,\n  targetMoveDistance,\n  // For positioning ghost absolutely\n  ghostRelativeParent,\n  ghostRelativeParentInitialScroll = [], // (left, top)\n  _silent = false,\n  savedInputChecked = [];\n\n/** @const */\nconst documentExists = typeof document !== \"undefined\",\n  PositionGhostAbsolutely = IOS,\n  CSSFloatProperty = Edge || IE11OrLess ? \"cssFloat\" : \"float\",\n  // This will not pass for IE9, because IE9 DnD only works on anchors\n  supportDraggable =\n    documentExists &&\n    !ChromeForAndroid &&\n    !IOS &&\n    \"draggable\" in document.createElement(\"div\"),\n  supportCssPointerEvents = (function () {\n    if (!documentExists) return;\n    // false when <= IE11\n    if (IE11OrLess) {\n      return false;\n    }\n    let el = document.createElement(\"x\");\n    el.style.cssText = \"pointer-events:auto\";\n    return el.style.pointerEvents === \"auto\";\n  })(),\n  _detectDirection = function (el, options) {\n    //@ts-ignore\n    let elCSS = css(el),\n      elWidth =\n        parseInt(elCSS.width) -\n        parseInt(elCSS.paddingLeft) -\n        parseInt(elCSS.paddingRight) -\n        parseInt(elCSS.borderLeftWidth) -\n        parseInt(elCSS.borderRightWidth),\n      child1 = getChild(el, 0, options),\n      child2 = getChild(el, 1, options),\n      //@ts-ignore\n      firstChildCSS = child1 && css(child1),\n      //@ts-ignore\n      secondChildCSS = child2 && css(child2),\n      firstChildWidth =\n        firstChildCSS &&\n        parseInt(firstChildCSS.marginLeft) +\n          parseInt(firstChildCSS.marginRight) +\n          //@ts-ignore\n          getRect(child1).width,\n      secondChildWidth =\n        secondChildCSS &&\n        parseInt(secondChildCSS.marginLeft) +\n          parseInt(secondChildCSS.marginRight) +\n          //@ts-ignore\n          getRect(child2).width;\n\n    if (elCSS.display === \"flex\") {\n      return elCSS.flexDirection === \"column\" ||\n        elCSS.flexDirection === \"column-reverse\"\n        ? \"vertical\"\n        : \"horizontal\";\n    }\n\n    if (elCSS.display === \"grid\") {\n      return elCSS.gridTemplateColumns.split(\" \").length <= 1\n        ? \"vertical\"\n        : \"horizontal\";\n    }\n\n    if (child1 && firstChildCSS.float && firstChildCSS.float !== \"none\") {\n      let touchingSideChild2 =\n        firstChildCSS.float === \"left\" ? \"left\" : \"right\";\n\n      return child2 &&\n        (secondChildCSS.clear === \"both\" ||\n          secondChildCSS.clear === touchingSideChild2)\n        ? \"vertical\"\n        : \"horizontal\";\n    }\n\n    return child1 &&\n      (firstChildCSS.display === \"block\" ||\n        firstChildCSS.display === \"flex\" ||\n        firstChildCSS.display === \"table\" ||\n        firstChildCSS.display === \"grid\" ||\n        (firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === \"none\") ||\n        (child2 &&\n          elCSS[CSSFloatProperty] === \"none\" &&\n          firstChildWidth + secondChildWidth > elWidth))\n      ? \"vertical\"\n      : \"horizontal\";\n  },\n  _dragElInRowColumn = function (dragRect, targetRect, vertical) {\n    let dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n      dragElOppLength = vertical ? dragRect.width : dragRect.height,\n      targetS1Opp = vertical ? targetRect.left : targetRect.top,\n      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n      targetOppLength = vertical ? targetRect.width : targetRect.height;\n\n    return (\n      dragElS1Opp === targetS1Opp ||\n      dragElS2Opp === targetS2Opp ||\n      dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2\n    );\n  },\n  /**\n   * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\n   * @param  {Number} x      X position\n   * @param  {Number} y      Y position\n   * @return {HTMLElement}   Element of the first found nearest Sortable\n   */\n  _detectNearestEmptySortable = function (x, y) {\n    let ret;\n    sortables.some((sortable) => {\n      //@ts-ignore\n      if (lastChild(sortable)) return;\n\n      //@ts-ignore\n      let rect = getRect(sortable),\n        threshold = sortable[expando].options.emptyInsertThreshold,\n        insideHorizontally =\n          x >= rect.left - threshold && x <= rect.right + threshold,\n        insideVertically =\n          y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n      if (threshold && insideHorizontally && insideVertically) {\n        return (ret = sortable);\n      }\n    });\n    return ret;\n  },\n  _prepareGroup = function (options) {\n    function toFn(value, pull) {\n      return function (to, from, dragEl, evt) {\n        let sameGroup =\n          to.options.group.name &&\n          from.options.group.name &&\n          to.options.group.name === from.options.group.name;\n\n        if (value == null && (pull || sameGroup)) {\n          // Default pull value\n          // Default pull and put value if same group\n          return true;\n        } else if (value == null || value === false) {\n          return false;\n        } else if (pull && value === \"clone\") {\n          return value;\n        } else if (typeof value === \"function\") {\n          return toFn(value(to, from, dragEl, evt), pull)(\n            to,\n            from,\n            dragEl,\n            evt\n          );\n        } else {\n          let otherGroup = (pull ? to : from).options.group.name;\n\n          return (\n            value === true ||\n            (typeof value === \"string\" && value === otherGroup) ||\n            (value.join && value.indexOf(otherGroup) > -1)\n          );\n        }\n      };\n    }\n\n    let group = {};\n    let originalGroup = options.group;\n\n    if (!originalGroup || typeof originalGroup != \"object\") {\n      originalGroup = { name: originalGroup };\n    }\n\n    //@ts-ignore\n    group.name = originalGroup.name;\n    //@ts-ignore\n    group.checkPull = toFn(originalGroup.pull, true);\n    //@ts-ignore\n    group.checkPut = toFn(originalGroup.put);\n    //@ts-ignore\n    group.revertClone = originalGroup.revertClone;\n\n    options.group = group;\n  },\n  _hideGhostForTarget = function () {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, \"display\", \"none\");\n    }\n  },\n  _unhideGhostForTarget = function () {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, \"display\", \"\");\n    }\n  };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists) {\n  document.addEventListener(\n    \"click\",\n    function (evt) {\n      if (ignoreNextClick) {\n        evt.preventDefault();\n        evt.stopPropagation && evt.stopPropagation();\n        evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n        ignoreNextClick = false;\n        return false;\n      }\n    },\n    true\n  );\n}\n\nlet nearestEmptyInsertDetectEvent = function (evt) {\n  if (dragEl) {\n    evt = evt.touches ? evt.touches[0] : evt;\n    let nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n    if (nearest) {\n      // Create imitation event\n      let event = {};\n      for (let i in evt) {\n        if (evt.hasOwnProperty(i)) {\n          event[i] = evt[i];\n        }\n      }\n      //@ts-ignore\n      event.target = event.rootEl = nearest;\n      //@ts-ignore\n      event.preventDefault = void 0;\n      //@ts-ignore\n      event.stopPropagation = void 0;\n      nearest[expando]._onDragOver(event);\n    }\n  }\n};\n\nlet _checkOutsideTargetEl = function (evt) {\n  if (dragEl) {\n    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n  }\n};\n\n/**\n * @class  Sortable\n * @param  {HTMLElement}  el\n * @param  {Object}       [options]\n */\nfunction Sortable(el, options) {\n  if (!(el && el.nodeType && el.nodeType === 1)) {\n    throw `Sortable: \\`el\\` must be an HTMLElement, not ${{}.toString.call(\n      el\n    )}`;\n  }\n\n  this.el = el; // root element\n  this.options = options = Object.assign({}, options);\n\n  // Export instance\n  el[expando] = this;\n\n  let defaults = {\n    group: null,\n    sort: true,\n    disabled: false,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(el.nodeName) ? \">li\" : \">*\",\n    swapThreshold: 1, // percentage; 0 <= x <= 1\n    invertSwap: false, // invert always\n    invertedSwapThreshold: null, // will be set to same as swapThreshold if default\n    removeCloneOnHide: true,\n    direction: function () {\n      return _detectDirection(el, this.options);\n    },\n    ghostClass: \"sortable-ghost\",\n    chosenClass: \"sortable-chosen\",\n    dragClass: \"sortable-drag\",\n    ignore: \"a, img\",\n    filter: null,\n    preventOnFilter: true,\n    animation: 0,\n    easing: null,\n    setData: function (dataTransfer, dragEl) {\n      dataTransfer.setData(\"Text\", dragEl.textContent);\n    },\n    dropBubble: false,\n    dragoverBubble: false,\n    dataIdAttr: \"data-id\",\n    delay: 0,\n    delayOnTouchOnly: false,\n    touchStartThreshold:\n      (Number.parseInt ? Number : window).parseInt(\n        //@ts-ignore\n        window.devicePixelRatio,\n        10\n      ) || 1,\n    forceFallback: false,\n    fallbackClass: \"sortable-fallback\",\n    fallbackOnBody: false,\n    fallbackTolerance: 0,\n    fallbackOffset: { x: 0, y: 0 },\n    supportPointer:\n      //@ts-ignore\n      Sortable.supportPointer !== false && \"PointerEvent\" in window,\n    emptyInsertThreshold: 5,\n  };\n\n  //@ts-ignore\n  PluginManager.initializePlugins(this, el, defaults);\n\n  // Set default options\n  for (let name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n\n  _prepareGroup(options);\n\n  // Bind all private methods\n  for (let fn in this) {\n    if (fn.charAt(0) === \"_\" && typeof this[fn] === \"function\") {\n      this[fn] = this[fn].bind(this);\n    }\n  }\n\n  // Setup drag mode\n  this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n  if (this.nativeDraggable) {\n    // Touch start threshold cannot be greater than the native dragstart threshold\n    this.options.touchStartThreshold = 1;\n  }\n\n  // Bind events\n  if (options.supportPointer) {\n    on(el, \"pointerdown\", this._onTapStart);\n  } else {\n    on(el, \"mousedown\", this._onTapStart);\n    on(el, \"touchstart\", this._onTapStart);\n  }\n\n  if (this.nativeDraggable) {\n    on(el, \"dragover\", this);\n    on(el, \"dragenter\", this);\n  }\n\n  sortables.push(this.el);\n\n  // Restore sorting\n  options.store &&\n    options.store.get &&\n    this.sort(options.store.get(this) || []);\n\n  // Add animation state manager\n  Object.assign(this, AnimationStateManager());\n}\n\nSortable.prototype = /** @lends Sortable.prototype */ {\n  constructor: Sortable,\n\n  _isOutsideThisEl: function (target) {\n    if (!this.el.contains(target) && target !== this.el) {\n      lastTarget = null;\n    }\n  },\n\n  _getDirection: function (evt, target) {\n    return typeof this.options.direction === \"function\"\n      ? this.options.direction.call(this, evt, target, dragEl)\n      : this.options.direction;\n  },\n\n  _onTapStart: function (/** Event|TouchEvent */ evt) {\n    if (!evt.cancelable) return;\n    let _this = this,\n      el = this.el,\n      options = this.options,\n      preventOnFilter = options.preventOnFilter,\n      type = evt.type,\n      touch =\n        (evt.touches && evt.touches[0]) ||\n        (evt.pointerType && evt.pointerType === \"touch\" && evt),\n      target = (touch || evt).target,\n      originalTarget =\n        (evt.target.shadowRoot &&\n          ((evt.path && evt.path[0]) ||\n            (evt.composedPath && evt.composedPath()[0]))) ||\n        target,\n      filter = options.filter;\n\n    _saveInputCheckedState(el);\n\n    // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n    if (dragEl) {\n      return;\n    }\n\n    if (\n      (/mousedown|pointerdown/.test(type) && evt.button !== 0) ||\n      options.disabled\n    ) {\n      return; // only left button and enabled\n    }\n\n    // cancel dnd if original target is content editable\n    if (originalTarget.isContentEditable) {\n      return;\n    }\n\n    // Safari ignores further event handling after mousedown\n    if (\n      !this.nativeDraggable &&\n      Safari &&\n      target &&\n      target.tagName.toUpperCase() === \"SELECT\"\n    ) {\n      return;\n    }\n\n    target = closest(target, options.draggable, el, false);\n\n    if (target && target.animated) {\n      return;\n    }\n\n    if (lastDownEl === target) {\n      // Ignoring duplicate `down`\n      return;\n    }\n\n    // Get the index of the dragged element within its parent\n    //@ts-ignore\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable);\n\n    // Check filter\n    if (typeof filter === \"function\") {\n      if (filter.call(this, evt, target, this)) {\n        _dispatchEvent({\n          sortable: _this,\n          rootEl: originalTarget,\n          name: \"filter\",\n          targetEl: target,\n          toEl: el,\n          fromEl: el,\n        });\n        pluginEvent(\"filter\", _this, { evt });\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    } else if (filter) {\n      filter = filter.split(\",\").some(function (criteria) {\n        criteria = closest(originalTarget, criteria.trim(), el, false);\n\n        if (criteria) {\n          _dispatchEvent({\n            sortable: _this,\n            rootEl: criteria,\n            name: \"filter\",\n            targetEl: target,\n            fromEl: el,\n            toEl: el,\n          });\n          pluginEvent(\"filter\", _this, { evt });\n          return true;\n        }\n      });\n\n      if (filter) {\n        preventOnFilter && evt.cancelable && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    }\n\n    // Prepare `dragstart`\n    this._prepareDragStart(evt, touch, target);\n  },\n\n  _prepareDragStart: function (\n    /** Event */ evt,\n    /** Touch */ touch,\n    /** HTMLElement */ target\n  ) {\n    let _this = this,\n      el = _this.el,\n      options = _this.options,\n      ownerDocument = el.ownerDocument,\n      dragStartFn;\n\n    if (target && !dragEl && target.parentNode === el) {\n      //@ts-ignore\n      let dragRect = getRect(target);\n      rootEl = el;\n      dragEl = target;\n      parentEl = dragEl.parentNode;\n      nextEl = dragEl.nextSibling;\n      lastDownEl = target;\n      activeGroup = options.group;\n\n      //@ts-ignore\n      Sortable.dragged = dragEl;\n\n      tapEvt = {\n        target: dragEl,\n        clientX: (touch || evt).clientX,\n        clientY: (touch || evt).clientY,\n      };\n\n      tapDistanceLeft = tapEvt.clientX - dragRect.left;\n      tapDistanceTop = tapEvt.clientY - dragRect.top;\n\n      this._lastX = (touch || evt).clientX;\n      this._lastY = (touch || evt).clientY;\n\n      dragEl.style[\"will-change\"] = \"all\";\n\n      dragStartFn = function () {\n        pluginEvent(\"delayEnded\", _this, { evt });\n        //@ts-ignore\n        if (Sortable.eventCanceled) {\n          _this._onDrop();\n          return;\n        }\n        // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n        _this._disableDelayedDragEvents();\n\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        }\n\n        // Bind the events: dragstart/dragend\n        _this._triggerDragStart(evt, touch);\n\n        // Drag start event\n        _dispatchEvent({\n          sortable: _this,\n          name: \"choose\",\n          originalEvent: evt,\n        });\n\n        // Chosen item\n        toggleClass(dragEl, options.chosenClass, true);\n      };\n\n      // Disable \"draggable\"\n      options.ignore.split(\",\").forEach(function (criteria) {\n        find(dragEl, criteria.trim(), _disableDraggable);\n      });\n\n      on(ownerDocument, \"dragover\", nearestEmptyInsertDetectEvent);\n      on(ownerDocument, \"mousemove\", nearestEmptyInsertDetectEvent);\n      on(ownerDocument, \"touchmove\", nearestEmptyInsertDetectEvent);\n\n      on(ownerDocument, \"mouseup\", _this._onDrop);\n      on(ownerDocument, \"touchend\", _this._onDrop);\n      on(ownerDocument, \"touchcancel\", _this._onDrop);\n\n      // Make dragEl draggable (must be before delay for FireFox)\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n\n      pluginEvent(\"delayStart\", this, { evt });\n\n      // Delay is impossible for native DnD in Edge or IE\n      if (\n        options.delay &&\n        (!options.delayOnTouchOnly || touch) &&\n        (!this.nativeDraggable || !(Edge || IE11OrLess))\n      ) {\n        //@ts-ignore\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n          return;\n        }\n        // If the user moves the pointer or let go the click or touch\n        // before the delay has been reached:\n        // disable the delayed drag\n        on(ownerDocument, \"mouseup\", _this._disableDelayedDrag);\n        on(ownerDocument, \"touchend\", _this._disableDelayedDrag);\n        on(ownerDocument, \"touchcancel\", _this._disableDelayedDrag);\n        on(ownerDocument, \"mousemove\", _this._delayedDragTouchMoveHandler);\n        on(ownerDocument, \"touchmove\", _this._delayedDragTouchMoveHandler);\n        options.supportPointer &&\n          on(ownerDocument, \"pointermove\", _this._delayedDragTouchMoveHandler);\n\n        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n      } else {\n        dragStartFn();\n      }\n    }\n  },\n\n  _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/ e) {\n    let touch = e.touches ? e.touches[0] : e;\n    if (\n      Math.max(\n        Math.abs(touch.clientX - this._lastX),\n        Math.abs(touch.clientY - this._lastY)\n      ) >=\n      Math.floor(\n        this.options.touchStartThreshold /\n          ((this.nativeDraggable && window.devicePixelRatio) || 1)\n      )\n    ) {\n      this._disableDelayedDrag();\n    }\n  },\n\n  _disableDelayedDrag: function () {\n    dragEl && _disableDraggable(dragEl);\n    clearTimeout(this._dragStartTimer);\n\n    this._disableDelayedDragEvents();\n  },\n\n  _disableDelayedDragEvents: function () {\n    let ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, \"mouseup\", this._disableDelayedDrag);\n    off(ownerDocument, \"touchend\", this._disableDelayedDrag);\n    off(ownerDocument, \"touchcancel\", this._disableDelayedDrag);\n    off(ownerDocument, \"mousemove\", this._delayedDragTouchMoveHandler);\n    off(ownerDocument, \"touchmove\", this._delayedDragTouchMoveHandler);\n    off(ownerDocument, \"pointermove\", this._delayedDragTouchMoveHandler);\n  },\n\n  _triggerDragStart: function (/** Event */ evt, /** Touch */ touch) {\n    touch = touch || (evt.pointerType == \"touch\" && evt);\n\n    if (!this.nativeDraggable || touch) {\n      if (this.options.supportPointer) {\n        on(document, \"pointermove\", this._onTouchMove);\n      } else if (touch) {\n        on(document, \"touchmove\", this._onTouchMove);\n      } else {\n        on(document, \"mousemove\", this._onTouchMove);\n      }\n    } else {\n      on(dragEl, \"dragend\", this);\n      on(rootEl, \"dragstart\", this._onDragStart);\n    }\n\n    try {\n      //@ts-ignore\n      if (document.selection) {\n        // Timeout neccessary for IE9\n        _nextTick(function () {\n          //@ts-ignore\n          document.selection.empty();\n        });\n      } else {\n        window.getSelection().removeAllRanges();\n      }\n    } catch (err) {}\n  },\n\n  _dragStarted: function (fallback, evt) {\n    let _this = this;\n    awaitingDragStarted = false;\n    if (rootEl && dragEl) {\n      pluginEvent(\"dragStarted\", this, { evt });\n\n      if (this.nativeDraggable) {\n        on(document, \"dragover\", _checkOutsideTargetEl);\n      }\n      let options = this.options;\n\n      // Apply effect\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n\n      //@ts-ignore\n      Sortable.active = this;\n\n      fallback && this._appendGhost();\n\n      // Drag start event\n      _dispatchEvent({\n        sortable: this,\n        name: \"start\",\n        originalEvent: evt,\n      });\n    } else {\n      this._nulling();\n    }\n  },\n\n  _emulateDragOver: function () {\n    if (touchEvt) {\n      this._lastX = touchEvt.clientX;\n      this._lastY = touchEvt.clientY;\n\n      _hideGhostForTarget();\n\n      let target = document.elementFromPoint(\n        touchEvt.clientX,\n        touchEvt.clientY\n      );\n      let parent = target;\n\n      while (target && target.shadowRoot) {\n        target = target.shadowRoot.elementFromPoint(\n          touchEvt.clientX,\n          touchEvt.clientY\n        );\n        if (target === parent) break;\n        parent = target;\n      }\n\n      dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n      if (parent) {\n        do {\n          if (parent[expando]) {\n            let inserted;\n\n            inserted = parent[expando]._onDragOver({\n              clientX: touchEvt.clientX,\n              clientY: touchEvt.clientY,\n              target: target,\n              rootEl: parent,\n            });\n\n            if (inserted && !this.options.dragoverBubble) {\n              break;\n            }\n          }\n\n          target = parent; // store last element\n        } while (\n          /* jshint boss:true */\n          //@ts-ignore\n          (parent = parent.parentNode)\n        );\n      }\n\n      _unhideGhostForTarget();\n    }\n  },\n\n  _onTouchMove: function (/**TouchEvent*/ evt) {\n    if (tapEvt) {\n      let options = this.options,\n        fallbackTolerance = options.fallbackTolerance,\n        fallbackOffset = options.fallbackOffset,\n        touch = evt.touches ? evt.touches[0] : evt,\n        ghostMatrix = ghostEl && matrix(ghostEl, true),\n        scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n        scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n        relativeScrollOffset =\n          PositionGhostAbsolutely &&\n          ghostRelativeParent &&\n          getRelativeScrollOffset(ghostRelativeParent),\n        dx =\n          (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) +\n          (relativeScrollOffset\n            ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0]\n            : 0) /\n            (scaleX || 1),\n        dy =\n          (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) +\n          (relativeScrollOffset\n            ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1]\n            : 0) /\n            (scaleY || 1);\n\n      // only set the status to dragging, when we are actually dragging\n      //@ts-ignore\n      if (!Sortable.active && !awaitingDragStarted) {\n        if (\n          fallbackTolerance &&\n          Math.max(\n            Math.abs(touch.clientX - this._lastX),\n            Math.abs(touch.clientY - this._lastY)\n          ) < fallbackTolerance\n        ) {\n          return;\n        }\n        this._onDragStart(evt, true);\n      }\n\n      if (ghostEl) {\n        if (ghostMatrix) {\n          ghostMatrix.e += dx - (lastDx || 0);\n          ghostMatrix.f += dy - (lastDy || 0);\n        } else {\n          ghostMatrix = {\n            a: 1,\n            b: 0,\n            c: 0,\n            d: 1,\n            e: dx,\n            f: dy,\n          };\n        }\n\n        let cssMatrix = `matrix(${ghostMatrix.a},${ghostMatrix.b},${ghostMatrix.c},${ghostMatrix.d},${ghostMatrix.e},${ghostMatrix.f})`;\n\n        css(ghostEl, \"webkitTransform\", cssMatrix);\n        css(ghostEl, \"mozTransform\", cssMatrix);\n        css(ghostEl, \"msTransform\", cssMatrix);\n        css(ghostEl, \"transform\", cssMatrix);\n\n        lastDx = dx;\n        lastDy = dy;\n\n        touchEvt = touch;\n      }\n\n      evt.cancelable && evt.preventDefault();\n    }\n  },\n\n  _appendGhost: function () {\n    // Bug if using scale(): https://stackoverflow.com/questions/2637058\n    // Not being adjusted for\n    if (!ghostEl) {\n      let container = this.options.fallbackOnBody ? document.body : rootEl,\n        rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n        options = this.options;\n\n      // Position absolutely\n      if (PositionGhostAbsolutely) {\n        // Get relatively positioned parent\n        ghostRelativeParent = container;\n\n        while (\n          //@ts-ignore\n          css(ghostRelativeParent, \"position\") === \"static\" &&\n          //@ts-ignore\n          css(ghostRelativeParent, \"transform\") === \"none\" &&\n          ghostRelativeParent !== document\n        ) {\n          ghostRelativeParent = ghostRelativeParent.parentNode;\n        }\n\n        if (\n          ghostRelativeParent !== document.body &&\n          ghostRelativeParent !== document.documentElement\n        ) {\n          if (ghostRelativeParent === document)\n            ghostRelativeParent = getWindowScrollingElement();\n\n          rect.top += ghostRelativeParent.scrollTop;\n          rect.left += ghostRelativeParent.scrollLeft;\n        } else {\n          ghostRelativeParent = getWindowScrollingElement();\n        }\n        ghostRelativeParentInitialScroll = getRelativeScrollOffset(\n          ghostRelativeParent\n        );\n      }\n\n      ghostEl = dragEl.cloneNode(true);\n\n      toggleClass(ghostEl, options.ghostClass, false);\n      toggleClass(ghostEl, options.fallbackClass, true);\n      toggleClass(ghostEl, options.dragClass, true);\n\n      css(ghostEl, \"transition\", \"\");\n      css(ghostEl, \"transform\", \"\");\n\n      css(ghostEl, \"box-sizing\", \"border-box\");\n      css(ghostEl, \"margin\", 0);\n      css(ghostEl, \"top\", rect.top);\n      css(ghostEl, \"left\", rect.left);\n      css(ghostEl, \"width\", rect.width);\n      css(ghostEl, \"height\", rect.height);\n      css(ghostEl, \"opacity\", \"0.8\");\n      css(ghostEl, \"position\", PositionGhostAbsolutely ? \"absolute\" : \"fixed\");\n      css(ghostEl, \"zIndex\", \"100000\");\n      css(ghostEl, \"pointerEvents\", \"none\");\n\n      //@ts-ignore\n      Sortable.ghost = ghostEl;\n\n      container.appendChild(ghostEl);\n\n      // Set transform-origin\n      css(\n        ghostEl,\n        \"transform-origin\",\n        (tapDistanceLeft / parseInt(ghostEl.style.width)) * 100 +\n          \"% \" +\n          (tapDistanceTop / parseInt(ghostEl.style.height)) * 100 +\n          \"%\"\n      );\n    }\n  },\n\n  _onDragStart: function (/**Event*/ evt, /**boolean*/ fallback) {\n    let _this = this;\n    let dataTransfer = evt.dataTransfer;\n    let options = _this.options;\n\n    pluginEvent(\"dragStart\", this, { evt });\n    //@ts-ignore\n    if (Sortable.eventCanceled) {\n      this._onDrop();\n      return;\n    }\n\n    pluginEvent(\"setupClone\", this);\n    //@ts-ignore\n    if (!Sortable.eventCanceled) {\n      cloneEl = clone(dragEl);\n\n      cloneEl.draggable = false;\n      cloneEl.style[\"will-change\"] = \"\";\n\n      this._hideClone();\n\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      //@ts-ignore\n      Sortable.clone = cloneEl;\n    }\n\n    // #1143: IFrame support workaround\n    _this.cloneId = _nextTick(function () {\n      pluginEvent(\"clone\", _this);\n      //@ts-ignore\n      if (Sortable.eventCanceled) return;\n\n      if (!_this.options.removeCloneOnHide) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      }\n      _this._hideClone();\n\n      _dispatchEvent({\n        sortable: _this,\n        name: \"clone\",\n      });\n    });\n\n    !fallback && toggleClass(dragEl, options.dragClass, true);\n\n    // Set proper drop events\n    if (fallback) {\n      ignoreNextClick = true;\n      _this._loopId = setInterval(_this._emulateDragOver, 50);\n    } else {\n      // Undo what was set in _prepareDragStart before drag started\n      off(document, \"mouseup\", _this._onDrop);\n      off(document, \"touchend\", _this._onDrop);\n      off(document, \"touchcancel\", _this._onDrop);\n\n      if (dataTransfer) {\n        dataTransfer.effectAllowed = \"move\";\n        options.setData && options.setData.call(_this, dataTransfer, dragEl);\n      }\n\n      on(document, \"drop\", _this);\n\n      // #1276 fix:\n      css(dragEl, \"transform\", \"translateZ(0)\");\n    }\n\n    awaitingDragStarted = true;\n\n    _this._dragStartId = _nextTick(\n      _this._dragStarted.bind(_this, fallback, evt)\n    );\n    on(document, \"selectstart\", _this);\n\n    moved = true;\n\n    if (Safari) {\n      css(document.body, \"user-select\", \"none\");\n    }\n  },\n\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function (/**Event*/ evt) {\n    let el = this.el,\n      target = evt.target,\n      dragRect,\n      targetRect,\n      revert,\n      options = this.options,\n      group = options.group,\n      //@ts-ignore\n      activeSortable = Sortable.active,\n      isOwner = activeGroup === group,\n      canSort = options.sort,\n      fromSortable = putSortable || activeSortable,\n      vertical,\n      _this = this,\n      completedFired = false;\n\n    if (_silent) return;\n\n    function dragOverEvent(name, extra) {\n      pluginEvent(name, _this, {\n        evt,\n        isOwner,\n        axis: vertical ? \"vertical\" : \"horizontal\",\n        revert,\n        dragRect,\n        targetRect,\n        canSort,\n        fromSortable,\n        target,\n        completed,\n        onMove(target, after) {\n          return onMove(\n            rootEl,\n            el,\n            dragEl,\n            dragRect,\n            target,\n            //@ts-ignore\n            getRect(target),\n            evt,\n            after\n          );\n        },\n        changed,\n        ...extra,\n      });\n    }\n\n    // Capture animation state\n    function capture() {\n      //@ts-ignore\n      dragOverEvent(\"dragOverAnimationCapture\");\n\n      _this.captureAnimationState();\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    }\n\n    // Return invocation when dragEl is inserted (or completed)\n    function completed(insertion) {\n      dragOverEvent(\"dragOverCompleted\", { insertion });\n\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        } else {\n          activeSortable._showClone(_this);\n        }\n\n        if (_this !== fromSortable) {\n          // Set ghost class to new sortable's ghost class\n          toggleClass(\n            dragEl,\n            putSortable\n              ? putSortable.options.ghostClass\n              : activeSortable.options.ghostClass,\n            false\n          );\n          toggleClass(dragEl, options.ghostClass, true);\n        }\n\n        //@ts-ignore\n        if (putSortable !== _this && _this !== Sortable.active) {\n          putSortable = _this;\n          //@ts-ignore\n        } else if (_this === Sortable.active && putSortable) {\n          putSortable = null;\n        }\n\n        // Animation\n        if (fromSortable === _this) {\n          _this._ignoreWhileAnimating = target;\n        }\n        _this.animateAll(function () {\n          //@ts-ignore\n          dragOverEvent(\"dragOverAnimationComplete\");\n          _this._ignoreWhileAnimating = null;\n        });\n        if (_this !== fromSortable) {\n          fromSortable.animateAll();\n          fromSortable._ignoreWhileAnimating = null;\n        }\n      }\n\n      // Null lastTarget if it is not inside a previously swapped element\n      if (\n        (target === dragEl && !dragEl.animated) ||\n        (target === el && !target.animated)\n      ) {\n        lastTarget = null;\n      }\n\n      // no bubbling and not fallback\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n        // Do not detect for empty insert if already inserted\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n\n      return (completedFired = true);\n    }\n\n    // Call when dragEl has been inserted\n    function changed() {\n      //@ts-ignore\n      newIndex = index(dragEl);\n      newDraggableIndex = index(dragEl, options.draggable);\n      _dispatchEvent({\n        sortable: _this,\n        name: \"change\",\n        toEl: el,\n        newIndex,\n        newDraggableIndex,\n        originalEvent: evt,\n      });\n    }\n\n    if (evt.preventDefault !== void 0) {\n      evt.cancelable && evt.preventDefault();\n    }\n\n    target = closest(target, options.draggable, el, true);\n\n    //@ts-ignore\n    dragOverEvent(\"dragOver\");\n    //@ts-ignore\n    if (Sortable.eventCanceled) return completedFired;\n\n    if (\n      dragEl.contains(evt.target) ||\n      (target.animated && target.animatingX && target.animatingY) ||\n      _this._ignoreWhileAnimating === target\n    ) {\n      return completed(false);\n    }\n\n    ignoreNextClick = false;\n\n    if (\n      activeSortable &&\n      !options.disabled &&\n      (isOwner\n        ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n        : putSortable === this ||\n          ((this.lastPutMode = activeGroup.checkPull(\n            this,\n            activeSortable,\n            dragEl,\n            evt\n          )) &&\n            group.checkPut(this, activeSortable, dragEl, evt)))\n    ) {\n      vertical = this._getDirection(evt, target) === \"vertical\";\n\n      //@ts-ignore\n      dragRect = getRect(dragEl);\n\n      //@ts-ignore\n      dragOverEvent(\"dragOverValid\");\n      //@ts-ignore\n      if (Sortable.eventCanceled) return completedFired;\n\n      if (revert) {\n        parentEl = rootEl; // actualization\n        capture();\n\n        this._hideClone();\n\n        //@ts-ignore\n        dragOverEvent(\"revert\");\n\n        //@ts-ignore\n        if (!Sortable.eventCanceled) {\n          if (nextEl) {\n            rootEl.insertBefore(dragEl, nextEl);\n          } else {\n            rootEl.appendChild(dragEl);\n          }\n        }\n\n        return completed(true);\n      }\n\n      let elLastChild = lastChild(el, options.draggable);\n\n      if (\n        !elLastChild ||\n        (_ghostIsLast(evt, vertical, this) && !elLastChild.animated)\n      ) {\n        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        }\n\n        // assign target only if condition is true\n        if (elLastChild && el === evt.target) {\n          target = elLastChild;\n        }\n\n        if (target) {\n          //@ts-ignore\n          targetRect = getRect(target);\n        }\n\n        if (\n          onMove(\n            rootEl,\n            el,\n            dragEl,\n            dragRect,\n            target,\n            targetRect,\n            evt,\n            !!target\n          ) !== false\n        ) {\n          capture();\n          el.appendChild(dragEl);\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (target.parentNode === el) {\n        //@ts-ignore\n        targetRect = getRect(target);\n        let direction = 0,\n          targetBeforeFirstSwap,\n          differentLevel = dragEl.parentNode !== el,\n          differentRowCol = !_dragElInRowColumn(\n            (dragEl.animated && dragEl.toRect) || dragRect,\n            (target.animated && target.toRect) || targetRect,\n            vertical\n          ),\n          side1 = vertical ? \"top\" : \"left\",\n          scrolledPastTop =\n            isScrolledPast(target, \"top\", \"top\") ||\n            isScrolledPast(dragEl, \"top\", \"top\"),\n          scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n        if (lastTarget !== target) {\n          targetBeforeFirstSwap = targetRect[side1];\n          pastFirstInvertThresh = false;\n          isCircumstantialInvert =\n            (!differentRowCol && options.invertSwap) || differentLevel;\n        }\n\n        direction = _getSwapDirection(\n          evt,\n          target,\n          targetRect,\n          vertical,\n          differentRowCol ? 1 : options.swapThreshold,\n          options.invertedSwapThreshold == null\n            ? options.swapThreshold\n            : options.invertedSwapThreshold,\n          isCircumstantialInvert,\n          lastTarget === target\n        );\n\n        let sibling;\n\n        if (direction !== 0) {\n          // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n          //@ts-ignore\n          let dragIndex = index(dragEl);\n\n          do {\n            dragIndex -= direction;\n            sibling = parentEl.children[dragIndex];\n          } while (\n            sibling &&\n            //@ts-ignore\n            (css(sibling, \"display\") === \"none\" || sibling === ghostEl)\n          );\n        }\n        // If dragEl is already beside target: Do not insert\n        if (direction === 0 || sibling === target) {\n          return completed(false);\n        }\n\n        lastTarget = target;\n\n        lastDirection = direction;\n\n        let nextSibling = target.nextElementSibling,\n          after = false;\n\n        after = direction === 1;\n\n        let moveVector = onMove(\n          rootEl,\n          el,\n          dragEl,\n          dragRect,\n          target,\n          targetRect,\n          evt,\n          after\n        );\n\n        if (moveVector !== false) {\n          if (moveVector === 1 || moveVector === -1) {\n            after = moveVector === 1;\n          }\n\n          _silent = true;\n          setTimeout(_unsilent, 30);\n\n          capture();\n\n          if (after && !nextSibling) {\n            el.appendChild(dragEl);\n          } else {\n            target.parentNode.insertBefore(\n              dragEl,\n              after ? nextSibling : target\n            );\n          }\n\n          // Undo chrome's scroll adjustment (has no effect on other browsers)\n          if (scrolledPastTop) {\n            scrollBy(\n              scrolledPastTop,\n              0,\n              scrollBefore - scrolledPastTop.scrollTop\n            );\n          }\n\n          parentEl = dragEl.parentNode; // actualization\n\n          // must be done before animation\n          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n            targetMoveDistance = Math.abs(\n              //@ts-ignore\n              targetBeforeFirstSwap - getRect(target)[side1]\n            );\n          }\n          changed();\n\n          return completed(true);\n        }\n      }\n\n      if (el.contains(dragEl)) {\n        return completed(false);\n      }\n    }\n\n    return false;\n  },\n\n  _ignoreWhileAnimating: null,\n\n  _offMoveEvents: function () {\n    off(document, \"mousemove\", this._onTouchMove);\n    off(document, \"touchmove\", this._onTouchMove);\n    off(document, \"pointermove\", this._onTouchMove);\n    off(document, \"dragover\", nearestEmptyInsertDetectEvent);\n    off(document, \"mousemove\", nearestEmptyInsertDetectEvent);\n    off(document, \"touchmove\", nearestEmptyInsertDetectEvent);\n  },\n\n  _offUpEvents: function () {\n    let ownerDocument = this.el.ownerDocument;\n\n    off(ownerDocument, \"mouseup\", this._onDrop);\n    off(ownerDocument, \"touchend\", this._onDrop);\n    off(ownerDocument, \"pointerup\", this._onDrop);\n    off(ownerDocument, \"touchcancel\", this._onDrop);\n    off(document, \"selectstart\", this);\n  },\n\n  _onDrop: function (/**Event*/ evt) {\n    let el = this.el,\n      options = this.options;\n\n    // Get the index of the dragged element within its parent\n    //@ts-ignore\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n\n    pluginEvent(\"drop\", this, {\n      evt,\n    });\n\n    parentEl = dragEl && dragEl.parentNode;\n\n    // Get again after plugin event\n    //@ts-ignore\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n\n    //@ts-ignore\n    if (Sortable.eventCanceled) {\n      this._nulling();\n      return;\n    }\n\n    awaitingDragStarted = false;\n    isCircumstantialInvert = false;\n    pastFirstInvertThresh = false;\n\n    clearInterval(this._loopId);\n\n    clearTimeout(this._dragStartTimer);\n\n    _cancelNextTick(this.cloneId);\n    _cancelNextTick(this._dragStartId);\n\n    // Unbind events\n    if (this.nativeDraggable) {\n      off(document, \"drop\", this);\n      off(el, \"dragstart\", this._onDragStart);\n    }\n    this._offMoveEvents();\n    this._offUpEvents();\n\n    if (Safari) {\n      css(document.body, \"user-select\", \"\");\n    }\n\n    css(dragEl, \"transform\", \"\");\n\n    if (evt) {\n      if (moved) {\n        evt.cancelable && evt.preventDefault();\n        !options.dropBubble && evt.stopPropagation();\n      }\n\n      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n      if (\n        rootEl === parentEl ||\n        (putSortable && putSortable.lastPutMode !== \"clone\")\n      ) {\n        // Remove clone(s)\n        cloneEl &&\n          cloneEl.parentNode &&\n          cloneEl.parentNode.removeChild(cloneEl);\n      }\n\n      if (dragEl) {\n        if (this.nativeDraggable) {\n          off(dragEl, \"dragend\", this);\n        }\n\n        _disableDraggable(dragEl);\n        dragEl.style[\"will-change\"] = \"\";\n\n        // Remove classes\n        // ghostClass is added in dragStarted\n        if (moved && !awaitingDragStarted) {\n          toggleClass(\n            dragEl,\n            putSortable\n              ? putSortable.options.ghostClass\n              : this.options.ghostClass,\n            false\n          );\n        }\n        toggleClass(dragEl, this.options.chosenClass, false);\n\n        // Drag stop event\n        _dispatchEvent({\n          sortable: this,\n          name: \"unchoose\",\n          toEl: parentEl,\n          newIndex: null,\n          newDraggableIndex: null,\n          originalEvent: evt,\n        });\n\n        if (rootEl !== parentEl) {\n          if (newIndex >= 0) {\n            // Add event\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: \"add\",\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt,\n            });\n\n            // Remove event\n            _dispatchEvent({\n              sortable: this,\n              name: \"remove\",\n              toEl: parentEl,\n              originalEvent: evt,\n            });\n\n            // drag from one list and drop into another\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: \"sort\",\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt,\n            });\n\n            _dispatchEvent({\n              sortable: this,\n              name: \"sort\",\n              toEl: parentEl,\n              originalEvent: evt,\n            });\n          }\n\n          putSortable && putSortable.save();\n        } else {\n          if (newIndex !== oldIndex) {\n            if (newIndex >= 0) {\n              // drag & drop within the same list\n              _dispatchEvent({\n                sortable: this,\n                name: \"update\",\n                toEl: parentEl,\n                originalEvent: evt,\n              });\n\n              _dispatchEvent({\n                sortable: this,\n                name: \"sort\",\n                toEl: parentEl,\n                originalEvent: evt,\n              });\n            }\n          }\n        }\n\n        //@ts-ignore\n        if (Sortable.active) {\n          /* jshint eqnull:true */\n          if (newIndex == null || newIndex === -1) {\n            newIndex = oldIndex;\n            newDraggableIndex = oldDraggableIndex;\n          }\n\n          _dispatchEvent({\n            sortable: this,\n            name: \"end\",\n            toEl: parentEl,\n            originalEvent: evt,\n          });\n\n          // Save sorting\n          this.save();\n        }\n      }\n    }\n    this._nulling();\n  },\n\n  _nulling: function () {\n    pluginEvent(\"nulling\", this);\n    //@ts-ignore\n    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n\n    savedInputChecked.forEach(function (el) {\n      el.checked = true;\n    });\n\n    savedInputChecked.length = lastDx = lastDy = 0;\n  },\n\n  handleEvent: function (/**Event*/ evt) {\n    switch (evt.type) {\n      case \"drop\":\n      case \"dragend\":\n        this._onDrop(evt);\n        break;\n\n      case \"dragenter\":\n      case \"dragover\":\n        if (dragEl) {\n          this._onDragOver(evt);\n          _globalDragOver(evt);\n        }\n        break;\n\n      case \"selectstart\":\n        evt.preventDefault();\n        break;\n    }\n  },\n\n  /**\n   * Serializes the item into an array of string.\n   * @returns {String[]}\n   */\n  toArray: function () {\n    let order = [],\n      el,\n      children = this.el.children,\n      i = 0,\n      n = children.length,\n      options = this.options;\n\n    for (; i < n; i++) {\n      el = children[i];\n      if (closest(el, options.draggable, this.el, false)) {\n        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n      }\n    }\n\n    return order;\n  },\n\n  /**\n   * Sorts the elements according to the array.\n   * @param  {String[]}  order  order of the items\n   */\n  sort: function (order) {\n    let items = {},\n      rootEl = this.el;\n\n    this.toArray().forEach(function (id, i) {\n      let el = rootEl.children[i];\n\n      if (closest(el, this.options.draggable, rootEl, false)) {\n        items[id] = el;\n      }\n    }, this);\n\n    order.forEach(function (id) {\n      if (items[id]) {\n        rootEl.removeChild(items[id]);\n        rootEl.appendChild(items[id]);\n      }\n    });\n  },\n\n  /**\n   * Save the current sorting\n   */\n  save: function () {\n    let store = this.options.store;\n    store && store.set && store.set(this);\n  },\n\n  /**\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n   * @param   {HTMLElement}  el\n   * @param   {String}       [selector]  default: `options.draggable`\n   * @returns {HTMLElement|null}\n   */\n  closest: function (el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n\n  /**\n   * Set/get option\n   * @param   {string} name\n   * @param   {*}      [value]\n   * @returns {*}\n   */\n  option: function (name, value) {\n    let options = this.options;\n\n    if (value === void 0) {\n      return options[name];\n    } else {\n      let modifiedValue = PluginManager.modifyOption(this, name, value);\n      if (typeof modifiedValue !== \"undefined\") {\n        options[name] = modifiedValue;\n      } else {\n        options[name] = value;\n      }\n\n      if (name === \"group\") {\n        _prepareGroup(options);\n      }\n    }\n  },\n\n  /**\n   * Destroy\n   */\n  destroy: function () {\n    pluginEvent(\"destroy\", this);\n    let el = this.el;\n\n    el[expando] = null;\n\n    off(el, \"mousedown\", this._onTapStart);\n    off(el, \"touchstart\", this._onTapStart);\n    off(el, \"pointerdown\", this._onTapStart);\n\n    if (this.nativeDraggable) {\n      off(el, \"dragover\", this);\n      off(el, \"dragenter\", this);\n    }\n    // Remove draggable attributes\n    Array.prototype.forEach.call(el.querySelectorAll(\"[draggable]\"), function (\n      el\n    ) {\n      el.removeAttribute(\"draggable\");\n    });\n\n    this._onDrop();\n\n    this._disableDelayedDragEvents();\n\n    sortables.splice(sortables.indexOf(this.el), 1);\n\n    this.el = el = null;\n  },\n\n  _hideClone: function () {\n    if (!cloneHidden) {\n      pluginEvent(\"hideClone\", this);\n      //@ts-ignore\n      if (Sortable.eventCanceled) return;\n\n      css(cloneEl, \"display\", \"none\");\n      if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n        cloneEl.parentNode.removeChild(cloneEl);\n      }\n      cloneHidden = true;\n    }\n  },\n\n  _showClone: function (putSortable) {\n    if (putSortable.lastPutMode !== \"clone\") {\n      this._hideClone();\n      return;\n    }\n\n    if (cloneHidden) {\n      pluginEvent(\"showClone\", this);\n      //@ts-ignore\n      if (Sortable.eventCanceled) return;\n\n      // show clone at dragEl or original position\n      if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      } else if (nextEl) {\n        rootEl.insertBefore(cloneEl, nextEl);\n      } else {\n        rootEl.appendChild(cloneEl);\n      }\n\n      if (this.options.group.revertClone) {\n        this.animate(dragEl, cloneEl);\n      }\n\n      css(cloneEl, \"display\", \"\");\n      cloneHidden = false;\n    }\n  },\n};\n\nfunction _globalDragOver(/**Event*/ evt) {\n  if (evt.dataTransfer) {\n    evt.dataTransfer.dropEffect = \"move\";\n  }\n  evt.cancelable && evt.preventDefault();\n}\n\nfunction onMove(\n  fromEl,\n  toEl,\n  dragEl,\n  dragRect,\n  targetEl,\n  targetRect,\n  originalEvent,\n  willInsertAfter\n) {\n  let evt,\n    sortable = fromEl[expando],\n    onMoveFn = sortable.options.onMove,\n    retVal;\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(\"move\", {\n      bubbles: true,\n      cancelable: true,\n    });\n  } else {\n    evt = document.createEvent(\"Event\");\n    evt.initEvent(\"move\", true, true);\n  }\n\n  evt.to = toEl;\n  evt.from = fromEl;\n  evt.dragged = dragEl;\n  evt.draggedRect = dragRect;\n  evt.related = targetEl || toEl;\n  //@ts-ignore\n  evt.relatedRect = targetRect || getRect(toEl);\n  evt.willInsertAfter = willInsertAfter;\n\n  evt.originalEvent = originalEvent;\n\n  fromEl.dispatchEvent(evt);\n\n  if (onMoveFn) {\n    retVal = onMoveFn.call(sortable, evt, originalEvent);\n  }\n\n  return retVal;\n}\n\nfunction _disableDraggable(el) {\n  el.draggable = false;\n}\n\nfunction _unsilent() {\n  _silent = false;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n  //@ts-ignore\n  let rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  const spacer = 10;\n\n  return vertical\n    ? evt.clientX > rect.right + spacer ||\n        (evt.clientX <= rect.right &&\n          evt.clientY > rect.bottom &&\n          evt.clientX >= rect.left)\n    : (evt.clientX > rect.right && evt.clientY > rect.top) ||\n        (evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer);\n}\n\nfunction _getSwapDirection(\n  evt,\n  target,\n  targetRect,\n  vertical,\n  swapThreshold,\n  invertedSwapThreshold,\n  invertSwap,\n  isLastTarget\n) {\n  let mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n    targetLength = vertical ? targetRect.height : targetRect.width,\n    targetS1 = vertical ? targetRect.top : targetRect.left,\n    targetS2 = vertical ? targetRect.bottom : targetRect.right,\n    invert = false;\n\n  if (!invertSwap) {\n    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n      // check if past first invert threshold on side opposite of lastDirection\n      if (\n        !pastFirstInvertThresh &&\n        (lastDirection === 1\n          ? mouseOnAxis > targetS1 + (targetLength * invertedSwapThreshold) / 2\n          : mouseOnAxis < targetS2 - (targetLength * invertedSwapThreshold) / 2)\n      ) {\n        // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n        pastFirstInvertThresh = true;\n      }\n\n      if (!pastFirstInvertThresh) {\n        // dragEl shadow (target move distance shadow)\n        if (\n          lastDirection === 1\n            ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n            : mouseOnAxis > targetS2 - targetMoveDistance\n        ) {\n          return -lastDirection;\n        }\n      } else {\n        invert = true;\n      }\n    } else {\n      // Regular\n      if (\n        mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold)) / 2 &&\n        mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold)) / 2\n      ) {\n        return _getInsertDirection(target);\n      }\n    }\n  }\n\n  invert = invert || invertSwap;\n\n  if (invert) {\n    // Invert of regular\n    if (\n      mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold) / 2 ||\n      mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold) / 2\n    ) {\n      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n    }\n  }\n\n  return 0;\n}\n\n/**\n * Gets the direction dragEl must be swapped relative to target in order to make it\n * seem that dragEl has been \"inserted\" into that element's position\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\n * @return {Number}                   Direction dragEl must be swapped\n */\nfunction _getInsertDirection(target) {\n  //@ts-ignore\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n\n/**\n * Generate id\n * @param   {HTMLElement} el\n * @returns {String}\n * @private\n */\nfunction _generateId(el) {\n  let str = el.tagName + el.className + el.src + el.href + el.textContent,\n    i = str.length,\n    sum = 0;\n\n  while (i--) {\n    sum += str.charCodeAt(i);\n  }\n\n  return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n  savedInputChecked.length = 0;\n\n  let inputs = root.getElementsByTagName(\"input\");\n  let idx = inputs.length;\n\n  while (idx--) {\n    let el = inputs[idx];\n    el.checked && savedInputChecked.push(el);\n  }\n}\n\nfunction _nextTick(fn) {\n  return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n  return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n  on(document, \"touchmove\", function (evt) {\n    //@ts-ignore\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n}\n\n// Export utils\nSortable.utils = {\n  on: on,\n  off: off,\n  css: css,\n  find: find,\n  is: function (el, selector) {\n    return !!closest(el, selector, el, false);\n  },\n  extend: extend,\n  throttle: throttle,\n  closest: closest,\n  toggleClass: toggleClass,\n  clone: clone,\n  index: index,\n  nextTick: _nextTick,\n  cancelNextTick: _cancelNextTick,\n  detectDirection: _detectDirection,\n  getChild: getChild,\n};\n\n/**\n * Get the Sortable instance of an element\n * @param  {HTMLElement} element The element\n * @return {Sortable|undefined}         The instance of Sortable\n */\nSortable.get = function (element) {\n  return element[expando];\n};\n\n/**\n * Mount a plugin to Sortable\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\n */\nSortable.mount = function (...plugins) {\n  if (plugins[0].constructor === Array) plugins = plugins[0];\n\n  plugins.forEach((plugin) => {\n    if (!plugin.prototype || !plugin.prototype.constructor) {\n      throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(\n        plugin\n      )}`;\n    }\n    if (plugin.utils) Sortable.utils = { ...Sortable.utils, ...plugin.utils };\n\n    PluginManager.mount(plugin);\n  });\n};\n\n/**\n * Create sortable instance\n * @param {HTMLElement}  el\n * @param {Object}      [options]\n */\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nexport default Sortable;\n", "import { toggleClass, index } from \"../../../utils/src\";\n\nlet lastSwapEl;\n\nfunction SwapPlugin() {\n  function Swap() {\n    this.defaults = {\n      swapClass: \"sortable-swap-highlight\",\n    };\n  }\n\n  Swap.prototype = {\n    dragStart({ dragEl }) {\n      lastSwapEl = dragEl;\n    },\n    dragOverValid({\n      completed,\n      target,\n      onMove,\n      activeSortable,\n      changed,\n      cancel,\n    }) {\n      if (!activeSortable.options.swap) return;\n      let el = this.sortable.el,\n        options = this.options;\n      if (target && target !== el) {\n        let prevSwapEl = lastSwapEl;\n        if (onMove(target) !== false) {\n          toggleClass(target, options.swapClass, true);\n          lastSwapEl = target;\n        } else {\n          lastSwapEl = null;\n        }\n\n        if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n          toggleClass(prevSwapEl, options.swapClass, false);\n        }\n      }\n      changed();\n\n      completed(true);\n      cancel();\n    },\n    drop({ activeSortable, putSortable, dragEl }) {\n      let toSortable = putSortable || this.sortable;\n      let options = this.options;\n      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n      if (\n        lastSwapEl &&\n        (options.swap || (putSortable && putSortable.options.swap))\n      ) {\n        if (dragEl !== lastSwapEl) {\n          toSortable.captureAnimationState();\n          if (toSortable !== activeSortable)\n            activeSortable.captureAnimationState();\n          swapNodes(dragEl, lastSwapEl);\n\n          toSortable.animateAll();\n          if (toSortable !== activeSortable) activeSortable.animateAll();\n        }\n      }\n    },\n    nulling() {\n      lastSwapEl = null;\n    },\n  };\n\n  return Object.assign(Swap, {\n    pluginName: \"swap\",\n    eventProperties() {\n      return {\n        swapItem: lastSwapEl,\n      };\n    },\n  });\n}\n\nfunction swapNodes(n1, n2) {\n  let p1 = n1.parentNode,\n    p2 = n2.parentNode,\n    i1,\n    i2;\n\n  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n\n  //@ts-ignore\n  i1 = index(n1);\n  //@ts-ignore\n  i2 = index(n2);\n\n  if (p1.isEqualNode(p2) && i1 < i2) {\n    i2++;\n  }\n  p1.insertBefore(n2, p1.children[i1]);\n  p2.insertBefore(n1, p2.children[i2]);\n}\n\nexport default SwapPlugin;\n", "import {\n  getRect,\n  css,\n  matrix,\n  isRectEqual,\n  indexOfObject,\n} from \"../../utils/src\";\nimport * as Sortable from \"./Sortable\";\n\nexport default function AnimationStateManager() {\n  let animationStates = [],\n    animationCallbackId;\n\n  return {\n    captureAnimationState() {\n      animationStates = [];\n      if (!this.options.animation) return;\n      let children = [].slice.call(this.el.children);\n\n      children.forEach((child) => {\n        //@ts-ignore\n        if (css(child, \"display\") === \"none\" || child === Sortable.ghost)\n          return;\n        animationStates.push({\n          target: child,\n          //@ts-ignore\n          rect: getRect(child),\n        });\n        let fromRect = { ...animationStates[animationStates.length - 1].rect };\n\n        // If animating: compensate for current animation\n        if (child.thisAnimationDuration) {\n          let childMatrix = matrix(child, true);\n          if (childMatrix) {\n            fromRect.top -= childMatrix.f;\n            fromRect.left -= childMatrix.e;\n          }\n        }\n\n        child.fromRect = fromRect;\n      });\n    },\n\n    addAnimationState(state) {\n      animationStates.push(state);\n    },\n\n    removeAnimationState(target) {\n      animationStates.splice(indexOfObject(animationStates, { target }), 1);\n    },\n\n    animateAll(callback) {\n      if (!this.options.animation) {\n        clearTimeout(animationCallbackId);\n        if (typeof callback === \"function\") callback();\n        return;\n      }\n\n      let animating = false,\n        animationTime = 0;\n\n      animationStates.forEach((state) => {\n        let time = 0,\n          animatingThis = false,\n          target = state.target,\n          fromRect = target.fromRect,\n          //@ts-ignore\n          toRect = getRect(target),\n          prevFromRect = target.prevFromRect,\n          prevToRect = target.prevToRect,\n          animatingRect = state.rect,\n          targetMatrix = matrix(target, true);\n\n        if (targetMatrix) {\n          // Compensate for current animation\n          toRect.top -= targetMatrix.f;\n          toRect.left -= targetMatrix.e;\n        }\n\n        target.toRect = toRect;\n\n        if (target.thisAnimationDuration) {\n          // Could also check if animatingRect is between fromRect and toRect\n          if (\n            isRectEqual(prevFromRect, toRect) &&\n            !isRectEqual(fromRect, toRect) &&\n            // Make sure animatingRect is on line between toRect & fromRect\n            (animatingRect.top - toRect.top) /\n              (animatingRect.left - toRect.left) ===\n              (fromRect.top - toRect.top) / (fromRect.left - toRect.left)\n          ) {\n            // If returning to same place as started from animation and on same axis\n            time = calculateRealTime(\n              animatingRect,\n              prevFromRect,\n              prevToRect,\n              this.options\n            );\n          }\n        }\n\n        // if fromRect != toRect: animate\n        if (!isRectEqual(toRect, fromRect)) {\n          target.prevFromRect = fromRect;\n          target.prevToRect = toRect;\n\n          if (!time) {\n            time = this.options.animation;\n          }\n          this.animate(target, animatingRect, toRect, time);\n        }\n\n        if (time) {\n          animating = true;\n          animationTime = Math.max(animationTime, time);\n          clearTimeout(target.animationResetTimer);\n          target.animationResetTimer = setTimeout(function () {\n            target.animationTime = 0;\n            target.prevFromRect = null;\n            target.fromRect = null;\n            target.prevToRect = null;\n            target.thisAnimationDuration = null;\n          }, time);\n          target.thisAnimationDuration = time;\n        }\n      });\n\n      clearTimeout(animationCallbackId);\n      if (!animating) {\n        if (typeof callback === \"function\") callback();\n      } else {\n        animationCallbackId = setTimeout(function () {\n          if (typeof callback === \"function\") callback();\n        }, animationTime);\n      }\n      animationStates = [];\n    },\n\n    animate(target, currentRect, toRect, duration) {\n      if (duration) {\n        css(target, \"transition\", \"\");\n        css(target, \"transform\", \"\");\n        //@ts-ignore\n        let elMatrix = matrix(this.el),\n          scaleX = elMatrix && elMatrix.a,\n          scaleY = elMatrix && elMatrix.d,\n          translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n          translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n\n        target.animatingX = !!translateX;\n        target.animatingY = !!translateY;\n\n        css(\n          target,\n          \"transform\",\n          \"translate3d(\" + translateX + \"px,\" + translateY + \"px,0)\"\n        );\n\n        this.forRepaintDummy = repaint(target); // repaint\n\n        css(\n          target,\n          \"transition\",\n          \"transform \" +\n            duration +\n            \"ms\" +\n            (this.options.easing ? \" \" + this.options.easing : \"\")\n        );\n        css(target, \"transform\", \"translate3d(0,0,0)\");\n        typeof target.animated === \"number\" && clearTimeout(target.animated);\n        target.animated = setTimeout(function () {\n          css(target, \"transition\", \"\");\n          css(target, \"transform\", \"\");\n          target.animated = false;\n\n          target.animatingX = false;\n          target.animatingY = false;\n        }, duration);\n      }\n    },\n  };\n}\n\nfunction repaint(target) {\n  return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n  return (\n    (Math.sqrt(\n      Math.pow(fromRect.top - animatingRect.top, 2) +\n        Math.pow(fromRect.left - animatingRect.left, 2)\n    ) /\n      Math.sqrt(\n        Math.pow(fromRect.top - toRect.top, 2) +\n          Math.pow(fromRect.left - toRect.left, 2)\n      )) *\n    options.animation\n  );\n}\n", "import {\n  toggleClass,\n  getRect,\n  index,\n  closest,\n  on,\n  off,\n  clone,\n  css,\n  setRect,\n  unsetRect,\n  matrix,\n  expando,\n} from \"../../../utils/src\";\n\nimport dispatchEvent from \"../../../sortable/src/EventDispatcher\";\n\nlet multiDragElements = [],\n  multiDragClones = [],\n  lastMultiDragSelect, // for selection with modifier key down (SHIFT)\n  multiDragSortable,\n  initialFolding = false, // Initial multi-drag fold when drag started\n  folding = false, // Folding any other time\n  dragStarted = false,\n  dragEl,\n  clonesFromRect,\n  clonesHidden;\n\nfunction MultiDragPlugin() {\n  function MultiDrag(sortable) {\n    // Bind all private methods\n    for (let fn in this) {\n      if (fn.charAt(0) === \"_\" && typeof this[fn] === \"function\") {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n\n    if (sortable.options.supportPointer) {\n      on(document, \"pointerup\", this._deselectMultiDrag);\n    } else {\n      on(document, \"mouseup\", this._deselectMultiDrag);\n      on(document, \"touchend\", this._deselectMultiDrag);\n    }\n\n    on(document, \"keydown\", this._checkKeyDown);\n    on(document, \"keyup\", this._checkKeyUp);\n\n    this.defaults = {\n      selectedClass: \"sortable-selected\",\n      multiDragKey: null,\n      setData(dataTransfer, dragEl) {\n        let data = \"\";\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          multiDragElements.forEach((multiDragElement, i) => {\n            data += (!i ? \"\" : \", \") + multiDragElement.textContent;\n          });\n        } else {\n          data = dragEl.textContent;\n        }\n        dataTransfer.setData(\"Text\", data);\n      },\n    };\n  }\n\n  MultiDrag.prototype = {\n    multiDragKeyDown: false,\n    isMultiDrag: false,\n\n    delayStartGlobal({ dragEl: dragged }) {\n      dragEl = dragged;\n    },\n\n    delayEnded() {\n      this.isMultiDrag = ~multiDragElements.indexOf(dragEl);\n    },\n\n    setupClone({ sortable, cancel }) {\n      if (!this.isMultiDrag) return;\n      for (let i = 0; i < multiDragElements.length; i++) {\n        multiDragClones.push(clone(multiDragElements[i]));\n\n        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n\n        multiDragClones[i].draggable = false;\n        multiDragClones[i].style[\"will-change\"] = \"\";\n\n        toggleClass(multiDragClones[i], this.options.selectedClass, false);\n        multiDragElements[i] === dragEl &&\n          toggleClass(multiDragClones[i], this.options.chosenClass, false);\n      }\n\n      sortable._hideClone();\n      cancel();\n    },\n\n    clone({ sortable, rootEl, dispatchSortableEvent, cancel }) {\n      if (!this.isMultiDrag) return;\n      if (!this.options.removeCloneOnHide) {\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          insertMultiDragClones(true, rootEl);\n          dispatchSortableEvent(\"clone\");\n\n          cancel();\n        }\n      }\n    },\n\n    showClone({ cloneNowShown, rootEl, cancel }) {\n      if (!this.isMultiDrag) return;\n      insertMultiDragClones(false, rootEl);\n      multiDragClones.forEach((clone) => {\n        css(clone, \"display\", \"\");\n      });\n\n      cloneNowShown();\n      clonesHidden = false;\n      cancel();\n    },\n\n    hideClone({ sortable, cloneNowHidden, cancel }) {\n      if (!this.isMultiDrag) return;\n      multiDragClones.forEach((clone) => {\n        css(clone, \"display\", \"none\");\n        if (this.options.removeCloneOnHide && clone.parentNode) {\n          clone.parentNode.removeChild(clone);\n        }\n      });\n\n      cloneNowHidden();\n      clonesHidden = true;\n      cancel();\n    },\n\n    dragStartGlobal({ sortable }) {\n      if (!this.isMultiDrag && multiDragSortable) {\n        multiDragSortable.multiDrag._deselectMultiDrag();\n      }\n\n      multiDragElements.forEach((multiDragElement) => {\n        //@ts-ignore\n        multiDragElement.sortableIndex = index(multiDragElement);\n      });\n\n      // Sort multi-drag elements\n      multiDragElements = multiDragElements.sort(function (a, b) {\n        return a.sortableIndex - b.sortableIndex;\n      });\n      dragStarted = true;\n    },\n\n    dragStarted({ sortable }) {\n      if (!this.isMultiDrag) return;\n      if (this.options.sort) {\n        // Capture rects,\n        // hide multi drag elements (by positioning them absolute),\n        // set multi drag elements rects to dragRect,\n        // show multi drag elements,\n        // animate to rects,\n        // unset rects & remove from DOM\n\n        sortable.captureAnimationState();\n\n        if (this.options.animation) {\n          multiDragElements.forEach((multiDragElement) => {\n            if (multiDragElement === dragEl) return;\n            css(multiDragElement, \"position\", \"absolute\");\n          });\n\n          //@ts-ignore\n          let dragRect = getRect(dragEl, false, true, true);\n\n          multiDragElements.forEach((multiDragElement) => {\n            if (multiDragElement === dragEl) return;\n            setRect(multiDragElement, dragRect);\n          });\n\n          folding = true;\n          initialFolding = true;\n        }\n      }\n\n      sortable.animateAll(() => {\n        folding = false;\n        initialFolding = false;\n\n        if (this.options.animation) {\n          multiDragElements.forEach((multiDragElement) => {\n            unsetRect(multiDragElement);\n          });\n        }\n\n        // Remove all auxiliary multidrag items from el, if sorting enabled\n        if (this.options.sort) {\n          removeMultiDragElements();\n        }\n      });\n    },\n\n    dragOver({ target, completed, cancel }) {\n      if (folding && ~multiDragElements.indexOf(target)) {\n        completed(false);\n        cancel();\n      }\n    },\n\n    revert({ fromSortable, rootEl, sortable, dragRect }) {\n      if (multiDragElements.length > 1) {\n        // Setup unfold animation\n        multiDragElements.forEach((multiDragElement) => {\n          sortable.addAnimationState({\n            target: multiDragElement,\n            //@ts-ignore\n            rect: folding ? getRect(multiDragElement) : dragRect,\n          });\n\n          unsetRect(multiDragElement);\n\n          multiDragElement.fromRect = dragRect;\n\n          fromSortable.removeAnimationState(multiDragElement);\n        });\n        folding = false;\n        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n      }\n    },\n\n    dragOverCompleted({\n      sortable,\n      isOwner,\n      insertion,\n      activeSortable,\n      parentEl,\n      putSortable,\n    }) {\n      let options = this.options;\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        }\n\n        initialFolding = false;\n        // If leaving sort:false root, or already folding - Fold to new location\n        if (\n          options.animation &&\n          multiDragElements.length > 1 &&\n          (folding ||\n            (!isOwner && !activeSortable.options.sort && !putSortable))\n        ) {\n          //@ts-ignore\n          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n          let dragRectAbsolute = getRect(dragEl, false, true, true);\n\n          multiDragElements.forEach((multiDragElement) => {\n            if (multiDragElement === dragEl) return;\n            setRect(multiDragElement, dragRectAbsolute);\n\n            // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n            parentEl.appendChild(multiDragElement);\n          });\n\n          folding = true;\n        }\n\n        // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n        if (!isOwner) {\n          // Only remove if not folding (folding will remove them anyways)\n          if (!folding) {\n            removeMultiDragElements();\n          }\n\n          if (multiDragElements.length > 1) {\n            let clonesHiddenBefore = clonesHidden;\n            activeSortable._showClone(sortable);\n\n            // Unfold animation for clones if showing from hidden\n            if (\n              activeSortable.options.animation &&\n              !clonesHidden &&\n              clonesHiddenBefore\n            ) {\n              multiDragClones.forEach((clone) => {\n                activeSortable.addAnimationState({\n                  target: clone,\n                  rect: clonesFromRect,\n                });\n\n                clone.fromRect = clonesFromRect;\n                clone.thisAnimationDuration = null;\n              });\n            }\n          } else {\n            activeSortable._showClone(sortable);\n          }\n        }\n      }\n    },\n\n    dragOverAnimationCapture({ dragRect, isOwner, activeSortable }) {\n      multiDragElements.forEach((multiDragElement) => {\n        multiDragElement.thisAnimationDuration = null;\n      });\n\n      if (\n        activeSortable.options.animation &&\n        !isOwner &&\n        activeSortable.multiDrag.isMultiDrag\n      ) {\n        clonesFromRect = Object.assign({}, dragRect);\n        let dragMatrix = matrix(dragEl, true);\n        clonesFromRect.top -= dragMatrix.f;\n        clonesFromRect.left -= dragMatrix.e;\n      }\n    },\n\n    dragOverAnimationComplete() {\n      if (folding) {\n        folding = false;\n        removeMultiDragElements();\n      }\n    },\n\n    drop({\n      originalEvent: evt,\n      rootEl,\n      parentEl,\n      sortable,\n      dispatchSortableEvent,\n      oldIndex,\n      putSortable,\n    }) {\n      let toSortable = putSortable || this.sortable;\n\n      if (!evt) return;\n\n      let options = this.options,\n        children = parentEl.children;\n\n      // Multi-drag selection\n      if (!dragStarted) {\n        if (options.multiDragKey && !this.multiDragKeyDown) {\n          this._deselectMultiDrag();\n        }\n        toggleClass(\n          dragEl,\n          options.selectedClass,\n          !~multiDragElements.indexOf(dragEl)\n        );\n\n        if (!~multiDragElements.indexOf(dragEl)) {\n          multiDragElements.push(dragEl);\n          dispatchEvent({\n            sortable,\n            rootEl,\n            name: \"select\",\n            targetEl: dragEl,\n            //@ts-ignore\n            originalEvt: evt,\n          });\n\n          // Modifier activated, select from last to dragEl\n          if (\n            evt.shiftKey &&\n            lastMultiDragSelect &&\n            sortable.el.contains(lastMultiDragSelect)\n          ) {\n            //@ts-ignore\n            let lastIndex = index(lastMultiDragSelect),\n              //@ts-ignore\n              currentIndex = index(dragEl);\n\n            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n              // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n              // (but previous selection existed)\n              let n, i;\n              if (currentIndex > lastIndex) {\n                i = lastIndex;\n                n = currentIndex;\n              } else {\n                i = currentIndex;\n                n = lastIndex + 1;\n              }\n\n              for (; i < n; i++) {\n                if (~multiDragElements.indexOf(children[i])) continue;\n                toggleClass(children[i], options.selectedClass, true);\n                multiDragElements.push(children[i]);\n\n                dispatchEvent({\n                  sortable,\n                  rootEl,\n                  name: \"select\",\n                  targetEl: children[i],\n                  //@ts-ignore\n                  originalEvt: evt,\n                });\n              }\n            }\n          } else {\n            lastMultiDragSelect = dragEl;\n          }\n\n          multiDragSortable = toSortable;\n        } else {\n          multiDragElements.splice(multiDragElements.indexOf(dragEl), 1);\n          lastMultiDragSelect = null;\n          dispatchEvent({\n            sortable,\n            rootEl,\n            name: \"deselect\",\n            targetEl: dragEl,\n            //@ts-ignore\n            originalEvt: evt,\n          });\n        }\n      }\n\n      // Multi-drag drop\n      if (dragStarted && this.isMultiDrag) {\n        // Do not \"unfold\" after around dragEl if reverted\n        if (\n          (parentEl[expando].options.sort || parentEl !== rootEl) &&\n          multiDragElements.length > 1\n        ) {\n          //@ts-ignore\n          let dragRect = getRect(dragEl),\n            multiDragIndex = index(\n              dragEl,\n              \":not(.\" + this.options.selectedClass + \")\"\n            );\n\n          if (!initialFolding && options.animation)\n            dragEl.thisAnimationDuration = null;\n\n          toSortable.captureAnimationState();\n\n          if (!initialFolding) {\n            if (options.animation) {\n              dragEl.fromRect = dragRect;\n              multiDragElements.forEach((multiDragElement) => {\n                multiDragElement.thisAnimationDuration = null;\n                if (multiDragElement !== dragEl) {\n                  //@ts-ignore\n                  let rect = folding ? getRect(multiDragElement) : dragRect;\n                  multiDragElement.fromRect = rect;\n\n                  // Prepare unfold animation\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect,\n                  });\n                }\n              });\n            }\n\n            // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n            // properly they must all be removed\n            removeMultiDragElements();\n\n            multiDragElements.forEach((multiDragElement) => {\n              if (children[multiDragIndex]) {\n                parentEl.insertBefore(\n                  multiDragElement,\n                  children[multiDragIndex]\n                );\n              } else {\n                parentEl.appendChild(multiDragElement);\n              }\n              multiDragIndex++;\n            });\n\n            // If initial folding is done, the elements may have changed position because they are now\n            // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n            // must be fired here as Sortable will not.\n            //@ts-ignore\n            if (oldIndex === index(dragEl)) {\n              let update = false;\n              multiDragElements.forEach((multiDragElement) => {\n                //@ts-ignore\n                if (\n                  //@ts-ignore\n                  multiDragElement.sortableIndex !== index(multiDragElement)\n                ) {\n                  update = true;\n                  return;\n                }\n              });\n\n              if (update) {\n                dispatchSortableEvent(\"update\");\n              }\n            }\n          }\n\n          // Must be done after capturing individual rects (scroll bar)\n          multiDragElements.forEach((multiDragElement) => {\n            unsetRect(multiDragElement);\n          });\n\n          toSortable.animateAll();\n        }\n\n        multiDragSortable = toSortable;\n      }\n\n      // Remove clones if necessary\n      if (\n        rootEl === parentEl ||\n        (putSortable && putSortable.lastPutMode !== \"clone\")\n      ) {\n        multiDragClones.forEach((clone) => {\n          clone.parentNode && clone.parentNode.removeChild(clone);\n        });\n      }\n    },\n\n    nullingGlobal() {\n      this.isMultiDrag = dragStarted = false;\n      multiDragClones.length = 0;\n    },\n\n    destroyGlobal() {\n      this._deselectMultiDrag();\n      off(document, \"pointerup\", this._deselectMultiDrag);\n      off(document, \"mouseup\", this._deselectMultiDrag);\n      off(document, \"touchend\", this._deselectMultiDrag);\n\n      off(document, \"keydown\", this._checkKeyDown);\n      off(document, \"keyup\", this._checkKeyUp);\n    },\n\n    _deselectMultiDrag(evt) {\n      if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n      // Only deselect if selection is in this sortable\n      if (multiDragSortable !== this.sortable) return;\n\n      // Only deselect if target is not item in this sortable\n      if (\n        evt &&\n        closest(evt.target, this.options.draggable, this.sortable.el, false)\n      )\n        return;\n\n      // Only deselect if left click\n      if (evt && evt.button !== 0) return;\n\n      while (multiDragElements.length) {\n        let el = multiDragElements[0];\n        toggleClass(el, this.options.selectedClass, false);\n        multiDragElements.shift();\n        dispatchEvent({\n          sortable: this.sortable,\n          rootEl: this.sortable.el,\n          name: \"deselect\",\n          //@ts-ignore\n          targetEl: el,\n          //@ts-ignore\n          originalEvt: evt,\n        });\n      }\n    },\n\n    _checkKeyDown(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = true;\n      }\n    },\n\n    _checkKeyUp(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = false;\n      }\n    },\n  };\n\n  return Object.assign(MultiDrag, {\n    // Static methods & properties\n    pluginName: \"multiDrag\",\n    utils: {\n      /**\n       * Selects the provided multi-drag item\n       * @param  {HTMLElement} el    The element to be selected\n       */\n      select(el) {\n        let sortable = el.parentNode[expando];\n        if (\n          !sortable ||\n          !sortable.options.multiDrag ||\n          ~multiDragElements.indexOf(el)\n        )\n          return;\n        if (multiDragSortable && multiDragSortable !== sortable) {\n          multiDragSortable.multiDrag._deselectMultiDrag();\n          multiDragSortable = sortable;\n        }\n        toggleClass(el, sortable.options.selectedClass, true);\n        multiDragElements.push(el);\n      },\n      /**\n       * Deselects the provided multi-drag item\n       * @param  {HTMLElement} el    The element to be deselected\n       */\n      deselect(el) {\n        let sortable = el.parentNode[expando],\n          index = multiDragElements.indexOf(el);\n        if (!sortable || !sortable.options.multiDrag || !~index) return;\n        toggleClass(el, sortable.options.selectedClass, false);\n        multiDragElements.splice(index, 1);\n      },\n    },\n    eventProperties() {\n      const oldIndicies = [],\n        newIndicies = [];\n\n      multiDragElements.forEach((multiDragElement) => {\n        oldIndicies.push({\n          multiDragElement,\n          index: multiDragElement.sortableIndex,\n        });\n\n        // multiDragElements will already be sorted if folding\n        let newIndex;\n        if (folding && multiDragElement !== dragEl) {\n          newIndex = -1;\n        } else if (folding) {\n          newIndex = index(\n            multiDragElement,\n            \":not(.\" + this.options.selectedClass + \")\"\n          );\n        } else {\n          //@ts-ignore\n          newIndex = index(multiDragElement);\n        }\n        newIndicies.push({\n          multiDragElement,\n          index: newIndex,\n        });\n      });\n      return {\n        items: [...multiDragElements],\n        clones: [...multiDragClones],\n        oldIndicies,\n        newIndicies,\n      };\n    },\n    optionListeners: {\n      multiDragKey(key) {\n        key = key.toLowerCase();\n        if (key === \"ctrl\") {\n          key = \"Control\";\n        } else if (key.length > 1) {\n          key = key.charAt(0).toUpperCase() + key.substr(1);\n        }\n        return key;\n      },\n    },\n  });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n  multiDragElements.forEach((multiDragElement, i) => {\n    let target =\n      rootEl.children[\n        multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)\n      ];\n    if (target) {\n      rootEl.insertBefore(multiDragElement, target);\n    } else {\n      rootEl.appendChild(multiDragElement);\n    }\n  });\n}\n\n/**\n * Insert multi-drag clones\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\n * @param  {HTMLElement} rootEl\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n  multiDragClones.forEach((clone, i) => {\n    let target =\n      rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(clone, target);\n    } else {\n      rootEl.appendChild(clone);\n    }\n  });\n}\n\nfunction removeMultiDragElements() {\n  multiDragElements.forEach((multiDragElement) => {\n    if (multiDragElement === dragEl) return;\n    multiDragElement.parentNode &&\n      multiDragElement.parentNode.removeChild(multiDragElement);\n  });\n}\n\nexport default MultiDragPlugin;\n", "import { getChild } from \"../../../utils/src\";\n\nconst drop = function ({\n  originalEvent,\n  putSortable,\n  dragEl,\n  activeSortable,\n  dispatchSortableEvent,\n  hideGhostForTarget,\n  unhideGhostForTarget,\n}) {\n  if (!originalEvent) return;\n  let toSortable = putSortable || activeSortable;\n  hideGhostForTarget();\n  let touch =\n    originalEvent.changedTouches && originalEvent.changedTouches.length\n      ? originalEvent.changedTouches[0]\n      : originalEvent;\n  let target = document.elementFromPoint(touch.clientX, touch.clientY);\n  unhideGhostForTarget();\n  if (toSortable && !toSortable.el.contains(target)) {\n    dispatchSortableEvent(\"spill\");\n    this.onSpill({ dragEl, putSortable });\n  }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n  startIndex: null,\n  dragStart({ oldDraggableIndex }) {\n    this.startIndex = oldDraggableIndex;\n  },\n  onSpill({ dragEl, putSortable }) {\n    this.sortable.captureAnimationState();\n    if (putSortable) {\n      putSortable.captureAnimationState();\n    }\n    let nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n    if (nextSibling) {\n      this.sortable.el.insertBefore(dragEl, nextSibling);\n    } else {\n      this.sortable.el.appendChild(dragEl);\n    }\n    this.sortable.animateAll();\n    if (putSortable) {\n      putSortable.animateAll();\n    }\n  },\n  drop,\n};\n\nObject.assign(Revert, {\n  pluginName: \"revertOnSpill\",\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n  onSpill({ dragEl, putSortable }) {\n    const parentSortable = putSortable || this.sortable;\n    parentSortable.captureAnimationState();\n    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n    parentSortable.animateAll();\n  },\n  drop,\n};\n\nObject.assign(Remove, {\n  pluginName: \"removeOnSpill\",\n});\n\nexport default [Remove, Revert];\n\nexport { Remove as RemoveOnSpill, Revert as RevertOnSpill };\n", "import {\n  on,\n  off,\n  css,\n  throttle,\n  cancelThrottle,\n  scrollBy,\n  getParentAutoScrollElement,\n  expando,\n  getRect,\n  getWindowScrollingElement,\n  Edge,\n  IE11OrLess,\n  Safari,\n} from \"../../../utils/src\";\n\nimport Sortable from \"../../../sortable/src/Sortable\";\n\nlet autoScrolls = [],\n  scrollEl,\n  scrollRootEl,\n  scrolling = false,\n  lastAutoScrollX,\n  lastAutoScrollY,\n  touchEvt,\n  pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n  function AutoScroll() {\n    this.defaults = {\n      scroll: true,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: true,\n    };\n\n    // Bind all private methods\n    for (let fn in this) {\n      if (fn.charAt(0) === \"_\" && typeof this[fn] === \"function\") {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n  }\n\n  AutoScroll.prototype = {\n    dragStarted({ originalEvent }) {\n      if (this.sortable.nativeDraggable) {\n        on(document, \"dragover\", this._handleAutoScroll);\n      } else {\n        if (this.options.supportPointer) {\n          on(document, \"pointermove\", this._handleFallbackAutoScroll);\n        } else if (originalEvent.touches) {\n          on(document, \"touchmove\", this._handleFallbackAutoScroll);\n        } else {\n          on(document, \"mousemove\", this._handleFallbackAutoScroll);\n        }\n      }\n    },\n\n    dragOverCompleted({ originalEvent }) {\n      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n      if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n        this._handleAutoScroll(originalEvent);\n      }\n    },\n\n    drop() {\n      if (this.sortable.nativeDraggable) {\n        off(document, \"dragover\", this._handleAutoScroll);\n      } else {\n        off(document, \"pointermove\", this._handleFallbackAutoScroll);\n        off(document, \"touchmove\", this._handleFallbackAutoScroll);\n        off(document, \"mousemove\", this._handleFallbackAutoScroll);\n      }\n\n      clearPointerElemChangedInterval();\n      clearAutoScrolls();\n      cancelThrottle();\n    },\n\n    nulling() {\n      touchEvt = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n\n      autoScrolls.length = 0;\n    },\n\n    _handleFallbackAutoScroll(evt) {\n      this._handleAutoScroll(evt, true);\n    },\n\n    _handleAutoScroll(evt, fallback) {\n      const x = (evt.touches ? evt.touches[0] : evt).clientX,\n        y = (evt.touches ? evt.touches[0] : evt).clientY,\n        elem = document.elementFromPoint(x, y);\n\n      touchEvt = evt;\n\n      // IE does not seem to have native autoscroll,\n      // Edge's autoscroll seems too conditional,\n      // MACOS Safari does not have autoscroll,\n      // Firefox and Chrome are good\n      if (fallback || Edge || IE11OrLess || Safari) {\n        //@ts-ignore\n        autoScroll(evt, this.options, elem, fallback);\n\n        // Listener for pointer element change\n        let ogElemScroller = getParentAutoScrollElement(elem, true);\n        if (\n          scrolling &&\n          (!pointerElemChangedInterval ||\n            x !== lastAutoScrollX ||\n            y !== lastAutoScrollY)\n        ) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval();\n          // Detect for pointer elem change, emulating native DnD behaviour\n          pointerElemChangedInterval = setInterval(() => {\n            let newElem = getParentAutoScrollElement(\n              document.elementFromPoint(x, y),\n              true\n            );\n            if (newElem !== ogElemScroller) {\n              ogElemScroller = newElem;\n              clearAutoScrolls();\n            }\n            //@ts-ignore\n            autoScroll(evt, this.options, newElem, fallback);\n          }, 10);\n          lastAutoScrollX = x;\n          lastAutoScrollY = y;\n        }\n      } else {\n        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n        if (\n          !this.options.bubbleScroll ||\n          getParentAutoScrollElement(elem, true) === getWindowScrollingElement()\n        ) {\n          clearAutoScrolls();\n          return;\n        }\n        autoScroll(\n          //@ts-ignore\n          evt,\n          this.options,\n          getParentAutoScrollElement(elem, false),\n          false\n        );\n      }\n    },\n  };\n\n  return Object.assign(AutoScroll, {\n    pluginName: \"scroll\",\n    initializeByDefault: true,\n  });\n}\n\nfunction clearAutoScrolls() {\n  autoScrolls.forEach(function (autoScroll) {\n    clearInterval(autoScroll.pid);\n  });\n  autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n  clearInterval(pointerElemChangedInterval);\n}\n\nconst autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n  if (!options.scroll) return;\n  const x = (evt.touches ? evt.touches[0] : evt).clientX,\n    y = (evt.touches ? evt.touches[0] : evt).clientY,\n    sens = options.scrollSensitivity,\n    speed = options.scrollSpeed,\n    winScroller = getWindowScrollingElement();\n\n  let scrollThisInstance = false,\n    scrollCustomFn;\n\n  // New scroll root, set scrollEl\n  if (scrollRootEl !== rootEl) {\n    scrollRootEl = rootEl;\n\n    clearAutoScrolls();\n\n    scrollEl = options.scroll;\n    scrollCustomFn = options.scrollFn;\n\n    if (scrollEl === true) {\n      scrollEl = getParentAutoScrollElement(rootEl, true);\n    }\n  }\n\n  let layersOut = 0;\n  let currentParent = scrollEl;\n  do {\n    let el = currentParent,\n      //@ts-ignore\n      rect = getRect(el),\n      top = rect.top,\n      bottom = rect.bottom,\n      left = rect.left,\n      right = rect.right,\n      width = rect.width,\n      height = rect.height,\n      canScrollX,\n      canScrollY,\n      scrollWidth = el.scrollWidth,\n      scrollHeight = el.scrollHeight,\n      //@ts-ignore\n      elCSS = css(el),\n      scrollPosX = el.scrollLeft,\n      scrollPosY = el.scrollTop;\n\n    if (el === winScroller) {\n      canScrollX =\n        width < scrollWidth &&\n        (elCSS.overflowX === \"auto\" ||\n          elCSS.overflowX === \"scroll\" ||\n          elCSS.overflowX === \"visible\");\n      canScrollY =\n        height < scrollHeight &&\n        (elCSS.overflowY === \"auto\" ||\n          elCSS.overflowY === \"scroll\" ||\n          elCSS.overflowY === \"visible\");\n    } else {\n      canScrollX =\n        width < scrollWidth &&\n        (elCSS.overflowX === \"auto\" || elCSS.overflowX === \"scroll\");\n      canScrollY =\n        height < scrollHeight &&\n        (elCSS.overflowY === \"auto\" || elCSS.overflowY === \"scroll\");\n    }\n\n    let vx =\n      canScrollX &&\n      //@ts-ignore\n      (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) -\n        //@ts-ignore\n        (Math.abs(left - x) <= sens && !!scrollPosX);\n    let vy =\n      canScrollY &&\n      //@ts-ignore\n      (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) -\n        //@ts-ignore\n        (Math.abs(top - y) <= sens && !!scrollPosY);\n\n    if (!autoScrolls[layersOut]) {\n      for (let i = 0; i <= layersOut; i++) {\n        if (!autoScrolls[i]) {\n          autoScrolls[i] = {};\n        }\n      }\n    }\n\n    if (\n      autoScrolls[layersOut].vx != vx ||\n      autoScrolls[layersOut].vy != vy ||\n      autoScrolls[layersOut].el !== el\n    ) {\n      autoScrolls[layersOut].el = el;\n      autoScrolls[layersOut].vx = vx;\n      autoScrolls[layersOut].vy = vy;\n\n      clearInterval(autoScrolls[layersOut].pid);\n\n      if (vx != 0 || vy != 0) {\n        scrollThisInstance = true;\n        /* jshint loopfunc:true */\n        autoScrolls[layersOut].pid = setInterval(\n          function () {\n            // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n            if (isFallback && this.layer === 0) {\n              //@ts-ignore\n              Sortable.active._onTouchMove(touchEvt); // To move ghost if it is positioned absolutely\n            }\n            let scrollOffsetY = autoScrolls[this.layer].vy\n              ? autoScrolls[this.layer].vy * speed\n              : 0;\n            let scrollOffsetX = autoScrolls[this.layer].vx\n              ? autoScrolls[this.layer].vx * speed\n              : 0;\n\n            if (typeof scrollCustomFn === \"function\") {\n              if (\n                scrollCustomFn.call(\n                  //@ts-ignore\n                  Sortable.dragged.parentNode[expando],\n                  scrollOffsetX,\n                  scrollOffsetY,\n                  evt,\n                  touchEvt,\n                  autoScrolls[this.layer].el\n                ) !== \"continue\"\n              ) {\n                return;\n              }\n            }\n\n            scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n          }.bind({ layer: layersOut }),\n          24\n        );\n      }\n    }\n    layersOut++;\n  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nexport default AutoScrollPlugin;\n", "import Sortable from \"../../sortable/src/Sortable\";\nimport Swap from \"../../plugins/swap/src\";\nimport MultiDrag from \"../../plugins/multi-drag/src\";\nimport { RemoveOnSpill, RevertOnSpill } from \"../../plugins/on-spill/src\";\nimport AutoScroll from \"../../plugins/auto-scroll/src\";\n\n//@ts-ignore\nSortable.mount(new AutoScroll());\nSortable.mount(RemoveOnSpill, RevertOnSpill);\n//@ts-ignore\nSortable.mount(new Swap());\n//@ts-ignore\nSortable.mount(new MultiDrag());\n\nexport default Sortable;\nexport { Sortable };\n", "window.GobiertoAdmin.SitesController = (function() {\n  function SitesController() {}\n\n  function _handleSiteLocationAutocomplete(municipalities_suggestion_url) {\n    var locationFieldHandler = \"#site_organization_name\";\n    var municipalityFieldHandler = \"#site_organization_id\";\n    var autocompleteOptions = {\n      source: function(request, response) {\n        $.ajax({\n          url: municipalities_suggestion_url,\n          crossDomain: true,\n          dataType: \"json\",\n          method: \"GET\",\n          data: { query: request.term },\n          success: function(data) {\n            $(municipalityFieldHandler).val('');\n            response(data[\"suggestions\"])\n          },\n        });\n      },\n      select: function(event, ui) {\n        $(municipalityFieldHandler).val(ui.item.data.municipality_id);\n      },\n      minLength: 3\n    }\n\n    $.ui.autocomplete(autocompleteOptions, $(locationFieldHandler));\n  }\n\n  function _homePage(site_modules_with_root_path) {\n    $(document).ready(function() {\n      populateHomePage(site_modules_with_root_path);\n      $(\"select#site_home_page_item_id\").select2({\n        width: '100%'\n      });\n    });\n\n    $(\"input[name='site[site_modules][]']\").on('click', function() {\n      populateHomePage(site_modules_with_root_path);\n    });\n\n    $('#site_home_page').on('change', function(e){\n      e.preventDefault();\n      selectHomePageItem();\n    });\n  }\n\n  function populateHomePage(site_modules_with_root_path) {\n    var selectedModules = [];\n    $.each($(\"input[name='site[site_modules][]']:checked\"), function(){\n      if (site_modules_with_root_path.includes($(this).val())){\n        selectedModules.push($(this).val());\n      }\n    });\n\n    selectedModules.push(\"GobiertoCms\");\n\n    var selected = $('#site_home_page').val();\n    $('#site_home_page').empty();\n    for (var i=0; i<selectedModules.length; i++){\n       $('<option/>').val(selectedModules[i]).html(selectedModules[i]).appendTo('#site_home_page');\n    }\n    if (selected){\n      $('#site_home_page').val(selected);\n    }\n\n    selectHomePageItem();\n  }\n\n  function selectHomePageItem() {\n    if ($('#site_home_page').val() == \"GobiertoCms\") {\n      $('#home_page_item').show();\n    } else {\n      $('#home_page_item').hide();\n    }\n  }\n\n  SitesController.prototype.edit = function(options) {\n    _handleSiteLocationAutocomplete(options.municipalities_suggestion_url);\n    _homePage(options.site_modules_with_root_path);\n  };\n\n  return SitesController;\n})();\n\nwindow.GobiertoAdmin.sites_controller = new GobiertoAdmin.SitesController;\n", "window.GobiertoAdmin.GobiertoCommonCustomFieldsController = (function() {\n  function GobiertoCommonCustomFieldsController() {}\n\n  GobiertoCommonCustomFieldsController.prototype.handleForm = function() {\n    _handleItemTypeSelection()\n    _handlePluginTypeSelection()\n    _handleBehaviors()\n    _handlePluginOptionsDefault()\n  };\n\n  function _handleItemTypeSelection() {\n    $(document).on(\"change\", \"input[data-has-options]\", function(e) {\n      $(\"div.configuration .form_block\").children(\"div\").hide();\n\n      if ($(this).data().hasVocabulary) {\n        $(\"#vocabulary\").show();\n        if ($(this).data().hasOptions) {\n          $(\"#vocabulary_type\").show();\n        }\n      } else if ($(this).data().hasOptions) {\n        $(\"#options\").show();\n      }\n\n      if ($(this).data().hasMultiple) {\n        $(\"#multiple\").show();\n      }\n\n      if ($(this).data().type === \"plugin\") {\n        _handlePluginOptionsVisibility($('.js-plugin-type-option[checked=\"checked\"]'));\n        _handlePluginOptionsDefault();\n      }\n\n      // Show options related to type\n      if ($(this).data().type) {\n        $(`#${$(this).data().type}`).show();\n      }\n    })\n  }\n\n  function _handlePluginOptionsVisibility(selection) {\n    let defaults = $(\"#configuration\").data(\"defaults\");\n    let current_type = $(\"#configuration\").data(\"type\");\n    let current_value = $(\"#configuration\").attr(\"data-value\")\n\n    selection.attr(\"has_vocabulary\") === \"true\"\n      ? $(\"#vocabulary\").show()\n      : $(\"#vocabulary\").hide()\n\n    if (selection.attr(\"has_configuration\") === \"true\") {\n      $(\"#configuration\").show();\n\n      selection.val() === current_type\n        ? $(\"#custom_field_plugin_configuration\").val(current_value)\n        : $(\"#custom_field_plugin_configuration\").val(defaults[selection.val()]);\n    } else {\n      $(\"#configuration\").hide();\n    }\n  }\n\n  function _handlePluginOptionsDefault() {\n    let defaults = $(\"#configuration\").data(\"defaults\");\n\n    $(\"#custom_field_plugin_configuration\").change(function(e) {\n      if ($(\"#custom_field_plugin_configuration\").val().length === 0) {\n        let selection = $('.js-plugin-type-option:checked').val();\n        $(\"#custom_field_plugin_configuration\").val(defaults[selection]);\n      }\n    });\n  }\n\n  function _handlePluginTypeSelection() {\n    $(\".js-plugin-type-option\").click(e => _handlePluginOptionsVisibility($(e.target)));\n  }\n\n  function _handleBehaviors() {\n    $(document).on(\"click\", \"[data-behavior]\", function handler(e) {\n      if ($(this).data(\"behavior\") === \"delete_option\") {\n        e.preventDefault()\n        _deleteOption($(this).data(\"index\"))\n      } else if ($(this).data(\"behavior\") === \"new_option\") {\n        e.preventDefault()\n        _showNew()\n      } else if ($(this).data(\"behavior\") === \"cancel_new\") {\n        e.preventDefault()\n        _hideNew()\n      } else if ($(this).data(\"behavior\") === \"create\") {\n        e.preventDefault()\n        $(`div[data-option=${$(this).data(\"index\")}]`).find(\"input#custom_field_options_translations_new_option_es\").val()\n        let elems = $(`div[data-option=${$(this).data(\"index\")}]`).find(\"input\")\n        let translations = {}\n        elems.each(function() {\n          let translation = $(this).val().trim()\n          if (translation.length > 0) {\n            translations[$(this).data(\"locale\")] = translation\n          }\n        })\n        if (!$.isEmptyObject(translations)) {\n          _clearNew()\n          _create(translations)\n        }\n      }\n    })\n  }\n\n  function _deleteOption(index) {\n    if (confirm(I18n.t(\"gobierto_admin.gobierto_common.custom_fields.custom_fields.form.confirm\"))) {\n      $(`div[data-option=${index}]`).remove()\n    }\n  }\n\n  function _showNew() {\n    $(\"#new-option-form\").show()\n    $(\"div#add-option\").hide()\n  }\n\n  function _hideNew() {\n    $(\"#new-option-form\").hide()\n    $(\"div#add-option\").show()\n  }\n\n  function _clearNew() {\n    $(\"#new-option-form\").find(\"input\").val(\"\")\n  }\n\n  function _create(translations) {\n    $.ajax({\n      type: \"POST\",\n      url: '/admin/custom_fields/create_option',\n      dataType: 'html',\n      data: { translations: translations },\n      success: function(data) {\n        $(\"#options-list\").append(data)\n      }\n    })\n  }\n\n  return GobiertoCommonCustomFieldsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_custom_fields_controller = new GobiertoAdmin.GobiertoCommonCustomFieldsController;\n", "import Cropper from 'cropperjs'\n\nwindow.GobiertoAdmin.GobiertoCommonCustomFieldRecordsController = (function() {\n  function GobiertoCommonCustomFieldRecordsController() {}\n\n  GobiertoCommonCustomFieldRecordsController.prototype.handleForm = function(options) {\n    for (let image_field of options.image_fields) {\n      _cropImage(image_field)\n    }\n    _handleSelectBehaviors()\n    _handleMultipleElementsBehaviors()\n  }\n\n  function _handleMultipleElementsBehaviors() {\n    $(document).on(\"click\", \"[data-behavior]\", function handler(e) {\n      if ($(this).data(\"behavior\") === \"delete_item\") {\n        e.preventDefault();\n        _deleteItem($(this).data(\"index\"), $(this).data(\"uid\"));\n      } else if ($(this).data(\"behavior\") === \"new_item\") {\n        e.preventDefault();\n        _showNewItem();\n      } else if ($(this).data(\"behavior\") === \"cancel_new\") {\n        e.preventDefault();\n        if ($(this).parents(\"span#new-item-form\").length > 0 ) {\n          _hideNewItem();\n        } else {\n          $(this).parents(\"span\").remove();\n        }\n      }\n    })\n  }\n\n  function _handleCropper({ target, image_field }) {\n    if (target.files.length > 0) {\n      validatesImageDimensionsToCrop(target, image_field);\n    }\n  }\n\n  function _cropImage(image_field) {\n    let uid = image_field.uid\n    $(`#${ uid }`).change(e => _handleCropper({ ...e, image_field }));\n\n    $(`#btnCrop_${ uid }`).click(function({ target }) {\n      const output = document.getElementById(`image_${ uid }`);\n\n      $.magnificPopup.close();\n\n      $(`#saved_image_${ uid }`).hide();\n\n      output.cropper.getCroppedCanvas().toBlob((blob) => {\n        let { from } = target.dataset\n\n        // when we are adding a new item, the \"from\" attribute is wrong (it does not contain any \"index\" value to distinguish the others)\n        // so this block is required to guess which ID will have the new input[type=file]\n        if (!document.getElementById(from).files.length) {\n          // the one that contains \"add_item\" class is the template (fake item),\n          // so the valid one will be the last item, except the template \uD83E\uDD2F\uD83E\uDD2F\uD83E\uDD2F\n          const [{ id }] = Array.from(document.querySelectorAll(`[id^=${from}]`)).filter(x => !x.classList.contains(\"add_item\")).slice(-1)\n          if (!id) return\n\n          from = id\n        }\n\n        // https://pqina.nl/blog/set-value-to-file-input/\n        const file = new File([blob], `chopped-${document.getElementById(from).files[0].name}`, { type: blob.type })\n        const dt = new DataTransfer()\n        dt.items.add(file)\n\n        document.getElementById(from).files = dt.files\n      });\n\n      _createNewItem(image_field)\n    });\n  }\n\n  function _createNewItem(image_field) {\n    if ($(\"#new-item-form\").length == 0) return\n\n    let uid = image_field.uid\n    let index = $(\".new_item\").last().data(\"index\") === undefined ? 0 : $(\".new_item\").last().data(\"index\") + 1\n    let item_uid = `${uid}_${index}`\n\n    let addItemForm = $(\"#new-item-form\").clone().prop(\"id\", `new-item-form-${index}`).addClass(\"new_item\")\n    addItemForm.find(\"input\").each(function(){\n      $(this).prop('name', $(this).prop(\"name\").replace(\"add_item\", index))\n      $(this).prop('id', $(this).prop(\"id\").replace(uid, item_uid))\n      // re-assign the cropper event for the new created elements\n      $(this).change(e => _handleCropper({ ...e, image_field }));\n    });\n    addItemForm.find(\".add_item\").removeClass(\"add_item\")\n    addItemForm.data(\"index\", index)\n\n    $(\"#new-item-form\").before(addItemForm)\n    _hideNewItem()\n    $('.add_item').val('');\n  }\n\n  function openCropModal(loaded_image, image_field) {\n    let uid = image_field.uid\n\n    $.magnificPopup.open({\n      items: {\n        src: `#crop-popup_${ uid }`\n      },\n      type: 'inline',\n      callbacks: {\n        open: function() {\n          if (loaded_image.files && loaded_image.files[0]) {\n            let reader = new FileReader();\n            reader.onload = function () {\n              let dataURL = reader.result;\n\n              let output = document.getElementById(`image_${ uid }`);\n\n              // Hack: Clear cropper\n              if (output.classList.contains(\"cropper-hidden\")) {\n                output.src= \"\";\n                output.cropper.destroy();\n              }\n\n              output.src = dataURL;\n\n              new Cropper(output, { });\n            }\n\n            reader.readAsDataURL(loaded_image.files[0]);\n\n            // required to identify which input[type=file] is triggering the modal\n            $(`#btnCrop_${ uid }`).attr(\"data-from\", loaded_image.id)\n          }\n        }\n      }\n    });\n  }\n\n  function validatesImageDimensionsToCrop(loaded_image, image_field) {\n    let reader = new FileReader();\n\n    reader.readAsDataURL(loaded_image.files[0]);\n    reader.onload = function (e) {\n      let image = new Image();\n\n      image.src = e.target.result;\n\n      image.onload = function () {\n        let height = this.height;\n        let width = this.width;\n        if ((height > image_field.max_height || width > image_field.max_width)) {\n          openCropModal(loaded_image, image_field);\n        } else {\n          _createNewItem(image_field)\n          $(`#saved_image_${ image_field.uid }`).hide();\n        }\n      };\n    };\n  }\n\n  function _deleteItem(index, uid) {\n    if (confirm(I18n.t(\"gobierto_admin.gobierto_common.custom_fields.custom_fields.form.confirm\"))) {\n      $(`div[data-index=${index}][data-uid=${uid}]`).remove()\n    }\n  }\n\n  function _showNewItem() {\n    $(\"div#add-item\").hide()\n    $(\"#new-item-form\").show()\n    $(\"#new-item-form\").find(\".add_item\").click()\n  }\n\n  function _hideNewItem() {\n    $(\"#new-item-form\").hide()\n    $(\"div#add-item\").show()\n  }\n\n  function _handleSelectBehaviors() {\n    $(\"[data-behavior=single_select]\").select2()\n    $(\"[data-behavior=multiple_select]\").select2()\n    $(\"[data-behavior=tags]\").select2({\n      tags: true,\n      createTag: function(params) {\n        var term = $.trim(params.term);\n\n        if (term === '') {\n          return null;\n        }\n        if (_hasAccent(term)) {\n          term = _fixNonAsciiChars(term)\n          this.$element.parent().find(':input.select2-search__field').val(term)\n        }\n\n        return {\n          id: term,\n          text: term\n        }\n      }\n    })\n\n    // This should be controlled via css\n    $(\".select2-container\").css(\"padding-top\", \"22px\");\n  }\n\n  function _fixNonAsciiChars(text) {\n    let transformations = {\n      \"\u00B4a\": \"\u00E1\",\n      \"\u00B4e\": \"\u00E9\",\n      \"\u00B4i\": \"\u00ED\",\n      \"\u00B4o\": \"\u00F3\",\n      \"\u00B4u\": \"\u00FA\",\n      \"\u00B4A\": \"\u00C1\",\n      \"\u00B4E\": \"\u00C9\",\n      \"\u00B4I\": \"\u00CD\",\n      \"\u00B4O\": \"\u00D3\",\n      \"\u00B4U\": \"\u00DA\",\n      \"`a\": \"\u00E0\",\n      \"`e\": \"\u00E8\",\n      \"`i\": \"\u00EC\",\n      \"`o\": \"\u00F3\",\n      \"`u\": \"\u00F9\",\n      \"`A\": \"\u00C0\",\n      \"`E\": \"\u00C8\",\n      \"`I\": \"\u00CC\",\n      \"`O\": \"\u00D2\",\n      \"`U\": \"\u00D9\",\n      \"^a\": \"\u00E2\",\n      \"^e\": \"\u00EA\",\n      \"^i\": \"\u00EE\",\n      \"^o\": \"\u00F4\",\n      \"^u\": \"\u00FB\",\n      \"^A\": \"\u00C2\",\n      \"^E\": \"\u00CA\",\n      \"^I\": \"\u00CE\",\n      \"^O\": \"\u00D4\",\n      \"^U\": \"\u00DB\",\n      \"\u00A8a\": \"\u00E4\",\n      \"\u00A8e\": \"\u00EB\",\n      \"\u00A8i\": \"\u00EF\",\n      \"\u00A8o\": \"\u00F6\",\n      \"\u00A8u\": \"\u00FC\",\n      \"\u00A8A\": \"\u00C4\",\n      \"\u00A8E\": \"\u00CB\",\n      \"\u00A8I\": \"\u00CF\",\n      \"\u00A8O\": \"\u00D6\",\n      \"\u00A8U\": \"\u00DC\"\n    };\n    return text.replace(/[`\u00B4^\u00A8][aeiouAEIOU]/, function(matched){\n      return transformations[matched];\n    });\n  }\n\n  function _hasAccent(term) {\n    return term.match(/[`\u00B4^\u00A8][aeiouAEIOU]/)\n  }\n\n  return GobiertoCommonCustomFieldRecordsController;\n})();\n\nwindow.GobiertoAdmin.gobierto_custom_field_records_controller = new GobiertoAdmin.GobiertoCommonCustomFieldRecordsController;\n", "import '@claviska/jquery-minicolors'\nimport '@claviska/jquery-minicolors/jquery.minicolors.css'\n\nwindow.GobiertoAdmin.ColorPickerComponent = (function() {\n  function ColorPickerComponent() {}\n\n  ColorPickerComponent.prototype.handle = function() {\n    $(document).on(\"turbolinks:load\", _handleGlobalizedForm);\n  };\n\n  function _handleGlobalizedForm() {\n    /* COLOR PICKER */\n    /* https://github.com/claviska/jquery-minicolors */\n    $('[data-behavior=\"colorpicker\"]').each(function() {\n      $(this).minicolors({\n        theme: \"bootstrap\",\n        position: \"bottom left\",\n        format: \"hex\"\n      });\n    })\n  }\n\n  return ColorPickerComponent;\n})();\n\nwindow.GobiertoAdmin.color_picker_component = new GobiertoAdmin.ColorPickerComponent;\n", "window.GobiertoAdmin.SortableComponent = (function() {\n  function SortableComponent() {}\n\n  SortableComponent.prototype.list = function(options) {\n    let positionOffset = options.hasOwnProperty(\"positionOffset\") ? options.positionOffset : 0\n    _handleSortableList(options.wrapper, options.placeholder, positionOffset);\n  };\n\n  function _handleSortableList(wrapper, placeholder, positionOffset) {\n    $(wrapper).sortable({\n      items: '.list_item',\n      handle: '.custom_handle',\n      forcePlaceholderSize: true,\n      placeholder: placeholder,\n      update: function() {\n        _refreshPositions(wrapper, positionOffset);\n        _requestUpdate(wrapper, _buildPositions(wrapper, positionOffset));\n      },\n      helper: _fixWidthHelper\n    });\n  }\n\n  function _fixWidthHelper(e, ui) {\n    ui.children().each(function() {\n      $(this).width($(this).width());\n    });\n    return ui;\n  }\n\n  function _refreshPositions(wrapper, positionOffset) {\n    $(wrapper).find(\".list_item\").each(function(index) {\n      $(this).attr(\"data-pos\", positionOffset + index + 1);\n    });\n  }\n\n  function _buildPositions(wrapper, positionOffset) {\n    var positions = [];\n\n    $(wrapper).find(\".list_item\").each(function(index) {\n      positions.push({\n        id: $(this).data(\"id\"),\n        position: positionOffset + index + 1\n      });\n    });\n\n    return positions;\n  }\n\n  function _requestUpdate(wrapper, positions) {\n    $.ajax({\n      url: $(wrapper).data(\"sortable-target\"),\n      method: \"POST\",\n      data: { positions: positions }\n    });\n  }\n\n  return SortableComponent;\n})();\n\nwindow.GobiertoAdmin.sortable_component = new GobiertoAdmin.SortableComponent;\n", "import { GOBIERTO_DASHBOARDS } from '../lib/events'\nimport { GobiertoDashboardMakerController } from './modules/dashboard_maker_controller.js';\nimport { GobiertoDashboardViewerController } from './modules/dashboard_viewer_controller.js';\n\n// use directives in order to create multiple elements\nconst makerSelector = \"[dashboard-maker-app]\"\nconst dashboardSelector = \"[dashboard-viewer-app]\"\n\n// factory pattern\nconst create = (selector, Instance) => {\n  const nodes = document.querySelectorAll(selector);\n\n  if (nodes.length && typeof Instance === \"function\") {\n    nodes.forEach(node => new Instance({ ...node.dataset, selector }).mount());\n  }\n}\n\n// create elements onload\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  create(makerSelector, GobiertoDashboardMakerController)\n  create(dashboardSelector, GobiertoDashboardViewerController)\n});\n\n// create elements on custom-events\ndocument.addEventListener(GOBIERTO_DASHBOARDS.CREATE, () => create(makerSelector, GobiertoDashboardMakerController))\ndocument.addEventListener(GOBIERTO_DASHBOARDS.LOAD, () => create(dashboardSelector, GobiertoDashboardViewerController))\n", "import '../../../assets/stylesheets/dashboards-maker.scss';\nimport '../../../assets/stylesheets/dashboards-viewer.scss';\nimport Maker from '../webapp/Maker.vue';\nimport { GobiertoDashboardCommonsController } from './dashboard_commons_controller';\n\nexport class GobiertoDashboardMakerController extends GobiertoDashboardCommonsController {\n  constructor(options = {}) {\n    super({ ...options, render: h => h(Maker) })\n  }\n}\n", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { debounce } from '../../lib/shared';\nimport { TextEditable } from '../../lib/vue/components';\nimport Viewer from './Viewer.vue';\nimport HeaderForm from './components/HeaderForm.vue';\nimport SmallCard from './components/SmallCard.vue';\nimport Aside from './layouts/Aside.vue';\nimport Main from './layouts/Main.vue';\nimport { FactoryMixin } from './lib/factories';\nimport { RequiredFields, Widgets } from './lib/widgets';\n\nconst seed = () =>\n  Math.random()\n    .toString(36)\n    .substring(7);\n\nconst __vue_script__ = {\n  name: \"Maker\",\n  components: {\n    Viewer,\n    HeaderForm,\n    Main,\n    Aside,\n    SmallCard,\n    TextEditable\n  },\n  mixins: [FactoryMixin],\n  data() {\n    return {\n      dirty: false,\n      cards: Widgets,\n      item: null,\n      configuration: null,\n      viewerLoaded: false,\n      shaking: false,\n      publicLabel: I18n.t(\"gobierto_dashboards.public\") || \"\",\n      deleteDialogLabel: I18n.t(\"gobierto_dashboards.delete_dialog\") || \"\"\n    };\n  },\n  computed: {\n    id() {\n      return this.$root.$data?.id;\n    },\n    previewPath() {\n      return this.$root.$data?.previewPath;\n    },\n    indicator() {\n      return this.$root.$data?.indicator;\n    },\n    indicatorContext() {\n      return this.$root.$data?.indicatorContext;\n    },\n    context() {\n      return this.$root.$data?.context;\n    },\n    title() {\n      return (\n        this.configuration?.attributes?.title ||\n        I18n.t(\"gobierto_dashboards.default_title\") ||\n        \"\"\n      );\n    },\n    status() {\n      return this.configuration?.attributes?.visibility_level === \"active\";\n    }\n  },\n  created() {\n    this.getConfiguration();\n\n    if (window.$ && window.$.magnificPopup) {\n      const self = this;\n\n      // invalidate autoclose stuff for magnificPopup\n      $.magnificPopup.instance.st.closeOnContentClick = false\n      $.magnificPopup.instance.st.closeOnBgClick = false\n      $.magnificPopup.instance.st.enableEscapeKey = false\n\n      // modifiy the original magnificPopup close function\n      $.magnificPopup.instance.close = function() {\n        if (self.dirty) {\n          // if form is dirty, it shakes the button during 1.5s\n          self.shaking = true\n          setTimeout(() => (self.shaking = false), 1500);\n          return;\n        }\n\n        window.location.reload()\n        $.magnificPopup.proto.close.call(this);\n      };\n    }\n  },\n  mounted() {\n    document.addEventListener(\"dragover\", this.dragoverPosition);\n  },\n  unmounted() {\n    document.removeEventListener(\"dragover\", this.dragoverPosition);\n  },\n  methods: {\n    debounce, // add external func to the vue-this context\n    async getConfiguration() {\n      ({ data: { data: this.configuration } = {} } = this.id\n        ? await this.getDashboard(this.id)\n        : { data: { data: {} } });\n\n      if (this.indicator) {\n        // autoloads the indicator provided via props\n        this.setConfiguration(\"widgets_configuration\", [\n          ...(this.configuration?.attributes?.widgets_configuration || []),\n          {\n            ...this.cards[\"INDICATOR\"],\n            indicator: `${this.indicator}---${this.indicatorContext}`,\n            i: `INDICATOR-${seed()}`,\n            x: 0,\n            y: 0\n          }\n        ]);\n      }\n\n      this.dirty = false;\n    },\n    dragoverPosition({ clientX, clientY }) {\n      // current mouse position\n      this.x = clientX;\n      this.y = clientY;\n    },\n    drag(key) {\n      if (!this.item) {\n        // If no item, it means a new item is being dragged\n        const match = this.cards[key];\n        if (match) {\n          this.item = {\n            i: `${key}-${seed()}`,\n            ...match\n          };\n        }\n      } else {\n        // If there is item while dragging, you've to update the current positions\n        const { i, ix, x: oldX, y: oldY } = this.item;\n\n        // drag events triggers even before this.item has been updated\n        if (Number.isInteger(ix)) {\n          // https://jbaysolutions.github.io/vue-grid-layout/guide/10-drag-from-outside.html\n          // this block has been copied and adapted from the library example (quite a botch)\n          const el = this.$refs.viewer.$refs.widget[ix].$refs.item;\n          const { top, left } = this.$refs.viewer.$el.getBoundingClientRect();\n          el.dragging = { top: this.y - top, left: this.x - left };\n          const { x, y } = el.calcXY(this.y - top, this.x - left);\n          this.$refs.viewer.$refs.grid.dragEvent(\"dragstart\", i, x, y, 1, 1);\n\n          // finally, update the item after its calculations, if changes\n          if (x !== oldX || y !== oldY) {\n            this.item = { ...this.item, x, y };\n          }\n        }\n      }\n    },\n    dragend() {\n      const { i, x, y } = this.item;\n      this.$refs.viewer.$refs.grid.dragEvent(\"dragend\", i, x, y, 1, 1);\n      // once the drag event finishes, nullish the item\n      this.item = null;\n    },\n    setConfiguration(attr, value) {\n      if (!this.configuration) this.configuration = {};\n      if (!this.configuration.attributes) this.configuration.attributes = {};\n\n      this.configuration.attributes[attr] = value;\n      this.dirty = true;\n    },\n    handleInputStatus({ target }) {\n      this.setConfiguration(\n        \"visibility_level\",\n        target.checked ? \"active\" : \"draft\"\n      );\n    },\n    handleInputTitle(title) {\n      this.setConfiguration(\"title\", title);\n    },\n    handleViewerUpdated(widgets) {\n      if (this.viewerLoaded) {\n        this.setConfiguration(\"widgets_configuration\", widgets);\n\n        // when dragging an external element to the canvas, this.item will exists\n        if (this.item) {\n          const ix = widgets.findIndex(d => d.i === this.item.i);\n          this.item = { ...this.item, ...widgets[ix], ix };\n        }\n      }\n    },\n    handleViewerReady() {\n      this.viewerLoaded = true;\n    },\n    subset(x) {\n      // purge those unwanted props\n      return Object.keys(x).reduce((acc, key) => {\n        if (RequiredFields.includes(key)) acc[key] = x[key];\n        return acc;\n      }, {});\n    },\n    handleSave() {\n      if (!this.configuration?.attributes?.context) {\n        this.setConfiguration(\"context\", this.context);\n      }\n\n      if (!this.configuration?.attributes?.title) {\n        this.setConfiguration(\"title\", this.title);\n      }\n\n      this.setConfiguration(\n        \"widgets_configuration\",\n        this.configuration?.attributes?.widgets_configuration?.map(this.subset)\n      );\n\n      this.id\n        ? this.putDashboard(this.id, this.configuration)\n        : this.postDashboard(this.configuration);\n\n      this.dirty = false;\n    },\n    async handleDelete() {\n      if (!confirm(this.deleteDialogLabel)) {\n        return;\n      }\n\n      if (this.id) {\n        const { status } = await this.deleteDashboard(this.id);\n\n        // if properly deleted, close the current popup, if exists\n        if (status === 204 && window.$ && window.$.magnificPopup) {\n          $.magnificPopup.close();\n        }\n      }\n    },\n    handleView() {\n      if (this.previewPath) {\n        // open new location\n        window.open(this.previewPath, \"_blank\");\n      }\n    },\n    handleClose() {\n      if (window.$ && window.$.magnificPopup) {\n        $.magnificPopup.proto.close.call(this);\n      }\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"dashboards-maker\" },\n    [\n      _c(\"HeaderForm\", {\n        attrs: {\n          \"is-dirty\": _vm.dirty,\n          \"show-view-item\": !!_vm.previewPath.length,\n          shaking: _vm.shaking,\n        },\n        on: {\n          save: _vm.handleSave,\n          delete: _vm.handleDelete,\n          view: _vm.handleView,\n          close: _vm.handleClose,\n        },\n        scopedSlots: _vm._u([\n          {\n            key: \"title\",\n            fn: function () {\n              return [\n                _c(\n                  \"TextEditable\",\n                  {\n                    attrs: { tag: \"h1\", icon: true },\n                    on: { input: _vm.handleInputTitle },\n                  },\n                  [_vm._v(\"\\n        \" + _vm._s(_vm.title) + \"\\n      \")]\n                ),\n              ]\n            },\n            proxy: true,\n          },\n          {\n            key: \"checkbox\",\n            fn: function () {\n              return [\n                _c(\n                  \"label\",\n                  {\n                    staticClass: \"dashboards-maker--checkbox\",\n                    attrs: { for: \"dashboard-status\" },\n                  },\n                  [\n                    _c(\"input\", {\n                      attrs: { id: \"dashboard-status\", type: \"checkbox\" },\n                      domProps: { checked: _vm.status },\n                      on: { input: _vm.handleInputStatus },\n                    }),\n                    _vm._v(\"\\n        \" + _vm._s(_vm.publicLabel) + \"\\n      \"),\n                  ]\n                ),\n              ]\n            },\n            proxy: true,\n          },\n        ]),\n      }),\n      _vm._v(\" \"),\n      _c(\n        \"Main\",\n        {\n          scopedSlots: _vm._u([\n            {\n              key: \"aside\",\n              fn: function () {\n                return [\n                  _c(\n                    \"Aside\",\n                    _vm._l(_vm.cards, function (ref, key) {\n                      var name = ref.name\n                      return _c(\"SmallCard\", {\n                        key: key,\n                        attrs: { name: name() },\n                        nativeOn: {\n                          drag: function ($event) {\n                            _vm.debounce(_vm.drag(key, $event), 1000)\n                          },\n                          dragend: function ($event) {\n                            return _vm.dragend.apply(null, arguments)\n                          },\n                        },\n                      })\n                    }),\n                    1\n                  ),\n                ]\n              },\n              proxy: true,\n            },\n          ]),\n        },\n        [\n          _vm._v(\" \"),\n          _vm.configuration\n            ? _c(\"Viewer\", {\n                ref: \"viewer\",\n                attrs: {\n                  \"is-edition-mode\": true,\n                  item: _vm.item,\n                  config: _vm.configuration,\n                },\n                on: {\n                  \"layout-updated\": _vm.handleViewerUpdated,\n                  \"layout-ready\": _vm.handleViewerReady,\n                },\n              })\n            : _vm._e(),\n        ],\n        1\n      ),\n    ],\n    1\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/Maker.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "import BlockHeader from './modules/BlockHeader.vue'\nimport Calendar from './modules/Calendar.vue'\nimport HorizontalCarousel from './modules/HorizontalCarousel.vue'\nimport Loading from './modules/Loading.vue'\nimport Checkbox from './modules/Checkbox.vue'\nimport RangeBars from './modules/RangeBars.vue'\nimport ReadMore from './modules/ReadMore.vue'\nimport Dropdown from './modules/Dropdown.vue'\nimport SkeletonSpinner from './modules/SkeletonSpinner.vue'\nimport Pagination from './modules/Pagination.vue'\nimport MultipleLineChart from './modules/MultipleLineChart.vue'\nimport TextEditable from './modules/TextEditable.vue'\nimport Autocomplete from './modules/Autocomplete.vue'\nimport Table from './modules/Table.vue'\nimport TableColumnsSelector from './modules/TableColumnsSelector.vue'\nimport SortIcon from './modules/SortIcon.vue'\nimport Filters from './modules/Filters.vue'\n\nexport {\n  BlockHeader,\n  Calendar,\n  HorizontalCarousel,\n  Loading,\n  Checkbox,\n  RangeBars,\n  ReadMore,\n  Dropdown,\n  SkeletonSpinner,\n  Pagination,\n  MultipleLineChart,\n  TextEditable,\n  Autocomplete,\n  Table,\n  TableColumnsSelector,\n  SortIcon,\n  Filters\n}\n", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"BlockHeader\",\n  props: {\n    title: {\n      type: String,\n      default: \"\"\n    },\n    seeLink: {\n      type: Boolean,\n      default: false\n    },\n    labelAlt: {\n      type: Boolean,\n      default: false\n    },\n    rotate: {\n      type: Boolean,\n      default: false\n    },\n  },\n  data() {\n    return {\n      labelAll: \"\",\n      labelNone: \"\"\n    };\n  },\n  created() {\n    this.labelAll = I18n.t(\"gobierto_common.vue_components.block_header.all\");\n    this.labelNone = I18n.t(\"gobierto_common.vue_components.block_header.none\");\n  },\n  methods: {\n    selectAll() {\n      this.$emit(\"select-all\");\n    },\n    toggle() {\n      this.$emit(\"toggle\");\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"gobierto-block-header\" }, [\n    _c(\"strong\", { staticClass: \"gobierto-block-header--title\" }, [\n      _c(\"i\", {\n        staticClass: \"fas fa-caret-down gobierto-block-header--icon\",\n        class: _vm.rotate ? \"rotate-caret\" : \"\",\n        on: { click: _vm.toggle },\n      }),\n      _vm._v(\"\\n    \" + _vm._s(_vm.title)),\n    ]),\n    _vm._v(\" \"),\n    _vm.seeLink\n      ? _c(\n          \"a\",\n          {\n            staticClass: \"gobierto-block-header--link\",\n            on: {\n              click: function ($event) {\n                $event.stopPropagation()\n                return _vm.selectAll.apply(null, arguments)\n              },\n            },\n          },\n          [_vm._v(_vm._s(_vm.labelAlt ? _vm.labelNone : _vm.labelAll))]\n        )\n      : _vm._e(),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/BlockHeader.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { Datepicker } from '../../../../lib/shared';\n\nconst __vue_script__ = {\n  name: \"Calendar\",\n  props: {\n    savedStartDate: {\n      type: Date,\n      default: null\n    },\n    savedEndDate: {\n      type: Date,\n      default: null\n    }\n  },\n  data() {\n    return {\n      labelDate: I18n.t(\"gobierto_common.vue_components.calendar.date\") || \"\",\n      startDate: this.savedStartDate,\n      endDate: this.savedEndDate\n    };\n  },\n  dateFmt: { day: \"numeric\", month: \"short\", year: \"numeric\" },\n  computed: {\n    startDateFmt() {\n      return this.startDate\n        ? this.startDate.toLocaleDateString(I18n.locale, this.$options.dateFmt)\n        : undefined;\n    },\n    endDateFmt() {\n      return this.endDate\n        ? this.endDate.toLocaleDateString(I18n.locale, this.$options.dateFmt)\n        : undefined;\n    }\n  },\n  watch: {\n    savedStartDate(n) {\n      this.startDate = n;\n    },\n    savedEndDate(n) {\n      this.endDate = n;\n    }\n  },\n  mounted() {\n    this.setDatePicker();\n  },\n  updated() {\n    this.startDate = this.savedStartDate;\n    this.endDate = this.savedEndDate;\n    this.setDatePicker();\n  },\n  beforeUnmount() {\n    // https://vuejs.org/v2/cookbook/avoiding-memory-leaks.html\n    this.datepicker.destroy();\n  },\n  methods: {\n    setDatePicker() {\n      this.datepicker = new Datepicker(this.$el.querySelector(\"input\"), {\n        language: I18n.locale,\n        autoClose: true,\n        range: true,\n        inline: false,\n        clearButton: true,\n        onSelect: (_, date) => {\n          const [start, end] = date;\n          this.startDate = start;\n          this.endDate = end;\n\n          this.$emit(\"calendar-change\", { start, end });\n        }\n      });\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"gobierto-calendar\" }, [\n    _c(\"div\", [\n      _c(\"strong\", [_vm._v(_vm._s(_vm.labelDate))]),\n      _vm._v(\" \"),\n      _c(\"i\", { staticClass: \"fas fa-caret-down\" }),\n    ]),\n    _vm._v(\" \"),\n    _c(\"small\", [\n      _vm._v(\n        _vm._s(_vm.startDateFmt) +\n          _vm._s(_vm.endDate ? \" - \" : \"\") +\n          _vm._s(_vm.endDateFmt)\n      ),\n    ]),\n    _vm._v(\" \"),\n    _c(\"input\", { staticClass: \"datepicker-here\", attrs: { type: \"text\" } }),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Calendar.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { HorizontalCarousel } from '../../../../lib/shared';\n\nconst __vue_script__ = {\n  name: \"HorizontalCarousel\",\n  props: {\n    visibleItems: {\n      type: Number,\n      default: 3\n    },\n    thumbnails: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      items: this.visibleItems\n    }\n  },\n  mounted() {\n    const images = this.$el.firstElementChild?.children;\n    if (images.length < this.items) {\n      this.items = images.length;\n    }\n\n    this.$nextTick(() => {\n      // if this.items changes, we need to wait for the next DOM update before initializing the carousel\n      this.horizontalCarousel = new HorizontalCarousel(this.$el);\n    })\n  },\n  beforeUnmount() {\n    this.horizontalCarousel.destroy();\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"horizontal-carousel js-horizontal-carousel\",\n      attrs: {\n        \"data-visible-items\": _vm.items,\n        \"data-thumbnails\": _vm.thumbnails,\n      },\n    },\n    [\n      _c(\n        \"div\",\n        { staticClass: \"horizontal-carousel-content\" },\n        [_vm._t(\"default\")],\n        2\n      ),\n      _vm._v(\" \"),\n      _vm._m(0),\n      _vm._v(\" \"),\n      _vm._m(1),\n    ]\n  )\n}\nvar __vue_staticRenderFns__ = [\n  function () {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { attrs: { \"data-prev\": \"\" } }, [\n      _c(\"i\", { staticClass: \"fas fa-angle-left fa-2x\" }),\n    ])\n  },\n  function () {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { attrs: { \"data-next\": \"\" } }, [\n      _c(\"i\", { staticClass: \"fas fa-angle-right fa-2x\" }),\n    ])\n  },\n]\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/HorizontalCarousel.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"Loading\",\n  props: {\n    message: {\n      type: String,\n      default: \"\"\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", [\n    _c(\"i\", { staticClass: \"fas fa-spinner fa-spin\" }),\n    _vm._v(\" \" + _vm._s(_vm.message) + \"\\n\"),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Loading.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { slugString } from '../../../../lib/shared';\n\nconst __vue_script__ = {\n  name: \"Checkbox\",\n  props: {\n    title: {\n      type: [Number, String],\n      default: \"\"\n    },\n    category: {\n      type: String,\n      default: \"\"\n    },\n    id: {\n      type: [Number, String],\n      default: 0\n    },\n    checked: {\n      type: Boolean,\n      default: false\n    },\n    counter: {\n      type: Number,\n      default: null\n    }\n  },\n  data() {\n    return {\n      seed: Math.random().toString(36).substring(7)\n    }\n  },\n  computed: {\n    hasCounter() {\n      return this.counter !== null\n    }\n  },\n  methods: {\n    onChange({ target: { checked } }) {\n      this.$emit(\"checkbox-change\", { id: this.id, value: checked })\n    },\n    createIdCheckbox() {\n      const parseCategoryFilter = slugString(this.category)\n      return `container-checkbox-${parseCategoryFilter}-${this.id}`\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"gobierto-filter-checkbox\",\n      attrs: { id: _vm.createIdCheckbox() },\n    },\n    [\n      _c(\"input\", {\n        staticClass: \"gobierto-filter-checkbox--input\",\n        attrs: { id: \"checkbox-\" + _vm.id + \"-\" + _vm.seed, type: \"checkbox\" },\n        domProps: { checked: _vm.checked },\n        on: { change: _vm.onChange },\n      }),\n      _vm._v(\" \"),\n      _c(\n        \"label\",\n        {\n          staticClass: \"gobierto-filter-checkbox--label\",\n          attrs: { for: \"checkbox-\" + _vm.id + \"-\" + _vm.seed },\n        },\n        [\n          _c(\"div\", { staticClass: \"gobierto-filter-checkbox--label-title\" }, [\n            _c(\n              \"p\",\n              { staticClass: \"gobierto-filter-checkbox--label-title-text\" },\n              [_vm._v(\"\\n        \" + _vm._s(_vm.title) + \"\\n      \")]\n            ),\n            _vm._v(\" \"),\n            _vm.hasCounter\n              ? _c(\n                  \"i\",\n                  { staticClass: \"gobierto-filter-checkbox--label-counter\" },\n                  [_vm._v(\"(\" + _vm._s(_vm.counter) + \")\")]\n                )\n              : _vm._e(),\n          ]),\n        ]\n      ),\n    ]\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Checkbox.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { VueFiltersMixin } from '../../../../lib/vue/filters';\nimport { RangeSlider, debounce } from '../../../../lib/shared';\n\nconst __vue_script__ = {\n  name: \"RangeBars\",\n  mixins: [VueFiltersMixin],\n  props: {\n    min: {\n      type: Number,\n      default: 0\n    },\n    max: {\n      type: Number,\n      default: 100\n    },\n    totalItems: {\n      type: Number,\n      default: 1\n    },\n    savedMin: {\n      type: Number,\n      default: null\n    },\n    savedMax: {\n      type: Number,\n      default: null\n    },\n    histogram: {\n      type: Array,\n      default: () => []\n    }\n  },\n  inRangeClass: \"in-range\",\n  data() {\n    return {\n      defaultRange: [this.min, this.max],\n      selectedMin: this.savedMin || this.min,\n      selectedMax: this.savedMax || this.max,\n      seed: Math.random()\n        .toString(36)\n        .substring(7)\n    };\n  },\n  computed: {\n    rangeMin() {\n      return value => Math.floor(parseFloat(value));\n    },\n    rangeMax() {\n      return value => Math.ceil(parseFloat(value));\n    },\n    rangeDefault() {\n      return JSON.stringify([\n        this.savedMin || Math.floor(this.min),\n        this.savedMax || Math.ceil(this.max)\n      ]);\n    }\n  },\n  mounted() {\n    this.getRangeSlider()\n  },\n  updated() {\n    this.selectedMin = this.savedMin || this.min;\n    this.selectedMax = this.savedMax || this.max;\n    this.getRangeSlider()\n  },\n  beforeUnmount() {\n    // https://vuejs.org/v2/cookbook/avoiding-memory-leaks.html\n    this.rangeSlider.destroy()\n  },\n  methods: {\n    getRangeSlider() {\n      const rangeSlider = this.$el.querySelector(\".js-range-slider\");\n      this.setRangeSlider(rangeSlider);\n    },\n    setRangeSlider(slider) {\n      const {\n        min = 0,\n        max = 100,\n        default: defaultRange = `[${min},${max}]`,\n        rangeBarsSelector\n      } = slider.dataset;\n\n      const callback = (_, ui) => {\n        const { values = [] } = ui;\n\n        slider.selectedRange = values;\n        this.setRangeBar(slider);\n\n        const [min = this.min, max = this.max] = values;\n        this.selectedMin = min;\n        this.selectedMax = max;\n        this.$emit(\"range-change\", { min, max });\n      };\n\n      // Update values for THIS slider\n      slider.min = parseFloat(min);\n      slider.max = parseFloat(max);\n      slider.selectedRange = JSON.parse(defaultRange);\n\n      this.rangeSlider = new RangeSlider({\n        elem: slider,\n        min: slider.min,\n        max: slider.max,\n        defaultRange: slider.selectedRange,\n        rangeCallback: debounce(callback, 750)\n      });\n\n      // Initialize range bars if present\n      if (rangeBarsSelector) {\n        slider.selector = this.$el.querySelector(rangeBarsSelector);\n        this.setRangeBar(slider);\n      }\n    },\n    setRangeBar(rangeBars) {\n      const { min, max, selectedRange, selector } = rangeBars;\n      const bars = selector.children;\n      const step = (max - min) / bars.length;\n      const [start, end] = selectedRange;\n\n      for (let index = 0; index < bars.length; index++) {\n        const bar = bars[index];\n\n        start <= step * index + step + min && end >= step * index + min\n          ? bar.classList.add(this.$options.inRangeClass)\n          : bar.classList.remove(this.$options.inRangeClass);\n      }\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"range-slider\" }, [\n    _c(\n      \"div\",\n      {\n        staticClass: \"range-slider--bars\",\n        attrs: { id: \"range-bars-\" + _vm.seed },\n      },\n      _vm._l(_vm.histogram, function (bar) {\n        return _c(\n          \"div\",\n          {\n            key: bar.id,\n            style: { height: 100 * (bar.count / _vm.totalItems) + \"%\" },\n          },\n          [\n            _c(\"span\", [\n              _vm._v(\n                _vm._s(\n                  _vm._f(\"money\")(_vm.rangeMin(bar.start), {\n                    minimumFractionDigits: 0,\n                  })\n                )\n              ),\n            ]),\n            _vm._v(\" \"),\n            _c(\"span\", [\n              _vm._v(\n                _vm._s(\n                  _vm._f(\"money\")(_vm.rangeMax(bar.end), {\n                    minimumFractionDigits: 0,\n                  })\n                )\n              ),\n            ]),\n          ]\n        )\n      }),\n      0\n    ),\n    _vm._v(\" \"),\n    _c(\"div\", {\n      staticClass: \"js-range-slider\",\n      attrs: {\n        \"data-min\": _vm.min,\n        \"data-max\": _vm.max,\n        \"data-default\": _vm.rangeDefault,\n        \"data-range-bars-selector\": \"#range-bars-\" + _vm.seed,\n      },\n    }),\n    _vm._v(\" \"),\n    _c(\"div\", { staticClass: \"range-slider--values\" }, [\n      _c(\"span\", [\n        _vm._v(\n          _vm._s(_vm._f(\"money\")(_vm.selectedMin, { minimumFractionDigits: 0 }))\n        ),\n      ]),\n      _vm._v(\" \"),\n      _c(\"span\", [\n        _vm._v(\n          _vm._s(_vm._f(\"money\")(_vm.selectedMax, { minimumFractionDigits: 0 }))\n        ),\n      ]),\n    ]),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/RangeBars.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { readMore } from '../../../../lib/shared';\n\nconst __vue_script__ = {\n  name: \"ReadMore\",\n  props: {\n    seeMore: {\n      type: String,\n      default: I18n.t(\"gobierto_common.vue_components.read_more.more\")\n    },\n    seeLess: {\n      type: String,\n      default: I18n.t(\"gobierto_common.vue_components.read_more.less\")\n    },\n    roundChars: {\n      type: Number,\n      default: 150\n    }\n  },\n  data() {\n    return {\n      text: \"\",\n      breakIndex: 0\n    };\n  },\n  computed: {\n    isFeatureEnable() {\n      return this.text.length > this.breakIndex\n    },\n    firstChars() {\n      return this.text.substring(0, this.breakIndex);\n    },\n    lastChars() {\n      return this.text.substring(this.breakIndex, this.text.length);\n    }\n  },\n  created() {\n    const { text = \"\" } = this.$slots.default[0];\n    this.text = text;\n    this.breakIndex = this.roundChars + this.firstBreakAppearance() + 1;\n  },\n  mounted() {\n    if (this.isFeatureEnable) {\n      readMore(this.$el);\n    }\n  },\n  methods: {\n    firstBreakAppearance() {\n      const textBreaks = [\".\", \";\", \"\\n\"];\n      const indexTextBreaks = [];\n      for (let i = 0; i < textBreaks.length; i++) {\n        const element = textBreaks[i];\n        const index = this.text\n          .substring(this.roundChars, this.text.length)\n          .indexOf(element);\n        if (index >= 0) {\n          indexTextBreaks.push(index);\n        }\n      }\n\n      return Math.min.apply(Math, indexTextBreaks);\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"read-more js-read-more\" }, [\n    _c(\"div\", [\n      _vm._v(\"\\n    \" + _vm._s(_vm.firstChars) + \"\\n    \"),\n      _vm.isFeatureEnable\n        ? _c(\"span\", { attrs: { \"data-toggle\": \"\" } }, [\n            _c(\"a\", [_vm._v(_vm._s(_vm.seeMore))]),\n          ])\n        : _vm._e(),\n    ]),\n    _vm._v(\" \"),\n    _c(\"div\", [\n      _vm._v(\"\\n    \" + _vm._s(_vm.lastChars) + \"\\n    \"),\n      _c(\"span\", { attrs: { \"data-toggle\": \"\" } }, [\n        _c(\"a\", [_vm._v(_vm._s(_vm.seeLess))]),\n      ]),\n    ]),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/ReadMore.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: 'Dropdown',\n  data() {\n    return {\n      isContentVisible: true\n    }\n  },\n  created() {\n    this.isContentVisible = window.innerWidth <= 769 ? false : true\n  },\n  methods: {\n    show() {\n      this.isContentVisible = !this.isContentVisible\n      this.$emit('is-content-visible', this.isContentVisible)\n    }\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"gobierto-vue-dropdown\" }, [\n    _c(\n      \"div\",\n      {\n        staticClass: \"gobierto-vue-dropdown--trigger\",\n        on: { click: _vm.show },\n      },\n      [_vm._t(\"trigger\")],\n      2\n    ),\n    _vm._v(\" \"),\n    _c(\n      \"div\",\n      { staticClass: \"gobierto-vue-dropdown--content\" },\n      [\n        _c(\n          \"transition\",\n          { attrs: { name: \"slide\" } },\n          [_vm.isContentVisible ? _vm._t(\"default\") : _vm._e()],\n          2\n        ),\n      ],\n      1\n    ),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Dropdown.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"SkeletonSpinner\",\n  props: {\n    heightSquare: {\n      default: '1rem',\n      type: String,\n    },\n    squaresRows: {\n      default: '1',\n      type: String,\n    },\n    squares: {\n      default: '1',\n      type: String,\n    },\n    lines: {\n      default: '0',\n      type: String,\n    }\n  },\n  computed: {\n    styleSquares() {\n      return {\n        width: ((100 - (+(this.squares) - 1)) / +(this.squares)) + '%',\n        height: this.heightSquare\n      }\n    },\n  },\n  methods: {\n    stylesLines() {\n      return {\n        width: Math.floor(Math.random() * (90 - 50 + 1)) + 50 + '%'\n      }\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _vm._l(parseInt(_vm.lines), function (line) {\n        return [\n          _c(\"div\", {\n            key: \"line-\" + line,\n            staticClass:\n              \"gobierto-skeleton-spinner gobierto-skeleton-spinner-line\",\n            style: _vm.stylesLines(),\n          }),\n        ]\n      }),\n      _vm._v(\" \"),\n      _vm._l(parseInt(_vm.squaresRows), function (square) {\n        return [\n          _c(\n            \"div\",\n            {\n              key: \"square-row-\" + square,\n              staticClass: \"gobierto-skeleton-spinner-container-squares\",\n            },\n            [\n              _vm._l(parseInt(_vm.squares), function (square) {\n                return [\n                  _c(\"div\", {\n                    key: \"square-\" + square,\n                    staticClass:\n                      \"gobierto-skeleton-spinner gobierto-skeleton-spinner-square\",\n                    style: _vm.styleSquares,\n                  }),\n                ]\n              }),\n            ],\n            2\n          ),\n        ]\n      }),\n    ],\n    2\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/SkeletonSpinner.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"Pagination\",\n  props: {\n    data: {\n      type: Array,\n      default: () => []\n    },\n    itemsPerPage: {\n      type: Number,\n      default: 1\n    },\n    containerPagination: {\n      type: String,\n      default: ''\n    },\n  },\n  data() {\n    return {\n      labelNext: I18n.t(\"gobierto_common.vue_components.pagination.next\"),\n      labelPrev: I18n.t(\"gobierto_common.vue_components.pagination.previous\"),\n      page: 1,\n      pages: [],\n    };\n  },\n  computed: {\n    displayedData() {\n      return this.paginateData(this.data);\n    },\n    paginationOptions() {\n      let page = this.page;\n      let len = this.pages.length;\n      if (page - len >= -1 && len > 3) {\n        return this.pages.slice(page - ((page - len) + (5 < len ? 5 : len)), len);\n      } else {\n        return this.pages.slice(page - (page < 4 ? page : 3), page + (5 - (page < 4 ? page : 3)));\n      }\n    },\n    disabledPrevButton() {\n      return this.page === 1\n    },\n    disabledNextButton() {\n      //Disable the Next button when the current page is the last.\n      return this.page === this.pages.slice(-1)[0]\n    },\n    showPagination() {\n      return this.data.length > this.itemsPerPage\n    }\n  },\n  watch:{\n    perPage(value) {\n      if (typeof value === 'string' && value.length < 3) {\n        this.page = 1;\n        this.setPages();\n      }\n    },\n    page(newValue, oldValue) {\n      if (newValue !== oldValue) {\n        this.paginateData(this.data);\n      }\n    },\n    data(newValue, oldValue) {\n      if (newValue !== oldValue) {\n        this.page = 1;\n        this.setPages();\n        this.paginateData(newValue);\n      }\n    }\n  },\n  created() {\n    this.setPages();\n    this.paginateData(this.data);\n  },\n  methods: {\n    setPages() {\n      this.pages.splice(0, this.pages.length);\n      let pageCount = Math.ceil(this.data.length / this.itemsPerPage);\n      for (let index = 1; index <= pageCount; index++) {\n        this.pages.push(index);\n      }\n    },\n    paginateData(data) {\n      let page = this.page;\n      let perPage = this.itemsPerPage;\n      let from = (page * perPage) - perPage;\n      let to = (page * perPage);\n      const displayedData = data.slice(from, to);\n      this.$emit('show-data', displayedData)\n    },\n    nextPage() {\n      this.page++\n      this.scrollToTop()\n    },\n    currentPage(pageNumber) {\n      this.page = pageNumber\n      this.scrollToTop()\n    },\n    prevPage() {\n      this.page--\n      this.scrollToTop()\n    },\n    scrollToTop() {\n      const element = document.querySelector(this.containerPagination);\n      element.scrollIntoView({ behavior: \"smooth\" });\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.showPagination\n    ? _c(\"nav\", { staticClass: \"gobierto-pagination\" }, [\n        _c(\n          \"button\",\n          {\n            staticClass: \"gobierto-pagination-btn\",\n            attrs: { disabled: _vm.disabledPrevButton },\n            on: { click: _vm.prevPage },\n          },\n          [_vm._v(\"\\n    \" + _vm._s(_vm.labelPrev) + \"\\n  \")]\n        ),\n        _vm._v(\" \"),\n        _c(\n          \"ul\",\n          { staticClass: \"gobierto-pagination-pages\" },\n          _vm._l(_vm.paginationOptions, function (pageNumber) {\n            return _c(\n              \"li\",\n              {\n                key: pageNumber,\n                staticClass: \"gobierto-pagination-pages-element\",\n              },\n              [\n                _c(\n                  \"button\",\n                  {\n                    staticClass: \"gobierto-pagination-pages-element-btn\",\n                    attrs: { disabled: pageNumber === _vm.page },\n                    on: {\n                      click: function ($event) {\n                        return _vm.currentPage(pageNumber)\n                      },\n                    },\n                  },\n                  [_vm._v(\"\\n        \" + _vm._s(pageNumber) + \"\\n      \")]\n                ),\n              ]\n            )\n          }),\n          0\n        ),\n        _vm._v(\" \"),\n        _c(\n          \"button\",\n          {\n            staticClass: \"gobierto-pagination-btn\",\n            attrs: { disabled: _vm.disabledNextButton },\n            on: { click: _vm.nextPage },\n          },\n          [_vm._v(\"\\n    \" + _vm._s(_vm.labelNext) + \"\\n  \")]\n        ),\n      ])\n    : _vm._e()\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Pagination.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport * as d3 from 'd3';\nimport { d3locale } from '../../../../lib/shared';\n\nconst __vue_script__ = {\n  name: 'MultipleLineChart',\n  props: {\n    data: {\n      type: Array,\n      default: () => []\n    },\n    height: {\n      default: 400,\n      type: Number,\n    },\n    arrayLineValues: {\n      type: Array,\n      default: () => []\n    },\n    arrayCircleValues: {\n      type: Array,\n      default: () => []\n    },\n    showRightLabels: {\n      type: Boolean,\n      default: false\n    },\n    valuesLegend: {\n      type: Array,\n      default: () => []\n    },\n    marginLeft: {\n      type: Number,\n      default: 30\n    },\n    marginRight: {\n      type: Number,\n      default: 250\n    },\n    marginTop: {\n      type: Number,\n      default: 50\n    },\n    marginBottom: {\n      type: Number,\n      default: 30\n    }\n  },\n  data() {\n    return {\n      svgWidth: 0,\n      svgHeight: 0,\n      margin: {\n        left: this.marginLeft,\n        right: this.marginRight,\n        top: this.marginTop,\n        bottom: this.marginBottom\n      },\n      dataMultipleLineWithoutCoordinates: undefined,\n      containerChart: undefined\n    }\n  },\n  mounted() {\n    this.containerChart = document.querySelector('.multiple-line-chart-container');\n    this.svgWidth = this.containerChart.offsetWidth;\n    this.svgHeight = this.height + this.margin.top + this.margin.bottom\n    this.setupElements()\n    this.buildMultipleLine(this.data)\n    this.resizeListener()\n  },\n  methods: {\n    setupElements() {\n      const svg = d3.select('.multiple-line-chart')\n\n      const g = svg.append('g')\n        .attr('class', 'multiple-line-chart-container-g')\n\n      g.append('g')\n        .attr('class', 'axis axis-x')\n\n      g.append('g')\n        .attr('class', 'axis axis-y')\n    },\n    buildMultipleLine(data) {\n      //Check if showLabels is true, if it's false reduce the size of the margin right\n      this.marginRight = !this.showRightLabels ? 30 : this.marginRight\n\n      data.sort(function(a,b){\n        return new Date(b.year) - new Date(a.year);\n      });\n\n      this.dataMultipleLineWithoutCoordinates = JSON.parse(JSON.stringify(this.data));\n\n      const svg = d3.select('.multiple-line-chart')\n\n      const translate = `translate(${this.margin.left},${this.margin.top})`\n\n      const g = svg.select('.multiple-line-chart-container-g')\n\n      g.attr('transform', translate)\n\n      const scaleY = d3.scaleLinear()\n        .domain([0, d3.max(data, d => Math.max(d[this.arrayLineValues[0]], d[this.arrayLineValues[1]], d[this.arrayLineValues[2]]))])\n        .range([this.height, 0]);\n\n      const scaleX = d3.scaleTime()\n        .domain(d3.extent(data, d => d.year))\n        .range([0, this.svgWidth - (this.margin.left + this.margin.right)]);\n\n      const scaleYBarCharts = d3.scaleLinear()\n        .domain([0, d3.max(data, d => d.final_amount_no_taxes)])\n        .range([this.height, 0]);\n\n      const axisX = d3\n        .axisBottom(scaleX)\n        .tickPadding(10)\n        .ticks(5)\n\n      g.select('.axis-x')\n        .attr('transform', `translate(0,${this.height})`)\n        .call(axisX)\n\n      const axisY = d3\n        .axisLeft(scaleY)\n        .tickPadding(10)\n        .tickFormat(d => d)\n        .tickSize(-(this.svgWidth - (this.margin.right)))\n        .ticks(10)\n\n      g.select('.axis-y')\n        .call(axisY)\n\n      g.selectAll(\".bar\")\n        .data(data)\n        .enter()\n        .append(\"rect\")\n        .attr('class', 'multiple-line-chart-bars')\n        .attr(\"x\", d => scaleX(d.year))\n        .attr(\"width\", 20)\n        .attr(\"y\", d => scaleYBarCharts(d.final_amount_no_taxes))\n        .attr('class', 'multiple-line-chart-bars')\n        .attr('height', (d) => this.height - scaleYBarCharts(d.final_amount_no_taxes))\n        .on('mouseover', (d, e, event) => {\n          this.$emit('showTooltip', d, e, event);\n        })\n        .on('mouseout', () => {\n          d3.select('.multiple-line-tooltip-bars')\n            .style(\"opacity\", 1)\n            .transition()\n            .duration(400)\n            .style(\"opacity\", 0)\n        })\n\n      for (let index = 0; index < this.arrayLineValues.length; index++) {\n\n        let value = this.arrayLineValues[index]\n        let valueline = d3.line()\n          .x(d => scaleX(d.year))\n          .y(d => scaleY(d[value]))\n          .curve(d3.curveCardinal);\n\n        g.append(\"path\")\n          .data([data])\n          .attr(\"class\", `lines-multiple-lines line-${value}`)\n          .attr(\"d\", valueline)\n\n        d3.select('.multiple-line-chart-container')\n          .append('div')\n          .data(data)\n          .attr('class', `tooltip-multiple-line tooltip-${value}`)\n          .style('left', `${this.svgWidth - this.margin.right + 36}px`)\n          .style('top', d => `${scaleY(d[value]) + this.margin.bottom}px`)\n          .html(d => {\n            if (this.showRightLabels) {\n              return this.buildLenged(d, value)\n            }\n          })\n      }\n\n      for (let index = 0; index < this.arrayCircleValues.length; index++) {\n\n        g.selectAll(`.circle-${this.arrayCircleValues[index]}`)\n          .data(data)\n          .join('circle')\n          .attr(\"class\", `circle-${this.arrayCircleValues[index]}`)\n          .attr('cx', d => scaleX(d.year))\n          .attr('cy', d => scaleY(d[this.arrayCircleValues[index]]))\n          .attr('r', 6)\n      }\n    },\n    buildLenged(d, value) {\n      const locale = d3.formatDefaultLocale(d3locale[I18n.locale]);\n      const localeFormat = locale.format(',.0f')\n      const filterData = this.valuesLegend.filter(d => d.key === value)\n\n      let tooltipText = new Function('d', 'value', 'localeFormat', 'return `' + filterData[0].legend + '`;')(d, value, localeFormat);\n      return tooltipText\n    },\n    resizeListener() {\n      window.addEventListener(\"resize\", () => {\n        d3.select('.multiple-line-chart-container-g')\n          .remove()\n          .exit()\n        d3.selectAll('.tooltip-multiple-line')\n          .remove()\n          .exit()\n        this.containerChart = document.querySelector('.multiple-line-chart-container');\n        this.svgWidth = this.containerChart.offsetWidth;\n        this.setupElements()\n        this.buildMultipleLine(this.data)\n      })\n    }\n  }\n}\n\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"multiple-line-chart-container\" }, [\n    _c(\"div\", { staticClass: \"multiple-line-tooltip-bars\" }),\n    _vm._v(\" \"),\n    _c(\"svg\", {\n      staticClass: \"multiple-line-chart\",\n      attrs: { width: _vm.svgWidth, height: _vm.svgHeight },\n    }),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/MultipleLineChart.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"TextEditable\",\n  props: {\n    tag: {\n      type: String,\n      default: \"p\"\n    },\n    icon: {\n      type: Boolean,\n      default: false\n    }\n  },\n  methods: {\n    handleEnterKey() {\n      document.activeElement.blur()\n    },\n    handleFocus() {\n      // assure no white-space remaining\n      document.activeElement.textContent = document.activeElement.textContent.trim()\n\n      // https://javascript.info/selection-range\n      const range = new Range()\n      range.selectNodeContents(document.activeElement)\n      document.getSelection().removeAllRanges();\n      document.getSelection().addRange(range);\n    },\n    handleInput({ target }) {\n      this.$emit('input', target.innerText);\n    }\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"gobierto-text-editable\" },\n    [\n      _c(\n        _vm.tag,\n        {\n          tag: \"component\",\n          attrs: { contenteditable: \"\" },\n          on: {\n            input: _vm.handleInput,\n            focus: _vm.handleFocus,\n            keypress: function ($event) {\n              if (\n                !$event.type.indexOf(\"key\") &&\n                _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n              ) {\n                return null\n              }\n              $event.preventDefault()\n              return _vm.handleEnterKey.apply(null, arguments)\n            },\n          },\n        },\n        [_vm._t(\"default\")],\n        2\n      ),\n      _vm._v(\" \"),\n      _vm.icon ? _c(\"i\", { staticClass: \"fas fa-edit\" }) : _vm._e(),\n    ],\n    1\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/TextEditable.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"Autocomplete\",\n  props: {\n    label: {\n      type: String,\n      default: null\n    },\n    placeholder: {\n      type: String,\n      default: \"\"\n    },\n    name: {\n      type: String,\n      default: \"autocomplete\"\n    },\n    items: {\n      type: Array,\n      default: () => []\n    },\n    defaultValue: {\n      type: String,\n      default: null\n    }\n  },\n  data() {\n    return {\n      results: this.items,\n      isOpen: false,\n      search: this.defaultValue || \"\",\n      arrowCounter: -1\n    };\n  },\n  mounted() {\n    document.addEventListener(\"click\", this.handleClickOutside);\n  },\n  unmounted() {\n    document.removeEventListener(\"click\", this.handleClickOutside);\n  },\n  methods: {\n    onChange() {\n      this.$emit(\"input\", this.search);\n\n      this.isOpen = true;\n      this.results = this.items.filter(item => (\"\"+item).toLowerCase().indexOf((\"\"+this.search).toLowerCase()) > -1);\n    },\n    onArrowDown() {\n      this.isOpen = true;\n      this.arrowCounter = (this.arrowCounter < this.results.length - 1) ? this.arrowCounter + 1 : 0\n    },\n    onArrowUp() {\n      this.isOpen = true;\n      this.arrowCounter = (this.arrowCounter > 0) ? this.arrowCounter - 1 : this.results.length - 1\n    },\n    handleClickOutside(evt) {\n      if (!this.$el.contains(evt.target)) {\n        this.isOpen = false;\n        this.arrowCounter = -1;\n      }\n    },\n    setResult(result) {\n      this.search = result || this.results[this.arrowCounter];\n      this.isOpen = false;\n      this.arrowCounter = -1;\n\n      this.$emit(\"change\", this.search);\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"gobierto-autocomplete\" },\n    [\n      _vm.label.length\n        ? _vm._t(\"label\", function () {\n            return [\n              _c(\n                \"label\",\n                {\n                  staticClass: \"gobierto-autocomplete__label\",\n                  attrs: { for: \"autocomplete-input\" },\n                },\n                [_vm._v(\"\\n      \" + _vm._s(_vm.label) + \"\\n    \")]\n              ),\n            ]\n          })\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"input\", {\n        directives: [\n          {\n            name: \"model\",\n            rawName: \"v-model\",\n            value: _vm.search,\n            expression: \"search\",\n          },\n        ],\n        staticClass: \"gobierto-autocomplete__input\",\n        class: { \"is-active\": _vm.isOpen },\n        attrs: {\n          id: \"autocomplete-input\",\n          name: _vm.name,\n          autocomplete: \"off\",\n          placeholder: _vm.placeholder,\n          type: \"text\",\n        },\n        domProps: { value: _vm.search },\n        on: {\n          input: [\n            function ($event) {\n              if ($event.target.composing) {\n                return\n              }\n              _vm.search = $event.target.value\n            },\n            _vm.onChange,\n          ],\n          keydown: [\n            function ($event) {\n              if (\n                !$event.type.indexOf(\"key\") &&\n                _vm._k($event.keyCode, \"down\", 40, $event.key, [\n                  \"Down\",\n                  \"ArrowDown\",\n                ])\n              ) {\n                return null\n              }\n              return _vm.onArrowDown.apply(null, arguments)\n            },\n            function ($event) {\n              if (\n                !$event.type.indexOf(\"key\") &&\n                _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n              ) {\n                return null\n              }\n              return _vm.onArrowUp.apply(null, arguments)\n            },\n            function ($event) {\n              if (\n                !$event.type.indexOf(\"key\") &&\n                _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n              ) {\n                return null\n              }\n              $event.preventDefault()\n              return _vm.setResult()\n            },\n          ],\n          dblclick: function ($event) {\n            _vm.isOpen = !_vm.isOpen\n          },\n        },\n      }),\n      _vm._v(\" \"),\n      _c(\"transition\", { attrs: { name: \"slide\" } }, [\n        _vm.isOpen\n          ? _c(\n              \"ul\",\n              { staticClass: \"gobierto-autocomplete__results\" },\n              _vm._l(_vm.results, function (result, i) {\n                return _c(\n                  \"li\",\n                  {\n                    key: i,\n                    staticClass: \"gobierto-autocomplete__result\",\n                    class: { \"is-active\": i === _vm.arrowCounter },\n                    on: {\n                      click: function ($event) {\n                        return _vm.setResult(result)\n                      },\n                    },\n                  },\n                  [\n                    _vm._t(\n                      \"default\",\n                      function () {\n                        return [\n                          _vm._v(\n                            \"\\n          \" + _vm._s(result) + \"\\n        \"\n                          ),\n                        ]\n                      },\n                      { result: result }\n                    ),\n                  ],\n                  2\n                )\n              }),\n              0\n            )\n          : _vm._e(),\n      ]),\n    ],\n    2\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Autocomplete.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { Pagination } from '../../../../lib/vue/components'\nimport { VueFiltersMixin } from '../../../../lib/vue/filters'\nimport TableColumnsSelector from './TableColumnsSelector.vue'\nimport SortIcon from './SortIcon.vue'\n\nconst collator = new Intl.Collator(I18n.locale)\n\nconst __vue_script__ = {\n  name: 'Table',\n  components: {\n    SortIcon,\n    TableColumnsSelector,\n    Pagination,\n  },\n  mixins: [VueFiltersMixin],\n  defaults: {\n    sortColumn: \"id\",\n    sortDirection: \"asc\",\n  },\n  props: {\n    data: {\n      type: Array,\n      default: () => []\n    },\n    columns: {\n      type: Array,\n      default: () => []\n    },\n    sortColumn: {\n      type: String,\n      default: null\n    },\n    sortDirection: {\n      type: String,\n      default: null\n    },\n    showColumns: {\n      type: Array,\n      default: () => []\n    },\n    showColumnSelector: {\n      type: Boolean,\n      default: true\n    },\n    showPagination: {\n      type: Boolean,\n      default: true\n    },\n    href: {\n      type: String,\n      default: 'href'\n    },\n  },\n  data() {\n    return {\n      mapColumns: new Map(),\n      currentSortColumn: this.sortColumn || this.$options.defaults.sortColumn,\n      currentSort: this.sortDirection || this.$options.defaults.sortDirection,\n      labelNoData: I18n.t(\"gobierto_common.vue_components.table.no_data\") || '',\n      visibleColumns: this.showColumns.length ? this.showColumns : this.columns.map(({ field }) => field),\n      visiblePaginatedRows: null,\n      arrayColumnsFiltered: []\n    };\n  },\n  computed: {\n    hasPermalink() {\n      return this.data.some(element => element[this.href])\n    },\n    rowsSorted() {\n      const id = this.currentSortColumn;\n      const sort = this.currentSort;\n      return this.data\n        .slice()\n        .sort(({ [id]: termA }, { [id]: termB }) =>\n          sort === \"asc\"\n            ? typeof termA === \"string\"\n              ? collator.compare(termA, termB)\n              : termA > termB ? 1 : -1\n            : typeof termA === \"string\"\n              ? collator.compare(termB, termA)\n              : termA < termB ? 1 : -1\n        );\n    },\n    visibleRows() {\n      // if there's pagination, display only such subset, otherwise show everything\n      return this.showPagination ? this.visiblePaginatedRows : this.rowsSorted\n    },\n  },\n  created() {\n    this.prepareTable()\n  },\n  methods: {\n    handleTableHeaderClick(id) {\n      const { sort } = this.mapColumns.get(id);\n      this.currentSortColumn = id;\n      // toggle sort order\n      this.currentSort = sort === \"asc\" ? \"desc\" : \"asc\";\n      // update the order for the item clicked\n      this.mapColumns.set(id, { ...this.mapColumns.get(id), sort: this.currentSort });\n    },\n    getSorting(column) {\n      // ignore the first item of the tuple\n      const { sort } = this.mapColumns.get(column)\n      return sort;\n    },\n    prepareTable() {\n      this.mapColumns.clear();\n      for (let index = 0; index < this.columns.length; index++) {\n        const { field, name, type, cssClass = '' } = this.columns[index];\n        this.mapColumns.set(field, {\n          visibility: this.visibleColumns.includes(field),\n          name: name,\n          sort: field === this.currentSortColumn ? this.currentSort : undefined,\n          type: type,\n          cssClass: cssClass\n        });\n      }\n      this.arrayColumnsFiltered = Array.from(this.mapColumns).filter(([,{ visibility }]) => !!visibility)\n    },\n    updateData(values) {\n      this.visiblePaginatedRows = values\n    },\n    filterColumns(columns) {\n      this.mapColumns = columns\n      this.arrayColumnsFiltered = Array.from(this.mapColumns).filter(([,{ visibility }]) => !!visibility)\n    },\n    handleTableItem(item) {\n      this.$emit('on-href-click', item)\n    }\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { ref: \"table\", staticClass: \"gobierto-table\" },\n    [\n      _vm.showColumnSelector\n        ? [\n            _vm._t(\"columns\", function () {\n              return [\n                _c(\n                  \"div\",\n                  { staticClass: \"gobierto-table__header\" },\n                  [\n                    _c(\"TableColumnsSelector\", {\n                      attrs: { columns: _vm.mapColumns },\n                      on: { \"visible-columns\": _vm.filterColumns },\n                    }),\n                  ],\n                  1\n                ),\n              ]\n            }),\n          ]\n        : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"table\", [\n        _c(\n          \"thead\",\n          _vm._l(_vm.arrayColumnsFiltered, function (ref) {\n            var id = ref[0]\n            var ref_1 = ref[1]\n            var name = ref_1.name\n            var index = ref_1.index\n            var cssClass = ref_1.cssClass\n            return _c(\n              \"th\",\n              {\n                key: index,\n                staticClass: \"gobierto-table__th\",\n                class: cssClass,\n                on: {\n                  click: function ($event) {\n                    return _vm.handleTableHeaderClick(id)\n                  },\n                },\n              },\n              [\n                _vm._v(\"\\n        \" + _vm._s(name) + \"\\n        \"),\n                _vm.currentSortColumn === id\n                  ? _c(\"SortIcon\", { attrs: { direction: _vm.getSorting(id) } })\n                  : _vm._e(),\n              ],\n              1\n            )\n          }),\n          0\n        ),\n        _vm._v(\" \"),\n        _c(\n          \"tbody\",\n          _vm._l(_vm.visibleRows, function (item, index) {\n            return _c(\n              \"tr\",\n              {\n                key: index,\n                staticClass: \"gobierto-table__tr\",\n                class: { \"is-clickable\": _vm.hasPermalink },\n              },\n              [\n                _vm._l(_vm.arrayColumnsFiltered, function (ref) {\n                  var id = ref[0]\n                  var ref_1 = ref[1]\n                  var type = ref_1.type\n                  var cssClass = ref_1.cssClass\n                  return [\n                    type === \"money\"\n                      ? [\n                          _c(\n                            \"td\",\n                            {\n                              key: id,\n                              staticClass: \"gobierto-table__td\",\n                              class: cssClass,\n                            },\n                            [\n                              _vm.hasPermalink\n                                ? [\n                                    _c(\n                                      \"a\",\n                                      {\n                                        staticClass: \"gobierto-table__a\",\n                                        attrs: { href: item[_vm.href] },\n                                        on: {\n                                          click: function ($event) {\n                                            $event.preventDefault()\n                                            return _vm.handleTableItem(item)\n                                          },\n                                        },\n                                      },\n                                      [\n                                        _vm._v(\n                                          \"\\n                  \" +\n                                            _vm._s(_vm._f(\"money\")(item[id])) +\n                                            \"\\n                \"\n                                        ),\n                                      ]\n                                    ),\n                                  ]\n                                : [\n                                    _c(\"span\", [\n                                      _vm._v(\n                                        \"\\n                  \" +\n                                          _vm._s(_vm._f(\"money\")(item[id])) +\n                                          \"\\n                \"\n                                      ),\n                                    ]),\n                                  ],\n                            ],\n                            2\n                          ),\n                        ]\n                      : type === \"date\"\n                      ? [\n                          _c(\n                            \"td\",\n                            {\n                              key: id,\n                              staticClass: \"gobierto-table__td\",\n                              class: cssClass,\n                            },\n                            [\n                              _vm.hasPermalink\n                                ? [\n                                    _c(\n                                      \"a\",\n                                      {\n                                        staticClass: \"gobierto-table__a\",\n                                        attrs: { href: item[_vm.href] },\n                                        on: {\n                                          click: function ($event) {\n                                            $event.preventDefault()\n                                            return _vm.handleTableItem(item)\n                                          },\n                                        },\n                                      },\n                                      [\n                                        _vm._v(\n                                          \"\\n                  \" +\n                                            _vm._s(_vm._f(\"date\")(item[id])) +\n                                            \"\\n                \"\n                                        ),\n                                      ]\n                                    ),\n                                  ]\n                                : [\n                                    _c(\"span\", [\n                                      _vm._v(\n                                        \"\\n                  \" +\n                                          _vm._s(_vm._f(\"date\")(item[id])) +\n                                          \"\\n                \"\n                                      ),\n                                    ]),\n                                  ],\n                            ],\n                            2\n                          ),\n                        ]\n                      : type === \"truncate\"\n                      ? [\n                          _c(\n                            \"td\",\n                            { key: id, staticClass: \"gobierto-table__td\" },\n                            [\n                              _vm.hasPermalink\n                                ? [\n                                    _c(\n                                      \"a\",\n                                      {\n                                        staticClass: \"gobierto-table__a\",\n                                        class: cssClass,\n                                        attrs: { href: item[_vm.href] },\n                                        on: {\n                                          click: function ($event) {\n                                            $event.preventDefault()\n                                            return _vm.handleTableItem(item)\n                                          },\n                                        },\n                                      },\n                                      [\n                                        _vm._v(\n                                          \"\\n                  \" +\n                                            _vm._s(item[id]) +\n                                            \"\\n                \"\n                                        ),\n                                      ]\n                                    ),\n                                  ]\n                                : [\n                                    _c(\"span\", { class: cssClass }, [\n                                      _vm._v(\n                                        \"\\n                  \" +\n                                          _vm._s(item[id]) +\n                                          \"\\n                \"\n                                      ),\n                                    ]),\n                                  ],\n                            ],\n                            2\n                          ),\n                        ]\n                      : [\n                          _c(\n                            \"td\",\n                            {\n                              key: id,\n                              staticClass: \"gobierto-table__td\",\n                              class: cssClass,\n                            },\n                            [\n                              _vm.hasPermalink\n                                ? [\n                                    _c(\n                                      \"a\",\n                                      {\n                                        staticClass: \"gobierto-table__a\",\n                                        attrs: { href: item[_vm.href] },\n                                        on: {\n                                          click: function ($event) {\n                                            $event.preventDefault()\n                                            return _vm.handleTableItem(item)\n                                          },\n                                        },\n                                      },\n                                      [\n                                        _vm._v(\n                                          \"\\n                  \" +\n                                            _vm._s(item[id]) +\n                                            \"\\n                \"\n                                        ),\n                                      ]\n                                    ),\n                                  ]\n                                : [\n                                    _c(\"span\", [\n                                      _vm._v(\n                                        \"\\n                  \" +\n                                          _vm._s(item[id]) +\n                                          \"\\n                \"\n                                      ),\n                                    ]),\n                                  ],\n                            ],\n                            2\n                          ),\n                        ],\n                  ]\n                }),\n              ],\n              2\n            )\n          }),\n          0\n        ),\n      ]),\n      _vm._v(\" \"),\n      !_vm.data.length\n        ? _c(\"div\", { staticClass: \"center p1\" }, [\n            _vm._v(\"\\n    \" + _vm._s(_vm.labelNoData) + \"\\n  \"),\n          ])\n        : _vm._e(),\n      _vm._v(\" \"),\n      _vm.showPagination\n        ? [\n            _vm._t(\n              \"pagination\",\n              function () {\n                return [\n                  _c(\"Pagination\", {\n                    attrs: {\n                      data: _vm.rowsSorted,\n                      \"items-per-page\": 25,\n                      \"container-pagination\": \"main\",\n                    },\n                    on: { \"show-data\": _vm.updateData },\n                  }),\n                ]\n              },\n              { paginator: _vm.updateData, data: _vm.rowsSorted }\n            ),\n          ]\n        : _vm._e(),\n    ],\n    2\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Table.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { Checkbox } from '../../../../lib/vue/components';\nimport { clickoutside } from '../../../../lib/vue/directives'\n\nconst __vue_script__ = {\n  name: \"TableColumnsSelector\",\n  components: {\n    Checkbox\n  },\n  directives: {\n    clickoutside\n  },\n  props: {\n    columns: {\n      type: Map,\n      default: () => new Map()\n    }\n  },\n  data() {\n    return {\n      showColumnsModal: false,\n      labelCustomizeColumns: I18n.t(\"gobierto_common.vue_components.table.customize_columns\") || ''\n    }\n  },\n  methods: {\n    closeModal() {\n      this.showColumnsModal = false\n    },\n    toggleVisibility({ id, value }) {\n      this.columns.set(id, { ...this.columns.get(id), visibility: value });\n      this.$emit('visible-columns', this.columns)\n    },\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      directives: [\n        {\n          name: \"clickoutside\",\n          rawName: \"v-clickoutside\",\n          value: _vm.closeModal,\n          expression: \"closeModal\",\n        },\n      ],\n      staticClass: \"gobierto-table__column-selector\",\n    },\n    [\n      _c(\n        \"div\",\n        {\n          staticClass: \"gobierto-table__column-selector__trigger\",\n          attrs: { \"data-testid\": \"table-button-modal\" },\n          on: {\n            click: function ($event) {\n              _vm.showColumnsModal = !_vm.showColumnsModal\n            },\n          },\n        },\n        [\n          _c(\"span\", [_vm._v(_vm._s(_vm.labelCustomizeColumns))]),\n          _vm._v(\" \"),\n          _c(\"i\", {\n            staticClass: \"gobierto-table__column-selector__icon fas fa-columns\",\n          }),\n        ]\n      ),\n      _vm._v(\" \"),\n      _c(\"transition\", { attrs: { name: \"fade\" } }, [\n        _vm.showColumnsModal\n          ? _c(\n              \"div\",\n              {\n                staticClass: \"gobierto-table__column-selector__content\",\n                attrs: { \"data-testid\": \"table-modal\" },\n              },\n              _vm._l(_vm.columns, function (ref) {\n                var id = ref[0]\n                var ref_1 = ref[1]\n                var name = ref_1.name\n                var visibility = ref_1.visibility\n                return _c(\"Checkbox\", {\n                  key: id,\n                  attrs: { id: id, title: name, checked: visibility },\n                  on: { \"checkbox-change\": _vm.toggleVisibility },\n                })\n              }),\n              1\n            )\n          : _vm._e(),\n      ]),\n    ],\n    1\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/TableColumnsSelector.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "export const clickoutside = {\n  bind(el, binding, vnode) {\n    el.clickOutsideEvent = (event) => {\n      if (!(el === event.target || el.contains(event.target))) {\n        vnode.context[binding.expression](event);\n      }\n    };\n    document.body.addEventListener('click', el.clickOutsideEvent)\n  },\n  unbind(el) { document.body.removeEventListener('click', el.clickOutsideEvent) },\n  stopProp(event) { event.stopPropagation() }\n}\n\nexport const VueDirectivesMixin = {\n  directives: {\n    clickoutside\n  }\n}\n", "/* script */\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"SortIcon\",\n  props: {\n    direction: {\n      type: String,\n      default: null\n    }\n  },\n  computed: {\n    icon() {\n      return this.direction === \"desc\" ? \"down\" : \"down-alt\"\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.direction\n    ? _c(\"i\", {\n        class:\n          \"gobierto-table__column-selector__icon fas fa-sort-amount-\" +\n          _vm.icon,\n      })\n    : _vm._e()\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/SortIcon.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { ItemsFilterMixin } from '../../../../lib/vue/mixins';\nimport { Checkbox, BlockHeader, Calendar, RangeBars, Dropdown } from '../../../../lib/vue/components';\n\nconst __vue_script__ = {\n  name: \"Filters\",\n  components: {\n    Checkbox,\n    BlockHeader,\n    Calendar,\n    RangeBars,\n    Dropdown\n  },\n  mixins: [ItemsFilterMixin],\n  props: {\n    data: {\n      type: Array,\n      default: () => []\n    },\n    fields: {\n      type: Array,\n      default: () => []\n    },\n    metadata: {\n      type: Array,\n      default: () => []\n    },\n    stats: {\n      type: Object,\n      default: () => {}\n    }\n  },\n  data() {\n    return {\n      labelClear: I18n.t(\"gobierto_common.vue_components.filters.clear\") || \"\",\n      items: this.data\n    };\n  },\n  watch: {\n    subsetItems(items) {\n      this.$emit(\"update\", items);\n    }\n  },\n  created() {\n    // items-filter method\n    this.createFilters({\n      filters: this.fields,\n      dictionary: this.metadata,\n      stats: this.stats\n    });\n  },\n  methods: {\n    clear() {\n      // items-filter method\n      this.clearFilters();\n      this.$emit(\"clear\");\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"gobierto-filters\" },\n    [\n      _c(\"transition\", { attrs: { name: \"fade\", mode: \"out-in\" } }, [\n        _vm.isDirty\n          ? _c(\n              \"span\",\n              {\n                staticClass: \"gobierto-filters--clear\",\n                on: { click: _vm.clear },\n              },\n              [_vm._v(_vm._s(_vm.labelClear))]\n            )\n          : _vm._e(),\n      ]),\n      _vm._v(\" \"),\n      _vm._l(_vm.filters, function (filter) {\n        return _c(\n          \"div\",\n          {\n            key: filter.key,\n            class: { \"gobierto-filter--hide-dropdown\": filter.hideDropdown },\n          },\n          [\n            filter.type === \"date\"\n              ? [\n                  _c(\n                    \"Dropdown\",\n                    {\n                      on: {\n                        \"is-content-visible\": function ($event) {\n                          filter.rotate = !filter.rotate\n                        },\n                      },\n                      scopedSlots: _vm._u(\n                        [\n                          {\n                            key: \"trigger\",\n                            fn: function () {\n                              return [\n                                _c(\"BlockHeader\", {\n                                  attrs: {\n                                    rotate: filter.rotate,\n                                    title: filter.title,\n                                  },\n                                }),\n                              ]\n                            },\n                            proxy: true,\n                          },\n                        ],\n                        null,\n                        true\n                      ),\n                    },\n                    [\n                      _vm._v(\" \"),\n                      _c(\"Calendar\", {\n                        attrs: {\n                          \"saved-start-date\": filter.savedStartDate,\n                          \"saved-end-date\": filter.savedEndDate,\n                        },\n                        on: {\n                          \"calendar-change\": function (e) {\n                            return _vm.handleCalendarFilterStatus(\n                              Object.assign({}, e, { filter: filter })\n                            )\n                          },\n                        },\n                      }),\n                    ],\n                    1\n                  ),\n                ]\n              : filter.type === \"vocabulary_options\"\n              ? [\n                  _c(\n                    \"Dropdown\",\n                    {\n                      on: {\n                        \"is-content-visible\": function ($event) {\n                          filter.rotate = !filter.rotate\n                        },\n                      },\n                      scopedSlots: _vm._u(\n                        [\n                          {\n                            key: \"trigger\",\n                            fn: function () {\n                              return [\n                                _c(\"BlockHeader\", {\n                                  attrs: {\n                                    rotate: filter.rotate,\n                                    title: filter.title,\n                                    \"label-alt\": filter.isEverythingChecked,\n                                    \"see-link\": \"\",\n                                  },\n                                  on: {\n                                    \"select-all\": function (e) {\n                                      return _vm.handleIsEverythingChecked(\n                                        Object.assign({}, e, { filter: filter })\n                                      )\n                                    },\n                                  },\n                                }),\n                              ]\n                            },\n                            proxy: true,\n                          },\n                        ],\n                        null,\n                        true\n                      ),\n                    },\n                    [\n                      _vm._v(\" \"),\n                      _c(\n                        \"div\",\n                        _vm._l(filter.options, function (option) {\n                          return _c(\"Checkbox\", {\n                            key: option.id,\n                            attrs: {\n                              id: option.id,\n                              title: option.title,\n                              checked: option.isOptionChecked,\n                              counter: option.counter,\n                            },\n                            on: {\n                              \"checkbox-change\": function (e) {\n                                return _vm.handleCheckboxStatus(\n                                  Object.assign({}, e, { filter: filter })\n                                )\n                              },\n                            },\n                          })\n                        }),\n                        1\n                      ),\n                    ]\n                  ),\n                ]\n              : filter.type === \"numeric\"\n              ? [\n                  _c(\n                    \"Dropdown\",\n                    {\n                      on: {\n                        \"is-content-visible\": function ($event) {\n                          filter.rotate = !filter.rotate\n                        },\n                      },\n                      scopedSlots: _vm._u(\n                        [\n                          {\n                            key: \"trigger\",\n                            fn: function () {\n                              return [\n                                _c(\"BlockHeader\", {\n                                  attrs: {\n                                    rotate: filter.rotate,\n                                    title: filter.title,\n                                  },\n                                }),\n                              ]\n                            },\n                            proxy: true,\n                          },\n                        ],\n                        null,\n                        true\n                      ),\n                    },\n                    [\n                      _vm._v(\" \"),\n                      _c(\"RangeBars\", {\n                        attrs: {\n                          histogram: (filter.histogram || []).map(function (\n                            item,\n                            i\n                          ) {\n                            return Object.assign({}, item, {\n                              id: item.bucket || i,\n                            })\n                          }),\n                          min: Math.floor(+filter.min),\n                          max: Math.ceil(parseFloat(filter.max)),\n                          \"saved-min\": filter.savedMin,\n                          \"saved-max\": filter.savedMax,\n                          \"total-items\": parseFloat(filter.count),\n                        },\n                        on: {\n                          \"range-change\": function (e) {\n                            return _vm.handleRangeFilterStatus(\n                              Object.assign({}, e, { filter: filter })\n                            )\n                          },\n                        },\n                      }),\n                    ],\n                    1\n                  ),\n                ]\n              : _vm._e(),\n          ],\n          2\n        )\n      }),\n    ],\n    2\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/lib/vue/components/modules/Filters.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "import { ItemsFilterMixin } from './modules/items-filter';\n\nexport {\n  ItemsFilterMixin\n}\n", "import { Middleware } from '../../../../lib/shared';\n\nexport const ItemsFilterMixin = {\n  data() {\n    return {\n      items: [],\n      subsetItems: [],\n      filters: [],\n      activeFilters: new Map(),\n      defaultFilters: new Map(),\n      isDirty: false\n    }\n  },\n  props: {\n    noEmptyOptions: {\n      type: Boolean,\n      default: false\n    }\n  },\n  methods: {\n    createFilters({ filters, dictionary, stats = {} }) {\n      // Middleware receives both the dictionary of all possible attributes, and the selected filters for the site\n      const middleware = new Middleware({ dictionary, filters });\n\n      this.filters = middleware.getFilters(stats) || [];\n      this.defaultFilters = JSON.parse(JSON.stringify(this.filters.slice(0)));\n\n      if (filters.length) {\n        this.activeFilters = new Map();\n        this.initializeFilters()\n        this.parseQueryParams(this.$route)\n        this.updateItems()\n      }\n    },\n    filterItems(filterFn, key) {\n      this.isDirty = true\n      this.activeFilters.set(key, filterFn);\n    },\n    updateItems() {\n      this.subsetItems = this.applyFiltersCallbacks(this.activeFilters);\n      this.filters = this.filters.map(this.calculateOptionCounters);\n    },\n    initializeFilters() {\n      this.isDirty = false\n      this.activeFilters.clear()\n      this.filters = this.filters.map(filter => {\n        const __filter = this.calculateOptionCounters(filter)\n\n        // Filter options based on allowedValues if defined\n        if (__filter.allowedValues && Array.isArray(__filter.allowedValues) && __filter.allowedValues.length > 0) {\n          __filter.options = __filter.options.filter(option => {\n            const slug = String(option.slug)\n            const id = String(option.id)\n            return __filter.allowedValues.includes(slug) || __filter.allowedValues.includes(id)\n          })\n        }\n\n        if (this.noEmptyOptions) {\n          __filter.options = __filter.options.filter(({ counter }) => counter > 0)\n        }\n\n        return __filter\n      });\n    },\n    applyFiltersCallbacks(activeFilters) {\n      let results = this.items;\n      activeFilters.forEach(activeFn => {\n        if (activeFn) {\n          results = results.filter(d => activeFn(d.attributes));\n        }\n      });\n\n      return results;\n    },\n    clearFilters() {\n      this.filters = []\n      this.filters = JSON.parse(JSON.stringify(this.defaultFilters.slice(0)))\n\n      this.initializeFilters()\n      this.updateItems();\n\n      const query = { ...this.$route?.query, ...this.filters.reduce((acc, { key }) => ({ ...acc, [key]: undefined }), {}) }\n      this.$router?.push({ ...this.$route, query })\n    },\n    handleIsEverythingChecked({ filter }) {\n      filter.isEverythingChecked = !filter.isEverythingChecked;\n      filter.options.map(d => (d.isOptionChecked = filter.isEverythingChecked));\n      this.handleCheckboxFilter(filter);\n\n      // url updates must be done only in functions triggered by the user\n      this.updateURL(filter)\n    },\n    handleCheckboxStatus({ id, value, filter }) {\n      const index = filter.options.findIndex(d => d.id === id);\n      filter.options[index].isOptionChecked = value;\n      this.handleCheckboxFilter(filter);\n      this.updateItems();\n\n      // url updates must be done only in functions triggered by the user\n      this.updateURL(filter)\n    },\n    handleCheckboxFilter(filter) {\n      const { key, options } = filter;\n      const checkboxesSelected = new Map();\n      options.forEach(({ id, isOptionChecked }) =>\n        checkboxesSelected.set(id, isOptionChecked)\n      );\n\n      const size = [...checkboxesSelected.values()].filter(Boolean).length;\n      // Filter by those that have at least one element\n      const optionsActive = options.filter(({ counter = 0 }) => counter > 0 );\n      // Update the property when all isEverythingChecked\n      if (size === optionsActive.length) {\n        filter.isEverythingChecked = true;\n      }\n\n      // Update the property when none isEverythingChecked\n      if (size === 0) {\n        filter.isEverythingChecked = false;\n      }\n\n      const index = this.filters.findIndex(d => d.key === key);\n      this.filters.splice(index, 1, filter); // To detect array mutations\n\n      const checkboxFilterFn = attrs =>\n        attrs[key] && this.convertToArrayOfIds(attrs[key]).find(d => checkboxesSelected.get(+d));\n\n      const callback = size ? checkboxFilterFn : undefined;\n      this.filterItems(callback, key);\n    },\n    handleRangeFilterStatus({ min, max, filter }) {\n      // this function mutates filter, therefore updateURL receives the mutated filter obj\n      this.handleRangeFilter({ min, max, filter })\n      this.updateItems();\n\n      // url updates must be done only in functions triggered by the user\n      this.updateURL(filter)\n    },\n    handleRangeFilter({ min, max, filter }) {\n      const { key, min: __min__, max: __max__ } = filter;\n      const rangeFilterFn = attrs => attrs[key] >= min && attrs[key] <= max;\n\n      filter.savedMin = min;\n      filter.savedMax = max;\n\n      const index = this.filters.findIndex(d => d.key === key);\n      this.filters.splice(index, 1, filter); // To detect array mutations\n\n      const callback =\n        Math.floor(min) <= Math.floor(+__min__) &&\n        Math.floor(max) >= Math.floor(+__max__)\n          ? undefined\n          : rangeFilterFn;\n      this.filterItems(callback, key);\n    },\n    handleCalendarFilterStatus({ start, end, filter }) {\n      // this function mutates filter, therefore updateURL receives the mutated filter obj\n      this.handleCalendarFilter({ start, end, filter })\n      this.updateItems();\n\n      // url updates must be done only in functions triggered by the user\n      this.updateURL(filter)\n    },\n    handleCalendarFilter({ start, end, filter }) {\n      const { key, startKey = key, endKey = startKey } = filter;\n      const calendarFilterFn = attrs => {\n        if (start && end && attrs[startKey] && attrs[endKey]) {\n          return !(\n            end < new Date(attrs[startKey]) || start > new Date(attrs[endKey])\n          );\n        } else if (start && !end && attrs[endKey]) {\n          return !(start > new Date(attrs[endKey]));\n        } else if (!start && end && attrs[startKey]) {\n          return !(end < new Date(attrs[startKey]));\n        } else {\n          return false;\n        }\n      };\n\n      // Update object\n      filter.savedStartDate = start;\n      filter.savedEndDate = end;\n\n      const index = this.filters.findIndex(d => d.key === key);\n      this.filters.splice(index, 1, filter); // To detect array mutations\n\n      const callback = !start && !end ? undefined : calendarFilterFn;\n      this.filterItems(callback, key);\n    },\n    counter({ key, id }) {\n      // Clone current filters\n      const __activeFilters__ = new Map(this.activeFilters);\n      // Ignore same key callbacks (as if none of the same category are selected)\n      __activeFilters__.set(key, undefined);\n      // Get the items based on these new active filters\n      const __items__ = this.applyFiltersCallbacks(__activeFilters__);\n\n      return __items__.filter(({ attributes }) =>\n        this.convertToArrayOfIds(attributes[key]).includes(id)\n      ).length;\n    },\n    calculateOptionCounters(filter) {\n      const { key, options = [] } = filter;\n\n      if (options.length) {\n        filter.options = options.map(o => ({\n          ...o,\n          counter: this.counter({ id: o.id, key })\n        }));\n      }\n\n      return filter\n    },\n    convertToArrayOfIds(items) {\n      return Array.isArray(items) ? items.map(item => (+item)) : [+items]\n    },\n    updateURL(filter = {}) {\n      const param = this.$route?.query[filter.key]?.split(\",\") || []\n\n      if (filter.type === \"vocabulary_options\") {\n        filter.options.forEach(({ slug, isOptionChecked }) => {\n          if (isOptionChecked) {\n            // when value is true, ignore param if exists, otherwise append it\n            if (!param.includes(slug)) {\n              param.push(slug)\n            }\n          } else if (param.includes(slug)) {\n            // remove param if false\n            param.splice(param.indexOf(slug), 1)\n          }\n        })\n      }\n\n      if (filter.type === \"numeric\") {\n        param[0] = filter.savedMin\n        param[1] = filter.savedMax\n      }\n\n      if (filter.type === \"date\") {\n        // set only the date part\n        param[0] = filter.savedStartDate?.toISOString().substr(0, 10)\n        param[1] = filter.savedEndDate?.toISOString().substr(0, 10)\n      }\n\n      const query = { ...this.$route?.query, [filter.key]: param.length ? param.join(\",\") : undefined }\n      this.$router?.push({ ...this.$route, query })\n    },\n    parseQueryParams({ query }) {\n      Object.entries(query).forEach(([k, values]) => {\n        const ix = this.filters.findIndex(({ key }) => k === key)\n        const filter = this.filters[ix]\n\n        if (filter && filter.type === \"vocabulary_options\") {\n          values.split(\",\").forEach(x => {\n            const idx = filter.options.findIndex(({ slug }) => x === slug)\n            filter.options[idx].isOptionChecked = true\n          })\n          this.filters.splice(ix, 1, filter)\n          this.handleCheckboxFilter(filter)\n        } else if (filter && filter.type === \"numeric\") {\n          const [min, max] = values.split(\",\")\n          this.handleRangeFilter({ min: +min, max: +max, filter })\n        } else if (filter && filter.type === \"date\") {\n          const [start, end] = values.split(\",\")\n          this.handleCalendarFilter({ start: new Date(start), end: end ? new Date(end) : undefined, filter })\n        }\n      })\n    }\n  }\n}\n", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { GridLayout } from 'vue-grid-layout';\nimport { Widgets } from './lib/widgets';\nimport { FactoryMixin } from './lib/factories';\nimport Widget from './components/Widget.vue';\n\nconst __vue_script__ = {\n  name: \"Viewer\",\n  components: {\n    GridLayout,\n    Widget\n  },\n  mixins: [FactoryMixin],\n  props: {\n    item: {\n      type: Object,\n      default: () => {}\n    },\n    config: {\n      type: Object,\n      default: () => {}\n    },\n    isEditionMode: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      columns: 12,\n      itemHeight: 30,\n      margin: [24, 24],\n      widgets: [],\n      widgetsData: []\n    };\n  },\n  computed: {\n    pipe() {\n      return this.$root.$data?.pipe;\n    },\n    context() {\n      return this.$root.$data?.context;\n    },\n    adjustMargins() {\n      const [x, y] = this.margin;\n      return {\n        marginTop: `${-y}px`,\n        marginBottom: `${-y}px`,\n        marginLeft: `${-x}px`,\n        marginRight: `${-x}px`\n      };\n    }\n  },\n  watch: {\n    item(newItem) {\n      // if user drags a new item inside the grid\n      if (newItem) {\n        const { i } = newItem;\n        if (!this.widgets.some(d => d.i === i)) {\n          this.widgets.push({ x: 0, y: 0, ...newItem });\n        }\n      }\n    }\n  },\n  created() {\n    this.getConfiguration();\n  },\n  methods: {\n    async getConfiguration() {\n      const { attributes: { widgets_configuration } = {} } = this.config;\n      const { data: { data: widgets_data } = {} } = await this.getData({\n        context: this.context,\n        data_pipe: this.pipe\n      });\n\n      this.widgetsData = widgets_data;\n      this.widgets = this.parseWidgets(widgets_configuration || [], widgets_data || []);\n    },\n    parseWidgets(conf, data) {\n      return conf.map(({ type = \"\", ...options }) => {\n        const defaults = Widgets[type.toUpperCase()];\n        if (!defaults) throw new Error(\"Widget does not exist\");\n\n        return {\n          ...defaults,\n          ...options,\n          // if there is a property called indicator, append the data related\n          ...(options.indicator && {\n            data: data.find(({ id, project }) => `${id}---${project}` === options.indicator)\n          }),\n          type,\n          edition: false\n        };\n      });\n    },\n    handleWidgetDelete(i) {\n      this.widgets.splice(\n        this.widgets.findIndex(d => d.i === i),\n        1\n      );\n    },\n    handleWidgetChange(i, value) {\n      const ix = this.widgets.findIndex(d => d.i === i);\n      this.widgets[ix] = { ...this.widgets[ix], ...value };\n      this.widgets.splice(ix, 1, this.widgets[ix]);\n    },\n    handleLayoutUpdate(layout) {\n      if (this.isEditionMode) {\n        this.$emit(\"layout-updated\", layout);\n      }\n    },\n    handleLayoutReady(layout) {\n      if (this.isEditionMode) {\n        this.$emit(\"layout-ready\", layout);\n      }\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _vm.widgets.length\n    ? _c(\n        \"GridLayout\",\n        {\n          ref: \"grid\",\n          staticClass: \"dashboards-viewer\",\n          style: _vm.adjustMargins,\n          attrs: {\n            \"col-num\": _vm.columns,\n            \"row-height\": _vm.itemHeight,\n            margin: _vm.margin,\n            \"is-draggable\": _vm.isEditionMode,\n            \"is-resizable\": _vm.isEditionMode,\n            \"auto-size\": true,\n            \"use-css-transforms\": true,\n            \"prevent-collision\": false,\n          },\n          on: {\n            \"layout-updated\": _vm.handleLayoutUpdate,\n            \"layout-ready\": _vm.handleLayoutReady,\n          },\n          model: {\n            value: _vm.widgets,\n            callback: function ($$v) {\n              _vm.widgets = $$v\n            },\n            expression: \"widgets\",\n          },\n        },\n        _vm._l(_vm.widgets, function (widget) {\n          return _c(\n            \"Widget\",\n            _vm._b(\n              {\n                key: widget.i,\n                ref: \"widget\",\n                refInFor: true,\n                attrs: { \"edition-mode\": _vm.isEditionMode },\n                on: {\n                  change: _vm.handleWidgetChange,\n                  delete: _vm.handleWidgetDelete,\n                },\n              },\n              \"Widget\",\n              Object.assign({}, widget, { widgetsData: _vm.widgetsData }),\n              false\n            )\n          )\n        }),\n        1\n      )\n    : _vm._e()\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/Viewer.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "import WidgetHTML from '../components/WidgetHTML.vue';\nimport WidgetIndicator from '../components/WidgetIndicator.vue';\nimport WidgetIndicatorIndividual from '../components/WidgetIndicatorIndividual.vue';\nimport WidgetIndicatorTable from '../components/WidgetIndicatorTable.vue';\n\n// fields to persist in DB\nexport const RequiredFields = [\n  \"i\",\n  \"x\",\n  \"y\",\n  \"w\",\n  \"h\",\n  \"type\",\n  \"subtype\",\n  \"raw\",\n  \"indicator\"\n]\n\nexport const Widgets = {\n  HTML: {\n    // name is a function to be resolved only when is mounted\n    name: () => I18n.t(\"gobierto_dashboards.widgets.html\") || \"\",\n    template: WidgetHTML,\n    w: 6,\n    h: 3,\n    minW: 4,\n    type: \"html\",\n  },\n  INDICATOR: {\n    name: () => I18n.t(\"gobierto_dashboards.widgets.indicator\") || \"\",\n    template: WidgetIndicator,\n    w: 6,\n    h: 5,\n    minW: 4,\n    minH: 3,\n    type: \"indicator\",\n    subtypes: {\n      individual: {\n        name: () => I18n.t(\"gobierto_dashboards.widgets.individual\") || \"\",\n        template: WidgetIndicatorIndividual\n      },\n      table: {\n        name: () => I18n.t(\"gobierto_dashboards.widgets.table\") || \"\",\n        template: WidgetIndicatorTable\n      }\n    }\n  }\n};\n", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"WidgetHTML\",\n  props: {\n    raw: {\n      type: String,\n      default: \"<h3>Nuevo widget HTML - escribe aqu\u00ED el texto de cabecera</h3>\\n<p>Tambi\u00E9n puedes escribir una descripci\u00F3n</p>\"\n    },\n    edit: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      text: this.raw\n    }\n  },\n  methods: {\n    handleChange({ target: { value } }) {\n      this.$emit('change', { raw: value })\n    },\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"widget\" }, [\n    !_vm.edit\n      ? _c(\"div\", { domProps: { innerHTML: _vm._s(_vm.raw) } })\n      : _c(\"textarea\", {\n          directives: [\n            {\n              name: \"model\",\n              rawName: \"v-model\",\n              value: _vm.text,\n              expression: \"text\",\n            },\n          ],\n          staticClass: \"widget__textarea\",\n          domProps: { value: _vm.text },\n          on: {\n            change: _vm.handleChange,\n            input: function ($event) {\n              if ($event.target.composing) {\n                return\n              }\n              _vm.text = $event.target.value\n            },\n          },\n        }),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/WidgetHTML.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { Autocomplete } from '../../../lib/vue/components';\nimport { Widgets } from '../lib/widgets';\nimport Button from './Button.vue';\n\nconst __vue_script__ = {\n  name: \"WidgetIndicator\",\n  components: {\n    Button,\n    Autocomplete\n  },\n  props: {\n    subtype: {\n      type: String,\n      default: null\n    },\n    edit: {\n      type: Boolean,\n      default: false\n    },\n    widgetsData: {\n      type: Array,\n      default: () => []\n    }\n  },\n  data() {\n    return {\n      subtypes: Widgets.INDICATOR.subtypes,\n      selectLabel: I18n.t(\"gobierto_dashboards.select\") || \"\",\n      typeLabel: I18n.t(\"gobierto_dashboards.type\") || \"\",\n      saveLabel: I18n.t(\"gobierto_dashboards.save\") || \"\",\n      placeholderLabel: I18n.t(\"gobierto_dashboards.placeholder\") || \"\",\n      id: 0,\n      project: \"\"\n    };\n  },\n  computed: {\n    indicatorTemplate() {\n      return this.subtype ? this.subtypes[this.subtype].template : null;\n    },\n    isEditing() {\n      return this.edit || !this.indicatorTemplate;\n    },\n    indicatorAttrs() {\n      return {\n        title: this.$attrs.data?.name,\n        values: this.$attrs.data?.values\n      };\n    },\n    autocompleteItems() {\n      return this.widgetsData.map(({ name }) => name)\n    }\n  },\n  created() {\n    if (this.$attrs.indicator) {\n      // if indicator is present, it means there's a preloaded widget pointing to the hash id---project\n      const [id, project] = this.$attrs.indicator.split(\"---\")\n      this.id = id\n      this.project = project\n    }\n  },\n  methods: {\n    isChecked(key) {\n      // check the current subtype, if none, default to the first subtype\n      return this.subtype ? key === this.subtype : key === Object.keys(this.subtypes)[0]\n    },\n    handleChange(value) {\n      ({ id: this.id , project: this.project } = this.widgetsData.find(({ name }) => name === value)) || {}\n    },\n    handleSubmit({ target }) {\n      const config = Object.fromEntries(new FormData(target))\n      // assign the corresponding data, built from their props\n      const data = this.widgetsData.find(({ id, project }) => `${id}---${project}` === `${this.id}---${this.project}`)\n      // overwrite indicator value, since the displayed input text diverges from the actual value\n      this.$emit(\"change\", { ...config, indicator: `${this.id}---${this.project}`, data });\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"widget\" },\n    [\n      !_vm.isEditing\n        ? _c(\n            _vm.indicatorTemplate,\n            _vm._b({ tag: \"component\" }, \"component\", _vm.indicatorAttrs, false)\n          )\n        : _c(\n            \"form\",\n            {\n              staticClass: \"dashboards-maker--widget__form\",\n              on: {\n                submit: function ($event) {\n                  $event.preventDefault()\n                  return _vm.handleSubmit.apply(null, arguments)\n                },\n              },\n            },\n            [\n              _c(\"Autocomplete\", {\n                attrs: {\n                  label: _vm.selectLabel,\n                  placeholder: _vm.placeholderLabel,\n                  items: _vm.autocompleteItems,\n                  \"default-value\": _vm.indicatorAttrs.title,\n                  name: \"indicator\",\n                },\n                on: { change: _vm.handleChange },\n                scopedSlots: _vm._u([\n                  {\n                    key: \"default\",\n                    fn: function (ref) {\n                      var result = ref.result\n                      return [\n                        _c(\n                          \"span\",\n                          {\n                            staticClass:\n                              \"dashboards-maker--widget__form-result\",\n                          },\n                          [_vm._v(_vm._s(result))]\n                        ),\n                      ]\n                    },\n                  },\n                ]),\n              }),\n              _vm._v(\" \"),\n              _c(\n                \"div\",\n                [\n                  _c(\n                    \"label\",\n                    { staticClass: \"dashboards-maker--widget__form-title\" },\n                    [_vm._v(_vm._s(_vm.typeLabel))]\n                  ),\n                  _vm._v(\" \"),\n                  _vm._l(_vm.subtypes, function (ref, key) {\n                    var name = ref.name\n                    return [\n                      _c(\n                        \"label\",\n                        {\n                          key: key,\n                          staticClass: \"dashboards-maker--widget__form-label\",\n                          attrs: { name: \"widget-indicator-input-radio\" },\n                        },\n                        [\n                          _c(\"input\", {\n                            staticClass: \"dashboards-maker--widget__form-radio\",\n                            attrs: {\n                              type: \"radio\",\n                              name: \"subtype\",\n                              required: \"\",\n                            },\n                            domProps: {\n                              value: key,\n                              checked: _vm.isChecked(key),\n                            },\n                          }),\n                          _vm._v(\" \"),\n                          _c(\"span\", [_vm._v(_vm._s(name()))]),\n                        ]\n                      ),\n                    ]\n                  }),\n                ],\n                2\n              ),\n              _vm._v(\" \"),\n              _c(\n                \"div\",\n                { staticClass: \"dashboards-maker--widget__form-submit\" },\n                [\n                  _c(\"Button\", [\n                    _vm._v(\"\\n        \" + _vm._s(_vm.saveLabel) + \"\\n      \"),\n                  ]),\n                ],\n                1\n              ),\n            ],\n            1\n          ),\n    ],\n    1\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/WidgetIndicator.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"Button\",\n  props: {\n    icon: {\n      type: String,\n      default: null\n    },\n    template: {\n      type: String,\n      default: null\n    },\n  },\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _obj\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"button\",\n    {\n      staticClass: \"dashboards-maker--button\",\n      class:\n        ((_obj = {}),\n        (_obj[\"dashboards-maker--button__\" + _vm.template] = !!_vm.template),\n        _obj),\n    },\n    [\n      _vm.icon ? _c(\"i\", { class: \"fas fa-\" + _vm.icon }) : _vm._e(),\n      _vm._v(\" \"),\n      _c(\"div\", [_vm._t(\"default\")], 2),\n    ]\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/Button.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { date, percent } from '../../../lib/vue/filters'\n\nconst __vue_script__ = {\n  name: \"WidgetIndicatorIndividual\",\n  props: {\n    title: {\n      type: String,\n      default: null\n    },\n    values: {\n      type: Array,\n      default: () => []\n    }\n  },\n  data() {\n    return {\n      percentage: 0,\n      year: null,\n      metrics: [],\n      dateLabel: I18n.t(\"gobierto_dashboards.date\") || \"\",\n      valueLabel: I18n.t(\"gobierto_dashboards.value\") || \"\",\n      objectiveLabel: I18n.t(\"gobierto_dashboards.objective\") || \"\",\n      percentageLabel: I18n.t(\"gobierto_dashboards.percentage\") || \"\",\n    }\n  },\n  created() {\n    const [indicator] = this.values.sort(({ date: a }, { date: b }) => new Date(a) < new Date(b)) // first position will have the most up to date item\n\n    if (indicator) {\n      this.year = date(indicator.date, { year: 'numeric' })\n      this.percentage = indicator.objective ? 100 * (indicator.value / indicator.objective) : 0\n      this.metrics = [\n        { metric: this.valueLabel, value: indicator.value },\n        { metric: this.objectiveLabel, value: indicator.objective },\n        { metric: this.percentageLabel, value: percent(this.percentage) },\n      ]\n    }\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"graph-individual\" }, [\n    _c(\"div\", { staticClass: \"graph-individual__barchart\" }, [\n      _c(\"div\", {\n        staticClass: \"graph-individual__barchart--active\",\n        style: { width: _vm.percentage + \"%\" },\n      }),\n    ]),\n    _vm._v(\" \"),\n    _c(\"div\", { staticClass: \"graph-individual__title\" }, [\n      _vm._v(\"\\n    \" + _vm._s(_vm.title) + \"\\n  \"),\n    ]),\n    _vm._v(\" \"),\n    _c(\n      \"div\",\n      { staticClass: \"graph-individual__metric--container\" },\n      [\n        _vm._l(_vm.metrics, function (ref) {\n          var metric = ref.metric\n          var value = ref.value\n          return [\n            _c(\n              \"div\",\n              { key: metric, staticClass: \"graph-individual__metric\" },\n              [\n                _c(\"div\", { staticClass: \"graph-individual__metric--title\" }, [\n                  _vm._v(\"\\n          \" + _vm._s(metric) + \"\\n        \"),\n                ]),\n                _vm._v(\" \"),\n                _c(\"div\", { staticClass: \"graph-individual__metric--value\" }, [\n                  _vm._v(\"\\n          \" + _vm._s(value) + \"\\n        \"),\n                ]),\n              ]\n            ),\n          ]\n        }),\n      ],\n      2\n    ),\n    _vm._v(\" \"),\n    _c(\"div\", { staticClass: \"graph-individual__date\" }, [\n      _vm._v(\n        \"\\n    \" + _vm._s(_vm.dateLabel) + \" \" + _vm._s(_vm.year) + \"\\n  \"\n      ),\n    ]),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/WidgetIndicatorIndividual.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { date, percent } from '../../../lib/vue/filters';\n\nconst formatValues = (arr, prop, transform = x => x) =>\n  arr.reduce(\n    (acc, item) => ({\n      ...acc,\n      [item.date]: transform(item[prop])\n    }),\n    {}\n  );\n\nconst __vue_script__ = {\n  name: \"WidgetIndicatorTable\",\n  filters: {\n    percent,\n    date\n  },\n  props: {\n    title: {\n      type: String,\n      default: null\n    },\n    values: {\n      type: Array,\n      default: () => []\n    }\n  },\n  data() {\n    return {\n      years: [{ year: \"metric\" }],\n      metrics: [],\n      dateLabel: I18n.t(\"gobierto_dashboards.date\") || \"\",\n      valueLabel: I18n.t(\"gobierto_dashboards.value\") || \"\",\n      objectiveLabel: I18n.t(\"gobierto_dashboards.objective\") || \"\",\n      percentageLabel: I18n.t(\"gobierto_dashboards.percentage_alt\") || \"\"\n    };\n  },\n  created() {\n    // filter the first four\n    const [y1, y2, y3, y4] = this.values.sort(\n      ({ date: a }, { date: b }) => new Date(a) < new Date(b)\n    );\n    // remove null/undefined, if there were < 4 years\n    const years = [...[y1, y2, y3, y4]].filter(Boolean);\n\n    // add percentage absolutes and relative. And reverse array to show years ascendently\n    const highestObjective = Math.max(\n      ...years.map(({ objective }) => objective)\n    );\n    const valuesCalculated = years\n      .map(x => ({\n        ...x,\n        percentageRelative: x.objective ? 100 * (x.value / x.objective) : 0,\n        percentageAbsolute: highestObjective ? 100 * (x.objective / highestObjective) : 100,\n      }))\n      .reverse();\n\n    this.years.push(\n      ...valuesCalculated.map(({ date: d, percentageRelative, percentageAbsolute }) => ({\n        year: d,\n        percentageRelative,\n        percentageAbsolute\n      }))\n    );\n    this.metrics = [\n      { metric: this.valueLabel, ...formatValues(valuesCalculated, \"value\") },\n      {\n        metric: this.objectiveLabel,\n        ...formatValues(valuesCalculated, \"objective\")\n      },\n      {\n        metric: this.percentageLabel,\n        ...formatValues(valuesCalculated, \"percentageRelative\", percent)\n      }\n    ];\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"graph-table\" }, [\n    _c(\"div\", { staticClass: \"graph-table__title\" }, [\n      _vm._v(\"\\n    \" + _vm._s(_vm.title) + \"\\n  \"),\n    ]),\n    _vm._v(\" \"),\n    _c(\"table\", { staticClass: \"graph-table__table\" }, [\n      _c(\n        \"thead\",\n        _vm._l(_vm.years, function (ref, ix) {\n          var year = ref.year\n          var percentageRelative = ref.percentageRelative\n          var percentageAbsolute = ref.percentageAbsolute\n          return _c(\n            \"th\",\n            { key: year + \"-\" + ix, staticClass: \"graph-table__table--th\" },\n            [\n              ix !== 0\n                ? [\n                    _c(\n                      \"div\",\n                      { staticClass: \"graph-table__barchart--wrapper\" },\n                      [\n                        _c(\n                          \"div\",\n                          {\n                            staticClass:\n                              \"graph-table__barchart--wrapper-relative\",\n                          },\n                          [\n                            _c(\n                              \"div\",\n                              {\n                                staticClass: \"graph-table__barchart\",\n                                style: { height: percentageAbsolute + \"%\" },\n                              },\n                              [\n                                _c(\"div\", {\n                                  staticClass: \"graph-table__barchart--active\",\n                                  style: { height: percentageRelative + \"%\" },\n                                }),\n                              ]\n                            ),\n                          ]\n                        ),\n                        _vm._v(\" \"),\n                        _c(\"span\", [\n                          _vm._v(\n                            _vm._s(_vm._f(\"date\")(year, { year: \"numeric\" }))\n                          ),\n                        ]),\n                      ]\n                    ),\n                  ]\n                : _vm._e(),\n            ],\n            2\n          )\n        }),\n        0\n      ),\n      _vm._v(\" \"),\n      _c(\n        \"tbody\",\n        _vm._l(_vm.metrics, function (metric) {\n          return _c(\n            \"tr\",\n            { key: metric.metric, staticClass: \"graph-table__table--tr\" },\n            _vm._l(_vm.years, function (ref, ix) {\n              var year = ref.year\n              return _c(\n                \"td\",\n                { key: year + \"-\" + ix, staticClass: \"graph-table__table--td\" },\n                [_vm._v(\"\\n          \" + _vm._s(metric[year]) + \"\\n        \")]\n              )\n            }),\n            0\n          )\n        }),\n        0\n      ),\n    ]),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/WidgetIndicatorTable.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "import axios from 'axios';\n\nconst baseUrl = location.origin;\nconst endPointDashboard = `${baseUrl}/api/v1/dashboards`;\nconst endPointData = `${baseUrl}/api/v1/dashboard_data`;\nconst defaultHeaders = {};\n\nexport const FactoryMixin = {\n  methods: {\n    getHeaders() {\n      let headers = {};\n      if (window.GobiertoAdmin && window.GobiertoAdmin.token) {\n        headers = {\n          Authorization: `Bearer ${window.GobiertoAdmin.token}`\n        };\n      }\n      return { ...defaultHeaders, ...headers };\n    },\n    searchParams(params) {\n      return new URLSearchParams(params);\n    },\n    getDashboards(params) {\n      return axios.get(endPointDashboard, {\n        headers: this.getHeaders(),\n        params: this.searchParams({ locale: I18n.locale, ...params })\n      });\n    },\n    getDashboard(id, params) {\n      return axios.get(`${endPointDashboard}/${id}`, {\n        headers: this.getHeaders(),\n        params: this.searchParams({ locale: I18n.locale, ...params })\n      });\n    },\n    postDashboard(data, params) {\n      return axios.post(\n        endPointDashboard,\n        { data },\n        { headers: this.getHeaders(), params: this.searchParams(params) }\n      );\n    },\n    putDashboard(id, data, params) {\n      return axios.put(\n        `${endPointDashboard}/${id}`,\n        { data },\n        { headers: this.getHeaders(), params: this.searchParams(params) }\n      );\n    },\n    deleteDashboard(id, params) {\n      return axios.delete(`${endPointDashboard}/${id}`, {\n        headers: this.getHeaders(),\n        params: this.searchParams(params)\n      });\n    },\n    getData(params) {\n      return axios.get(endPointData, {\n        headers: this.getHeaders(),\n        params: this.searchParams({ locale: I18n.locale, ...params })\n      });\n    }\n  }\n};\n", "import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n} = axios;\n\nexport {\n  axios as default,\n  Axios,\n  AxiosError,\n  CanceledError,\n  isCancel,\n  CancelToken,\n  VERSION,\n  all,\n  Cancel,\n  isAxiosError,\n  spread,\n  toFormData,\n  AxiosHeaders,\n  HttpStatusCode,\n  formToJSON,\n  getAdapter,\n  mergeConfig\n}\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  const context = new Axios(defaultConfig);\n  const instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n  // Copy context to instance\n  utils.extend(instance, context, null, {allOwnKeys: true});\n\n  // Factory for creating new instances\n  instance.create = function create(instanceConfig) {\n    return createInstance(mergeConfig(defaultConfig, instanceConfig));\n  };\n\n  return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n", "\"use strict\";\n\nimport bind from \"./helpers/bind.js\";\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst { toString } = Object.prototype;\nconst { getPrototypeOf } = Object;\nconst { iterator, toStringTag } = Symbol;\n\nconst kindOf = ((cache) => (thing) => {\n  const str = toString.call(thing);\n  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n  type = type.toLowerCase();\n  return (thing) => kindOf(thing) === type;\n};\n\nconst typeOfTest = (type) => (thing) => typeof thing === type;\n\n/**\n * Determine if a value is a non-null object\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst { isArray } = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest(\"undefined\");\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n  return (\n    val !== null &&\n    !isUndefined(val) &&\n    val.constructor !== null &&\n    !isUndefined(val.constructor) &&\n    isFunction(val.constructor.isBuffer) &&\n    val.constructor.isBuffer(val)\n  );\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest(\"ArrayBuffer\");\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  let result;\n  if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = val && val.buffer && isArrayBuffer(val.buffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest(\"string\");\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest(\"function\");\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest(\"number\");\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === \"object\";\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = (thing) => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n  if (kindOf(val) !== \"object\") {\n    return false;\n  }\n\n  const prototype = getPrototypeOf(val);\n  return (\n    (prototype === null ||\n      prototype === Object.prototype ||\n      Object.getPrototypeOf(prototype) === null) &&\n    !(toStringTag in val) &&\n    !(iterator in val)\n  );\n};\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n  // Early return for non-objects or Buffers to prevent RangeError\n  if (!isObject(val) || isBuffer(val)) {\n    return false;\n  }\n\n  try {\n    return (\n      Object.keys(val).length === 0 &&\n      Object.getPrototypeOf(val) === Object.prototype\n    );\n  } catch (e) {\n    // Fallback for any other objects that might cause RangeError with Object.keys()\n    return false;\n  }\n};\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest(\"Date\");\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest(\"File\");\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest(\"Blob\");\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest(\"FileList\");\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n  let kind;\n  return (\n    thing &&\n    ((typeof FormData === \"function\" && thing instanceof FormData) ||\n      (isFunction(thing.append) &&\n        ((kind = kindOf(thing)) === \"formdata\" ||\n          // detect form-data instance\n          (kind === \"object\" &&\n            isFunction(thing.toString) &&\n            thing.toString() === \"[object FormData]\"))))\n  );\n};\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest(\"URLSearchParams\");\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = [\n  \"ReadableStream\",\n  \"Request\",\n  \"Response\",\n  \"Headers\",\n].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) =>\n  str.trim ? str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array<unknown>} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, { allOwnKeys = false } = {}) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === \"undefined\") {\n    return;\n  }\n\n  let i;\n  let l;\n\n  // Force an array if not already something iterable\n  if (typeof obj !== \"object\") {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Buffer check\n    if (isBuffer(obj)) {\n      return;\n    }\n\n    // Iterate over object keys\n    const keys = allOwnKeys\n      ? Object.getOwnPropertyNames(obj)\n      : Object.keys(obj);\n    const len = keys.length;\n    let key;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      fn.call(null, obj[key], key, obj);\n    }\n  }\n}\n\nfunction findKey(obj, key) {\n  if (isBuffer(obj)) {\n    return null;\n  }\n\n  key = key.toLowerCase();\n  const keys = Object.keys(obj);\n  let i = keys.length;\n  let _key;\n  while (i-- > 0) {\n    _key = keys[i];\n    if (key === _key.toLowerCase()) {\n      return _key;\n    }\n  }\n  return null;\n}\n\nconst _global = (() => {\n  /*eslint no-undef:0*/\n  if (typeof globalThis !== \"undefined\") return globalThis;\n  return typeof self !== \"undefined\"\n    ? self\n    : typeof window !== \"undefined\"\n      ? window\n      : global;\n})();\n\nconst isContextDefined = (context) =>\n  !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * const result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  const { caseless, skipUndefined } = (isContextDefined(this) && this) || {};\n  const result = {};\n  const assignValue = (val, key) => {\n    // Skip dangerous property names to prevent prototype pollution\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n      return;\n    }\n\n    const targetKey = (caseless && findKey(result, key)) || key;\n    if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n      result[targetKey] = merge(result[targetKey], val);\n    } else if (isPlainObject(val)) {\n      result[targetKey] = merge({}, val);\n    } else if (isArray(val)) {\n      result[targetKey] = val.slice();\n    } else if (!skipUndefined || !isUndefined(val)) {\n      result[targetKey] = val;\n    }\n  };\n\n  for (let i = 0, l = arguments.length; i < l; i++) {\n    arguments[i] && forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Object} [options]\n * @param {Boolean} [options.allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, { allOwnKeys } = {}) => {\n  forEach(\n    b,\n    (val, key) => {\n      if (thisArg && isFunction(val)) {\n        Object.defineProperty(a, key, {\n          value: bind(val, thisArg),\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      } else {\n        Object.defineProperty(a, key, {\n          value: val,\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      }\n    },\n    { allOwnKeys },\n  );\n  return a;\n};\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n  if (content.charCodeAt(0) === 0xfeff) {\n    content = content.slice(1);\n  }\n  return content;\n};\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n  constructor.prototype = Object.create(\n    superConstructor.prototype,\n    descriptors,\n  );\n  Object.defineProperty(constructor.prototype, \"constructor\", {\n    value: constructor,\n    writable: true,\n    enumerable: false,\n    configurable: true,\n  });\n  Object.defineProperty(constructor, \"super\", {\n    value: superConstructor.prototype,\n  });\n  props && Object.assign(constructor.prototype, props);\n};\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n  let props;\n  let i;\n  let prop;\n  const merged = {};\n\n  destObj = destObj || {};\n  // eslint-disable-next-line no-eq-null,eqeqeq\n  if (sourceObj == null) return destObj;\n\n  do {\n    props = Object.getOwnPropertyNames(sourceObj);\n    i = props.length;\n    while (i-- > 0) {\n      prop = props[i];\n      if (\n        (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n        !merged[prop]\n      ) {\n        destObj[prop] = sourceObj[prop];\n        merged[prop] = true;\n      }\n    }\n    sourceObj = filter !== false && getPrototypeOf(sourceObj);\n  } while (\n    sourceObj &&\n    (!filter || filter(sourceObj, destObj)) &&\n    sourceObj !== Object.prototype\n  );\n\n  return destObj;\n};\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n  str = String(str);\n  if (position === undefined || position > str.length) {\n    position = str.length;\n  }\n  position -= searchString.length;\n  const lastIndex = str.indexOf(searchString, position);\n  return lastIndex !== -1 && lastIndex === position;\n};\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n  if (!thing) return null;\n  if (isArray(thing)) return thing;\n  let i = thing.length;\n  if (!isNumber(i)) return null;\n  const arr = new Array(i);\n  while (i-- > 0) {\n    arr[i] = thing[i];\n  }\n  return arr;\n};\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = ((TypedArray) => {\n  // eslint-disable-next-line func-names\n  return (thing) => {\n    return TypedArray && thing instanceof TypedArray;\n  };\n})(typeof Uint8Array !== \"undefined\" && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n  const generator = obj && obj[iterator];\n\n  const _iterator = generator.call(obj);\n\n  let result;\n\n  while ((result = _iterator.next()) && !result.done) {\n    const pair = result.value;\n    fn.call(obj, pair[0], pair[1]);\n  }\n};\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n  let matches;\n  const arr = [];\n\n  while ((matches = regExp.exec(str)) !== null) {\n    arr.push(matches);\n  }\n\n  return arr;\n};\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest(\"HTMLFormElement\");\n\nconst toCamelCase = (str) => {\n  return str\n    .toLowerCase()\n    .replace(/[-_\\s]([a-z\\d])(\\w*)/g, function replacer(m, p1, p2) {\n      return p1.toUpperCase() + p2;\n    });\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (\n  ({ hasOwnProperty }) =>\n  (obj, prop) =>\n    hasOwnProperty.call(obj, prop)\n)(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest(\"RegExp\");\n\nconst reduceDescriptors = (obj, reducer) => {\n  const descriptors = Object.getOwnPropertyDescriptors(obj);\n  const reducedDescriptors = {};\n\n  forEach(descriptors, (descriptor, name) => {\n    let ret;\n    if ((ret = reducer(descriptor, name, obj)) !== false) {\n      reducedDescriptors[name] = ret || descriptor;\n    }\n  });\n\n  Object.defineProperties(obj, reducedDescriptors);\n};\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n  reduceDescriptors(obj, (descriptor, name) => {\n    // skip restricted props in strict mode\n    if (\n      isFunction(obj) &&\n      [\"arguments\", \"caller\", \"callee\"].indexOf(name) !== -1\n    ) {\n      return false;\n    }\n\n    const value = obj[name];\n\n    if (!isFunction(value)) return;\n\n    descriptor.enumerable = false;\n\n    if (\"writable\" in descriptor) {\n      descriptor.writable = false;\n      return;\n    }\n\n    if (!descriptor.set) {\n      descriptor.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + name + \"'\");\n      };\n    }\n  });\n};\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n  const obj = {};\n\n  const define = (arr) => {\n    arr.forEach((value) => {\n      obj[value] = true;\n    });\n  };\n\n  isArray(arrayOrString)\n    ? define(arrayOrString)\n    : define(String(arrayOrString).split(delimiter));\n\n  return obj;\n};\n\nconst noop = () => {};\n\nconst toFiniteNumber = (value, defaultValue) => {\n  return value != null && Number.isFinite((value = +value))\n    ? value\n    : defaultValue;\n};\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n  return !!(\n    thing &&\n    isFunction(thing.append) &&\n    thing[toStringTag] === \"FormData\" &&\n    thing[iterator]\n  );\n}\n\nconst toJSONObject = (obj) => {\n  const stack = new Array(10);\n\n  const visit = (source, i) => {\n    if (isObject(source)) {\n      if (stack.indexOf(source) >= 0) {\n        return;\n      }\n\n      //Buffer check\n      if (isBuffer(source)) {\n        return source;\n      }\n\n      if (!(\"toJSON\" in source)) {\n        stack[i] = source;\n        const target = isArray(source) ? [] : {};\n\n        forEach(source, (value, key) => {\n          const reducedValue = visit(value, i + 1);\n          !isUndefined(reducedValue) && (target[key] = reducedValue);\n        });\n\n        stack[i] = undefined;\n\n        return target;\n      }\n    }\n\n    return source;\n  };\n\n  return visit(obj, 0);\n};\n\nconst isAsyncFn = kindOfTest(\"AsyncFunction\");\n\nconst isThenable = (thing) =>\n  thing &&\n  (isObject(thing) || isFunction(thing)) &&\n  isFunction(thing.then) &&\n  isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n  if (setImmediateSupported) {\n    return setImmediate;\n  }\n\n  return postMessageSupported\n    ? ((token, callbacks) => {\n        _global.addEventListener(\n          \"message\",\n          ({ source, data }) => {\n            if (source === _global && data === token) {\n              callbacks.length && callbacks.shift()();\n            }\n          },\n          false,\n        );\n\n        return (cb) => {\n          callbacks.push(cb);\n          _global.postMessage(token, \"*\");\n        };\n      })(`axios@${Math.random()}`, [])\n    : (cb) => setTimeout(cb);\n})(typeof setImmediate === \"function\", isFunction(_global.postMessage));\n\nconst asap =\n  typeof queueMicrotask !== \"undefined\"\n    ? queueMicrotask.bind(_global)\n    : (typeof process !== \"undefined\" && process.nextTick) || _setImmediate;\n\n// *********************\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\nexport default {\n  isArray,\n  isArrayBuffer,\n  isBuffer,\n  isFormData,\n  isArrayBufferView,\n  isString,\n  isNumber,\n  isBoolean,\n  isObject,\n  isPlainObject,\n  isEmptyObject,\n  isReadableStream,\n  isRequest,\n  isResponse,\n  isHeaders,\n  isUndefined,\n  isDate,\n  isFile,\n  isBlob,\n  isRegExp,\n  isFunction,\n  isStream,\n  isURLSearchParams,\n  isTypedArray,\n  isFileList,\n  forEach,\n  merge,\n  extend,\n  trim,\n  stripBOM,\n  inherits,\n  toFlatObject,\n  kindOf,\n  kindOfTest,\n  endsWith,\n  toArray,\n  forEachEntry,\n  matchAll,\n  isHTMLForm,\n  hasOwnProperty,\n  hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors,\n  freezeMethods,\n  toObjectSet,\n  toCamelCase,\n  noop,\n  toFiniteNumber,\n  findKey,\n  global: _global,\n  isContextDefined,\n  isSpecCompliantForm,\n  toJSONObject,\n  isAsyncFn,\n  isThenable,\n  setImmediate: _setImmediate,\n  asap,\n  isIterable,\n};\n", "'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n  return function wrap() {\n    return fn.apply(thisArg, arguments);\n  };\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\nimport transitionalDefaults from '../defaults/transitional.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n  constructor(instanceConfig) {\n    this.defaults = instanceConfig || {};\n    this.interceptors = {\n      request: new InterceptorManager(),\n      response: new InterceptorManager()\n    };\n  }\n\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(configOrUrl, config) {\n    try {\n      return await this._request(configOrUrl, config);\n    } catch (err) {\n      if (err instanceof Error) {\n        let dummy = {};\n\n        Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n        // slice off the Error: ... line\n        const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n        try {\n          if (!err.stack) {\n            err.stack = stack;\n            // match without the 2 top stack lines\n          } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n            err.stack += '\\n' + stack\n          }\n        } catch (e) {\n          // ignore the case where \"stack\" is an un-writable property\n        }\n      }\n\n      throw err;\n    }\n  }\n\n  _request(configOrUrl, config) {\n    /*eslint no-param-reassign:0*/\n    // Allow for axios('example/url'[, config]) a la fetch API\n    if (typeof configOrUrl === 'string') {\n      config = config || {};\n      config.url = configOrUrl;\n    } else {\n      config = configOrUrl || {};\n    }\n\n    config = mergeConfig(this.defaults, config);\n\n    const {transitional, paramsSerializer, headers} = config;\n\n    if (transitional !== undefined) {\n      validator.assertOptions(transitional, {\n        silentJSONParsing: validators.transitional(validators.boolean),\n        forcedJSONParsing: validators.transitional(validators.boolean),\n        clarifyTimeoutError: validators.transitional(validators.boolean),\n        legacyInterceptorReqResOrdering: validators.transitional(validators.boolean)\n      }, false);\n    }\n\n    if (paramsSerializer != null) {\n      if (utils.isFunction(paramsSerializer)) {\n        config.paramsSerializer = {\n          serialize: paramsSerializer\n        }\n      } else {\n        validator.assertOptions(paramsSerializer, {\n          encode: validators.function,\n          serialize: validators.function\n        }, true);\n      }\n    }\n\n    // Set config.allowAbsoluteUrls\n    if (config.allowAbsoluteUrls !== undefined) {\n      // do nothing\n    } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n      config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n    } else {\n      config.allowAbsoluteUrls = true;\n    }\n\n    validator.assertOptions(config, {\n      baseUrl: validators.spelling('baseURL'),\n      withXsrfToken: validators.spelling('withXSRFToken')\n    }, true);\n\n    // Set config.method\n    config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n    // Flatten headers\n    let contextHeaders = headers && utils.merge(\n      headers.common,\n      headers[config.method]\n    );\n\n    headers && utils.forEach(\n      ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n      (method) => {\n        delete headers[method];\n      }\n    );\n\n    config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n    // filter out skipped interceptors\n    const requestInterceptorChain = [];\n    let synchronousRequestInterceptors = true;\n    this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n      if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n        return;\n      }\n\n      synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n      const transitional = config.transitional || transitionalDefaults;\n      const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;\n\n      if (legacyInterceptorReqResOrdering) {\n        requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n      } else {\n        requestInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n      }\n    });\n\n    const responseInterceptorChain = [];\n    this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n      responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n    });\n\n    let promise;\n    let i = 0;\n    let len;\n\n    if (!synchronousRequestInterceptors) {\n      const chain = [dispatchRequest.bind(this), undefined];\n      chain.unshift(...requestInterceptorChain);\n      chain.push(...responseInterceptorChain);\n      len = chain.length;\n\n      promise = Promise.resolve(config);\n\n      while (i < len) {\n        promise = promise.then(chain[i++], chain[i++]);\n      }\n\n      return promise;\n    }\n\n    len = requestInterceptorChain.length;\n\n    let newConfig = config;\n\n    while (i < len) {\n      const onFulfilled = requestInterceptorChain[i++];\n      const onRejected = requestInterceptorChain[i++];\n      try {\n        newConfig = onFulfilled(newConfig);\n      } catch (error) {\n        onRejected.call(this, error);\n        break;\n      }\n    }\n\n    try {\n      promise = dispatchRequest.call(this, newConfig);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    i = 0;\n    len = responseInterceptorChain.length;\n\n    while (i < len) {\n      promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n    }\n\n    return promise;\n  }\n\n  getUri(config) {\n    config = mergeConfig(this.defaults, config);\n    const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n    return buildURL(fullPath, config.params, config.paramsSerializer);\n  }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(mergeConfig(config || {}, {\n      method,\n      url,\n      data: (config || {}).data\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n\n  function generateHTTPMethod(isForm) {\n    return function httpMethod(url, data, config) {\n      return this.request(mergeConfig(config || {}, {\n        method,\n        headers: isForm ? {\n          'Content-Type': 'multipart/form-data'\n        } : {},\n        url,\n        data\n      }));\n    };\n  }\n\n  Axios.prototype[method] = generateHTTPMethod();\n\n  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n  if (!params) {\n    return url;\n  }\n\n  const _encode = options && options.encode || encode;\n\n  const _options = utils.isFunction(options) ? {\n    serialize: options\n  } : options;\n\n  const serializeFn = _options && _options.serialize;\n\n  let serializedParams;\n\n  if (serializeFn) {\n    serializedParams = serializeFn(params, _options);\n  } else {\n    serializedParams = utils.isURLSearchParams(params) ?\n      params.toString() :\n      new AxiosURLSearchParams(params, _options).toString(_encode);\n  }\n\n  if (serializedParams) {\n    const hashmarkIndex = url.indexOf(\"#\");\n\n    if (hashmarkIndex !== -1) {\n      url = url.slice(0, hashmarkIndex);\n    }\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n}\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n  const charMap = {\n    '!': '%21',\n    \"'\": '%27',\n    '(': '%28',\n    ')': '%29',\n    '~': '%7E',\n    '%20': '+',\n    '%00': '\\x00'\n  };\n  return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n    return charMap[match];\n  });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n  this._pairs = [];\n\n  params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n  this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n  const _encode = encoder ? function(value) {\n    return encoder.call(this, value, encode);\n  } : encode;\n\n  return this._pairs.map(function each(pair) {\n    return _encode(pair[0]) + '=' + _encode(pair[1]);\n  }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n  return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n  return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n  if (!path) return key;\n  return path.concat(key).map(function each(token, i) {\n    // eslint-disable-next-line no-param-reassign\n    token = removeBrackets(token);\n    return !dots && i ? '[' + token + ']' : token;\n  }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n  return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n  return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('target must be an object');\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  formData = formData || new (PlatformFormData || FormData)();\n\n  // eslint-disable-next-line no-param-reassign\n  options = utils.toFlatObject(options, {\n    metaTokens: true,\n    dots: false,\n    indexes: false\n  }, false, function defined(option, source) {\n    // eslint-disable-next-line no-eq-null,eqeqeq\n    return !utils.isUndefined(source[option]);\n  });\n\n  const metaTokens = options.metaTokens;\n  // eslint-disable-next-line no-use-before-define\n  const visitor = options.visitor || defaultVisitor;\n  const dots = options.dots;\n  const indexes = options.indexes;\n  const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n  const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n  if (!utils.isFunction(visitor)) {\n    throw new TypeError('visitor must be a function');\n  }\n\n  function convertValue(value) {\n    if (value === null) return '';\n\n    if (utils.isDate(value)) {\n      return value.toISOString();\n    }\n\n    if (utils.isBoolean(value)) {\n      return value.toString();\n    }\n\n    if (!useBlob && utils.isBlob(value)) {\n      throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n    }\n\n    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n      return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Default visitor.\n   *\n   * @param {*} value\n   * @param {String|Number} key\n   * @param {Array<String|Number>} path\n   * @this {FormData}\n   *\n   * @returns {boolean} return true to visit the each prop of the value recursively\n   */\n  function defaultVisitor(value, key, path) {\n    let arr = value;\n\n    if (value && !path && typeof value === 'object') {\n      if (utils.endsWith(key, '{}')) {\n        // eslint-disable-next-line no-param-reassign\n        key = metaTokens ? key : key.slice(0, -2);\n        // eslint-disable-next-line no-param-reassign\n        value = JSON.stringify(value);\n      } else if (\n        (utils.isArray(value) && isFlatArray(value)) ||\n        ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n        )) {\n        // eslint-disable-next-line no-param-reassign\n        key = removeBrackets(key);\n\n        arr.forEach(function each(el, index) {\n          !(utils.isUndefined(el) || el === null) && formData.append(\n            // eslint-disable-next-line no-nested-ternary\n            indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n            convertValue(el)\n          );\n        });\n        return false;\n      }\n    }\n\n    if (isVisitable(value)) {\n      return true;\n    }\n\n    formData.append(renderKey(path, key, dots), convertValue(value));\n\n    return false;\n  }\n\n  const stack = [];\n\n  const exposedHelpers = Object.assign(predicates, {\n    defaultVisitor,\n    convertValue,\n    isVisitable\n  });\n\n  function build(value, path) {\n    if (utils.isUndefined(value)) return;\n\n    if (stack.indexOf(value) !== -1) {\n      throw Error('Circular reference detected in ' + path.join('.'));\n    }\n\n    stack.push(value);\n\n    utils.forEach(value, function each(el, key) {\n      const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n        formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n      );\n\n      if (result === true) {\n        build(el, path ? path.concat(key) : [key]);\n      }\n    });\n\n    stack.pop();\n  }\n\n  if (!utils.isObject(obj)) {\n    throw new TypeError('data must be an object');\n  }\n\n  build(obj);\n\n  return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport utils from '../utils.js';\n\nclass AxiosError extends Error {\n    static from(error, code, config, request, response, customProps) {\n        const axiosError = new AxiosError(error.message, code || error.code, config, request, response);\n        axiosError.cause = error;\n        axiosError.name = error.name;\n        customProps && Object.assign(axiosError, customProps);\n        return axiosError;\n    }\n\n    /**\n     * Create an Error with the specified message, config, error code, request and response.\n     *\n     * @param {string} message The error message.\n     * @param {string} [code] The error code (for example, 'ECONNABORTED').\n     * @param {Object} [config] The config.\n     * @param {Object} [request] The request.\n     * @param {Object} [response] The response.\n     *\n     * @returns {Error} The created error.\n     */\n    constructor(message, code, config, request, response) {\n        super(message);\n        this.name = 'AxiosError';\n        this.isAxiosError = true;\n        code && (this.code = code);\n        config && (this.config = config);\n        request && (this.request = request);\n        if (response) {\n            this.response = response;\n            this.status = response.status;\n        }\n    }\n\n    toJSON() {\n        return {\n            // Standard\n            message: this.message,\n            name: this.name,\n            // Microsoft\n            description: this.description,\n            number: this.number,\n            // Mozilla\n            fileName: this.fileName,\n            lineNumber: this.lineNumber,\n            columnNumber: this.columnNumber,\n            stack: this.stack,\n            // Axios\n            config: utils.toJSONObject(this.config),\n            code: this.code,\n            status: this.status,\n        };\n    }\n}\n\n// This can be changed to static properties as soon as the parser options in .eslint.cjs are updated.\nAxiosError.ERR_BAD_OPTION_VALUE = 'ERR_BAD_OPTION_VALUE';\nAxiosError.ERR_BAD_OPTION = 'ERR_BAD_OPTION';\nAxiosError.ECONNABORTED = 'ECONNABORTED';\nAxiosError.ETIMEDOUT = 'ETIMEDOUT';\nAxiosError.ERR_NETWORK = 'ERR_NETWORK';\nAxiosError.ERR_FR_TOO_MANY_REDIRECTS = 'ERR_FR_TOO_MANY_REDIRECTS';\nAxiosError.ERR_DEPRECATED = 'ERR_DEPRECATED';\nAxiosError.ERR_BAD_RESPONSE = 'ERR_BAD_RESPONSE';\nAxiosError.ERR_BAD_REQUEST = 'ERR_BAD_REQUEST';\nAxiosError.ERR_CANCELED = 'ERR_CANCELED';\nAxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';\nAxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';\n\nexport default AxiosError;\n", "// eslint-disable-next-line strict\nexport default null;\n", "'use strict';\n\nimport utils from '../utils.js';\n\nclass InterceptorManager {\n  constructor() {\n    this.handlers = [];\n  }\n\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   * @param {Object} options The options for the interceptor, synchronous and runWhen\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(fulfilled, rejected, options) {\n    this.handlers.push({\n      fulfilled,\n      rejected,\n      synchronous: options ? options.synchronous : false,\n      runWhen: options ? options.runWhen : null\n    });\n    return this.handlers.length - 1;\n  }\n\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {void}\n   */\n  eject(id) {\n    if (this.handlers[id]) {\n      this.handlers[id] = null;\n    }\n  }\n\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    if (this.handlers) {\n      this.handlers = [];\n    }\n  }\n\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(fn) {\n    utils.forEach(this.handlers, function forEachHandler(h) {\n      if (h !== null) {\n        fn(h);\n      }\n    });\n  }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n\n  if (config.signal && config.signal.aborted) {\n    throw new CanceledError(null, config);\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  config.headers = AxiosHeaders.from(config.headers);\n\n  // Transform request data\n  config.data = transformData.call(\n    config,\n    config.transformRequest\n  );\n\n  if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n    config.headers.setContentType('application/x-www-form-urlencoded', false);\n  }\n\n  const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData.call(\n      config,\n      config.transformResponse,\n      response\n    );\n\n    response.headers = AxiosHeaders.from(response.headers);\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData.call(\n          config,\n          config.transformResponse,\n          reason.response\n        );\n        reason.response.headers = AxiosHeaders.from(reason.response.headers);\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n  const config = this || defaults;\n  const context = response || config;\n  const headers = AxiosHeaders.from(context.headers);\n  let data = context.data;\n\n  utils.forEach(fns, function transform(fn) {\n    data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n  });\n\n  headers.normalize();\n\n  return data;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n  if (utils.isString(rawValue)) {\n    try {\n      (parser || JSON.parse)(rawValue);\n      return utils.trim(rawValue);\n    } catch (e) {\n      if (e.name !== 'SyntaxError') {\n        throw e;\n      }\n    }\n  }\n\n  return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n  transitional: transitionalDefaults,\n\n  adapter: ['xhr', 'http', 'fetch'],\n\n  transformRequest: [function transformRequest(data, headers) {\n    const contentType = headers.getContentType() || '';\n    const hasJSONContentType = contentType.indexOf('application/json') > -1;\n    const isObjectPayload = utils.isObject(data);\n\n    if (isObjectPayload && utils.isHTMLForm(data)) {\n      data = new FormData(data);\n    }\n\n    const isFormData = utils.isFormData(data);\n\n    if (isFormData) {\n      return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n    }\n\n    if (utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data) ||\n      utils.isReadableStream(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n      return data.toString();\n    }\n\n    let isFileList;\n\n    if (isObjectPayload) {\n      if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n        return toURLEncodedForm(data, this.formSerializer).toString();\n      }\n\n      if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n        const _FormData = this.env && this.env.FormData;\n\n        return toFormData(\n          isFileList ? {'files[]': data} : data,\n          _FormData && new _FormData(),\n          this.formSerializer\n        );\n      }\n    }\n\n    if (isObjectPayload || hasJSONContentType ) {\n      headers.setContentType('application/json', false);\n      return stringifySafely(data);\n    }\n\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    const transitional = this.transitional || defaults.transitional;\n    const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n    const JSONRequested = this.responseType === 'json';\n\n    if (utils.isResponse(data) || utils.isReadableStream(data)) {\n      return data;\n    }\n\n    if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n      const silentJSONParsing = transitional && transitional.silentJSONParsing;\n      const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n      try {\n        return JSON.parse(data, this.parseReviver);\n      } catch (e) {\n        if (strictJSONParsing) {\n          if (e.name === 'SyntaxError') {\n            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n          }\n          throw e;\n        }\n      }\n    }\n\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n  maxBodyLength: -1,\n\n  env: {\n    FormData: platform.classes.FormData,\n    Blob: platform.classes.Blob\n  },\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  },\n\n  headers: {\n    common: {\n      'Accept': 'application/json, text/plain, */*',\n      'Content-Type': undefined\n    }\n  }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n  defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nexport default {\n  silentJSONParsing: true,\n  forcedJSONParsing: true,\n  clarifyTimeoutError: false,\n  legacyInterceptorReqResOrdering: true\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n  return toFormData(data, new platform.classes.URLSearchParams(), {\n    visitor: function(value, key, path, helpers) {\n      if (platform.isNode && utils.isBuffer(value)) {\n        this.append(key, value.toString('base64'));\n        return false;\n      }\n\n      return helpers.defaultVisitor.apply(this, arguments);\n    },\n    ...options\n  });\n}\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n  ...utils,\n  ...platform\n}\n", "import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n  isBrowser: true,\n  classes: {\n    URLSearchParams,\n    FormData,\n    Blob\n  },\n  protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n", "'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n", "'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n", "'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n * nativescript\n *  navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n  (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n  return (\n    typeof WorkerGlobalScope !== 'undefined' &&\n    // eslint-disable-next-line no-undef\n    self instanceof WorkerGlobalScope &&\n    typeof self.importScripts === 'function'\n  );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n  hasBrowserEnv,\n  hasStandardBrowserWebWorkerEnv,\n  hasStandardBrowserEnv,\n  _navigator as navigator,\n  origin\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n  // foo[x][y][z]\n  // foo.x.y.z\n  // foo-x-y-z\n  // foo x y z\n  return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n    return match[0] === '[]' ? '' : match[1] || match[0];\n  });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n  const obj = {};\n  const keys = Object.keys(arr);\n  let i;\n  const len = keys.length;\n  let key;\n  for (i = 0; i < len; i++) {\n    key = keys[i];\n    obj[key] = arr[key];\n  }\n  return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n  function buildPath(path, value, target, index) {\n    let name = path[index++];\n\n    if (name === '__proto__') return true;\n\n    const isNumericKey = Number.isFinite(+name);\n    const isLast = index >= path.length;\n    name = !name && utils.isArray(target) ? target.length : name;\n\n    if (isLast) {\n      if (utils.hasOwnProp(target, name)) {\n        target[name] = [target[name], value];\n      } else {\n        target[name] = value;\n      }\n\n      return !isNumericKey;\n    }\n\n    if (!target[name] || !utils.isObject(target[name])) {\n      target[name] = [];\n    }\n\n    const result = buildPath(path, value, target[name], index);\n\n    if (result && utils.isArray(target[name])) {\n      target[name] = arrayToObject(target[name]);\n    }\n\n    return !isNumericKey;\n  }\n\n  if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n    const obj = {};\n\n    utils.forEachEntry(formData, (name, value) => {\n      buildPath(parsePropPath(name), value, obj, 0);\n    });\n\n    return obj;\n  }\n\n  return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n  return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n  if (value === false || value == null) {\n    return value;\n  }\n\n  return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n  const tokens = Object.create(null);\n  const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let match;\n\n  while ((match = tokensRE.exec(str))) {\n    tokens[match[1]] = match[2];\n  }\n\n  return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n  if (utils.isFunction(filter)) {\n    return filter.call(this, value, header);\n  }\n\n  if (isHeaderNameFilter) {\n    value = header;\n  }\n\n  if (!utils.isString(value)) return;\n\n  if (utils.isString(filter)) {\n    return value.indexOf(filter) !== -1;\n  }\n\n  if (utils.isRegExp(filter)) {\n    return filter.test(value);\n  }\n}\n\nfunction formatHeader(header) {\n  return header.trim()\n    .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n      return char.toUpperCase() + str;\n    });\n}\n\nfunction buildAccessors(obj, header) {\n  const accessorName = utils.toCamelCase(' ' + header);\n\n  ['get', 'set', 'has'].forEach(methodName => {\n    Object.defineProperty(obj, methodName + accessorName, {\n      value: function(arg1, arg2, arg3) {\n        return this[methodName].call(this, header, arg1, arg2, arg3);\n      },\n      configurable: true\n    });\n  });\n}\n\nclass AxiosHeaders {\n  constructor(headers) {\n    headers && this.set(headers);\n  }\n\n  set(header, valueOrRewrite, rewrite) {\n    const self = this;\n\n    function setHeader(_value, _header, _rewrite) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!lHeader) {\n        throw new Error('header name must be a non-empty string');\n      }\n\n      const key = utils.findKey(self, lHeader);\n\n      if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n        self[key || _header] = normalizeValue(_value);\n      }\n    }\n\n    const setHeaders = (headers, _rewrite) =>\n      utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n    if (utils.isPlainObject(header) || header instanceof this.constructor) {\n      setHeaders(header, valueOrRewrite)\n    } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n      setHeaders(parseHeaders(header), valueOrRewrite);\n    } else if (utils.isObject(header) && utils.isIterable(header)) {\n      let obj = {}, dest, key;\n      for (const entry of header) {\n        if (!utils.isArray(entry)) {\n          throw TypeError('Object iterator must return a key-value pair');\n        }\n\n        obj[key = entry[0]] = (dest = obj[key]) ?\n          (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n      }\n\n      setHeaders(obj, valueOrRewrite)\n    } else {\n      header != null && setHeader(valueOrRewrite, header, rewrite);\n    }\n\n    return this;\n  }\n\n  get(header, parser) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      if (key) {\n        const value = this[key];\n\n        if (!parser) {\n          return value;\n        }\n\n        if (parser === true) {\n          return parseTokens(value);\n        }\n\n        if (utils.isFunction(parser)) {\n          return parser.call(this, value, key);\n        }\n\n        if (utils.isRegExp(parser)) {\n          return parser.exec(value);\n        }\n\n        throw new TypeError('parser must be boolean|regexp|function');\n      }\n    }\n  }\n\n  has(header, matcher) {\n    header = normalizeHeader(header);\n\n    if (header) {\n      const key = utils.findKey(this, header);\n\n      return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n    }\n\n    return false;\n  }\n\n  delete(header, matcher) {\n    const self = this;\n    let deleted = false;\n\n    function deleteHeader(_header) {\n      _header = normalizeHeader(_header);\n\n      if (_header) {\n        const key = utils.findKey(self, _header);\n\n        if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n          delete self[key];\n\n          deleted = true;\n        }\n      }\n    }\n\n    if (utils.isArray(header)) {\n      header.forEach(deleteHeader);\n    } else {\n      deleteHeader(header);\n    }\n\n    return deleted;\n  }\n\n  clear(matcher) {\n    const keys = Object.keys(this);\n    let i = keys.length;\n    let deleted = false;\n\n    while (i--) {\n      const key = keys[i];\n      if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n        delete this[key];\n        deleted = true;\n      }\n    }\n\n    return deleted;\n  }\n\n  normalize(format) {\n    const self = this;\n    const headers = {};\n\n    utils.forEach(this, (value, header) => {\n      const key = utils.findKey(headers, header);\n\n      if (key) {\n        self[key] = normalizeValue(value);\n        delete self[header];\n        return;\n      }\n\n      const normalized = format ? formatHeader(header) : String(header).trim();\n\n      if (normalized !== header) {\n        delete self[header];\n      }\n\n      self[normalized] = normalizeValue(value);\n\n      headers[normalized] = true;\n    });\n\n    return this;\n  }\n\n  concat(...targets) {\n    return this.constructor.concat(this, ...targets);\n  }\n\n  toJSON(asStrings) {\n    const obj = Object.create(null);\n\n    utils.forEach(this, (value, header) => {\n      value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n    });\n\n    return obj;\n  }\n\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n\n  toString() {\n    return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n  }\n\n  getSetCookie() {\n    return this.get(\"set-cookie\") || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'AxiosHeaders';\n  }\n\n  static from(thing) {\n    return thing instanceof this ? thing : new this(thing);\n  }\n\n  static concat(first, ...targets) {\n    const computed = new this(first);\n\n    targets.forEach((target) => computed.set(target));\n\n    return computed;\n  }\n\n  static accessor(header) {\n    const internals = this[$internals] = (this[$internals] = {\n      accessors: {}\n    });\n\n    const accessors = internals.accessors;\n    const prototype = this.prototype;\n\n    function defineAccessor(_header) {\n      const lHeader = normalizeHeader(_header);\n\n      if (!accessors[lHeader]) {\n        buildAccessors(prototype, _header);\n        accessors[lHeader] = true;\n      }\n    }\n\n    utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n    return this;\n  }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n  let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n  return {\n    get: () => value,\n    set(headerValue) {\n      this[mapped] = headerValue;\n    }\n  }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from '../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n  const parsed = {};\n  let key;\n  let val;\n  let i;\n\n  rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n    i = line.indexOf(':');\n    key = line.substring(0, i).trim().toLowerCase();\n    val = line.substring(i + 1).trim();\n\n    if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n      return;\n    }\n\n    if (key === 'set-cookie') {\n      if (parsed[key]) {\n        parsed[key].push(val);\n      } else {\n        parsed[key] = [val];\n      }\n    } else {\n      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n    }\n  });\n\n  return parsed;\n};\n", "'use strict';\n\nexport default function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\n\nclass CanceledError extends AxiosError {\n  /**\n   * A `CanceledError` is an object that is thrown when an operation is canceled.\n   *\n   * @param {string=} message The message.\n   * @param {Object=} config The config.\n   * @param {Object=} request The request.\n   *\n   * @returns {CanceledError} The created error.\n   */\n  constructor(message, config, request) {\n    super(message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n    this.name = 'CanceledError';\n    this.__CANCEL__ = true;\n  }\n}\n\nexport default CanceledError;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n  http: httpAdapter,\n  xhr: xhrAdapter,\n  fetch: {\n    get: fetchAdapter.getFetch,\n  }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n  if (fn) {\n    try {\n      Object.defineProperty(fn, 'name', { value });\n    } catch (e) {\n      // eslint-disable-next-line no-empty\n    }\n    Object.defineProperty(fn, 'adapterName', { value });\n  }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n  adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n  const { length } = adapters;\n  let nameOrAdapter;\n  let adapter;\n\n  const rejectedReasons = {};\n\n  for (let i = 0; i < length; i++) {\n    nameOrAdapter = adapters[i];\n    let id;\n\n    adapter = nameOrAdapter;\n\n    if (!isResolvedHandle(nameOrAdapter)) {\n      adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n      if (adapter === undefined) {\n        throw new AxiosError(`Unknown adapter '${id}'`);\n      }\n    }\n\n    if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n      break;\n    }\n\n    rejectedReasons[id || '#' + i] = adapter;\n  }\n\n  if (!adapter) {\n    const reasons = Object.entries(rejectedReasons)\n      .map(([id, state]) => `adapter ${id} ` +\n        (state === false ? 'is not supported by the environment' : 'is not available in the build')\n      );\n\n    let s = length ?\n      (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n      'as no adapter specified';\n\n    throw new AxiosError(\n      `There is no suitable adapter to dispatch the request ` + s,\n      'ERR_NOT_SUPPORT'\n    );\n  }\n\n  return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n  /**\n   * Resolve an adapter from a list of adapter names or functions.\n   * @type {Function}\n   */\n  getAdapter,\n\n  /**\n   * Exposes all known adapters\n   * @type {Object<string, Function|Object>}\n   */\n  adapters: knownAdapters\n};\n", "import utils from '../utils.js';\nimport settle from '../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    const _config = resolveConfig(config);\n    let requestData = _config.data;\n    const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n    let {responseType, onUploadProgress, onDownloadProgress} = _config;\n    let onCanceled;\n    let uploadThrottled, downloadThrottled;\n    let flushUpload, flushDownload;\n\n    function done() {\n      flushUpload && flushUpload(); // flush events\n      flushDownload && flushDownload(); // flush events\n\n      _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n      _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n    }\n\n    let request = new XMLHttpRequest();\n\n    request.open(_config.method.toUpperCase(), _config.url, true);\n\n    // Set the request timeout in MS\n    request.timeout = _config.timeout;\n\n    function onloadend() {\n      if (!request) {\n        return;\n      }\n      // Prepare the response\n      const responseHeaders = AxiosHeaders.from(\n        'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n      );\n      const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n        request.responseText : request.response;\n      const response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config,\n        request\n      };\n\n      settle(function _resolve(value) {\n        resolve(value);\n        done();\n      }, function _reject(err) {\n        reject(err);\n        done();\n      }, response);\n\n      // Clean up request\n      request = null;\n    }\n\n    if ('onloadend' in request) {\n      // Use onloadend if available\n      request.onloadend = onloadend;\n    } else {\n      // Listen for ready state to emulate onloadend\n      request.onreadystatechange = function handleLoad() {\n        if (!request || request.readyState !== 4) {\n          return;\n        }\n\n        // The request errored out and we didn't get a response, this will be\n        // handled by onerror instead\n        // With one exception: request that using file: protocol, most browsers\n        // will return status as 0 even though it's a successful request\n        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n          return;\n        }\n        // readystate handler is calling before onerror or ontimeout handlers,\n        // so we should call onloadend on the next 'tick'\n        setTimeout(onloadend);\n      };\n    }\n\n    // Handle browser request cancellation (as opposed to a manual cancellation)\n    request.onabort = function handleAbort() {\n      if (!request) {\n        return;\n      }\n\n      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n  request.onerror = function handleError(event) {\n       // Browsers deliver a ProgressEvent in XHR onerror\n       // (message may be empty; when present, surface it)\n       // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n       const msg = event && event.message ? event.message : 'Network Error';\n       const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n       // attach the underlying event for consumers who want details\n       err.event = event || null;\n       reject(err);\n       request = null;\n    };\n    \n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n      const transitional = _config.transitional || transitionalDefaults;\n      if (_config.timeoutErrorMessage) {\n        timeoutErrorMessage = _config.timeoutErrorMessage;\n      }\n      reject(new AxiosError(\n        timeoutErrorMessage,\n        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n        config,\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Remove Content-Type if data is undefined\n    requestData === undefined && requestHeaders.setContentType(null);\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n        request.setRequestHeader(key, val);\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (!utils.isUndefined(_config.withCredentials)) {\n      request.withCredentials = !!_config.withCredentials;\n    }\n\n    // Add responseType to request if needed\n    if (responseType && responseType !== 'json') {\n      request.responseType = _config.responseType;\n    }\n\n    // Handle progress if needed\n    if (onDownloadProgress) {\n      ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n      request.addEventListener('progress', downloadThrottled);\n    }\n\n    // Not all browsers support upload events\n    if (onUploadProgress && request.upload) {\n      ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n      request.upload.addEventListener('progress', uploadThrottled);\n\n      request.upload.addEventListener('loadend', flushUpload);\n    }\n\n    if (_config.cancelToken || _config.signal) {\n      // Handle cancellation\n      // eslint-disable-next-line func-names\n      onCanceled = cancel => {\n        if (!request) {\n          return;\n        }\n        reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n        request.abort();\n        request = null;\n      };\n\n      _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n      if (_config.signal) {\n        _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n      }\n    }\n\n    const protocol = parseProtocol(_config.url);\n\n    if (protocol && platform.protocols.indexOf(protocol) === -1) {\n      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n      return;\n    }\n\n\n    // Send the request\n    request.send(requestData || null);\n  });\n}\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n  const validateStatus = response.config.validateStatus;\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(new AxiosError(\n      'Request failed with status code ' + response.status,\n      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n      response.config,\n      response.request,\n      response\n    ));\n  }\n}\n", "'use strict';\n\nexport default function parseProtocol(url) {\n  const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n  return match && match[1] || '';\n}\n", "import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n  let bytesNotified = 0;\n  const _speedometer = speedometer(50, 250);\n\n  return throttle(e => {\n    const loaded = e.loaded;\n    const total = e.lengthComputable ? e.total : undefined;\n    const progressBytes = loaded - bytesNotified;\n    const rate = _speedometer(progressBytes);\n    const inRange = loaded <= total;\n\n    bytesNotified = loaded;\n\n    const data = {\n      loaded,\n      total,\n      progress: total ? (loaded / total) : undefined,\n      bytes: progressBytes,\n      rate: rate ? rate : undefined,\n      estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n      event: e,\n      lengthComputable: total != null,\n      [isDownloadStream ? 'download' : 'upload']: true\n    };\n\n    listener(data);\n  }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n  const lengthComputable = total != null;\n\n  return [(loaded) => throttled[0]({\n    lengthComputable,\n    total,\n    loaded\n  }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n  samplesCount = samplesCount || 10;\n  const bytes = new Array(samplesCount);\n  const timestamps = new Array(samplesCount);\n  let head = 0;\n  let tail = 0;\n  let firstSampleTS;\n\n  min = min !== undefined ? min : 1000;\n\n  return function push(chunkLength) {\n    const now = Date.now();\n\n    const startedAt = timestamps[tail];\n\n    if (!firstSampleTS) {\n      firstSampleTS = now;\n    }\n\n    bytes[head] = chunkLength;\n    timestamps[head] = now;\n\n    let i = tail;\n    let bytesCount = 0;\n\n    while (i !== head) {\n      bytesCount += bytes[i++];\n      i = i % samplesCount;\n    }\n\n    head = (head + 1) % samplesCount;\n\n    if (head === tail) {\n      tail = (tail + 1) % samplesCount;\n    }\n\n    if (now - firstSampleTS < min) {\n      return;\n    }\n\n    const passed = startedAt && now - startedAt;\n\n    return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n  };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n  let timestamp = 0;\n  let threshold = 1000 / freq;\n  let lastArgs;\n  let timer;\n\n  const invoke = (args, now = Date.now()) => {\n    timestamp = now;\n    lastArgs = null;\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n    fn(...args);\n  }\n\n  const throttled = (...args) => {\n    const now = Date.now();\n    const passed = now - timestamp;\n    if ( passed >= threshold) {\n      invoke(args, now);\n    } else {\n      lastArgs = args;\n      if (!timer) {\n        timer = setTimeout(() => {\n          timer = null;\n          invoke(lastArgs)\n        }, threshold - passed);\n      }\n    }\n  }\n\n  const flush = () => lastArgs && invoke(lastArgs);\n\n  return [throttled, flush];\n}\n\nexport default throttle;\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n  const newConfig = mergeConfig({}, config);\n\n  let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n  newConfig.headers = headers = AxiosHeaders.from(headers);\n\n  newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n  // HTTP basic authentication\n  if (auth) {\n    headers.set('Authorization', 'Basic ' +\n      btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n    );\n  }\n\n  if (utils.isFormData(data)) {\n    if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n      headers.setContentType(undefined); // browser handles it\n    } else if (utils.isFunction(data.getHeaders)) {\n      // Node.js FormData (like form-data package)\n      const formHeaders = data.getHeaders();\n      // Only set safe headers to avoid overwriting security headers\n      const allowedHeaders = ['content-type', 'content-length'];\n      Object.entries(formHeaders).forEach(([key, val]) => {\n        if (allowedHeaders.includes(key.toLowerCase())) {\n          headers.set(key, val);\n        }\n      });\n    }\n  }  \n\n  // Add xsrf header\n  // This is only done if running in a standard browser environment.\n  // Specifically not if we're in a web worker, or react-native.\n\n  if (platform.hasStandardBrowserEnv) {\n    withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n    if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n      // Add xsrf header\n      const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n      if (xsrfValue) {\n        headers.set(xsrfHeaderName, xsrfValue);\n      }\n    }\n  }\n\n  return newConfig;\n}\n\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n  url = new URL(url, platform.origin);\n\n  return (\n    origin.protocol === url.protocol &&\n    origin.host === url.host &&\n    (isMSIE || origin.port === url.port)\n  );\n})(\n  new URL(platform.origin),\n  platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n", "import utils from '../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n  // Standard browser envs support document.cookie\n  {\n    write(name, value, expires, path, domain, secure, sameSite) {\n      if (typeof document === 'undefined') return;\n\n      const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n      if (utils.isNumber(expires)) {\n        cookie.push(`expires=${new Date(expires).toUTCString()}`);\n      }\n      if (utils.isString(path)) {\n        cookie.push(`path=${path}`);\n      }\n      if (utils.isString(domain)) {\n        cookie.push(`domain=${domain}`);\n      }\n      if (secure === true) {\n        cookie.push('secure');\n      }\n      if (utils.isString(sameSite)) {\n        cookie.push(`SameSite=${sameSite}`);\n      }\n\n      document.cookie = cookie.join('; ');\n    },\n\n    read(name) {\n      if (typeof document === 'undefined') return null;\n      const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n      return match ? decodeURIComponent(match[1]) : null;\n    },\n\n    remove(name) {\n      this.write(name, '', Date.now() - 86400000, '/');\n    }\n  }\n\n  :\n\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {},\n    read() {\n      return null;\n    },\n    remove() {}\n  };\n\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n  let isRelativeUrl = !isAbsoluteURL(requestedURL);\n  if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n    return combineURLs(baseURL, requestedURL);\n  }\n  return requestedURL;\n}\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  if (typeof url !== 'string') {\n    return false;\n  }\n\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n}\n", "\"use strict\";\n\nimport utils from \"../utils.js\";\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) =>\n  thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n  // eslint-disable-next-line no-param-reassign\n  config2 = config2 || {};\n  const config = {};\n\n  function getMergedValue(target, source, prop, caseless) {\n    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n      return utils.merge.call({ caseless }, target, source);\n    } else if (utils.isPlainObject(source)) {\n      return utils.merge({}, source);\n    } else if (utils.isArray(source)) {\n      return source.slice();\n    }\n    return source;\n  }\n\n  function mergeDeepProperties(a, b, prop, caseless) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(a, b, prop, caseless);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a, prop, caseless);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function valueFromConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function defaultToConfig2(a, b) {\n    if (!utils.isUndefined(b)) {\n      return getMergedValue(undefined, b);\n    } else if (!utils.isUndefined(a)) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  // eslint-disable-next-line consistent-return\n  function mergeDirectKeys(a, b, prop) {\n    if (prop in config2) {\n      return getMergedValue(a, b);\n    } else if (prop in config1) {\n      return getMergedValue(undefined, a);\n    }\n  }\n\n  const mergeMap = {\n    url: valueFromConfig2,\n    method: valueFromConfig2,\n    data: valueFromConfig2,\n    baseURL: defaultToConfig2,\n    transformRequest: defaultToConfig2,\n    transformResponse: defaultToConfig2,\n    paramsSerializer: defaultToConfig2,\n    timeout: defaultToConfig2,\n    timeoutMessage: defaultToConfig2,\n    withCredentials: defaultToConfig2,\n    withXSRFToken: defaultToConfig2,\n    adapter: defaultToConfig2,\n    responseType: defaultToConfig2,\n    xsrfCookieName: defaultToConfig2,\n    xsrfHeaderName: defaultToConfig2,\n    onUploadProgress: defaultToConfig2,\n    onDownloadProgress: defaultToConfig2,\n    decompress: defaultToConfig2,\n    maxContentLength: defaultToConfig2,\n    maxBodyLength: defaultToConfig2,\n    beforeRedirect: defaultToConfig2,\n    transport: defaultToConfig2,\n    httpAgent: defaultToConfig2,\n    httpsAgent: defaultToConfig2,\n    cancelToken: defaultToConfig2,\n    socketPath: defaultToConfig2,\n    responseEncoding: defaultToConfig2,\n    validateStatus: mergeDirectKeys,\n    headers: (a, b, prop) =>\n      mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true),\n  };\n\n  utils.forEach(\n    Object.keys({ ...config1, ...config2 }),\n    function computeConfigValue(prop) {\n      if (\n        prop === \"__proto__\" ||\n        prop === \"constructor\" ||\n        prop === \"prototype\"\n      )\n        return;\n      const merge = utils.hasOwnProp(mergeMap, prop)\n        ? mergeMap[prop]\n        : mergeDeepProperties;\n      const configValue = merge(config1[prop], config2[prop], prop);\n      (utils.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n        (config[prop] = configValue);\n    },\n  );\n\n  return config;\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n  Request, Response\n}))(utils.global);\n\nconst {\n  ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n  try {\n    return !!fn(...args);\n  } catch (e) {\n    return false\n  }\n}\n\nconst factory = (env) => {\n  env = utils.merge.call({\n    skipUndefined: true\n  }, globalFetchAPI, env);\n\n  const {fetch: envFetch, Request, Response} = env;\n  const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n  const isRequestSupported = isFunction(Request);\n  const isResponseSupported = isFunction(Response);\n\n  if (!isFetchSupported) {\n    return false;\n  }\n\n  const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n  const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n      ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n      async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n  );\n\n  const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n    let duplexAccessed = false;\n\n    const hasContentType = new Request(platform.origin, {\n      body: new ReadableStream(),\n      method: 'POST',\n      get duplex() {\n        duplexAccessed = true;\n        return 'half';\n      },\n    }).headers.has('Content-Type');\n\n    return duplexAccessed && !hasContentType;\n  });\n\n  const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n    test(() => utils.isReadableStream(new Response('').body));\n\n  const resolvers = {\n    stream: supportsResponseStream && ((res) => res.body)\n  };\n\n  isFetchSupported && ((() => {\n    ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n      !resolvers[type] && (resolvers[type] = (res, config) => {\n        let method = res && res[type];\n\n        if (method) {\n          return method.call(res);\n        }\n\n        throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n      })\n    });\n  })());\n\n  const getBodyLength = async (body) => {\n    if (body == null) {\n      return 0;\n    }\n\n    if (utils.isBlob(body)) {\n      return body.size;\n    }\n\n    if (utils.isSpecCompliantForm(body)) {\n      const _request = new Request(platform.origin, {\n        method: 'POST',\n        body,\n      });\n      return (await _request.arrayBuffer()).byteLength;\n    }\n\n    if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n      return body.byteLength;\n    }\n\n    if (utils.isURLSearchParams(body)) {\n      body = body + '';\n    }\n\n    if (utils.isString(body)) {\n      return (await encodeText(body)).byteLength;\n    }\n  }\n\n  const resolveBodyLength = async (headers, body) => {\n    const length = utils.toFiniteNumber(headers.getContentLength());\n\n    return length == null ? getBodyLength(body) : length;\n  }\n\n  return async (config) => {\n    let {\n      url,\n      method,\n      data,\n      signal,\n      cancelToken,\n      timeout,\n      onDownloadProgress,\n      onUploadProgress,\n      responseType,\n      headers,\n      withCredentials = 'same-origin',\n      fetchOptions\n    } = resolveConfig(config);\n\n    let _fetch = envFetch || fetch;\n\n    responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n    let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n    let request = null;\n\n    const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n      composedSignal.unsubscribe();\n    });\n\n    let requestContentLength;\n\n    try {\n      if (\n        onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n        (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n      ) {\n        let _request = new Request(url, {\n          method: 'POST',\n          body: data,\n          duplex: \"half\"\n        });\n\n        let contentTypeHeader;\n\n        if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n          headers.setContentType(contentTypeHeader)\n        }\n\n        if (_request.body) {\n          const [onProgress, flush] = progressEventDecorator(\n            requestContentLength,\n            progressEventReducer(asyncDecorator(onUploadProgress))\n          );\n\n          data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n        }\n      }\n\n      if (!utils.isString(withCredentials)) {\n        withCredentials = withCredentials ? 'include' : 'omit';\n      }\n\n      // Cloudflare Workers throws when credentials are defined\n      // see https://github.com/cloudflare/workerd/issues/902\n      const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n      const resolvedOptions = {\n        ...fetchOptions,\n        signal: composedSignal,\n        method: method.toUpperCase(),\n        headers: headers.normalize().toJSON(),\n        body: data,\n        duplex: \"half\",\n        credentials: isCredentialsSupported ? withCredentials : undefined\n      };\n\n      request = isRequestSupported && new Request(url, resolvedOptions);\n\n      let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n      const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n      if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n        const options = {};\n\n        ['status', 'statusText', 'headers'].forEach(prop => {\n          options[prop] = response[prop];\n        });\n\n        const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n        const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n          responseContentLength,\n          progressEventReducer(asyncDecorator(onDownloadProgress), true)\n        ) || [];\n\n        response = new Response(\n          trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n            flush && flush();\n            unsubscribe && unsubscribe();\n          }),\n          options\n        );\n      }\n\n      responseType = responseType || 'text';\n\n      let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n      !isStreamResponse && unsubscribe && unsubscribe();\n\n      return await new Promise((resolve, reject) => {\n        settle(resolve, reject, {\n          data: responseData,\n          headers: AxiosHeaders.from(response.headers),\n          status: response.status,\n          statusText: response.statusText,\n          config,\n          request\n        })\n      })\n    } catch (err) {\n      unsubscribe && unsubscribe();\n\n      if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n        throw Object.assign(\n          new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, err && err.response),\n          {\n            cause: err.cause || err\n          }\n        )\n      }\n\n      throw AxiosError.from(err, err && err.code, config, request, err && err.response);\n    }\n  }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n  let env = (config && config.env) || {};\n  const {fetch, Request, Response} = env;\n  const seeds = [\n    Request, Response, fetch\n  ];\n\n  let len = seeds.length, i = len,\n    seed, target, map = seedCache;\n\n  while (i--) {\n    seed = seeds[i];\n    target = map.get(seed);\n\n    target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n    map = target;\n  }\n\n  return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n  const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n  if (timeout || length) {\n    let controller = new AbortController();\n\n    let aborted;\n\n    const onabort = function (reason) {\n      if (!aborted) {\n        aborted = true;\n        unsubscribe();\n        const err = reason instanceof Error ? reason : this.reason;\n        controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n      }\n    }\n\n    let timer = timeout && setTimeout(() => {\n      timer = null;\n      onabort(new AxiosError(`timeout of ${timeout}ms exceeded`, AxiosError.ETIMEDOUT))\n    }, timeout)\n\n    const unsubscribe = () => {\n      if (signals) {\n        timer && clearTimeout(timer);\n        timer = null;\n        signals.forEach(signal => {\n          signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n        });\n        signals = null;\n      }\n    }\n\n    signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n    const {signal} = controller;\n\n    signal.unsubscribe = () => utils.asap(unsubscribe);\n\n    return signal;\n  }\n}\n\nexport default composeSignals;\n", "\nexport const streamChunk = function* (chunk, chunkSize) {\n  let len = chunk.byteLength;\n\n  if (!chunkSize || len < chunkSize) {\n    yield chunk;\n    return;\n  }\n\n  let pos = 0;\n  let end;\n\n  while (pos < len) {\n    end = pos + chunkSize;\n    yield chunk.slice(pos, end);\n    pos = end;\n  }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n  for await (const chunk of readStream(iterable)) {\n    yield* streamChunk(chunk, chunkSize);\n  }\n}\n\nconst readStream = async function* (stream) {\n  if (stream[Symbol.asyncIterator]) {\n    yield* stream;\n    return;\n  }\n\n  const reader = stream.getReader();\n  try {\n    for (;;) {\n      const {done, value} = await reader.read();\n      if (done) {\n        break;\n      }\n      yield value;\n    }\n  } finally {\n    await reader.cancel();\n  }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n  const iterator = readBytes(stream, chunkSize);\n\n  let bytes = 0;\n  let done;\n  let _onFinish = (e) => {\n    if (!done) {\n      done = true;\n      onFinish && onFinish(e);\n    }\n  }\n\n  return new ReadableStream({\n    async pull(controller) {\n      try {\n        const {done, value} = await iterator.next();\n\n        if (done) {\n         _onFinish();\n          controller.close();\n          return;\n        }\n\n        let len = value.byteLength;\n        if (onProgress) {\n          let loadedBytes = bytes += len;\n          onProgress(loadedBytes);\n        }\n        controller.enqueue(new Uint8Array(value));\n      } catch (err) {\n        _onFinish(err);\n        throw err;\n      }\n    },\n    cancel(reason) {\n      _onFinish(reason);\n      return iterator.return();\n    }\n  }, {\n    highWaterMark: 2\n  })\n}\n", "'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n  validators[type] = function validator(thing) {\n    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n  };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n  function formatMessage(opt, desc) {\n    return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n  }\n\n  // eslint-disable-next-line func-names\n  return (value, opt, opts) => {\n    if (validator === false) {\n      throw new AxiosError(\n        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n        AxiosError.ERR_DEPRECATED\n      );\n    }\n\n    if (version && !deprecatedWarnings[opt]) {\n      deprecatedWarnings[opt] = true;\n      // eslint-disable-next-line no-console\n      console.warn(\n        formatMessage(\n          opt,\n          ' has been deprecated since v' + version + ' and will be removed in the near future'\n        )\n      );\n    }\n\n    return validator ? validator(value, opt, opts) : true;\n  };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n  return (value, opt) => {\n    // eslint-disable-next-line no-console\n    console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n    return true;\n  }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n  if (typeof options !== 'object') {\n    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n  }\n  const keys = Object.keys(options);\n  let i = keys.length;\n  while (i-- > 0) {\n    const opt = keys[i];\n    const validator = schema[opt];\n    if (validator) {\n      const value = options[opt];\n      const result = value === undefined || validator(value, opt, options);\n      if (result !== true) {\n        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n      }\n      continue;\n    }\n    if (allowUnknown !== true) {\n      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n    }\n  }\n}\n\nexport default {\n  assertOptions,\n  validators\n};\n", "export const VERSION = \"1.13.5\";", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n  constructor(executor) {\n    if (typeof executor !== 'function') {\n      throw new TypeError('executor must be a function.');\n    }\n\n    let resolvePromise;\n\n    this.promise = new Promise(function promiseExecutor(resolve) {\n      resolvePromise = resolve;\n    });\n\n    const token = this;\n\n    // eslint-disable-next-line func-names\n    this.promise.then(cancel => {\n      if (!token._listeners) return;\n\n      let i = token._listeners.length;\n\n      while (i-- > 0) {\n        token._listeners[i](cancel);\n      }\n      token._listeners = null;\n    });\n\n    // eslint-disable-next-line func-names\n    this.promise.then = onfulfilled => {\n      let _resolve;\n      // eslint-disable-next-line func-names\n      const promise = new Promise(resolve => {\n        token.subscribe(resolve);\n        _resolve = resolve;\n      }).then(onfulfilled);\n\n      promise.cancel = function reject() {\n        token.unsubscribe(_resolve);\n      };\n\n      return promise;\n    };\n\n    executor(function cancel(message, config, request) {\n      if (token.reason) {\n        // Cancellation has already been requested\n        return;\n      }\n\n      token.reason = new CanceledError(message, config, request);\n      resolvePromise(token.reason);\n    });\n  }\n\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason) {\n      throw this.reason;\n    }\n  }\n\n  /**\n   * Subscribe to the cancel signal\n   */\n\n  subscribe(listener) {\n    if (this.reason) {\n      listener(this.reason);\n      return;\n    }\n\n    if (this._listeners) {\n      this._listeners.push(listener);\n    } else {\n      this._listeners = [listener];\n    }\n  }\n\n  /**\n   * Unsubscribe from the cancel signal\n   */\n\n  unsubscribe(listener) {\n    if (!this._listeners) {\n      return;\n    }\n    const index = this._listeners.indexOf(listener);\n    if (index !== -1) {\n      this._listeners.splice(index, 1);\n    }\n  }\n\n  toAbortSignal() {\n    const controller = new AbortController();\n\n    const abort = (err) => {\n      controller.abort(err);\n    };\n\n    this.subscribe(abort);\n\n    controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n    return controller.signal;\n  }\n\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let cancel;\n    const token = new CancelToken(function executor(c) {\n      cancel = c;\n    });\n    return {\n      token,\n      cancel\n    };\n  }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  const args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n  return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n", "const HttpStatusCode = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511,\n  WebServerIsDown: 521,\n  ConnectionTimedOut: 522,\n  OriginIsUnreachable: 523,\n  TimeoutOccurred: 524,\n  SslHandshakeFailed: 525,\n  InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n  HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport { GridItem } from 'vue-grid-layout';\nimport WidgetEditable from './WidgetEditable.vue';\nimport { clickoutside } from '../../../lib/vue/directives'\n\nconst __vue_script__ = {\n  name: \"Widget\",\n  components: {\n    GridItem,\n    WidgetEditable\n  },\n  directives: { clickoutside },\n  props: {\n    x: {\n      type: Number,\n      required: true\n    },\n    y: {\n      type: Number,\n      required: true\n    },\n    w: {\n      type: Number,\n      required: true\n    },\n    h: {\n      type: Number,\n      required: true\n    },\n    i: {\n      type: [String, Number],\n      required: true\n    },\n    template: {\n      type: Object,\n      default: () => {}\n    },\n    editionMode: {\n      type: Boolean,\n      default: false\n    },\n  },\n  data() {\n    return {\n      edit: false\n    }\n  },\n  methods: {\n    handleWidgetEdit() {\n      this.edit = !this.edit\n    },\n    handleWidgetDelete() {\n      this.$emit('delete', this.i)\n    },\n    handleWidgetChange(value) {\n      this.edit = false\n      this.$emit('change', this.i, value)\n    },\n    handleClickOutside() {\n      if (this.edit) {\n        this.edit = false\n      }\n    },\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"GridItem\",\n    {\n      ref: \"item\",\n      attrs: {\n        x: _vm.x,\n        y: _vm.y,\n        w: _vm.w,\n        h: _vm.h,\n        i: _vm.i,\n        static: _vm.edit,\n      },\n    },\n    [\n      _c(\n        \"WidgetEditable\",\n        {\n          directives: [\n            {\n              name: \"clickoutside\",\n              rawName: \"v-clickoutside\",\n              value: _vm.handleClickOutside,\n              expression: \"handleClickOutside\",\n            },\n          ],\n          attrs: { disabled: !_vm.editionMode },\n          on: { edit: _vm.handleWidgetEdit, delete: _vm.handleWidgetDelete },\n        },\n        [\n          _c(\n            _vm.template,\n            _vm._b(\n              { tag: \"component\", on: { change: _vm.handleWidgetChange } },\n              \"component\",\n              Object.assign({}, _vm.$attrs, { edit: _vm.edit }),\n              false\n            )\n          ),\n        ],\n        1\n      ),\n    ],\n    1\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/Widget.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Button from './Button.vue'\n\nconst __vue_script__ = {\n  name: \"WidgetEditable\",\n  components: {\n    Button\n  },\n  props: {\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      isToolboxVisible: false\n    }\n  },\n  computed: {\n    isEditionMode() {\n      return !this.disabled && this.isToolboxVisible\n    }\n  },\n  methods: {\n    handleMouseover() {\n      if (!this.disable) {\n        this.isToolboxVisible = true\n      }\n    },\n    handleMouseout() {\n      if (!this.disabled) {\n        this.isToolboxVisible = false\n      }\n    },\n    handleClickEdit() {\n      this.$emit('edit')\n    },\n    handleClickDelete() {\n      this.$emit('delete')\n    },\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"dashboards-maker--widget\",\n      class: { \"dashboards-maker--widget__editing\": _vm.isEditionMode },\n      on: { mouseenter: _vm.handleMouseover, mouseleave: _vm.handleMouseout },\n    },\n    [\n      _vm._t(\"default\"),\n      _vm._v(\" \"),\n      _vm.isEditionMode\n        ? _c(\n            \"div\",\n            { staticClass: \"dashboards-maker--widget__toolbox\" },\n            [\n              _c(\"Button\", {\n                staticClass: \"dashboards-maker--button__square\",\n                attrs: { icon: \"edit\" },\n                nativeOn: {\n                  click: function ($event) {\n                    return _vm.handleClickEdit.apply(null, arguments)\n                  },\n                },\n              }),\n              _vm._v(\" \"),\n              _c(\"Button\", {\n                staticClass: \"dashboards-maker--button__square\",\n                attrs: { icon: \"trash\" },\n                nativeOn: {\n                  click: function ($event) {\n                    return _vm.handleClickDelete.apply(null, arguments)\n                  },\n                },\n              }),\n            ],\n            1\n          )\n        : _vm._e(),\n    ],\n    2\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/WidgetEditable.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Header from '../layouts/Header.vue';\nimport Button from './Button.vue';\n\nconst __vue_script__ = {\n  name: \"HeaderForm\",\n  components: {\n    Header,\n    Button\n  },\n  props: {\n    isDirty: {\n      type: Boolean,\n      default: false\n    },\n    showViewItem: {\n      type: Boolean,\n      default: true\n    },\n    shaking: {\n      type: Boolean,\n      default: true\n    },\n  },\n  data() {\n    return {\n      deleteLabel: I18n.t(\"gobierto_dashboards.delete\") || \"\",\n      saveLabel: I18n.t(\"gobierto_dashboards.save\") || \"\",\n      viewItemLabel: I18n.t(\"gobierto_dashboards.view_item\") || \"\",\n      changesLabel: I18n.t(\"gobierto_dashboards.changes\") || \"\",\n      closeNoSaveLabel: I18n.t(\"gobierto_dashboards.discard\") || \"\"\n    };\n  },\n  methods: {\n    handleDeleteButton() {\n      this.$emit('delete')\n    },\n    handleSeeItemButton() {\n      this.$emit('view')\n    },\n    handleSaveButton() {\n      this.$emit('save')\n    },\n    handleCloseButton() {\n      this.$emit('close')\n    },\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"Header\", { attrs: { highlight: _vm.isDirty } }, [\n    _c(\n      \"div\",\n      { staticClass: \"dashboards-maker--header m_b_1\" },\n      [\n        _vm._t(\"title\"),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          {\n            staticClass:\n              \"dashboards-maker--header dashboards-maker--header__buttons\",\n          },\n          [\n            _c(\n              \"Button\",\n              {\n                attrs: { icon: \"trash\", template: \"link\" },\n                nativeOn: {\n                  click: function ($event) {\n                    return _vm.handleDeleteButton.apply(null, arguments)\n                  },\n                },\n              },\n              [_vm._v(\"\\n        \" + _vm._s(_vm.deleteLabel) + \"\\n      \")]\n            ),\n            _vm._v(\" \"),\n            _vm.showViewItem\n              ? _c(\n                  \"Button\",\n                  {\n                    attrs: { icon: \"external-link-alt\", template: \"link\" },\n                    nativeOn: {\n                      click: function ($event) {\n                        return _vm.handleSeeItemButton.apply(null, arguments)\n                      },\n                    },\n                  },\n                  [\n                    _vm._v(\n                      \"\\n        \" + _vm._s(_vm.viewItemLabel) + \"\\n      \"\n                    ),\n                  ]\n                )\n              : _vm._e(),\n          ],\n          1\n        ),\n      ],\n      2\n    ),\n    _vm._v(\" \"),\n    _c(\n      \"div\",\n      { staticClass: \"dashboards-maker--header\" },\n      [\n        _vm._t(\"checkbox\"),\n        _vm._v(\" \"),\n        _c(\n          \"div\",\n          { staticClass: \"dashboards-maker--button\" },\n          [\n            _vm.isDirty\n              ? _c(\"i\", [_vm._v(_vm._s(_vm.changesLabel))])\n              : _vm._e(),\n            _vm._v(\" \"),\n            _vm.isDirty\n              ? _c(\n                  \"Button\",\n                  {\n                    class: { \"is-shaking\": _vm.shaking },\n                    attrs: { template: \"link\" },\n                    nativeOn: {\n                      click: function ($event) {\n                        return _vm.handleCloseButton.apply(null, arguments)\n                      },\n                    },\n                  },\n                  [\n                    _vm._v(\n                      \"\\n        \" + _vm._s(_vm.closeNoSaveLabel) + \"\\n      \"\n                    ),\n                  ]\n                )\n              : _vm._e(),\n            _vm._v(\" \"),\n            _c(\n              \"Button\",\n              {\n                class: { \"is-shaking\": _vm.shaking },\n                attrs: { disabled: !_vm.isDirty },\n                nativeOn: {\n                  click: function ($event) {\n                    return _vm.handleSaveButton.apply(null, arguments)\n                  },\n                },\n              },\n              [_vm._v(\"\\n        \" + _vm._s(_vm.saveLabel) + \"\\n      \")]\n            ),\n          ],\n          1\n        ),\n      ],\n      2\n    ),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/HeaderForm.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"Header\",\n  props: {\n    highlight: {\n      type: Boolean,\n      default: false,\n    }\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"header\", { staticClass: \"layout-header\" }, [\n    _c(\n      \"div\",\n      {\n        staticClass: \"layout-header-editable\",\n        class: { \"is-highlight\": _vm.highlight },\n      },\n      [_vm._t(\"default\")],\n      2\n    ),\n    _vm._v(\" \"),\n    _c(\"div\", { staticClass: \"layout-header-shadow\" }),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/layouts/Header.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"SmallCard\",\n  props: {\n    name: {\n      type: String,\n      default: null\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"dashboards-maker--small-card\", attrs: { draggable: \"\" } },\n    [_c(\"span\", [_vm._v(_vm._s(_vm.name))])]\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/SmallCard.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"Aside\",\n  data() {\n    return {\n      titleLabel: I18n.t(\"gobierto_dashboards.available_cards\") || \"\",\n      instructionsLabel: I18n.t(\"gobierto_dashboards.instructions\") || \"\",\n    }\n  }\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    [\n      _c(\"span\", { staticClass: \"dashboards-maker--aside__title\" }, [\n        _vm._v(_vm._s(_vm.titleLabel)),\n      ]),\n      _vm._v(\" \"),\n      _vm._t(\"default\"),\n      _vm._v(\" \"),\n      _c(\"p\", { staticClass: \"dashboards-maker--aside__footer\" }, [\n        _vm._v(\"\\n    \" + _vm._s(_vm.instructionsLabel) + \"\\n  \"),\n      ]),\n    ],\n    2\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/layouts/Aside.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"Main\",\n}\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"main\", { staticClass: \"layout-main\" }, [\n    _c(\"aside\", [_vm._t(\"aside\")], 2),\n    _vm._v(\" \"),\n    _c(\"article\", [_vm._t(\"default\")], 2),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/layouts/Main.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "import Vue from 'vue';\n\nVue.config.productionTip = false;\n\nexport class GobiertoDashboardCommonsController {\n  constructor({ selector, render, ...moreOptions } = {}) {\n    this.selector = selector\n    this.app = new Vue({\n      data: moreOptions,\n      render\n    });\n  }\n\n  mount() {\n    this.app.$mount(this.selector)\n  }\n}\n", "import '../../../assets/stylesheets/dashboards-viewer.scss'\nimport ViewerManager from '../webapp/ViewerManager.vue'\nimport { GobiertoDashboardCommonsController } from './dashboard_commons_controller'\n\nexport class GobiertoDashboardViewerController extends GobiertoDashboardCommonsController {\n  constructor(options = {}) {\n    super({ ...options, render: h => h(ViewerManager) })\n  }\n}\n", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport Viewer from './Viewer.vue';\nimport ListCard from './components/ListCard.vue';\nimport { FactoryMixin } from './lib/factories';\nimport { GOBIERTO_DASHBOARDS } from '../../lib/events'\n\nconst __vue_script__ = {\n  name: \"ViewerManager\",\n  components: {\n    Viewer,\n    ListCard\n  },\n  mixins: [FactoryMixin],\n  data() {\n    return {\n      dashboards: [],\n      currentDashboard: null,\n      backLabel: I18n.t(\"gobierto_dashboards.back\") || \"\"\n    }\n  },\n  computed: {\n    id() {\n      return this.$root.$data?.id;\n    },\n    pipe() {\n      return this.$root.$data?.pipe;\n    },\n    context() {\n      return this.$root.$data?.context;\n    },\n    isList() {\n      return !this.currentDashboard && this.dashboards.length > 1\n    },\n    showBackBtn() {\n      return this.currentDashboard && this.dashboards.length > 1\n    }\n  },\n  async created() {\n    // request all dashboards\n    ({ data: { data: this.dashboards } = {} } = await this.getDashboards({ context: this.context, data_pipe: this.pipe }))\n\n    if (this.id) {\n      this.currentDashboard = this.dashboards.find(({ id }) => +id === +this.id)\n    } else if (this.dashboards.length === 1) {\n      const [{ id }] = this.dashboards\n      this.handleClick(id)\n    }\n\n    // Emit to his parent, if there was any\n    this.$emit(GOBIERTO_DASHBOARDS.LOADED, this.dashboards)\n    // Otherwise, dispatch a general event (CustomEvent in order to send payload)\n    const event = new CustomEvent(GOBIERTO_DASHBOARDS.LOADED, { detail: this.dashboards })\n    document.dispatchEvent(event)\n  },\n  methods: {\n    handleClick(uid) {\n      // if uid is null, no selected dashboard, i.e. show the list\n      this.currentDashboard = this.dashboards.find(({ id }) => +id === +uid)\n\n      // Emit to his parent, if there was any\n      this.$emit(GOBIERTO_DASHBOARDS.SELECTED, this.currentDashboard)\n      // Otherwise, dispatch a general event (CustomEvent in order to send payload)\n      const event = new CustomEvent(GOBIERTO_DASHBOARDS.SELECTED, { detail: this.currentDashboard })\n      document.dispatchEvent(event)\n    }\n  }\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    { staticClass: \"dashboards-viewer\" },\n    [\n      _c(\n        \"transition\",\n        { attrs: { name: \"fade\" } },\n        [\n          _vm.isList\n            ? [\n                _c(\n                  \"div\",\n                  { staticClass: \"dashboards-viewer__card-grid\" },\n                  _vm._l(_vm.dashboards, function (ref) {\n                    var uid = ref.id\n                    var attributes = ref.attributes\n                    return _c(\n                      \"ListCard\",\n                      _vm._b(\n                        {\n                          key: uid,\n                          nativeOn: {\n                            click: function ($event) {\n                              return _vm.handleClick(uid)\n                            },\n                          },\n                        },\n                        \"ListCard\",\n                        attributes,\n                        false\n                      )\n                    )\n                  }),\n                  1\n                ),\n              ]\n            : _vm.currentDashboard\n            ? [_c(\"Viewer\", { attrs: { config: _vm.currentDashboard } })]\n            : _vm._e(),\n        ],\n        2\n      ),\n      _vm._v(\" \"),\n      _vm.showBackBtn\n        ? _c(\n            \"span\",\n            {\n              staticClass: \"dashboards-viewer__button\",\n              on: { click: _vm.handleClick },\n            },\n            [\n              _c(\"i\", { staticClass: \"fas fa-arrow-left\" }),\n              _vm._v(\" \" + _vm._s(_vm.backLabel) + \"\\n  \"),\n            ]\n          )\n        : _vm._e(),\n    ],\n    1\n  )\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/ViewerManager.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__", "/* script */\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nconst __vue_script__ = {\n  name: \"ListCard\",\n  props: {\n    title: {\n      type: String,\n      default: null\n    },\n    // eslint-disable-next-line vue/prop-name-casing\n    widgets_configuration: {\n      type: Array,\n      default: () => []\n    },\n  },\n  computed: {\n    indicatorsLabel() {\n      const amount = this.widgets_configuration ? this.widgets_configuration.map(({ indicator } = {}) => indicator).length : 0\n      return I18n.t(\"gobierto_dashboards.indicators_amount\", { amount })\n    }\n  },\n};\n\n/* template */\nvar __vue_render__ = function () {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", { staticClass: \"dashboards-viewer__card-container\" }, [\n    _c(\"div\", { staticClass: \"dashboards-viewer__card\" }, [\n      _c(\"h2\", { staticClass: \"dashboards-viewer__card-title\" }, [\n        _vm._v(\"\\n      \" + _vm._s(_vm.title) + \"\\n    \"),\n      ]),\n      _vm._v(\" \"),\n      _c(\"span\", { staticClass: \"dashboards-viewer__card-subtitle\" }, [\n        _vm._v(_vm._s(_vm.indicatorsLabel)),\n      ]),\n    ]),\n  ])\n}\nvar __vue_staticRenderFns__ = []\n__vue_render__._withStripped = true\n\n  /* style */\n  const __vue_inject_styles__ = undefined\n  /* scoped */\n  const __vue_scope_id__ = undefined\n  /* module identifier */\n  const __vue_module_identifier__ = undefined\n  /* functional template */\n  const __vue_is_functional_template__ = false\n  /* component normalizer */\n  function __vue_normalize__(\n    template, style, script,\n    scope, functional, moduleIdentifier, shadowMode,\n    createInjector, createInjectorSSR, createInjectorShadow\n  ) {\n    const component = (typeof script === 'function' ? script.options : script) || {}\n\n    // For security concerns, we use only base name in production mode.\n    component.__file = \"app/javascript/gobierto_dashboards/webapp/components/ListCard.vue\"\n\n    if (!component.render) {\n      component.render = template.render\n      component.staticRenderFns = template.staticRenderFns\n      component._compiled = true\n\n      if (functional) component.functional = true\n    }\n\n    component._scopeId = scope\n\n    if (false) {\n      let hook\n      if (false) {\n        // In SSR.\n        hook = function(context) {\n          // 2.3 injection\n          context =\n            context || // cached call\n            (this.$vnode && this.$vnode.ssrContext) || // stateful\n            (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n          // 2.2 with runInNewContext: true\n          if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n            context = __VUE_SSR_CONTEXT__\n          }\n          // inject component styles\n          if (style) {\n            style.call(this, createInjectorSSR(context))\n          }\n          // register component module identifier for async chunk inference\n          if (context && context._registeredComponents) {\n            context._registeredComponents.add(moduleIdentifier)\n          }\n        }\n        // used by ssr in case component is cached and beforeCreate\n        // never gets called\n        component._ssrRegister = hook\n      }\n      else if (style) {\n        hook = shadowMode \n          ? function(context) {\n              style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot))\n            }\n          : function(context) {\n              style.call(this, createInjector(context))\n            }\n      }\n\n      if (hook !== undefined) {\n        if (component.functional) {\n          // register for functional component in vue file\n          const originalRender = component.render\n          component.render = function renderWithStyleInjection(h, context) {\n            hook.call(context)\n            return originalRender(h, context)\n          }\n        } else {\n          // inject component registration as beforeCreate hook\n          const existing = component.beforeCreate\n          component.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n        }\n      }\n    }\n\n    return component\n  }\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = /*#__PURE__*/__vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  )\n\n  export default __vue_component__"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAa;AAAb;AAAA;AAAO,IAAM,UAAU,EAAC,KAAK,CAAC,EAAC;AAAA;AAAA;;;ACA/B;AAAA;AAAA;AAaA,KAAE,SAAUA,SAAQC,UAAU;AAE7B;AAEA,UAAK,OAAO,WAAW,YAAY,OAAO,OAAO,YAAY,UAAW;AASvE,eAAO,UAAUD,QAAO,WACvBC,SAASD,SAAQ,IAAK,IACtB,SAAUE,IAAI;AACb,cAAK,CAACA,GAAE,UAAW;AAClB,kBAAM,IAAI,MAAO,0CAA2C;AAAA,UAC7D;AACA,iBAAOD,SAASC,EAAE;AAAA,QACnB;AAAA,MACF,OAAO;AACN,QAAAD,SAASD,OAAO;AAAA,MACjB;AAAA,IAGD,GAAK,OAAO,WAAW,cAAc,SAAS,SAAM,SAAUG,SAAQ,UAAW;AAMjF;AAEA,UAAI,MAAM,CAAC;AAEX,UAAI,WAAW,OAAO;AAEtB,UAAI,QAAQ,IAAI;AAEhB,UAAI,OAAO,IAAI,OAAO,SAAUC,QAAQ;AACvC,eAAO,IAAI,KAAK,KAAMA,MAAM;AAAA,MAC7B,IAAI,SAAUA,QAAQ;AACrB,eAAO,IAAI,OAAO,MAAO,CAAC,GAAGA,MAAM;AAAA,MACpC;AAGA,UAAI,OAAO,IAAI;AAEf,UAAI,UAAU,IAAI;AAElB,UAAI,aAAa,CAAC;AAElB,UAAIC,YAAW,WAAW;AAE1B,UAAIC,UAAS,WAAW;AAExB,UAAI,aAAaA,QAAO;AAExB,UAAI,uBAAuB,WAAW,KAAM,MAAO;AAEnD,UAAI,UAAU,CAAC;AAEf,UAAIC,cAAa,SAASA,YAAY,KAAM;AAS1C,eAAO,OAAO,QAAQ,cAAc,OAAO,IAAI,aAAa,YAC3D,OAAO,IAAI,SAAS;AAAA,MACtB;AAGD,UAAI,WAAW,SAASC,UAAU,KAAM;AACtC,eAAO,OAAO,QAAQ,QAAQ,IAAI;AAAA,MACnC;AAGD,UAAIC,YAAWN,QAAO;AAIrB,UAAI,4BAA4B;AAAA,QAC/B,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,MACX;AAEA,eAAS,QAAS,MAAM,MAAM,KAAM;AACnC,cAAM,OAAOM;AAEb,YAAIC,IAAG,KACN,SAAS,IAAI,cAAe,QAAS;AAEtC,eAAO,OAAO;AACd,YAAK,MAAO;AACX,eAAMA,MAAK,2BAA4B;AAYtC,kBAAM,KAAMA,EAAE,KAAK,KAAK,gBAAgB,KAAK,aAAcA,EAAE;AAC7D,gBAAK,KAAM;AACV,qBAAO,aAAcA,IAAG,GAAI;AAAA,YAC7B;AAAA,UACD;AAAA,QACD;AACA,YAAI,KAAK,YAAa,MAAO,EAAE,WAAW,YAAa,MAAO;AAAA,MAC/D;AAGD,eAAS,OAAQ,KAAM;AACtB,YAAK,OAAO,MAAO;AAClB,iBAAO,MAAM;AAAA,QACd;AAGA,eAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,aAChD,WAAYL,UAAS,KAAM,GAAI,CAAE,KAAK,WACtC,OAAO;AAAA,MACT;AAOA,UACCM,WAAU,SAGVC,UAAS,SAAU,UAAU,SAAU;AAItC,eAAO,IAAIA,QAAO,GAAG,KAAM,UAAU,OAAQ;AAAA,MAC9C;AAED,MAAAA,QAAO,KAAKA,QAAO,YAAY;AAAA;AAAA,QAG9B,QAAQD;AAAA,QAER,aAAaC;AAAA;AAAA,QAGb,QAAQ;AAAA,QAER,SAAS,WAAW;AACnB,iBAAO,MAAM,KAAM,IAAK;AAAA,QACzB;AAAA;AAAA;AAAA,QAIA,KAAK,SAAU,KAAM;AAGpB,cAAK,OAAO,MAAO;AAClB,mBAAO,MAAM,KAAM,IAAK;AAAA,UACzB;AAGA,iBAAO,MAAM,IAAI,KAAM,MAAM,KAAK,MAAO,IAAI,KAAM,GAAI;AAAA,QACxD;AAAA;AAAA;AAAA,QAIA,WAAW,SAAU,OAAQ;AAG5B,cAAI,MAAMA,QAAO,MAAO,KAAK,YAAY,GAAG,KAAM;AAGlD,cAAI,aAAa;AAGjB,iBAAO;AAAA,QACR;AAAA;AAAA,QAGA,MAAM,SAAU,UAAW;AAC1B,iBAAOA,QAAO,KAAM,MAAM,QAAS;AAAA,QACpC;AAAA,QAEA,KAAK,SAAU,UAAW;AACzB,iBAAO,KAAK,UAAWA,QAAO,IAAK,MAAM,SAAU,MAAMF,IAAI;AAC5D,mBAAO,SAAS,KAAM,MAAMA,IAAG,IAAK;AAAA,UACrC,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,KAAK,UAAW,MAAM,MAAO,MAAM,SAAU,CAAE;AAAA,QACvD;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,KAAK,GAAI,CAAE;AAAA,QACnB;AAAA,QAEA,MAAM,WAAW;AAChB,iBAAO,KAAK,GAAI,EAAG;AAAA,QACpB;AAAA,QAEA,MAAM,WAAW;AAChB,iBAAO,KAAK,UAAWE,QAAO,KAAM,MAAM,SAAU,OAAOF,IAAI;AAC9D,oBAASA,KAAI,KAAM;AAAA,UACpB,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,KAAK,WAAW;AACf,iBAAO,KAAK,UAAWE,QAAO,KAAM,MAAM,SAAU,OAAOF,IAAI;AAC9D,mBAAOA,KAAI;AAAA,UACZ,CAAE,CAAE;AAAA,QACL;AAAA,QAEA,IAAI,SAAUA,IAAI;AACjB,cAAIG,OAAM,KAAK,QACdC,KAAI,CAACJ,MAAMA,KAAI,IAAIG,OAAM;AAC1B,iBAAO,KAAK,UAAWC,MAAK,KAAKA,KAAID,OAAM,CAAE,KAAMC,EAAE,CAAE,IAAI,CAAC,CAAE;AAAA,QAC/D;AAAA,QAEA,KAAK,WAAW;AACf,iBAAO,KAAK,cAAc,KAAK,YAAY;AAAA,QAC5C;AAAA;AAAA;AAAA,QAIA;AAAA,QACA,MAAM,IAAI;AAAA,QACV,QAAQ,IAAI;AAAA,MACb;AAEA,MAAAF,QAAO,SAASA,QAAO,GAAG,SAAS,WAAW;AAC7C,YAAI,SAAS,MAAM,KAAKG,OAAM,aAAa,OAC1CC,UAAS,UAAW,CAAE,KAAK,CAAC,GAC5BN,KAAI,GACJ,SAAS,UAAU,QACnB,OAAO;AAGR,YAAK,OAAOM,YAAW,WAAY;AAClC,iBAAOA;AAGP,UAAAA,UAAS,UAAWN,EAAE,KAAK,CAAC;AAC5B,UAAAA;AAAA,QACD;AAGA,YAAK,OAAOM,YAAW,YAAY,CAACT,YAAYS,OAAO,GAAI;AAC1D,UAAAA,UAAS,CAAC;AAAA,QACX;AAGA,YAAKN,OAAM,QAAS;AACnB,UAAAM,UAAS;AACT,UAAAN;AAAA,QACD;AAEA,eAAQA,KAAI,QAAQA,MAAM;AAGzB,eAAO,UAAU,UAAWA,EAAE,MAAO,MAAO;AAG3C,iBAAM,QAAQ,SAAU;AACvB,cAAAK,QAAO,QAAS,IAAK;AAIrB,kBAAK,SAAS,eAAeC,YAAWD,OAAO;AAC9C;AAAA,cACD;AAGA,kBAAK,QAAQA,UAAUH,QAAO,cAAeG,KAAK,MAC/C,cAAc,MAAM,QAASA,KAAK,KAAQ;AAC5C,sBAAMC,QAAQ,IAAK;AAGnB,oBAAK,eAAe,CAAC,MAAM,QAAS,GAAI,GAAI;AAC3C,0BAAQ,CAAC;AAAA,gBACV,WAAY,CAAC,eAAe,CAACJ,QAAO,cAAe,GAAI,GAAI;AAC1D,0BAAQ,CAAC;AAAA,gBACV,OAAO;AACN,0BAAQ;AAAA,gBACT;AACA,8BAAc;AAGd,gBAAAI,QAAQ,IAAK,IAAIJ,QAAO,OAAQ,MAAM,OAAOG,KAAK;AAAA,cAGnD,WAAYA,UAAS,QAAY;AAChC,gBAAAC,QAAQ,IAAK,IAAID;AAAA,cAClB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,eAAOC;AAAA,MACR;AAEA,MAAAJ,QAAO,OAAQ;AAAA;AAAA,QAGd,SAAS,YAAaD,WAAU,KAAK,OAAO,GAAI,QAAS,OAAO,EAAG;AAAA;AAAA,QAGnE,SAAS;AAAA,QAET,OAAO,SAAU,KAAM;AACtB,gBAAM,IAAI,MAAO,GAAI;AAAA,QACtB;AAAA,QAEA,MAAM,WAAW;AAAA,QAAC;AAAA,QAElB,eAAe,SAAU,KAAM;AAC9B,cAAI,OAAO;AAIX,cAAK,CAAC,OAAON,UAAS,KAAM,GAAI,MAAM,mBAAoB;AACzD,mBAAO;AAAA,UACR;AAEA,kBAAQ,SAAU,GAAI;AAGtB,cAAK,CAAC,OAAQ;AACb,mBAAO;AAAA,UACR;AAGA,iBAAOC,QAAO,KAAM,OAAO,aAAc,KAAK,MAAM;AACpD,iBAAO,OAAO,SAAS,cAAc,WAAW,KAAM,IAAK,MAAM;AAAA,QAClE;AAAA,QAEA,eAAe,SAAU,KAAM;AAC9B,cAAI;AAEJ,eAAM,QAAQ,KAAM;AACnB,mBAAO;AAAA,UACR;AACA,iBAAO;AAAA,QACR;AAAA;AAAA;AAAA,QAIA,YAAY,SAAU,MAAM,SAAS,KAAM;AAC1C,kBAAS,MAAM,EAAE,OAAO,WAAW,QAAQ,MAAM,GAAG,GAAI;AAAA,QACzD;AAAA,QAEA,MAAM,SAAU,KAAK,UAAW;AAC/B,cAAI,QAAQI,KAAI;AAEhB,cAAK,YAAa,GAAI,GAAI;AACzB,qBAAS,IAAI;AACb,mBAAQA,KAAI,QAAQA,MAAM;AACzB,kBAAK,SAAS,KAAM,IAAKA,EAAE,GAAGA,IAAG,IAAKA,EAAE,CAAE,MAAM,OAAQ;AACvD;AAAA,cACD;AAAA,YACD;AAAA,UACD,OAAO;AACN,iBAAMA,MAAK,KAAM;AAChB,kBAAK,SAAS,KAAM,IAAKA,EAAE,GAAGA,IAAG,IAAKA,EAAE,CAAE,MAAM,OAAQ;AACvD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA;AAAA,QAGA,WAAW,SAAUO,MAAK,SAAU;AACnC,cAAI,MAAM,WAAW,CAAC;AAEtB,cAAKA,QAAO,MAAO;AAClB,gBAAK,YAAa,OAAQA,IAAI,CAAE,GAAI;AACnC,cAAAL,QAAO;AAAA,gBAAO;AAAA,gBACb,OAAOK,SAAQ,WACd,CAAEA,IAAI,IAAIA;AAAA,cACZ;AAAA,YACD,OAAO;AACN,mBAAK,KAAM,KAAKA,IAAI;AAAA,YACrB;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAU,MAAMA,MAAKP,IAAI;AACjC,iBAAOO,QAAO,OAAO,KAAK,QAAQ,KAAMA,MAAK,MAAMP,EAAE;AAAA,QACtD;AAAA;AAAA;AAAA,QAIA,OAAO,SAAU,OAAO,QAAS;AAChC,cAAIG,OAAM,CAAC,OAAO,QACjBC,KAAI,GACJJ,KAAI,MAAM;AAEX,iBAAQI,KAAID,MAAKC,MAAM;AACtB,kBAAOJ,IAAI,IAAI,OAAQI,EAAE;AAAA,UAC1B;AAEA,gBAAM,SAASJ;AAEf,iBAAO;AAAA,QACR;AAAA,QAEA,MAAM,SAAU,OAAO,UAAU,QAAS;AACzC,cAAI,iBACHQ,WAAU,CAAC,GACXR,KAAI,GACJ,SAAS,MAAM,QACf,iBAAiB,CAAC;AAInB,iBAAQA,KAAI,QAAQA,MAAM;AACzB,8BAAkB,CAAC,SAAU,MAAOA,EAAE,GAAGA,EAAE;AAC3C,gBAAK,oBAAoB,gBAAiB;AACzC,cAAAQ,SAAQ,KAAM,MAAOR,EAAE,CAAE;AAAA,YAC1B;AAAA,UACD;AAEA,iBAAOQ;AAAA,QACR;AAAA;AAAA,QAGA,KAAK,SAAU,OAAO,UAAU,KAAM;AACrC,cAAI,QAAQ,OACXR,KAAI,GACJ,MAAM,CAAC;AAGR,cAAK,YAAa,KAAM,GAAI;AAC3B,qBAAS,MAAM;AACf,mBAAQA,KAAI,QAAQA,MAAM;AACzB,sBAAQ,SAAU,MAAOA,EAAE,GAAGA,IAAG,GAAI;AAErC,kBAAK,SAAS,MAAO;AACpB,oBAAI,KAAM,KAAM;AAAA,cACjB;AAAA,YACD;AAAA,UAGD,OAAO;AACN,iBAAMA,MAAK,OAAQ;AAClB,sBAAQ,SAAU,MAAOA,EAAE,GAAGA,IAAG,GAAI;AAErC,kBAAK,SAAS,MAAO;AACpB,oBAAI,KAAM,KAAM;AAAA,cACjB;AAAA,YACD;AAAA,UACD;AAGA,iBAAO,KAAM,GAAI;AAAA,QAClB;AAAA;AAAA,QAGA,MAAM;AAAA;AAAA;AAAA,QAIN;AAAA,MACD,CAAE;AAEF,UAAK,OAAO,WAAW,YAAa;AACnC,QAAAE,QAAO,GAAI,OAAO,QAAS,IAAI,IAAK,OAAO,QAAS;AAAA,MACrD;AAGA,MAAAA,QAAO;AAAA,QAAM,uEAAuE,MAAO,GAAI;AAAA,QAC9F,SAAU,IAAI,MAAO;AACpB,qBAAY,aAAa,OAAO,GAAI,IAAI,KAAK,YAAY;AAAA,QAC1D;AAAA,MAAE;AAEH,eAAS,YAAa,KAAM;AAM3B,YAAI,SAAS,CAAC,CAAC,OAAO,YAAY,OAAO,IAAI,QAC5CO,QAAO,OAAQ,GAAI;AAEpB,YAAKZ,YAAY,GAAI,KAAK,SAAU,GAAI,GAAI;AAC3C,iBAAO;AAAA,QACR;AAEA,eAAOY,UAAS,WAAW,WAAW,KACrC,OAAO,WAAW,YAAY,SAAS,KAAO,SAAS,KAAO;AAAA,MAChE;AACA,UAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAWF,SAAUhB,SAAS;AACrB,cAAIO,IACHU,UACA,MACA,SACA,OACA,UACA,SACA,QACA,kBACA,WACA,cAGA,aACAX,WACA,SACA,gBACA,WACA,eACAS,UACA,UAGA,UAAU,WAAW,IAAI,oBAAI,KAAK,GAClC,eAAef,QAAO,UACtB,UAAU,GACV,OAAO,GACP,aAAa,YAAY,GACzB,aAAa,YAAY,GACzB,gBAAgB,YAAY,GAC5B,yBAAyB,YAAY,GACrC,YAAY,SAAUkB,IAAGC,IAAI;AAC5B,gBAAKD,OAAMC,IAAI;AACd,6BAAe;AAAA,YAChB;AACA,mBAAO;AAAA,UACR,GAGAhB,UAAW,CAAC,EAAI,gBAChBW,OAAM,CAAC,GACP,MAAMA,KAAI,KACV,aAAaA,KAAI,MACjBM,QAAON,KAAI,MACXO,SAAQP,KAAI,OAIZQ,WAAU,SAAU,MAAM,MAAO;AAChC,gBAAIf,KAAI,GACPG,OAAM,KAAK;AACZ,mBAAQH,KAAIG,MAAKH,MAAM;AACtB,kBAAK,KAAMA,EAAE,MAAM,MAAO;AACzB,uBAAOA;AAAA,cACR;AAAA,YACD;AACA,mBAAO;AAAA,UACR,GAEA,WAAW,8HAMX,aAAa,uBAGb,aAAa,4BAA4B,aACxC,2CAGD,aAAa,QAAQ,aAAa,OAAO,aAAa,SAAS;AAAA,UAG9D,kBAAkB;AAAA;AAAA,UAIlB,0DAA6D,aAAa,SAC1E,aAAa,QAEd,UAAU,OAAO,aAAa,uFAOA,aAAa,gBAO3C,cAAc,IAAI,OAAQ,aAAa,KAAK,GAAI,GAChDgB,SAAQ,IAAI,OAAQ,MAAM,aAAa,gCACtC,aAAa,MAAM,GAAI,GAExB,SAAS,IAAI,OAAQ,MAAM,aAAa,OAAO,aAAa,GAAI,GAChE,eAAe,IAAI,OAAQ,MAAM,aAAa,aAAa,aAAa,MAAM,aAC7E,GAAI,GACL,WAAW,IAAI,OAAQ,aAAa,IAAK,GAEzC,UAAU,IAAI,OAAQ,OAAQ,GAC9B,cAAc,IAAI,OAAQ,MAAM,aAAa,GAAI,GAEjD,YAAY;AAAA,YACX,MAAM,IAAI,OAAQ,QAAQ,aAAa,GAAI;AAAA,YAC3C,SAAS,IAAI,OAAQ,UAAU,aAAa,GAAI;AAAA,YAChD,OAAO,IAAI,OAAQ,OAAO,aAAa,OAAQ;AAAA,YAC/C,QAAQ,IAAI,OAAQ,MAAM,UAAW;AAAA,YACrC,UAAU,IAAI,OAAQ,MAAM,OAAQ;AAAA,YACpC,SAAS,IAAI,OAAQ,2DACpB,aAAa,iCAAiC,aAAa,gBAC3D,aAAa,eAAe,aAAa,UAAU,GAAI;AAAA,YACxD,QAAQ,IAAI,OAAQ,SAAS,WAAW,MAAM,GAAI;AAAA;AAAA;AAAA,YAIlD,gBAAgB,IAAI,OAAQ,MAAM,aACjC,qDAAqD,aACrD,qBAAqB,aAAa,oBAAoB,GAAI;AAAA,UAC5D,GAEAC,SAAQ,UACR,UAAU,uCACV,UAAU,UAEV,UAAU,0BAGVC,cAAa,oCAEb,WAAW,QAIX,YAAY,IAAI,OAAQ,yBAAyB,aAAa,wBAAwB,GAAI,GAC1F,YAAY,SAAU,QAAQ,QAAS;AACtC,gBAAI,OAAO,OAAO,OAAO,MAAO,CAAE,IAAI;AAEtC,mBAAO;AAAA;AAAA,cAGN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMA,OAAO,IACN,OAAO,aAAc,OAAO,KAAQ,IACpC,OAAO,aAAc,QAAQ,KAAK,OAAQ,OAAO,OAAQ,KAAO;AAAA;AAAA,UACnE,GAIA,aAAa,uDACb,aAAa,SAAU,IAAI,aAAc;AACxC,gBAAK,aAAc;AAGlB,kBAAK,OAAO,MAAO;AAClB,uBAAO;AAAA,cACR;AAGA,qBAAO,GAAG,MAAO,GAAG,EAAG,IAAI,OAC1B,GAAG,WAAY,GAAG,SAAS,CAAE,EAAE,SAAU,EAAG,IAAI;AAAA,YAClD;AAGA,mBAAO,OAAO;AAAA,UACf,GAMA,gBAAgB,WAAW;AAC1B,wBAAY;AAAA,UACb,GAEA,qBAAqB;AAAA,YACpB,SAAU,MAAO;AAChB,qBAAO,KAAK,aAAa,QAAQ,KAAK,SAAS,YAAY,MAAM;AAAA,YAClE;AAAA,YACA,EAAE,KAAK,cAAc,MAAM,SAAS;AAAA,UACrC;AAGD,cAAI;AACH,YAAAL,MAAK;AAAA,cACFN,OAAMO,OAAM,KAAM,aAAa,UAAW;AAAA,cAC5C,aAAa;AAAA,YACd;AAKA,YAAAP,KAAK,aAAa,WAAW,MAAO,EAAE;AAAA,UACvC,SAAUY,IAAI;AACb,YAAAN,QAAO;AAAA,cAAE,OAAON,KAAI;AAAA;AAAA,gBAGnB,SAAUD,SAAQ,KAAM;AACvB,6BAAW,MAAOA,SAAQQ,OAAM,KAAM,GAAI,CAAE;AAAA,gBAC7C;AAAA;AAAA;AAAA;AAAA,gBAIA,SAAUR,SAAQ,KAAM;AACvB,sBAAIF,KAAIE,QAAO,QACdN,KAAI;AAGL,yBAAUM,QAAQF,IAAI,IAAI,IAAKJ,IAAI,GAAM;AAAA,kBAAC;AAC1C,kBAAAM,QAAO,SAASF,KAAI;AAAA,gBACrB;AAAA;AAAA,YACD;AAAA,UACD;AAEA,mBAASgB,QAAQ,UAAU,SAAS,SAASC,OAAO;AACnD,gBAAIC,IAAGtB,IAAG,MAAM,KAAK,OAAOuB,SAAQ,aACnC,aAAa,WAAW,QAAQ,eAGhC,WAAW,UAAU,QAAQ,WAAW;AAEzC,sBAAU,WAAW,CAAC;AAGtB,gBAAK,OAAO,aAAa,YAAY,CAAC,YACrC,aAAa,KAAK,aAAa,KAAK,aAAa,IAAK;AAEtD,qBAAO;AAAA,YACR;AAGA,gBAAK,CAACF,OAAO;AACZ,0BAAa,OAAQ;AACrB,wBAAU,WAAWtB;AAErB,kBAAK,gBAAiB;AAIrB,oBAAK,aAAa,OAAQ,QAAQmB,YAAW,KAAM,QAAS,IAAM;AAGjE,sBAAOI,KAAI,MAAO,CAAE,GAAM;AAGzB,wBAAK,aAAa,GAAI;AACrB,0BAAO,OAAO,QAAQ,eAAgBA,EAAE,GAAM;AAK7C,4BAAK,KAAK,OAAOA,IAAI;AACpB,kCAAQ,KAAM,IAAK;AACnB,iCAAO;AAAA,wBACR;AAAA,sBACD,OAAO;AACN,+BAAO;AAAA,sBACR;AAAA,oBAGD,OAAO;AAKN,0BAAK,eAAgB,OAAO,WAAW,eAAgBA,EAAE,MACxD,SAAU,SAAS,IAAK,KACxB,KAAK,OAAOA,IAAI;AAEhB,gCAAQ,KAAM,IAAK;AACnB,+BAAO;AAAA,sBACR;AAAA,oBACD;AAAA,kBAGD,WAAY,MAAO,CAAE,GAAI;AACxB,oBAAAT,MAAK,MAAO,SAAS,QAAQ,qBAAsB,QAAS,CAAE;AAC9D,2BAAO;AAAA,kBAGR,YAAcS,KAAI,MAAO,CAAE,MAAOZ,SAAQ,0BACzC,QAAQ,wBAAyB;AAEjC,oBAAAG,MAAK,MAAO,SAAS,QAAQ,uBAAwBS,EAAE,CAAE;AACzD,2BAAO;AAAA,kBACR;AAAA,gBACD;AAGA,oBAAKZ,SAAQ,OACZ,CAAC,uBAAwB,WAAW,GAAI,MACtC,CAAC,aAAa,CAAC,UAAU,KAAM,QAAS;AAAA;AAAA,iBAIxC,aAAa,KAAK,QAAQ,SAAS,YAAY,MAAM,WAAa;AAEpE,gCAAc;AACd,+BAAa;AASb,sBAAK,aAAa,MACf,SAAS,KAAM,QAAS,KAAK,aAAa,KAAM,QAAS,IAAM;AAGjE,iCAAa,SAAS,KAAM,QAAS,KAAK,YAAa,QAAQ,UAAW,KACzE;AAID,wBAAK,eAAe,WAAW,CAACA,SAAQ,OAAQ;AAG/C,0BAAO,MAAM,QAAQ,aAAc,IAAK,GAAM;AAC7C,8BAAM,IAAI,QAAS,YAAY,UAAW;AAAA,sBAC3C,OAAO;AACN,gCAAQ,aAAc,MAAQ,MAAM,OAAU;AAAA,sBAC/C;AAAA,oBACD;AAGA,oBAAAa,UAAS,SAAU,QAAS;AAC5B,oBAAAvB,KAAIuB,QAAO;AACX,2BAAQvB,MAAM;AACb,sBAAAuB,QAAQvB,EAAE,KAAM,MAAM,MAAM,MAAM,YAAa,MAC9C,WAAYuB,QAAQvB,EAAE,CAAE;AAAA,oBAC1B;AACA,kCAAcuB,QAAO,KAAM,GAAI;AAAA,kBAChC;AAEA,sBAAI;AACH,oBAAAV,MAAK;AAAA,sBAAO;AAAA,sBACX,WAAW,iBAAkB,WAAY;AAAA,oBAC1C;AACA,2BAAO;AAAA,kBACR,SAAU,UAAW;AACpB,2CAAwB,UAAU,IAAK;AAAA,kBACxC,UAAE;AACD,wBAAK,QAAQ,SAAU;AACtB,8BAAQ,gBAAiB,IAAK;AAAA,oBAC/B;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAGA,mBAAO,OAAQ,SAAS,QAASG,QAAO,IAAK,GAAG,SAAS,SAASK,KAAK;AAAA,UACxE;AAQA,mBAAS,cAAc;AACtB,gBAAI,OAAO,CAAC;AAEZ,qBAAS,MAAO,KAAK,OAAQ;AAG5B,kBAAK,KAAK,KAAM,MAAM,GAAI,IAAI,KAAK,aAAc;AAGhD,uBAAO,MAAO,KAAK,MAAM,CAAE;AAAA,cAC5B;AACA,qBAAS,MAAO,MAAM,GAAI,IAAI;AAAA,YAC/B;AACA,mBAAO;AAAA,UACR;AAMA,mBAAS,aAAc,IAAK;AAC3B,eAAI,OAAQ,IAAI;AAChB,mBAAO;AAAA,UACR;AAMA,mBAAS,OAAQ,IAAK;AACrB,gBAAI,KAAKtB,UAAS,cAAe,UAAW;AAE5C,gBAAI;AACH,qBAAO,CAAC,CAAC,GAAI,EAAG;AAAA,YACjB,SAAUoB,IAAI;AACb,qBAAO;AAAA,YACR,UAAE;AAGD,kBAAK,GAAG,YAAa;AACpB,mBAAG,WAAW,YAAa,EAAG;AAAA,cAC/B;AAGA,mBAAK;AAAA,YACN;AAAA,UACD;AAOA,mBAAS,UAAWK,QAAO,SAAU;AACpC,gBAAIjB,OAAMiB,OAAM,MAAO,GAAI,GAC1BxB,KAAIO,KAAI;AAET,mBAAQP,MAAM;AACb,mBAAK,WAAYO,KAAKP,EAAE,CAAE,IAAI;AAAA,YAC/B;AAAA,UACD;AAQA,mBAAS,aAAcW,IAAGC,IAAI;AAC7B,gBAAI,MAAMA,MAAKD,IACd,OAAO,OAAOA,GAAE,aAAa,KAAKC,GAAE,aAAa,KAChDD,GAAE,cAAcC,GAAE;AAGpB,gBAAK,MAAO;AACX,qBAAO;AAAA,YACR;AAGA,gBAAK,KAAM;AACV,qBAAU,MAAM,IAAI,aAAgB;AACnC,oBAAK,QAAQA,IAAI;AAChB,yBAAO;AAAA,gBACR;AAAA,cACD;AAAA,YACD;AAEA,mBAAOD,KAAI,IAAI;AAAA,UAChB;AAMA,mBAAS,kBAAmBF,OAAO;AAClC,mBAAO,SAAU,MAAO;AACvB,kBAAI,OAAO,KAAK,SAAS,YAAY;AACrC,qBAAO,SAAS,WAAW,KAAK,SAASA;AAAA,YAC1C;AAAA,UACD;AAMA,mBAAS,mBAAoBA,OAAO;AACnC,mBAAO,SAAU,MAAO;AACvB,kBAAI,OAAO,KAAK,SAAS,YAAY;AACrC,sBAAS,SAAS,WAAW,SAAS,aAAc,KAAK,SAASA;AAAA,YACnE;AAAA,UACD;AAMA,mBAAS,qBAAsB,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,oBACrC,OAAO;AACN,6BAAO,KAAK,aAAa;AAAA,oBAC1B;AAAA,kBACD;AAIA,yBAAO,KAAK,eAAe;AAAA;AAAA,kBAI1B,KAAK,eAAe,CAAC,YACrB,mBAAoB,IAAK,MAAM;AAAA,gBACjC;AAEA,uBAAO,KAAK,aAAa;AAAA,cAK1B,WAAY,WAAW,MAAO;AAC7B,uBAAO,KAAK,aAAa;AAAA,cAC1B;AAGA,qBAAO;AAAA,YACR;AAAA,UACD;AAMA,mBAAS,uBAAwB,IAAK;AACrC,mBAAO,aAAc,SAAU,UAAW;AACzC,yBAAW,CAAC;AACZ,qBAAO,aAAc,SAAUY,OAAMb,UAAU;AAC9C,oBAAIJ,IACH,eAAe,GAAI,CAAC,GAAGiB,MAAK,QAAQ,QAAS,GAC7CrB,KAAI,aAAa;AAGlB,uBAAQA,MAAM;AACb,sBAAKqB,MAAQjB,KAAI,aAAcJ,EAAE,CAAI,GAAI;AACxC,oBAAAqB,MAAMjB,EAAE,IAAI,EAAGI,SAASJ,EAAE,IAAIiB,MAAMjB,EAAE;AAAA,kBACvC;AAAA,gBACD;AAAA,cACD,CAAE;AAAA,YACH,CAAE;AAAA,UACH;AAOA,mBAAS,YAAa,SAAU;AAC/B,mBAAO,WAAW,OAAO,QAAQ,yBAAyB,eAAe;AAAA,UAC1E;AAGA,UAAAM,WAAUU,QAAO,UAAU,CAAC;AAO5B,kBAAQA,QAAO,QAAQ,SAAU,MAAO;AACvC,gBAAI,YAAY,QAAQ,KAAK,cAC5BK,WAAU,SAAU,KAAK,iBAAiB,MAAO;AAKlD,mBAAO,CAACR,OAAM,KAAM,aAAaQ,YAAWA,SAAQ,YAAY,MAAO;AAAA,UACxE;AAOA,wBAAcL,QAAO,cAAc,SAAU,MAAO;AACnD,gBAAI,YAAY,WACf,MAAM,OAAO,KAAK,iBAAiB,OAAO;AAO3C,gBAAK,OAAOrB,aAAY,IAAI,aAAa,KAAK,CAAC,IAAI,iBAAkB;AACpE,qBAAOA;AAAA,YACR;AAGA,YAAAA,YAAW;AACX,sBAAUA,UAAS;AACnB,6BAAiB,CAAC,MAAOA,SAAS;AAQlC,gBAAK,gBAAgBA,cAClB,YAAYA,UAAS,gBAAiB,UAAU,QAAQ,WAAY;AAGtE,kBAAK,UAAU,kBAAmB;AACjC,0BAAU,iBAAkB,UAAU,eAAe,KAAM;AAAA,cAG5D,WAAY,UAAU,aAAc;AACnC,0BAAU,YAAa,YAAY,aAAc;AAAA,cAClD;AAAA,YACD;AAOA,YAAAW,SAAQ,QAAQ,OAAQ,SAAU,IAAK;AACtC,sBAAQ,YAAa,EAAG,EAAE,YAAaX,UAAS,cAAe,KAAM,CAAE;AACvE,qBAAO,OAAO,GAAG,qBAAqB,eACrC,CAAC,GAAG,iBAAkB,qBAAsB,EAAE;AAAA,YAChD,CAAE;AAQF,YAAAW,SAAQ,aAAa,OAAQ,SAAU,IAAK;AAC3C,iBAAG,YAAY;AACf,qBAAO,CAAC,GAAG,aAAc,WAAY;AAAA,YACtC,CAAE;AAMF,YAAAA,SAAQ,uBAAuB,OAAQ,SAAU,IAAK;AACrD,iBAAG,YAAaX,UAAS,cAAe,EAAG,CAAE;AAC7C,qBAAO,CAAC,GAAG,qBAAsB,GAAI,EAAE;AAAA,YACxC,CAAE;AAGF,YAAAW,SAAQ,yBAAyB,QAAQ,KAAMX,UAAS,sBAAuB;AAM/E,YAAAW,SAAQ,UAAU,OAAQ,SAAU,IAAK;AACxC,sBAAQ,YAAa,EAAG,EAAE,KAAK;AAC/B,qBAAO,CAACX,UAAS,qBAAqB,CAACA,UAAS,kBAAmB,OAAQ,EAAE;AAAA,YAC9E,CAAE;AAGF,gBAAKW,SAAQ,SAAU;AACtB,mBAAK,OAAQ,IAAK,IAAI,SAAUgB,KAAK;AACpC,oBAAI,SAASA,IAAG,QAAS,WAAW,SAAU;AAC9C,uBAAO,SAAU,MAAO;AACvB,yBAAO,KAAK,aAAc,IAAK,MAAM;AAAA,gBACtC;AAAA,cACD;AACA,mBAAK,KAAM,IAAK,IAAI,SAAUA,KAAI,SAAU;AAC3C,oBAAK,OAAO,QAAQ,mBAAmB,eAAe,gBAAiB;AACtE,sBAAI,OAAO,QAAQ,eAAgBA,GAAG;AACtC,yBAAO,OAAO,CAAE,IAAK,IAAI,CAAC;AAAA,gBAC3B;AAAA,cACD;AAAA,YACD,OAAO;AACN,mBAAK,OAAQ,IAAK,IAAK,SAAUA,KAAK;AACrC,oBAAI,SAASA,IAAG,QAAS,WAAW,SAAU;AAC9C,uBAAO,SAAU,MAAO;AACvB,sBAAIC,QAAO,OAAO,KAAK,qBAAqB,eAC3C,KAAK,iBAAkB,IAAK;AAC7B,yBAAOA,SAAQA,MAAK,UAAU;AAAA,gBAC/B;AAAA,cACD;AAIA,mBAAK,KAAM,IAAK,IAAI,SAAUD,KAAI,SAAU;AAC3C,oBAAK,OAAO,QAAQ,mBAAmB,eAAe,gBAAiB;AACtE,sBAAIC,OAAM3B,IAAG,OACZ,OAAO,QAAQ,eAAgB0B,GAAG;AAEnC,sBAAK,MAAO;AAGX,oBAAAC,QAAO,KAAK,iBAAkB,IAAK;AACnC,wBAAKA,SAAQA,MAAK,UAAUD,KAAK;AAChC,6BAAO,CAAE,IAAK;AAAA,oBACf;AAGA,4BAAQ,QAAQ,kBAAmBA,GAAG;AACtC,oBAAA1B,KAAI;AACJ,2BAAU,OAAO,MAAOA,IAAI,GAAM;AACjC,sBAAA2B,QAAO,KAAK,iBAAkB,IAAK;AACnC,0BAAKA,SAAQA,MAAK,UAAUD,KAAK;AAChC,+BAAO,CAAE,IAAK;AAAA,sBACf;AAAA,oBACD;AAAA,kBACD;AAEA,yBAAO,CAAC;AAAA,gBACT;AAAA,cACD;AAAA,YACD;AAGA,iBAAK,KAAM,KAAM,IAAIhB,SAAQ,uBAC5B,SAAU,KAAK,SAAU;AACxB,kBAAK,OAAO,QAAQ,yBAAyB,aAAc;AAC1D,uBAAO,QAAQ,qBAAsB,GAAI;AAAA,cAG1C,WAAYA,SAAQ,KAAM;AACzB,uBAAO,QAAQ,iBAAkB,GAAI;AAAA,cACtC;AAAA,YACD,IAEA,SAAU,KAAK,SAAU;AACxB,kBAAI,MACH,MAAM,CAAC,GACPV,KAAI,GAGJ,UAAU,QAAQ,qBAAsB,GAAI;AAG7C,kBAAK,QAAQ,KAAM;AAClB,uBAAU,OAAO,QAASA,IAAI,GAAM;AACnC,sBAAK,KAAK,aAAa,GAAI;AAC1B,wBAAI,KAAM,IAAK;AAAA,kBAChB;AAAA,gBACD;AAEA,uBAAO;AAAA,cACR;AACA,qBAAO;AAAA,YACR;AAGD,iBAAK,KAAM,OAAQ,IAAIU,SAAQ,0BAA0B,SAAU,WAAW,SAAU;AACvF,kBAAK,OAAO,QAAQ,2BAA2B,eAAe,gBAAiB;AAC9E,uBAAO,QAAQ,uBAAwB,SAAU;AAAA,cAClD;AAAA,YACD;AAQA,4BAAgB,CAAC;AAOjB,wBAAY,CAAC;AAEb,gBAAOA,SAAQ,MAAM,QAAQ,KAAMX,UAAS,gBAAiB,GAAM;AAIlE,qBAAQ,SAAU,IAAK;AAEtB,oBAAI;AAOJ,wBAAQ,YAAa,EAAG,EAAE,YAAY,YAAY,UAAU,uBAC1C,UAAU;AAO5B,oBAAK,GAAG,iBAAkB,sBAAuB,EAAE,QAAS;AAC3D,4BAAU,KAAM,WAAW,aAAa,YAAe;AAAA,gBACxD;AAIA,oBAAK,CAAC,GAAG,iBAAkB,YAAa,EAAE,QAAS;AAClD,4BAAU,KAAM,QAAQ,aAAa,eAAe,WAAW,GAAI;AAAA,gBACpE;AAGA,oBAAK,CAAC,GAAG,iBAAkB,UAAU,UAAU,IAAK,EAAE,QAAS;AAC9D,4BAAU,KAAM,IAAK;AAAA,gBACtB;AAOA,wBAAQA,UAAS,cAAe,OAAQ;AACxC,sBAAM,aAAc,QAAQ,EAAG;AAC/B,mBAAG,YAAa,KAAM;AACtB,oBAAK,CAAC,GAAG,iBAAkB,WAAY,EAAE,QAAS;AACjD,4BAAU,KAAM,QAAQ,aAAa,UAAU,aAAa,OAC3D,aAAa,YAAe;AAAA,gBAC9B;AAKA,oBAAK,CAAC,GAAG,iBAAkB,UAAW,EAAE,QAAS;AAChD,4BAAU,KAAM,UAAW;AAAA,gBAC5B;AAKA,oBAAK,CAAC,GAAG,iBAAkB,OAAO,UAAU,IAAK,EAAE,QAAS;AAC3D,4BAAU,KAAM,UAAW;AAAA,gBAC5B;AAIA,mBAAG,iBAAkB,MAAO;AAC5B,0BAAU,KAAM,aAAc;AAAA,cAC/B,CAAE;AAEF,qBAAQ,SAAU,IAAK;AACtB,mBAAG,YAAY;AAKf,oBAAI,QAAQA,UAAS,cAAe,OAAQ;AAC5C,sBAAM,aAAc,QAAQ,QAAS;AACrC,mBAAG,YAAa,KAAM,EAAE,aAAc,QAAQ,GAAI;AAIlD,oBAAK,GAAG,iBAAkB,UAAW,EAAE,QAAS;AAC/C,4BAAU,KAAM,SAAS,aAAa,aAAc;AAAA,gBACrD;AAIA,oBAAK,GAAG,iBAAkB,UAAW,EAAE,WAAW,GAAI;AACrD,4BAAU,KAAM,YAAY,WAAY;AAAA,gBACzC;AAIA,wBAAQ,YAAa,EAAG,EAAE,WAAW;AACrC,oBAAK,GAAG,iBAAkB,WAAY,EAAE,WAAW,GAAI;AACtD,4BAAU,KAAM,YAAY,WAAY;AAAA,gBACzC;AAIA,mBAAG,iBAAkB,MAAO;AAC5B,0BAAU,KAAM,MAAO;AAAA,cACxB,CAAE;AAAA,YACH;AAEA,gBAAOW,SAAQ,kBAAkB,QAAQ,KAAQF,WAAU,QAAQ,WAClE,QAAQ,yBACR,QAAQ,sBACR,QAAQ,oBACR,QAAQ,iBAAoB,GAAM;AAElC,qBAAQ,SAAU,IAAK;AAItB,gBAAAE,SAAQ,oBAAoBF,SAAQ,KAAM,IAAI,GAAI;AAIlD,gBAAAA,SAAQ,KAAM,IAAI,WAAY;AAC9B,8BAAc,KAAM,MAAM,OAAQ;AAAA,cACnC,CAAE;AAAA,YACH;AAEA,wBAAY,UAAU,UAAU,IAAI,OAAQ,UAAU,KAAM,GAAI,CAAE;AAClE,4BAAgB,cAAc,UAAU,IAAI,OAAQ,cAAc,KAAM,GAAI,CAAE;AAI9E,yBAAa,QAAQ,KAAM,QAAQ,uBAAwB;AAK3D,uBAAW,cAAc,QAAQ,KAAM,QAAQ,QAAS,IACvD,SAAUG,IAAGC,IAAI;AAChB,kBAAI,QAAQD,GAAE,aAAa,IAAIA,GAAE,kBAAkBA,IAClD,MAAMC,MAAKA,GAAE;AACd,qBAAOD,OAAM,OAAO,CAAC,EAAG,OAAO,IAAI,aAAa,MAC/C,MAAM,WACL,MAAM,SAAU,GAAI,IACpBA,GAAE,2BAA2BA,GAAE,wBAAyB,GAAI,IAAI;AAAA,YAEnE,IACA,SAAUA,IAAGC,IAAI;AAChB,kBAAKA,IAAI;AACR,uBAAUA,KAAIA,GAAE,YAAe;AAC9B,sBAAKA,OAAMD,IAAI;AACd,2BAAO;AAAA,kBACR;AAAA,gBACD;AAAA,cACD;AACA,qBAAO;AAAA,YACR;AAMD,wBAAY,aACZ,SAAUA,IAAGC,IAAI;AAGhB,kBAAKD,OAAMC,IAAI;AACd,+BAAe;AACf,uBAAO;AAAA,cACR;AAGA,kBAAI,UAAU,CAACD,GAAE,0BAA0B,CAACC,GAAE;AAC9C,kBAAK,SAAU;AACd,uBAAO;AAAA,cACR;AAOA,yBAAYD,GAAE,iBAAiBA,QAASC,GAAE,iBAAiBA,MAC1DD,GAAE,wBAAyBC,EAAE;AAAA;AAAA,gBAG7B;AAAA;AAGD,kBAAK,UAAU,KACZ,CAACF,SAAQ,gBAAgBE,GAAE,wBAAyBD,EAAE,MAAM,SAAY;AAO1E,oBAAKA,MAAKZ,aAAYY,GAAE,iBAAiB,gBACxC,SAAU,cAAcA,EAAE,GAAI;AAC9B,yBAAO;AAAA,gBACR;AAMA,oBAAKC,MAAKb,aAAYa,GAAE,iBAAiB,gBACxC,SAAU,cAAcA,EAAE,GAAI;AAC9B,yBAAO;AAAA,gBACR;AAGA,uBAAO,YACJG,SAAS,WAAWJ,EAAE,IAAII,SAAS,WAAWH,EAAE,IAClD;AAAA,cACF;AAEA,qBAAO,UAAU,IAAI,KAAK;AAAA,YAC3B,IACA,SAAUD,IAAGC,IAAI;AAGhB,kBAAKD,OAAMC,IAAI;AACd,+BAAe;AACf,uBAAO;AAAA,cACR;AAEA,kBAAI,KACHZ,KAAI,GACJ,MAAMW,GAAE,YACR,MAAMC,GAAE,YACR,KAAK,CAAED,EAAE,GACT,KAAK,CAAEC,EAAE;AAGV,kBAAK,CAAC,OAAO,CAAC,KAAM;AAMnB,uBAAOD,MAAKZ,YAAW,KACtBa,MAAKb,YAAW;AAAA;AAAA,kBAEhB,MAAM,KACN,MAAM,IACN,YACEgB,SAAS,WAAWJ,EAAE,IAAII,SAAS,WAAWH,EAAE,IAClD;AAAA;AAAA,cAGF,WAAY,QAAQ,KAAM;AACzB,uBAAO,aAAcD,IAAGC,EAAE;AAAA,cAC3B;AAGA,oBAAMD;AACN,qBAAU,MAAM,IAAI,YAAe;AAClC,mBAAG,QAAS,GAAI;AAAA,cACjB;AACA,oBAAMC;AACN,qBAAU,MAAM,IAAI,YAAe;AAClC,mBAAG,QAAS,GAAI;AAAA,cACjB;AAGA,qBAAQ,GAAIZ,EAAE,MAAM,GAAIA,EAAE,GAAI;AAC7B,gBAAAA;AAAA,cACD;AAEA,qBAAOA;AAAA;AAAA,gBAGN,aAAc,GAAIA,EAAE,GAAG,GAAIA,EAAE,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAO/B,GAAIA,EAAE,KAAK,eAAe,KAC1B,GAAIA,EAAE,KAAK,eAAe;AAAA;AAAA,kBAE1B;AAAA;AAAA;AAAA,YACF;AAEA,mBAAOD;AAAA,UACR;AAEA,UAAAqB,QAAO,UAAU,SAAU,MAAM,UAAW;AAC3C,mBAAOA,QAAQ,MAAM,MAAM,MAAM,QAAS;AAAA,UAC3C;AAEA,UAAAA,QAAO,kBAAkB,SAAU,MAAM,MAAO;AAC/C,wBAAa,IAAK;AAElB,gBAAKV,SAAQ,mBAAmB,kBAC/B,CAAC,uBAAwB,OAAO,GAAI,MAClC,CAAC,iBAAiB,CAAC,cAAc,KAAM,IAAK,OAC5C,CAAC,aAAiB,CAAC,UAAU,KAAM,IAAK,IAAM;AAEhD,kBAAI;AACH,oBAAI,MAAMF,SAAQ,KAAM,MAAM,IAAK;AAGnC,oBAAK,OAAOE,SAAQ;AAAA;AAAA,gBAInB,KAAK,YAAY,KAAK,SAAS,aAAa,IAAK;AACjD,yBAAO;AAAA,gBACR;AAAA,cACD,SAAUS,IAAI;AACb,uCAAwB,MAAM,IAAK;AAAA,cACpC;AAAA,YACD;AAEA,mBAAOC,QAAQ,MAAMrB,WAAU,MAAM,CAAE,IAAK,CAAE,EAAE,SAAS;AAAA,UAC1D;AAEA,UAAAqB,QAAO,WAAW,SAAU,SAAS,MAAO;AAO3C,iBAAO,QAAQ,iBAAiB,YAAarB,WAAW;AACvD,0BAAa,OAAQ;AAAA,YACtB;AACA,mBAAO,SAAU,SAAS,IAAK;AAAA,UAChC;AAEA,UAAAqB,QAAO,OAAO,SAAU,MAAM,MAAO;AAOpC,iBAAO,KAAK,iBAAiB,SAAUrB,WAAW;AACjD,0BAAa,IAAK;AAAA,YACnB;AAEA,gBAAI,KAAK,KAAK,WAAY,KAAK,YAAY,CAAE,GAG5C,MAAM,MAAMH,QAAO,KAAM,KAAK,YAAY,KAAK,YAAY,CAAE,IAC5D,GAAI,MAAM,MAAM,CAAC,cAAe,IAChC;AAEF,mBAAO,QAAQ,SACd,MACAc,SAAQ,cAAc,CAAC,iBACtB,KAAK,aAAc,IAAK,KACtB,MAAM,KAAK,iBAAkB,IAAK,MAAO,IAAI,YAC9C,IAAI,QACJ;AAAA,UACJ;AAEA,UAAAU,QAAO,SAAS,SAAU,KAAM;AAC/B,oBAAS,MAAM,IAAK,QAAS,YAAY,UAAW;AAAA,UACrD;AAEA,UAAAA,QAAO,QAAQ,SAAU,KAAM;AAC9B,kBAAM,IAAI,MAAO,4CAA4C,GAAI;AAAA,UAClE;AAMA,UAAAA,QAAO,aAAa,SAAU,SAAU;AACvC,gBAAI,MACH,aAAa,CAAC,GACdhB,KAAI,GACJJ,KAAI;AAGL,2BAAe,CAACU,SAAQ;AACxB,wBAAY,CAACA,SAAQ,cAAc,QAAQ,MAAO,CAAE;AACpD,oBAAQ,KAAM,SAAU;AAExB,gBAAK,cAAe;AACnB,qBAAU,OAAO,QAASV,IAAI,GAAM;AACnC,oBAAK,SAAS,QAASA,EAAE,GAAI;AAC5B,kBAAAI,KAAI,WAAW,KAAMJ,EAAE;AAAA,gBACxB;AAAA,cACD;AACA,qBAAQI,MAAM;AACb,wBAAQ,OAAQ,WAAYA,EAAE,GAAG,CAAE;AAAA,cACpC;AAAA,YACD;AAIA,wBAAY;AAEZ,mBAAO;AAAA,UACR;AAMA,oBAAUgB,QAAO,UAAU,SAAU,MAAO;AAC3C,gBAAI,MACH,MAAM,IACNpB,KAAI,GACJ,WAAW,KAAK;AAEjB,gBAAK,CAAC,UAAW;AAGhB,qBAAU,OAAO,KAAMA,IAAI,GAAM;AAGhC,uBAAO,QAAS,IAAK;AAAA,cACtB;AAAA,YACD,WAAY,aAAa,KAAK,aAAa,KAAK,aAAa,IAAK;AAIjE,kBAAK,OAAO,KAAK,gBAAgB,UAAW;AAC3C,uBAAO,KAAK;AAAA,cACb,OAAO;AAGN,qBAAM,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,aAAc;AAC7D,yBAAO,QAAS,IAAK;AAAA,gBACtB;AAAA,cACD;AAAA,YACD,WAAY,aAAa,KAAK,aAAa,GAAI;AAC9C,qBAAO,KAAK;AAAA,YACb;AAIA,mBAAO;AAAA,UACR;AAEA,iBAAOoB,QAAO,YAAY;AAAA;AAAA,YAGzB,aAAa;AAAA,YAEb,cAAc;AAAA,YAEd,OAAO;AAAA,YAEP,YAAY,CAAC;AAAA,YAEb,MAAM,CAAC;AAAA,YAEP,UAAU;AAAA,cACT,KAAK,EAAE,KAAK,cAAc,OAAO,KAAK;AAAA,cACtC,KAAK,EAAE,KAAK,aAAa;AAAA,cACzB,KAAK,EAAE,KAAK,mBAAmB,OAAO,KAAK;AAAA,cAC3C,KAAK,EAAE,KAAK,kBAAkB;AAAA,YAC/B;AAAA,YAEA,WAAW;AAAA,cACV,QAAQ,SAAU,OAAQ;AACzB,sBAAO,CAAE,IAAI,MAAO,CAAE,EAAE,QAAS,WAAW,SAAU;AAGtD,sBAAO,CAAE,KAAM,MAAO,CAAE,KAAK,MAAO,CAAE,KACrC,MAAO,CAAE,KAAK,IAAK,QAAS,WAAW,SAAU;AAElD,oBAAK,MAAO,CAAE,MAAM,MAAO;AAC1B,wBAAO,CAAE,IAAI,MAAM,MAAO,CAAE,IAAI;AAAA,gBACjC;AAEA,uBAAO,MAAM,MAAO,GAAG,CAAE;AAAA,cAC1B;AAAA,cAEA,SAAS,SAAU,OAAQ;AAY1B,sBAAO,CAAE,IAAI,MAAO,CAAE,EAAE,YAAY;AAEpC,oBAAK,MAAO,CAAE,EAAE,MAAO,GAAG,CAAE,MAAM,OAAQ;AAGzC,sBAAK,CAAC,MAAO,CAAE,GAAI;AAClB,oBAAAA,QAAO,MAAO,MAAO,CAAE,CAAE;AAAA,kBAC1B;AAIA,wBAAO,CAAE,IAAI,EAAG,MAAO,CAAE,IACxB,MAAO,CAAE,KAAM,MAAO,CAAE,KAAK,KAC7B,KAAM,MAAO,CAAE,MAAM,UAAU,MAAO,CAAE,MAAM;AAC/C,wBAAO,CAAE,IAAI,EAAK,MAAO,CAAE,IAAI,MAAO,CAAE,KAAO,MAAO,CAAE,MAAM;AAAA,gBAG/D,WAAY,MAAO,CAAE,GAAI;AACxB,kBAAAA,QAAO,MAAO,MAAO,CAAE,CAAE;AAAA,gBAC1B;AAEA,uBAAO;AAAA,cACR;AAAA,cAEA,UAAU,SAAU,OAAQ;AAC3B,oBAAI,QACH,WAAW,CAAC,MAAO,CAAE,KAAK,MAAO,CAAE;AAEpC,oBAAK,UAAW,OAAQ,EAAE,KAAM,MAAO,CAAE,CAAE,GAAI;AAC9C,yBAAO;AAAA,gBACR;AAGA,oBAAK,MAAO,CAAE,GAAI;AACjB,wBAAO,CAAE,IAAI,MAAO,CAAE,KAAK,MAAO,CAAE,KAAK;AAAA,gBAG1C,WAAY,YAAY,QAAQ,KAAM,QAAS;AAAA,iBAG5C,SAAS,SAAU,UAAU,IAAK;AAAA,iBAGlC,SAAS,SAAS,QAAS,KAAK,SAAS,SAAS,MAAO,IAAI,SAAS,SAAW;AAGnF,wBAAO,CAAE,IAAI,MAAO,CAAE,EAAE,MAAO,GAAG,MAAO;AACzC,wBAAO,CAAE,IAAI,SAAS,MAAO,GAAG,MAAO;AAAA,gBACxC;AAGA,uBAAO,MAAM,MAAO,GAAG,CAAE;AAAA,cAC1B;AAAA,YACD;AAAA,YAEA,QAAQ;AAAA,cAEP,OAAO,SAAU,kBAAmB;AACnC,oBAAIQ,YAAW,iBAAiB,QAAS,WAAW,SAAU,EAAE,YAAY;AAC5E,uBAAO,qBAAqB,MAC3B,WAAW;AACV,yBAAO;AAAA,gBACR,IACA,SAAU,MAAO;AAChB,yBAAO,KAAK,YAAY,KAAK,SAAS,YAAY,MAAMA;AAAA,gBACzD;AAAA,cACF;AAAA,cAEA,SAAS,SAAU,WAAY;AAC9B,oBAAI,UAAU,WAAY,YAAY,GAAI;AAE1C,uBAAO,YACJ,UAAU,IAAI,OAAQ,QAAQ,aAC/B,MAAM,YAAY,MAAM,aAAa,KAAM,MAAO;AAAA,kBACjD;AAAA,kBAAW,SAAU,MAAO;AAC3B,2BAAO,QAAQ;AAAA,sBACd,OAAO,KAAK,cAAc,YAAY,KAAK,aAC3C,OAAO,KAAK,iBAAiB,eAC5B,KAAK,aAAc,OAAQ,KAC5B;AAAA,oBACD;AAAA,kBACH;AAAA,gBAAE;AAAA,cACJ;AAAA,cAEA,QAAQ,SAAU,MAAM,UAAU,OAAQ;AACzC,uBAAO,SAAU,MAAO;AACvB,sBAAI,SAASR,QAAO,KAAM,MAAM,IAAK;AAErC,sBAAK,UAAU,MAAO;AACrB,2BAAO,aAAa;AAAA,kBACrB;AACA,sBAAK,CAAC,UAAW;AAChB,2BAAO;AAAA,kBACR;AAEA,4BAAU;AAIV,yBAAO,aAAa,MAAM,WAAW,QACpC,aAAa,OAAO,WAAW,QAC/B,aAAa,OAAO,SAAS,OAAO,QAAS,KAAM,MAAM,IACzD,aAAa,OAAO,SAAS,OAAO,QAAS,KAAM,IAAI,KACvD,aAAa,OAAO,SAAS,OAAO,MAAO,CAAC,MAAM,MAAO,MAAM,QAC/D,aAAa,QAAS,MAAM,OAAO,QAAS,aAAa,GAAI,IAAI,KAAM,QAAS,KAAM,IAAI,KAC1F,aAAa,OAAO,WAAW,SAAS,OAAO,MAAO,GAAG,MAAM,SAAS,CAAE,MAAM,QAAQ,MACxF;AAAA,gBAGF;AAAA,cACD;AAAA,cAEA,SAAS,SAAUX,OAAM,MAAM,WAAW,OAAO,MAAO;AACvD,oBAAI,SAASA,MAAK,MAAO,GAAG,CAAE,MAAM,OACnC,UAAUA,MAAK,MAAO,EAAG,MAAM,QAC/B,SAAS,SAAS;AAEnB,uBAAO,UAAU,KAAK,SAAS;AAAA;AAAA,kBAG9B,SAAU,MAAO;AAChB,2BAAO,CAAC,CAAC,KAAK;AAAA,kBACf;AAAA,oBAEA,SAAU,MAAM,UAAU,KAAM;AAC/B,sBAAI,OAAO,aAAa,YAAY,MAAM,WAAWoB,QACpDC,OAAM,WAAW,UAAU,gBAAgB,mBAC3C,SAAS,KAAK,YACd,OAAO,UAAU,KAAK,SAAS,YAAY,GAC3C,WAAW,CAAC,OAAO,CAAC,QACpB,OAAO;AAER,sBAAK,QAAS;AAGb,wBAAK,QAAS;AACb,6BAAQA,MAAM;AACb,+BAAO;AACP,+BAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,8BAAK,SACJ,KAAK,SAAS,YAAY,MAAM,OAChC,KAAK,aAAa,GAAI;AAEtB,mCAAO;AAAA,0BACR;AAAA,wBACD;AAGA,wBAAAD,SAAQC,OAAMrB,UAAS,UAAU,CAACoB,UAAS;AAAA,sBAC5C;AACA,6BAAO;AAAA,oBACR;AAEA,oBAAAA,SAAQ,CAAE,UAAU,OAAO,aAAa,OAAO,SAAU;AAGzD,wBAAK,WAAW,UAAW;AAK1B,6BAAO;AACP,mCAAa,KAAM,OAAQ,MAAO,KAAM,OAAQ,IAAI,CAAC;AAIrD,oCAAc,WAAY,KAAK,QAAS,MACrC,WAAY,KAAK,QAAS,IAAI,CAAC;AAElC,8BAAQ,YAAapB,KAAK,KAAK,CAAC;AAChC,kCAAY,MAAO,CAAE,MAAM,WAAW,MAAO,CAAE;AAC/C,6BAAO,aAAa,MAAO,CAAE;AAC7B,6BAAO,aAAa,OAAO,WAAY,SAAU;AAEjD,6BAAU,OAAO,EAAE,aAAa,QAAQ,KAAMqB,IAAI;AAAA,uBAG/C,OAAO,YAAY,MAAOD,OAAM,IAAI,GAAM;AAG5C,4BAAK,KAAK,aAAa,KAAK,EAAE,QAAQ,SAAS,MAAO;AACrD,sCAAapB,KAAK,IAAI,CAAE,SAAS,WAAW,IAAK;AACjD;AAAA,wBACD;AAAA,sBACD;AAAA,oBAED,OAAO;AAGN,0BAAK,UAAW;AAGf,+BAAO;AACP,qCAAa,KAAM,OAAQ,MAAO,KAAM,OAAQ,IAAI,CAAC;AAIrD,sCAAc,WAAY,KAAK,QAAS,MACrC,WAAY,KAAK,QAAS,IAAI,CAAC;AAElC,gCAAQ,YAAaA,KAAK,KAAK,CAAC;AAChC,oCAAY,MAAO,CAAE,MAAM,WAAW,MAAO,CAAE;AAC/C,+BAAO;AAAA,sBACR;AAIA,0BAAK,SAAS,OAAQ;AAGrB,+BAAU,OAAO,EAAE,aAAa,QAAQ,KAAMqB,IAAI,MAC/C,OAAO,YAAY,MAAOD,OAAM,IAAI,GAAM;AAE5C,+BAAO,SACN,KAAK,SAAS,YAAY,MAAM,OAChC,KAAK,aAAa,MAClB,EAAE,MAAO;AAGT,gCAAK,UAAW;AACf,2CAAa,KAAM,OAAQ,MACxB,KAAM,OAAQ,IAAI,CAAC;AAItB,4CAAc,WAAY,KAAK,QAAS,MACrC,WAAY,KAAK,QAAS,IAAI,CAAC;AAElC,0CAAapB,KAAK,IAAI,CAAE,SAAS,IAAK;AAAA,4BACvC;AAEA,gCAAK,SAAS,MAAO;AACpB;AAAA,4BACD;AAAA,0BACD;AAAA,wBACD;AAAA,sBACD;AAAA,oBACD;AAGA,4BAAQ;AACR,2BAAO,SAAS,SAAW,OAAO,UAAU,KAAK,OAAO,SAAS;AAAA,kBAClE;AAAA,gBACD;AAAA,cACF;AAAA,cAEA,UAAU,SAAU,QAAQ,UAAW;AAMtC,oBAAI,MACH,KAAK,KAAK,QAAS,MAAO,KAAK,KAAK,WAAY,OAAO,YAAY,CAAE,KACpEW,QAAO,MAAO,yBAAyB,MAAO;AAKhD,oBAAK,GAAI,OAAQ,GAAI;AACpB,yBAAO,GAAI,QAAS;AAAA,gBACrB;AAGA,oBAAK,GAAG,SAAS,GAAI;AACpB,yBAAO,CAAE,QAAQ,QAAQ,IAAI,QAAS;AACtC,yBAAO,KAAK,WAAW,eAAgB,OAAO,YAAY,CAAE,IAC3D,aAAc,SAAUC,OAAMb,UAAU;AACvC,wBAAI,KACH,UAAU,GAAIa,OAAM,QAAS,GAC7BrB,KAAI,QAAQ;AACb,2BAAQA,MAAM;AACb,4BAAMe,SAASM,OAAM,QAASrB,EAAE,CAAE;AAClC,sBAAAqB,MAAM,GAAI,IAAI,EAAGb,SAAS,GAAI,IAAI,QAASR,EAAE;AAAA,oBAC9C;AAAA,kBACD,CAAE,IACF,SAAU,MAAO;AAChB,2BAAO,GAAI,MAAM,GAAG,IAAK;AAAA,kBAC1B;AAAA,gBACF;AAEA,uBAAO;AAAA,cACR;AAAA,YACD;AAAA,YAEA,SAAS;AAAA;AAAA,cAGR,OAAO,aAAc,SAAU,UAAW;AAKzC,oBAAI,QAAQ,CAAC,GACZ,UAAU,CAAC,GACX,UAAU,QAAS,SAAS,QAASgB,QAAO,IAAK,CAAE;AAEpD,uBAAO,QAAS,OAAQ,IACvB,aAAc,SAAUK,OAAMb,UAAS,UAAU,KAAM;AACtD,sBAAI,MACH,YAAY,QAASa,OAAM,MAAM,KAAK,CAAC,CAAE,GACzCrB,KAAIqB,MAAK;AAGV,yBAAQrB,MAAM;AACb,wBAAO,OAAO,UAAWA,EAAE,GAAM;AAChC,sBAAAqB,MAAMrB,EAAE,IAAI,EAAGQ,SAASR,EAAE,IAAI;AAAA,oBAC/B;AAAA,kBACD;AAAA,gBACD,CAAE,IACF,SAAU,MAAM,UAAU,KAAM;AAC/B,wBAAO,CAAE,IAAI;AACb,0BAAS,OAAO,MAAM,KAAK,OAAQ;AAGnC,wBAAO,CAAE,IAAI;AACb,yBAAO,CAAC,QAAQ,IAAI;AAAA,gBACrB;AAAA,cACF,CAAE;AAAA,cAEF,OAAO,aAAc,SAAU,UAAW;AACzC,uBAAO,SAAU,MAAO;AACvB,yBAAOoB,QAAQ,UAAU,IAAK,EAAE,SAAS;AAAA,gBAC1C;AAAA,cACD,CAAE;AAAA,cAEF,YAAY,aAAc,SAAUW,OAAO;AAC1C,gBAAAA,QAAOA,MAAK,QAAS,WAAW,SAAU;AAC1C,uBAAO,SAAU,MAAO;AACvB,0BAAS,KAAK,eAAe,QAAS,IAAK,GAAI,QAASA,KAAK,IAAI;AAAA,gBAClE;AAAA,cACD,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASF,QAAQ,aAAc,SAAU,MAAO;AAGtC,oBAAK,CAAC,YAAY,KAAM,QAAQ,EAAG,GAAI;AACtC,kBAAAX,QAAO,MAAO,uBAAuB,IAAK;AAAA,gBAC3C;AACA,uBAAO,KAAK,QAAS,WAAW,SAAU,EAAE,YAAY;AACxD,uBAAO,SAAU,MAAO;AACvB,sBAAI;AACJ,qBAAG;AACF,wBAAO,WAAW,iBACjB,KAAK,OACL,KAAK,aAAc,UAAW,KAAK,KAAK,aAAc,MAAO,GAAM;AAEnE,iCAAW,SAAS,YAAY;AAChC,6BAAO,aAAa,QAAQ,SAAS,QAAS,OAAO,GAAI,MAAM;AAAA,oBAChE;AAAA,kBACD,UAAY,OAAO,KAAK,eAAgB,KAAK,aAAa;AAC1D,yBAAO;AAAA,gBACR;AAAA,cACD,CAAE;AAAA;AAAA,cAGF,UAAU,SAAU,MAAO;AAC1B,oBAAIY,QAAOvC,QAAO,YAAYA,QAAO,SAAS;AAC9C,uBAAOuC,SAAQA,MAAK,MAAO,CAAE,MAAM,KAAK;AAAA,cACzC;AAAA,cAEA,QAAQ,SAAU,MAAO;AACxB,uBAAO,SAAS;AAAA,cACjB;AAAA,cAEA,SAAS,SAAU,MAAO;AACzB,uBAAO,SAASjC,UAAS,kBACtB,CAACA,UAAS,YAAYA,UAAS,SAAS,MAC1C,CAAC,EAAG,KAAK,QAAQ,KAAK,QAAQ,CAAC,KAAK;AAAA,cACtC;AAAA;AAAA,cAGA,WAAW,qBAAsB,KAAM;AAAA,cACvC,YAAY,qBAAsB,IAAK;AAAA,cAEvC,WAAW,SAAU,MAAO;AAI3B,oBAAI6B,YAAW,KAAK,SAAS,YAAY;AACzC,uBAASA,cAAa,WAAW,CAAC,CAAC,KAAK,WACrCA,cAAa,YAAY,CAAC,CAAC,KAAK;AAAA,cACpC;AAAA,cAEA,YAAY,SAAU,MAAO;AAI5B,oBAAK,KAAK,YAAa;AAEtB,uBAAK,WAAW;AAAA,gBACjB;AAEA,uBAAO,KAAK,aAAa;AAAA,cAC1B;AAAA;AAAA,cAGA,SAAS,SAAU,MAAO;AAMzB,qBAAM,OAAO,KAAK,YAAY,MAAM,OAAO,KAAK,aAAc;AAC7D,sBAAK,KAAK,WAAW,GAAI;AACxB,2BAAO;AAAA,kBACR;AAAA,gBACD;AACA,uBAAO;AAAA,cACR;AAAA,cAEA,UAAU,SAAU,MAAO;AAC1B,uBAAO,CAAC,KAAK,QAAS,OAAQ,EAAG,IAAK;AAAA,cACvC;AAAA;AAAA,cAGA,UAAU,SAAU,MAAO;AAC1B,uBAAO,QAAQ,KAAM,KAAK,QAAS;AAAA,cACpC;AAAA,cAEA,SAAS,SAAU,MAAO;AACzB,uBAAO,QAAQ,KAAM,KAAK,QAAS;AAAA,cACpC;AAAA,cAEA,UAAU,SAAU,MAAO;AAC1B,oBAAI,OAAO,KAAK,SAAS,YAAY;AACrC,uBAAO,SAAS,WAAW,KAAK,SAAS,YAAY,SAAS;AAAA,cAC/D;AAAA,cAEA,QAAQ,SAAU,MAAO;AACxB,oBAAI;AACJ,uBAAO,KAAK,SAAS,YAAY,MAAM,WACtC,KAAK,SAAS;AAAA;AAAA,kBAIV,OAAO,KAAK,aAAc,MAAO,MAAO,QAC3C,KAAK,YAAY,MAAM;AAAA,cAC1B;AAAA;AAAA,cAGA,SAAS,uBAAwB,WAAW;AAC3C,uBAAO,CAAE,CAAE;AAAA,cACZ,CAAE;AAAA,cAEF,QAAQ,uBAAwB,SAAU,eAAe,QAAS;AACjE,uBAAO,CAAE,SAAS,CAAE;AAAA,cACrB,CAAE;AAAA,cAEF,MAAM,uBAAwB,SAAU,eAAe,QAAQ,UAAW;AACzE,uBAAO,CAAE,WAAW,IAAI,WAAW,SAAS,QAAS;AAAA,cACtD,CAAE;AAAA,cAEF,QAAQ,uBAAwB,SAAU,cAAc,QAAS;AAChE,oBAAI5B,KAAI;AACR,uBAAQA,KAAI,QAAQA,MAAK,GAAI;AAC5B,+BAAa,KAAMA,EAAE;AAAA,gBACtB;AACA,uBAAO;AAAA,cACR,CAAE;AAAA,cAEF,OAAO,uBAAwB,SAAU,cAAc,QAAS;AAC/D,oBAAIA,KAAI;AACR,uBAAQA,KAAI,QAAQA,MAAK,GAAI;AAC5B,+BAAa,KAAMA,EAAE;AAAA,gBACtB;AACA,uBAAO;AAAA,cACR,CAAE;AAAA,cAEF,MAAM,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACxE,oBAAIA,KAAI,WAAW,IAClB,WAAW,SACX,WAAW,SACV,SACA;AACF,uBAAQ,EAAEA,MAAK,KAAK;AACnB,+BAAa,KAAMA,EAAE;AAAA,gBACtB;AACA,uBAAO;AAAA,cACR,CAAE;AAAA,cAEF,MAAM,uBAAwB,SAAU,cAAc,QAAQ,UAAW;AACxE,oBAAIA,KAAI,WAAW,IAAI,WAAW,SAAS;AAC3C,uBAAQ,EAAEA,KAAI,UAAU;AACvB,+BAAa,KAAMA,EAAE;AAAA,gBACtB;AACA,uBAAO;AAAA,cACR,CAAE;AAAA,YACH;AAAA,UACD;AAEA,eAAK,QAAS,KAAM,IAAI,KAAK,QAAS,IAAK;AAG3C,eAAMA,MAAK,EAAE,OAAO,MAAM,UAAU,MAAM,MAAM,MAAM,UAAU,MAAM,OAAO,KAAK,GAAI;AACrF,iBAAK,QAASA,EAAE,IAAI,kBAAmBA,EAAE;AAAA,UAC1C;AACA,eAAMA,MAAK,EAAE,QAAQ,MAAM,OAAO,KAAK,GAAI;AAC1C,iBAAK,QAASA,EAAE,IAAI,mBAAoBA,EAAE;AAAA,UAC3C;AAGA,mBAAS,aAAa;AAAA,UAAC;AACvB,qBAAW,YAAY,KAAK,UAAU,KAAK;AAC3C,eAAK,aAAa,IAAI,WAAW;AAEjC,qBAAWoB,QAAO,WAAW,SAAU,UAAU,WAAY;AAC5D,gBAAI,SAAS,OAAO,QAAQX,OAC3B,OAAOc,SAAQ,YACfU,UAAS,WAAY,WAAW,GAAI;AAErC,gBAAKA,SAAS;AACb,qBAAO,YAAY,IAAIA,QAAO,MAAO,CAAE;AAAA,YACxC;AAEA,oBAAQ;AACR,YAAAV,UAAS,CAAC;AACV,yBAAa,KAAK;AAElB,mBAAQ,OAAQ;AAGf,kBAAK,CAAC,YAAa,QAAQ,OAAO,KAAM,KAAM,IAAM;AACnD,oBAAK,OAAQ;AAGZ,0BAAQ,MAAM,MAAO,MAAO,CAAE,EAAE,MAAO,KAAK;AAAA,gBAC7C;AACA,gBAAAA,QAAO,KAAQ,SAAS,CAAC,CAAI;AAAA,cAC9B;AAEA,wBAAU;AAGV,kBAAO,QAAQ,aAAa,KAAM,KAAM,GAAM;AAC7C,0BAAU,MAAM,MAAM;AACtB,uBAAO,KAAM;AAAA,kBACZ,OAAO;AAAA;AAAA,kBAGP,MAAM,MAAO,CAAE,EAAE,QAASP,QAAO,GAAI;AAAA,gBACtC,CAAE;AACF,wBAAQ,MAAM,MAAO,QAAQ,MAAO;AAAA,cACrC;AAGA,mBAAMP,SAAQ,KAAK,QAAS;AAC3B,qBAAO,QAAQ,UAAWA,KAAK,EAAE,KAAM,KAAM,OAAS,CAAC,WAAYA,KAAK,MACrE,QAAQ,WAAYA,KAAK,EAAG,KAAM,KAAQ;AAC5C,4BAAU,MAAM,MAAM;AACtB,yBAAO,KAAM;AAAA,oBACZ,OAAO;AAAA,oBACP,MAAMA;AAAA,oBACN,SAAS;AAAA,kBACV,CAAE;AACF,0BAAQ,MAAM,MAAO,QAAQ,MAAO;AAAA,gBACrC;AAAA,cACD;AAEA,kBAAK,CAAC,SAAU;AACf;AAAA,cACD;AAAA,YACD;AAKA,mBAAO,YACN,MAAM,SACN,QACCW,QAAO,MAAO,QAAS;AAAA;AAAA,cAGvB,WAAY,UAAUG,OAAO,EAAE,MAAO,CAAE;AAAA;AAAA,UAC3C;AAEA,mBAAS,WAAY,QAAS;AAC7B,gBAAIvB,KAAI,GACPG,OAAM,OAAO,QACb,WAAW;AACZ,mBAAQH,KAAIG,MAAKH,MAAM;AACtB,0BAAY,OAAQA,EAAE,EAAE;AAAA,YACzB;AACA,mBAAO;AAAA,UACR;AAEA,mBAAS,cAAe,SAAS,YAAY,MAAO;AACnD,gBAAI8B,OAAM,WAAW,KACpB,OAAO,WAAW,MAClB,MAAM,QAAQA,MACd,mBAAmB,QAAQ,QAAQ,cACnC,WAAW;AAEZ,mBAAO,WAAW;AAAA;AAAA,cAGjB,SAAU,MAAM,SAAS,KAAM;AAC9B,uBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,sBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,2BAAO,QAAS,MAAM,SAAS,GAAI;AAAA,kBACpC;AAAA,gBACD;AACA,uBAAO;AAAA,cACR;AAAA;AAAA;AAAA,cAGA,SAAU,MAAM,SAAS,KAAM;AAC9B,oBAAI,UAAU,aAAa,YAC1B,WAAW,CAAE,SAAS,QAAS;AAGhC,oBAAK,KAAM;AACV,yBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,wBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,0BAAK,QAAS,MAAM,SAAS,GAAI,GAAI;AACpC,+BAAO;AAAA,sBACR;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD,OAAO;AACN,yBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,wBAAK,KAAK,aAAa,KAAK,kBAAmB;AAC9C,mCAAa,KAAM,OAAQ,MAAO,KAAM,OAAQ,IAAI,CAAC;AAIrD,oCAAc,WAAY,KAAK,QAAS,MACrC,WAAY,KAAK,QAAS,IAAI,CAAC;AAElC,0BAAK,QAAQ,SAAS,KAAK,SAAS,YAAY,GAAI;AACnD,+BAAO,KAAMA,IAAI,KAAK;AAAA,sBACvB,YAAc,WAAW,YAAa,GAAI,MACzC,SAAU,CAAE,MAAM,WAAW,SAAU,CAAE,MAAM,UAAW;AAG1D,+BAAS,SAAU,CAAE,IAAI,SAAU,CAAE;AAAA,sBACtC,OAAO;AAGN,oCAAa,GAAI,IAAI;AAGrB,4BAAO,SAAU,CAAE,IAAI,QAAS,MAAM,SAAS,GAAI,GAAM;AACxD,iCAAO;AAAA,wBACR;AAAA,sBACD;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AACA,uBAAO;AAAA,cACR;AAAA;AAAA,UACF;AAEA,mBAAS,eAAgB,UAAW;AACnC,mBAAO,SAAS,SAAS,IACxB,SAAU,MAAM,SAAS,KAAM;AAC9B,kBAAI9B,KAAI,SAAS;AACjB,qBAAQA,MAAM;AACb,oBAAK,CAAC,SAAUA,EAAE,EAAG,MAAM,SAAS,GAAI,GAAI;AAC3C,yBAAO;AAAA,gBACR;AAAA,cACD;AACA,qBAAO;AAAA,YACR,IACA,SAAU,CAAE;AAAA,UACd;AAEA,mBAAS,iBAAkB,UAAU,UAAU,SAAU;AACxD,gBAAIA,KAAI,GACPG,OAAM,SAAS;AAChB,mBAAQH,KAAIG,MAAKH,MAAM;AACtB,cAAAoB,QAAQ,UAAU,SAAUpB,EAAE,GAAG,OAAQ;AAAA,YAC1C;AACA,mBAAO;AAAA,UACR;AAEA,mBAAS,SAAU,WAAWkC,MAAKC,SAAQ,SAAS,KAAM;AACzD,gBAAI,MACH,eAAe,CAAC,GAChBnC,KAAI,GACJG,OAAM,UAAU,QAChB,SAAS+B,QAAO;AAEjB,mBAAQlC,KAAIG,MAAKH,MAAM;AACtB,kBAAO,OAAO,UAAWA,EAAE,GAAM;AAChC,oBAAK,CAACmC,WAAUA,QAAQ,MAAM,SAAS,GAAI,GAAI;AAC9C,+BAAa,KAAM,IAAK;AACxB,sBAAK,QAAS;AACb,oBAAAD,KAAI,KAAMlC,EAAE;AAAA,kBACb;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAEA,mBAAO;AAAA,UACR;AAEA,mBAAS,WAAY,WAAW,UAAU,SAAS,YAAY,YAAY,cAAe;AACzF,gBAAK,cAAc,CAAC,WAAY,OAAQ,GAAI;AAC3C,2BAAa,WAAY,UAAW;AAAA,YACrC;AACA,gBAAK,cAAc,CAAC,WAAY,OAAQ,GAAI;AAC3C,2BAAa,WAAY,YAAY,YAAa;AAAA,YACnD;AACA,mBAAO,aAAc,SAAUqB,OAAM,SAAS,SAAS,KAAM;AAC5D,kBAAI,MAAMrB,IAAG,MACZ,SAAS,CAAC,GACV,UAAU,CAAC,GACX,cAAc,QAAQ,QAGtB,QAAQqB,SAAQ;AAAA,gBACf,YAAY;AAAA,gBACZ,QAAQ,WAAW,CAAE,OAAQ,IAAI;AAAA,gBACjC,CAAC;AAAA,cACF,GAGA,YAAY,cAAeA,SAAQ,CAAC,YACnC,SAAU,OAAO,QAAQ,WAAW,SAAS,GAAI,IACjD,OAED,aAAa;AAAA;AAAA,gBAGZ,eAAgBA,QAAO,YAAY,eAAe;AAAA;AAAA,kBAGjD,CAAC;AAAA;AAAA;AAAA,kBAGD;AAAA;AAAA,kBACD;AAGF,kBAAK,SAAU;AACd,wBAAS,WAAW,YAAY,SAAS,GAAI;AAAA,cAC9C;AAGA,kBAAK,YAAa;AACjB,uBAAO,SAAU,YAAY,OAAQ;AACrC,2BAAY,MAAM,CAAC,GAAG,SAAS,GAAI;AAGnC,gBAAArB,KAAI,KAAK;AACT,uBAAQA,MAAM;AACb,sBAAO,OAAO,KAAMA,EAAE,GAAM;AAC3B,+BAAY,QAASA,EAAE,CAAE,IAAI,EAAG,UAAW,QAASA,EAAE,CAAE,IAAI;AAAA,kBAC7D;AAAA,gBACD;AAAA,cACD;AAEA,kBAAKqB,OAAO;AACX,oBAAK,cAAc,WAAY;AAC9B,sBAAK,YAAa;AAGjB,2BAAO,CAAC;AACR,oBAAArB,KAAI,WAAW;AACf,2BAAQA,MAAM;AACb,0BAAO,OAAO,WAAYA,EAAE,GAAM;AAGjC,6BAAK,KAAQ,UAAWA,EAAE,IAAI,IAAO;AAAA,sBACtC;AAAA,oBACD;AACA,+BAAY,MAAQ,aAAa,CAAC,GAAK,MAAM,GAAI;AAAA,kBAClD;AAGA,kBAAAA,KAAI,WAAW;AACf,yBAAQA,MAAM;AACb,yBAAO,OAAO,WAAYA,EAAE,OACzB,OAAO,aAAae,SAASM,OAAM,IAAK,IAAI,OAAQrB,EAAE,KAAM,IAAK;AAEnE,sBAAAqB,MAAM,IAAK,IAAI,EAAG,QAAS,IAAK,IAAI;AAAA,oBACrC;AAAA,kBACD;AAAA,gBACD;AAAA,cAGD,OAAO;AACN,6BAAa;AAAA,kBACZ,eAAe,UACd,WAAW,OAAQ,aAAa,WAAW,MAAO,IAClD;AAAA,gBACF;AACA,oBAAK,YAAa;AACjB,6BAAY,MAAM,SAAS,YAAY,GAAI;AAAA,gBAC5C,OAAO;AACN,kBAAAR,MAAK,MAAO,SAAS,UAAW;AAAA,gBACjC;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,mBAAS,kBAAmB,QAAS;AACpC,gBAAI,cAAc,SAAST,IAC1BD,OAAM,OAAO,QACb,kBAAkB,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GAClD,mBAAmB,mBAAmB,KAAK,SAAU,GAAI,GACzDH,KAAI,kBAAkB,IAAI,GAG1B,eAAe,cAAe,SAAU,MAAO;AAC9C,qBAAO,SAAS;AAAA,YACjB,GAAG,kBAAkB,IAAK,GAC1B,kBAAkB,cAAe,SAAU,MAAO;AACjD,qBAAOe,SAAS,cAAc,IAAK,IAAI;AAAA,YACxC,GAAG,kBAAkB,IAAK,GAC1B,WAAW,CAAE,SAAU,MAAM,SAAS,KAAM;AAC3C,kBAAI,MAAQ,CAAC,oBAAqB,OAAO,YAAY,uBAClD,eAAe,SAAU,WAC1B,aAAc,MAAM,SAAS,GAAI,IACjC,gBAAiB,MAAM,SAAS,GAAI;AAGtC,6BAAe;AACf,qBAAO;AAAA,YACR,CAAE;AAEH,mBAAQf,KAAIG,MAAKH,MAAM;AACtB,kBAAO,UAAU,KAAK,SAAU,OAAQA,EAAE,EAAE,IAAK,GAAM;AACtD,2BAAW,CAAE,cAAe,eAAgB,QAAS,GAAG,OAAQ,CAAE;AAAA,cACnE,OAAO;AACN,0BAAU,KAAK,OAAQ,OAAQA,EAAE,EAAE,IAAK,EAAE,MAAO,MAAM,OAAQA,EAAE,EAAE,OAAQ;AAG3E,oBAAK,QAAS,OAAQ,GAAI;AAGzB,kBAAAI,KAAI,EAAEJ;AACN,yBAAQI,KAAID,MAAKC,MAAM;AACtB,wBAAK,KAAK,SAAU,OAAQA,EAAE,EAAE,IAAK,GAAI;AACxC;AAAA,oBACD;AAAA,kBACD;AACA,yBAAO;AAAA,oBACNJ,KAAI,KAAK,eAAgB,QAAS;AAAA,oBAClCA,KAAI,KAAK;AAAA;AAAA,sBAGT,OACE,MAAO,GAAGA,KAAI,CAAE,EAChB,OAAQ,EAAE,OAAO,OAAQA,KAAI,CAAE,EAAE,SAAS,MAAM,MAAM,GAAG,CAAE;AAAA,oBAC7D,EAAE,QAASgB,QAAO,IAAK;AAAA,oBACvB;AAAA,oBACAhB,KAAII,MAAK,kBAAmB,OAAO,MAAOJ,IAAGI,EAAE,CAAE;AAAA,oBACjDA,KAAID,QAAO,kBAAqB,SAAS,OAAO,MAAOC,EAAE,CAAI;AAAA,oBAC7DA,KAAID,QAAO,WAAY,MAAO;AAAA,kBAC/B;AAAA,gBACD;AACA,yBAAS,KAAM,OAAQ;AAAA,cACxB;AAAA,YACD;AAEA,mBAAO,eAAgB,QAAS;AAAA,UACjC;AAEA,mBAAS,yBAA0B,iBAAiB,aAAc;AACjE,gBAAI,QAAQ,YAAY,SAAS,GAChC,YAAY,gBAAgB,SAAS,GACrC,eAAe,SAAUkB,OAAM,SAAS,KAAK,SAAS,WAAY;AACjE,kBAAI,MAAMjB,IAAG,SACZ,eAAe,GACfJ,KAAI,KACJ,YAAYqB,SAAQ,CAAC,GACrB,aAAa,CAAC,GACd,gBAAgB,kBAGhB,QAAQA,SAAQ,aAAa,KAAK,KAAM,KAAM,EAAG,KAAK,SAAU,GAGhE,gBAAkB,WAAW,iBAAiB,OAAO,IAAI,KAAK,OAAO,KAAK,KAC1ElB,OAAM,MAAM;AAEb,kBAAK,WAAY;AAMhB,mCAAmB,WAAWJ,aAAY,WAAW;AAAA,cACtD;AAKA,qBAAQC,OAAMG,SAAS,OAAO,MAAOH,EAAE,MAAO,MAAMA,MAAM;AACzD,oBAAK,aAAa,MAAO;AACxB,kBAAAI,KAAI;AAMJ,sBAAK,CAAC,WAAW,KAAK,iBAAiBL,WAAW;AACjD,gCAAa,IAAK;AAClB,0BAAM,CAAC;AAAA,kBACR;AACA,yBAAU,UAAU,gBAAiBK,IAAI,GAAM;AAC9C,wBAAK,QAAS,MAAM,WAAWL,WAAU,GAAI,GAAI;AAChD,8BAAQ,KAAM,IAAK;AACnB;AAAA,oBACD;AAAA,kBACD;AACA,sBAAK,WAAY;AAChB,8BAAU;AAAA,kBACX;AAAA,gBACD;AAGA,oBAAK,OAAQ;AAGZ,sBAAO,OAAO,CAAC,WAAW,MAAS;AAClC;AAAA,kBACD;AAGA,sBAAKsB,OAAO;AACX,8BAAU,KAAM,IAAK;AAAA,kBACtB;AAAA,gBACD;AAAA,cACD;AAIA,8BAAgBrB;AAShB,kBAAK,SAASA,OAAM,cAAe;AAClC,gBAAAI,KAAI;AACJ,uBAAU,UAAU,YAAaA,IAAI,GAAM;AAC1C,0BAAS,WAAW,YAAY,SAAS,GAAI;AAAA,gBAC9C;AAEA,oBAAKiB,OAAO;AAGX,sBAAK,eAAe,GAAI;AACvB,2BAAQrB,MAAM;AACb,0BAAK,EAAG,UAAWA,EAAE,KAAK,WAAYA,EAAE,IAAM;AAC7C,mCAAYA,EAAE,IAAI,IAAI,KAAM,OAAQ;AAAA,sBACrC;AAAA,oBACD;AAAA,kBACD;AAGA,+BAAa,SAAU,UAAW;AAAA,gBACnC;AAGA,gBAAAa,MAAK,MAAO,SAAS,UAAW;AAGhC,oBAAK,aAAa,CAACQ,SAAQ,WAAW,SAAS,KAC5C,eAAe,YAAY,SAAW,GAAI;AAE5C,kBAAAD,QAAO,WAAY,OAAQ;AAAA,gBAC5B;AAAA,cACD;AAGA,kBAAK,WAAY;AAChB,0BAAU;AACV,mCAAmB;AAAA,cACpB;AAEA,qBAAO;AAAA,YACR;AAED,mBAAO,QACN,aAAc,YAAa,IAC3B;AAAA,UACF;AAEA,oBAAUA,QAAO,UAAU,SAAU,UAAU,OAAgC;AAC9E,gBAAIpB,IACH,cAAc,CAAC,GACf,kBAAkB,CAAC,GACnBiC,UAAS,cAAe,WAAW,GAAI;AAExC,gBAAK,CAACA,SAAS;AAGd,kBAAK,CAAC,OAAQ;AACb,wBAAQ,SAAU,QAAS;AAAA,cAC5B;AACA,cAAAjC,KAAI,MAAM;AACV,qBAAQA,MAAM;AACb,gBAAAiC,UAAS,kBAAmB,MAAOjC,EAAE,CAAE;AACvC,oBAAKiC,QAAQ,OAAQ,GAAI;AACxB,8BAAY,KAAMA,OAAO;AAAA,gBAC1B,OAAO;AACN,kCAAgB,KAAMA,OAAO;AAAA,gBAC9B;AAAA,cACD;AAGA,cAAAA,UAAS;AAAA,gBACR;AAAA,gBACA,yBAA0B,iBAAiB,WAAY;AAAA,cACxD;AAGA,cAAAA,QAAO,WAAW;AAAA,YACnB;AACA,mBAAOA;AAAA,UACR;AAWA,mBAASb,QAAO,SAAS,SAAU,UAAU,SAAS,SAASC,OAAO;AACrE,gBAAIrB,IAAG,QAAQ,OAAOS,OAAM2B,OAC3B,WAAW,OAAO,aAAa,cAAc,UAC7C,QAAQ,CAACf,SAAQ,SAAY,WAAW,SAAS,YAAY,QAAW;AAEzE,sBAAU,WAAW,CAAC;AAItB,gBAAK,MAAM,WAAW,GAAI;AAGzB,uBAAS,MAAO,CAAE,IAAI,MAAO,CAAE,EAAE,MAAO,CAAE;AAC1C,kBAAK,OAAO,SAAS,MAAO,QAAQ,OAAQ,CAAE,GAAI,SAAS,QAC1D,QAAQ,aAAa,KAAK,kBAAkB,KAAK,SAAU,OAAQ,CAAE,EAAE,IAAK,GAAI;AAEhF,2BAAY,KAAK,KAAM,IAAK,EAAG,MAAM,QAAS,CAAE,EAC9C,QAAS,WAAW,SAAU,GAAG,OAAQ,KAAK,CAAC,GAAK,CAAE;AACxD,oBAAK,CAAC,SAAU;AACf,yBAAO;AAAA,gBAGR,WAAY,UAAW;AACtB,4BAAU,QAAQ;AAAA,gBACnB;AAEA,2BAAW,SAAS,MAAO,OAAO,MAAM,EAAE,MAAM,MAAO;AAAA,cACxD;AAGA,cAAArB,KAAI,UAAW,cAAe,EAAE,KAAM,QAAS,IAAI,IAAI,OAAO;AAC9D,qBAAQA,MAAM;AACb,wBAAQ,OAAQA,EAAE;AAGlB,oBAAK,KAAK,SAAYS,QAAO,MAAM,IAAO,GAAI;AAC7C;AAAA,gBACD;AACA,oBAAO2B,QAAO,KAAK,KAAM3B,KAAK,GAAM;AAGnC,sBAAOY,QAAOe;AAAA,oBACb,MAAM,QAAS,CAAE,EAAE,QAAS,WAAW,SAAU;AAAA,oBACjD,SAAS,KAAM,OAAQ,CAAE,EAAE,IAAK,KAAK,YAAa,QAAQ,UAAW,KACpE;AAAA,kBACF,GAAM;AAGL,2BAAO,OAAQpC,IAAG,CAAE;AACpB,+BAAWqB,MAAK,UAAU,WAAY,MAAO;AAC7C,wBAAK,CAAC,UAAW;AAChB,sBAAAR,MAAK,MAAO,SAASQ,KAAK;AAC1B,6BAAO;AAAA,oBACR;AAEA;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAIA,aAAE,YAAY,QAAS,UAAU,KAAM;AAAA,cACtCA;AAAA,cACA;AAAA,cACA,CAAC;AAAA,cACD;AAAA,cACA,CAAC,WAAW,SAAS,KAAM,QAAS,KAAK,YAAa,QAAQ,UAAW,KAAK;AAAA,YAC/E;AACA,mBAAO;AAAA,UACR;AAKA,UAAAX,SAAQ,aAAa,QAAQ,MAAO,EAAG,EAAE,KAAM,SAAU,EAAE,KAAM,EAAG,MAAM;AAI1E,UAAAA,SAAQ,mBAAmB,CAAC,CAAC;AAG7B,sBAAY;AAIZ,UAAAA,SAAQ,eAAe,OAAQ,SAAU,IAAK;AAG7C,mBAAO,GAAG,wBAAyBX,UAAS,cAAe,UAAW,CAAE,IAAI;AAAA,UAC7E,CAAE;AAKF,cAAK,CAAC,OAAQ,SAAU,IAAK;AAC5B,eAAG,YAAY;AACf,mBAAO,GAAG,WAAW,aAAc,MAAO,MAAM;AAAA,UACjD,CAAE,GAAI;AACL,sBAAW,0BAA0B,SAAU,MAAM,MAAMsC,QAAQ;AAClE,kBAAK,CAACA,QAAQ;AACb,uBAAO,KAAK,aAAc,MAAM,KAAK,YAAY,MAAM,SAAS,IAAI,CAAE;AAAA,cACvE;AAAA,YACD,CAAE;AAAA,UACH;AAIA,cAAK,CAAC3B,SAAQ,cAAc,CAAC,OAAQ,SAAU,IAAK;AACnD,eAAG,YAAY;AACf,eAAG,WAAW,aAAc,SAAS,EAAG;AACxC,mBAAO,GAAG,WAAW,aAAc,OAAQ,MAAM;AAAA,UAClD,CAAE,GAAI;AACL,sBAAW,SAAS,SAAU,MAAM,OAAO2B,QAAQ;AAClD,kBAAK,CAACA,UAAS,KAAK,SAAS,YAAY,MAAM,SAAU;AACxD,uBAAO,KAAK;AAAA,cACb;AAAA,YACD,CAAE;AAAA,UACH;AAIA,cAAK,CAAC,OAAQ,SAAU,IAAK;AAC5B,mBAAO,GAAG,aAAc,UAAW,KAAK;AAAA,UACzC,CAAE,GAAI;AACL,sBAAW,UAAU,SAAU,MAAM,MAAMA,QAAQ;AAClD,kBAAI;AACJ,kBAAK,CAACA,QAAQ;AACb,uBAAO,KAAM,IAAK,MAAM,OAAO,KAAK,YAAY,KAC7C,MAAM,KAAK,iBAAkB,IAAK,MAAO,IAAI,YAC9C,IAAI,QACJ;AAAA,cACH;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAOjB;AAAA,QAEP,EAAK3B,OAAO;AAAA;AAIZ,MAAAS,QAAO,OAAO;AACd,MAAAA,QAAO,OAAO,OAAO;AAGrB,MAAAA,QAAO,KAAM,GAAI,IAAIA,QAAO,KAAK;AACjC,MAAAA,QAAO,aAAaA,QAAO,SAAS,OAAO;AAC3C,MAAAA,QAAO,OAAO,OAAO;AACrB,MAAAA,QAAO,WAAW,OAAO;AACzB,MAAAA,QAAO,WAAW,OAAO;AACzB,MAAAA,QAAO,iBAAiB,OAAO;AAK/B,UAAI,MAAM,SAAU,MAAM4B,MAAK,OAAQ;AACtC,YAAI,UAAU,CAAC,GACdQ,YAAW,UAAU;AAEtB,gBAAU,OAAO,KAAMR,IAAI,MAAO,KAAK,aAAa,GAAI;AACvD,cAAK,KAAK,aAAa,GAAI;AAC1B,gBAAKQ,aAAYpC,QAAQ,IAAK,EAAE,GAAI,KAAM,GAAI;AAC7C;AAAA,YACD;AACA,oBAAQ,KAAM,IAAK;AAAA,UACpB;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAGA,UAAI,WAAW,SAAUqC,IAAG,MAAO;AAClC,YAAI,UAAU,CAAC;AAEf,eAAQA,IAAGA,KAAIA,GAAE,aAAc;AAC9B,cAAKA,GAAE,aAAa,KAAKA,OAAM,MAAO;AACrC,oBAAQ,KAAMA,EAAE;AAAA,UACjB;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAGA,UAAI,gBAAgBrC,QAAO,KAAK,MAAM;AAItC,eAAS,SAAU,MAAM,MAAO;AAE/B,eAAO,KAAK,YAAY,KAAK,SAAS,YAAY,MAAM,KAAK,YAAY;AAAA,MAE1E;AACA,UAAI,aAAe;AAKnB,eAAS,OAAQ,UAAU,WAAW,KAAM;AAC3C,YAAKL,YAAY,SAAU,GAAI;AAC9B,iBAAOK,QAAO,KAAM,UAAU,SAAU,MAAMF,IAAI;AACjD,mBAAO,CAAC,CAAC,UAAU,KAAM,MAAMA,IAAG,IAAK,MAAM;AAAA,UAC9C,CAAE;AAAA,QACH;AAGA,YAAK,UAAU,UAAW;AACzB,iBAAOE,QAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,mBAAS,SAAS,cAAgB;AAAA,UACnC,CAAE;AAAA,QACH;AAGA,YAAK,OAAO,cAAc,UAAW;AACpC,iBAAOA,QAAO,KAAM,UAAU,SAAU,MAAO;AAC9C,mBAAS,QAAQ,KAAM,WAAW,IAAK,IAAI,OAAS;AAAA,UACrD,CAAE;AAAA,QACH;AAGA,eAAOA,QAAO,OAAQ,WAAW,UAAU,GAAI;AAAA,MAChD;AAEA,MAAAA,QAAO,SAAS,SAAU,MAAM,OAAO,KAAM;AAC5C,YAAI,OAAO,MAAO,CAAE;AAEpB,YAAK,KAAM;AACV,iBAAO,UAAU,OAAO;AAAA,QACzB;AAEA,YAAK,MAAM,WAAW,KAAK,KAAK,aAAa,GAAI;AAChD,iBAAOA,QAAO,KAAK,gBAAiB,MAAM,IAAK,IAAI,CAAE,IAAK,IAAI,CAAC;AAAA,QAChE;AAEA,eAAOA,QAAO,KAAK,QAAS,MAAMA,QAAO,KAAM,OAAO,SAAUsC,OAAO;AACtE,iBAAOA,MAAK,aAAa;AAAA,QAC1B,CAAE,CAAE;AAAA,MACL;AAEA,MAAAtC,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,UAAW;AAC1B,cAAIF,IAAG,KACNG,OAAM,KAAK,QACXsC,QAAO;AAER,cAAK,OAAO,aAAa,UAAW;AACnC,mBAAO,KAAK,UAAWvC,QAAQ,QAAS,EAAE,OAAQ,WAAW;AAC5D,mBAAMF,KAAI,GAAGA,KAAIG,MAAKH,MAAM;AAC3B,oBAAKE,QAAO,SAAUuC,MAAMzC,EAAE,GAAG,IAAK,GAAI;AACzC,yBAAO;AAAA,gBACR;AAAA,cACD;AAAA,YACD,CAAE,CAAE;AAAA,UACL;AAEA,gBAAM,KAAK,UAAW,CAAC,CAAE;AAEzB,eAAMA,KAAI,GAAGA,KAAIG,MAAKH,MAAM;AAC3B,YAAAE,QAAO,KAAM,UAAUuC,MAAMzC,EAAE,GAAG,GAAI;AAAA,UACvC;AAEA,iBAAOG,OAAM,IAAID,QAAO,WAAY,GAAI,IAAI;AAAA,QAC7C;AAAA,QACA,QAAQ,SAAU,UAAW;AAC5B,iBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,CAAC,GAAG,KAAM,CAAE;AAAA,QAC9D;AAAA,QACA,KAAK,SAAU,UAAW;AACzB,iBAAO,KAAK,UAAW,OAAQ,MAAM,YAAY,CAAC,GAAG,IAAK,CAAE;AAAA,QAC7D;AAAA,QACA,IAAI,SAAU,UAAW;AACxB,iBAAO,CAAC,CAAC;AAAA,YACR;AAAA;AAAA;AAAA,YAIA,OAAO,aAAa,YAAY,cAAc,KAAM,QAAS,IAC5DA,QAAQ,QAAS,IACjB,YAAY,CAAC;AAAA,YACd;AAAA,UACD,EAAE;AAAA,QACH;AAAA,MACD,CAAE;AAOF,UAAI,YAMH,aAAa,uCAEbwC,QAAOxC,QAAO,GAAG,OAAO,SAAU,UAAU,SAASyC,OAAO;AAC3D,YAAI,OAAO;AAGX,YAAK,CAAC,UAAW;AAChB,iBAAO;AAAA,QACR;AAIA,QAAAA,QAAOA,SAAQ;AAGf,YAAK,OAAO,aAAa,UAAW;AACnC,cAAK,SAAU,CAAE,MAAM,OACtB,SAAU,SAAS,SAAS,CAAE,MAAM,OACpC,SAAS,UAAU,GAAI;AAGvB,oBAAQ,CAAE,MAAM,UAAU,IAAK;AAAA,UAEhC,OAAO;AACN,oBAAQ,WAAW,KAAM,QAAS;AAAA,UACnC;AAGA,cAAK,UAAW,MAAO,CAAE,KAAK,CAAC,UAAY;AAG1C,gBAAK,MAAO,CAAE,GAAI;AACjB,wBAAU,mBAAmBzC,UAAS,QAAS,CAAE,IAAI;AAIrD,cAAAA,QAAO,MAAO,MAAMA,QAAO;AAAA,gBAC1B,MAAO,CAAE;AAAA,gBACT,WAAW,QAAQ,WAAW,QAAQ,iBAAiB,UAAUH;AAAA,gBACjE;AAAA,cACD,CAAE;AAGF,kBAAK,WAAW,KAAM,MAAO,CAAE,CAAE,KAAKG,QAAO,cAAe,OAAQ,GAAI;AACvE,qBAAM,SAAS,SAAU;AAGxB,sBAAKL,YAAY,KAAM,KAAM,CAAE,GAAI;AAClC,yBAAM,KAAM,EAAG,QAAS,KAAM,CAAE;AAAA,kBAGjC,OAAO;AACN,yBAAK,KAAM,OAAO,QAAS,KAAM,CAAE;AAAA,kBACpC;AAAA,gBACD;AAAA,cACD;AAEA,qBAAO;AAAA,YAGR,OAAO;AACN,qBAAOE,UAAS,eAAgB,MAAO,CAAE,CAAE;AAE3C,kBAAK,MAAO;AAGX,qBAAM,CAAE,IAAI;AACZ,qBAAK,SAAS;AAAA,cACf;AACA,qBAAO;AAAA,YACR;AAAA,UAGD,WAAY,CAAC,WAAW,QAAQ,QAAS;AACxC,oBAAS,WAAW4C,OAAO,KAAM,QAAS;AAAA,UAI3C,OAAO;AACN,mBAAO,KAAK,YAAa,OAAQ,EAAE,KAAM,QAAS;AAAA,UACnD;AAAA,QAGD,WAAY,SAAS,UAAW;AAC/B,eAAM,CAAE,IAAI;AACZ,eAAK,SAAS;AACd,iBAAO;AAAA,QAIR,WAAY9C,YAAY,QAAS,GAAI;AACpC,iBAAO8C,MAAK,UAAU,SACrBA,MAAK,MAAO,QAAS;AAAA;AAAA,YAGrB,SAAUzC,OAAO;AAAA;AAAA,QACnB;AAEA,eAAOA,QAAO,UAAW,UAAU,IAAK;AAAA,MACzC;AAGD,MAAAwC,MAAK,YAAYxC,QAAO;AAGxB,mBAAaA,QAAQH,SAAS;AAG9B,UAAI,eAAe,kCAGlB,mBAAmB;AAAA,QAClB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,MACP;AAED,MAAAG,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAUI,SAAS;AACvB,cAAI,UAAUJ,QAAQI,SAAQ,IAAK,GAClCsC,KAAI,QAAQ;AAEb,iBAAO,KAAK,OAAQ,WAAW;AAC9B,gBAAI5C,KAAI;AACR,mBAAQA,KAAI4C,IAAG5C,MAAM;AACpB,kBAAKE,QAAO,SAAU,MAAM,QAASF,EAAE,CAAE,GAAI;AAC5C,uBAAO;AAAA,cACR;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,SAAU,WAAW,SAAU;AACvC,cAAI,KACHA,KAAI,GACJ4C,KAAI,KAAK,QACT,UAAU,CAAC,GACX,UAAU,OAAO,cAAc,YAAY1C,QAAQ,SAAU;AAG9D,cAAK,CAAC,cAAc,KAAM,SAAU,GAAI;AACvC,mBAAQF,KAAI4C,IAAG5C,MAAM;AACpB,mBAAM,MAAM,KAAMA,EAAE,GAAG,OAAO,QAAQ,SAAS,MAAM,IAAI,YAAa;AAGrE,oBAAK,IAAI,WAAW,OAAQ,UAC3B,QAAQ,MAAO,GAAI,IAAI;AAAA;AAAA,kBAGvB,IAAI,aAAa,KAChBE,QAAO,KAAK,gBAAiB,KAAK,SAAU;AAAA,oBAAM;AAEnD,0BAAQ,KAAM,GAAI;AAClB;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO,KAAK,UAAW,QAAQ,SAAS,IAAIA,QAAO,WAAY,OAAQ,IAAI,OAAQ;AAAA,QACpF;AAAA;AAAA,QAGA,OAAO,SAAU,MAAO;AAGvB,cAAK,CAAC,MAAO;AACZ,mBAAS,KAAM,CAAE,KAAK,KAAM,CAAE,EAAE,aAAe,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS;AAAA,UAChF;AAGA,cAAK,OAAO,SAAS,UAAW;AAC/B,mBAAO,QAAQ,KAAMA,QAAQ,IAAK,GAAG,KAAM,CAAE,CAAE;AAAA,UAChD;AAGA,iBAAO,QAAQ;AAAA,YAAM;AAAA;AAAA,YAGpB,KAAK,SAAS,KAAM,CAAE,IAAI;AAAA,UAC3B;AAAA,QACD;AAAA,QAEA,KAAK,SAAU,UAAU,SAAU;AAClC,iBAAO,KAAK;AAAA,YACXA,QAAO;AAAA,cACNA,QAAO,MAAO,KAAK,IAAI,GAAGA,QAAQ,UAAU,OAAQ,CAAE;AAAA,YACvD;AAAA,UACD;AAAA,QACD;AAAA,QAEA,SAAS,SAAU,UAAW;AAC7B,iBAAO,KAAK;AAAA,YAAK,YAAY,OAC5B,KAAK,aAAa,KAAK,WAAW,OAAQ,QAAS;AAAA,UACpD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,eAAS,QAAS,KAAK4B,MAAM;AAC5B,gBAAU,MAAM,IAAKA,IAAI,MAAO,IAAI,aAAa,GAAI;AAAA,QAAC;AACtD,eAAO;AAAA,MACR;AAEA,MAAA5B,QAAO,KAAM;AAAA,QACZ,QAAQ,SAAU,MAAO;AACxB,cAAI,SAAS,KAAK;AAClB,iBAAO,UAAU,OAAO,aAAa,KAAK,SAAS;AAAA,QACpD;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,YAAa;AAAA,QAChC;AAAA,QACA,cAAc,SAAU,MAAM,IAAI,OAAQ;AACzC,iBAAO,IAAK,MAAM,cAAc,KAAM;AAAA,QACvC;AAAA,QACA,MAAM,SAAU,MAAO;AACtB,iBAAO,QAAS,MAAM,aAAc;AAAA,QACrC;AAAA,QACA,MAAM,SAAU,MAAO;AACtB,iBAAO,QAAS,MAAM,iBAAkB;AAAA,QACzC;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,aAAc;AAAA,QACjC;AAAA,QACA,SAAS,SAAU,MAAO;AACzB,iBAAO,IAAK,MAAM,iBAAkB;AAAA,QACrC;AAAA,QACA,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,iBAAO,IAAK,MAAM,eAAe,KAAM;AAAA,QACxC;AAAA,QACA,WAAW,SAAU,MAAM,IAAI,OAAQ;AACtC,iBAAO,IAAK,MAAM,mBAAmB,KAAM;AAAA,QAC5C;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,iBAAO,UAAY,KAAK,cAAc,CAAC,GAAI,YAAY,IAAK;AAAA,QAC7D;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,iBAAO,SAAU,KAAK,UAAW;AAAA,QAClC;AAAA,QACA,UAAU,SAAU,MAAO;AAC1B,cAAK,KAAK,mBAAmB;AAAA;AAAA;AAAA,UAK5B,SAAU,KAAK,eAAgB,GAAI;AAEnC,mBAAO,KAAK;AAAA,UACb;AAKA,cAAK,SAAU,MAAM,UAAW,GAAI;AACnC,mBAAO,KAAK,WAAW;AAAA,UACxB;AAEA,iBAAOA,QAAO,MAAO,CAAC,GAAG,KAAK,UAAW;AAAA,QAC1C;AAAA,MACD,GAAG,SAAU,MAAM,IAAK;AACvB,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,UAAW;AAC/C,cAAI,UAAUA,QAAO,IAAK,MAAM,IAAI,KAAM;AAE1C,cAAK,KAAK,MAAO,EAAG,MAAM,SAAU;AACnC,uBAAW;AAAA,UACZ;AAEA,cAAK,YAAY,OAAO,aAAa,UAAW;AAC/C,sBAAUA,QAAO,OAAQ,UAAU,OAAQ;AAAA,UAC5C;AAEA,cAAK,KAAK,SAAS,GAAI;AAGtB,gBAAK,CAAC,iBAAkB,IAAK,GAAI;AAChC,cAAAA,QAAO,WAAY,OAAQ;AAAA,YAC5B;AAGA,gBAAK,aAAa,KAAM,IAAK,GAAI;AAChC,sBAAQ,QAAQ;AAAA,YACjB;AAAA,UACD;AAEA,iBAAO,KAAK,UAAW,OAAQ;AAAA,QAChC;AAAA,MACD,CAAE;AACF,UAAI,gBAAkB;AAKtB,eAAS,cAAe,SAAU;AACjC,YAAI,SAAS,CAAC;AACd,QAAAA,QAAO,KAAM,QAAQ,MAAO,aAAc,KAAK,CAAC,GAAG,SAAU2C,IAAG,MAAO;AACtE,iBAAQ,IAAK,IAAI;AAAA,QAClB,CAAE;AACF,eAAO;AAAA,MACR;AAwBA,MAAA3C,QAAO,YAAY,SAAU,SAAU;AAItC,kBAAU,OAAO,YAAY,WAC5B,cAAe,OAAQ,IACvBA,QAAO,OAAQ,CAAC,GAAG,OAAQ;AAE5B,YACC,QAGA,QAGA,OAGA,QAGA,OAAO,CAAC,GAGR4C,SAAQ,CAAC,GAGT,cAAc,IAGd,OAAO,WAAW;AAGjB,mBAAS,UAAU,QAAQ;AAI3B,kBAAQ,SAAS;AACjB,iBAAQA,OAAM,QAAQ,cAAc,IAAK;AACxC,qBAASA,OAAM,MAAM;AACrB,mBAAQ,EAAE,cAAc,KAAK,QAAS;AAGrC,kBAAK,KAAM,WAAY,EAAE,MAAO,OAAQ,CAAE,GAAG,OAAQ,CAAE,CAAE,MAAM,SAC9D,QAAQ,aAAc;AAGtB,8BAAc,KAAK;AACnB,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,UACD;AAGA,cAAK,CAAC,QAAQ,QAAS;AACtB,qBAAS;AAAA,UACV;AAEA,mBAAS;AAGT,cAAK,QAAS;AAGb,gBAAK,QAAS;AACb,qBAAO,CAAC;AAAA,YAGT,OAAO;AACN,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD,GAGAL,QAAO;AAAA;AAAA,UAGN,KAAK,WAAW;AACf,gBAAK,MAAO;AAGX,kBAAK,UAAU,CAAC,QAAS;AACxB,8BAAc,KAAK,SAAS;AAC5B,gBAAAK,OAAM,KAAM,MAAO;AAAA,cACpB;AAEA,eAAE,SAASC,KAAK,MAAO;AACtB,gBAAA7C,QAAO,KAAM,MAAM,SAAU2C,IAAG,KAAM;AACrC,sBAAKhD,YAAY,GAAI,GAAI;AACxB,wBAAK,CAAC,QAAQ,UAAU,CAAC4C,MAAK,IAAK,GAAI,GAAI;AAC1C,2BAAK,KAAM,GAAI;AAAA,oBAChB;AAAA,kBACD,WAAY,OAAO,IAAI,UAAU,OAAQ,GAAI,MAAM,UAAW;AAG7D,oBAAAM,KAAK,GAAI;AAAA,kBACV;AAAA,gBACD,CAAE;AAAA,cACH,GAAK,SAAU;AAEf,kBAAK,UAAU,CAAC,QAAS;AACxB,qBAAK;AAAA,cACN;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,QAAQ,WAAW;AAClB,YAAA7C,QAAO,KAAM,WAAW,SAAU2C,IAAG,KAAM;AAC1C,kBAAIG;AACJ,sBAAUA,SAAQ9C,QAAO,QAAS,KAAK,MAAM8C,MAAM,KAAM,IAAK;AAC7D,qBAAK,OAAQA,QAAO,CAAE;AAGtB,oBAAKA,UAAS,aAAc;AAC3B;AAAA,gBACD;AAAA,cACD;AAAA,YACD,CAAE;AACF,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA,UAIA,KAAK,SAAU,IAAK;AACnB,mBAAO,KACN9C,QAAO,QAAS,IAAI,IAAK,IAAI,KAC7B,KAAK,SAAS;AAAA,UAChB;AAAA;AAAA,UAGA,OAAO,WAAW;AACjB,gBAAK,MAAO;AACX,qBAAO,CAAC;AAAA,YACT;AACA,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA;AAAA,UAKA,SAAS,WAAW;AACnB,qBAAS4C,SAAQ,CAAC;AAClB,mBAAO,SAAS;AAChB,mBAAO;AAAA,UACR;AAAA,UACA,UAAU,WAAW;AACpB,mBAAO,CAAC;AAAA,UACT;AAAA;AAAA;AAAA;AAAA,UAKA,MAAM,WAAW;AAChB,qBAASA,SAAQ,CAAC;AAClB,gBAAK,CAAC,UAAU,CAAC,QAAS;AACzB,qBAAO,SAAS;AAAA,YACjB;AACA,mBAAO;AAAA,UACR;AAAA,UACA,QAAQ,WAAW;AAClB,mBAAO,CAAC,CAAC;AAAA,UACV;AAAA;AAAA,UAGA,UAAU,SAAU,SAAS,MAAO;AACnC,gBAAK,CAAC,QAAS;AACd,qBAAO,QAAQ,CAAC;AAChB,qBAAO,CAAE,SAAS,KAAK,QAAQ,KAAK,MAAM,IAAI,IAAK;AACnD,cAAAA,OAAM,KAAM,IAAK;AACjB,kBAAK,CAAC,QAAS;AACd,qBAAK;AAAA,cACN;AAAA,YACD;AACA,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,MAAM,WAAW;AAChB,YAAAL,MAAK,SAAU,MAAM,SAAU;AAC/B,mBAAO;AAAA,UACR;AAAA;AAAA,UAGA,OAAO,WAAW;AACjB,mBAAO,CAAC,CAAC;AAAA,UACV;AAAA,QACD;AAED,eAAOA;AAAA,MACR;AAGA,eAAS,SAAUQ,IAAI;AACtB,eAAOA;AAAA,MACR;AACA,eAAS,QAAS,IAAK;AACtB,cAAM;AAAA,MACP;AAEA,eAAS,WAAY,OAAO,SAAS,QAAQ,SAAU;AACtD,YAAI;AAEJ,YAAI;AAGH,cAAK,SAASpD,YAAc,SAAS,MAAM,OAAU,GAAI;AACxD,mBAAO,KAAM,KAAM,EAAE,KAAM,OAAQ,EAAE,KAAM,MAAO;AAAA,UAGnD,WAAY,SAASA,YAAc,SAAS,MAAM,IAAO,GAAI;AAC5D,mBAAO,KAAM,OAAO,SAAS,MAAO;AAAA,UAGrC,OAAO;AAKN,oBAAQ,MAAO,QAAW,CAAE,KAAM,EAAE,MAAO,OAAQ,CAAE;AAAA,UACtD;AAAA,QAKD,SAAUqD,QAAQ;AAIjB,iBAAO,MAAO,QAAW,CAAEA,MAAM,CAAE;AAAA,QACpC;AAAA,MACD;AAEA,MAAAhD,QAAO,OAAQ;AAAA,QAEd,UAAU,SAAU,MAAO;AAC1B,cAAI,SAAS;AAAA;AAAA;AAAA,YAIX;AAAA,cAAE;AAAA,cAAU;AAAA,cAAYA,QAAO,UAAW,QAAS;AAAA,cAClDA,QAAO,UAAW,QAAS;AAAA,cAAG;AAAA,YAAE;AAAA,YACjC;AAAA,cAAE;AAAA,cAAW;AAAA,cAAQA,QAAO,UAAW,aAAc;AAAA,cACpDA,QAAO,UAAW,aAAc;AAAA,cAAG;AAAA,cAAG;AAAA,YAAW;AAAA,YAClD;AAAA,cAAE;AAAA,cAAU;AAAA,cAAQA,QAAO,UAAW,aAAc;AAAA,cACnDA,QAAO,UAAW,aAAc;AAAA,cAAG;AAAA,cAAG;AAAA,YAAW;AAAA,UACnD,GACA,QAAQ,WACR,UAAU;AAAA,YACT,OAAO,WAAW;AACjB,qBAAO;AAAA,YACR;AAAA,YACA,QAAQ,WAAW;AAClB,uBAAS,KAAM,SAAU,EAAE,KAAM,SAAU;AAC3C,qBAAO;AAAA,YACR;AAAA,YACA,SAAS,SAAU,IAAK;AACvB,qBAAO,QAAQ,KAAM,MAAM,EAAG;AAAA,YAC/B;AAAA;AAAA,YAGA,MAAM,WAA6C;AAClD,kBAAI,MAAM;AAEV,qBAAOA,QAAO,SAAU,SAAU,UAAW;AAC5C,gBAAAA,QAAO,KAAM,QAAQ,SAAU,IAAI,OAAQ;AAG1C,sBAAI,KAAKL,YAAY,IAAK,MAAO,CAAE,CAAE,CAAE,KAAK,IAAK,MAAO,CAAE,CAAE;AAK5D,2BAAU,MAAO,CAAE,CAAE,EAAG,WAAW;AAClC,wBAAI,WAAW,MAAM,GAAG,MAAO,MAAM,SAAU;AAC/C,wBAAK,YAAYA,YAAY,SAAS,OAAQ,GAAI;AACjD,+BAAS,QAAQ,EACf,SAAU,SAAS,MAAO,EAC1B,KAAM,SAAS,OAAQ,EACvB,KAAM,SAAS,MAAO;AAAA,oBACzB,OAAO;AACN,+BAAU,MAAO,CAAE,IAAI,MAAO;AAAA,wBAC7B;AAAA,wBACA,KAAK,CAAE,QAAS,IAAI;AAAA,sBACrB;AAAA,oBACD;AAAA,kBACD,CAAE;AAAA,gBACH,CAAE;AACF,sBAAM;AAAA,cACP,CAAE,EAAE,QAAQ;AAAA,YACb;AAAA,YACA,MAAM,SAAU,aAAa,YAAY,YAAa;AACrD,kBAAI,WAAW;AACf,uBAAS,QAAS,OAAOsD,WAAU,SAAS,SAAU;AACrD,uBAAO,WAAW;AACjB,sBAAI,OAAO,MACV,OAAO,WACP,aAAa,WAAW;AACvB,wBAAI,UAAU;AAKd,wBAAK,QAAQ,UAAW;AACvB;AAAA,oBACD;AAEA,+BAAW,QAAQ,MAAO,MAAM,IAAK;AAIrC,wBAAK,aAAaA,UAAS,QAAQ,GAAI;AACtC,4BAAM,IAAI,UAAW,0BAA2B;AAAA,oBACjD;AAMA,2BAAO;AAAA;AAAA;AAAA,qBAKJ,OAAO,aAAa,YACrB,OAAO,aAAa,eACrB,SAAS;AAGV,wBAAKtD,YAAY,IAAK,GAAI;AAGzB,0BAAK,SAAU;AACd,6BAAK;AAAA,0BACJ;AAAA,0BACA,QAAS,UAAUsD,WAAU,UAAU,OAAQ;AAAA,0BAC/C,QAAS,UAAUA,WAAU,SAAS,OAAQ;AAAA,wBAC/C;AAAA,sBAGD,OAAO;AAGN;AAEA,6BAAK;AAAA,0BACJ;AAAA,0BACA,QAAS,UAAUA,WAAU,UAAU,OAAQ;AAAA,0BAC/C,QAAS,UAAUA,WAAU,SAAS,OAAQ;AAAA,0BAC9C;AAAA,4BAAS;AAAA,4BAAUA;AAAA,4BAAU;AAAA,4BAC5BA,UAAS;AAAA,0BAAW;AAAA,wBACtB;AAAA,sBACD;AAAA,oBAGD,OAAO;AAIN,0BAAK,YAAY,UAAW;AAC3B,+BAAO;AACP,+BAAO,CAAE,QAAS;AAAA,sBACnB;AAIA,uBAAE,WAAWA,UAAS,aAAe,MAAM,IAAK;AAAA,oBACjD;AAAA,kBACD,GAGAC,WAAU,UACT,aACA,WAAW;AACV,wBAAI;AACH,iCAAW;AAAA,oBACZ,SAAUjC,IAAI;AAEb,0BAAKjB,QAAO,SAAS,eAAgB;AACpC,wBAAAA,QAAO,SAAS;AAAA,0BAAeiB;AAAA,0BAC9BiC,SAAQ;AAAA,wBAAW;AAAA,sBACrB;AAKA,0BAAK,QAAQ,KAAK,UAAW;AAI5B,4BAAK,YAAY,SAAU;AAC1B,iCAAO;AACP,iCAAO,CAAEjC,EAAE;AAAA,wBACZ;AAEA,wBAAAgC,UAAS,WAAY,MAAM,IAAK;AAAA,sBACjC;AAAA,oBACD;AAAA,kBACD;AAMF,sBAAK,OAAQ;AACZ,oBAAAC,SAAQ;AAAA,kBACT,OAAO;AAIN,wBAAKlD,QAAO,SAAS,cAAe;AACnC,sBAAAkD,SAAQ,aAAalD,QAAO,SAAS,aAAa;AAAA,oBACnD;AACA,oBAAAT,QAAO,WAAY2D,QAAQ;AAAA,kBAC5B;AAAA,gBACD;AAAA,cACD;AAEA,qBAAOlD,QAAO,SAAU,SAAU,UAAW;AAG5C,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACAL,YAAY,UAAW,IACtB,aACA;AAAA,oBACD,SAAS;AAAA,kBACV;AAAA,gBACD;AAGA,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACAA,YAAY,WAAY,IACvB,cACA;AAAA,kBACF;AAAA,gBACD;AAGA,uBAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,kBAChB;AAAA,oBACC;AAAA,oBACA;AAAA,oBACAA,YAAY,UAAW,IACtB,aACA;AAAA,kBACF;AAAA,gBACD;AAAA,cACD,CAAE,EAAE,QAAQ;AAAA,YACb;AAAA;AAAA;AAAA,YAIA,SAAS,SAAU,KAAM;AACxB,qBAAO,OAAO,OAAOK,QAAO,OAAQ,KAAK,OAAQ,IAAI;AAAA,YACtD;AAAA,UACD,GACA,WAAW,CAAC;AAGb,UAAAA,QAAO,KAAM,QAAQ,SAAUF,IAAG,OAAQ;AACzC,gBAAI,OAAO,MAAO,CAAE,GACnB,cAAc,MAAO,CAAE;AAKxB,oBAAS,MAAO,CAAE,CAAE,IAAI,KAAK;AAG7B,gBAAK,aAAc;AAClB,mBAAK;AAAA,gBACJ,WAAW;AAIV,0BAAQ;AAAA,gBACT;AAAA;AAAA;AAAA,gBAIA,OAAQ,IAAIA,EAAE,EAAG,CAAE,EAAE;AAAA;AAAA;AAAA,gBAIrB,OAAQ,IAAIA,EAAE,EAAG,CAAE,EAAE;AAAA;AAAA,gBAGrB,OAAQ,CAAE,EAAG,CAAE,EAAE;AAAA;AAAA,gBAGjB,OAAQ,CAAE,EAAG,CAAE,EAAE;AAAA,cAClB;AAAA,YACD;AAKA,iBAAK,IAAK,MAAO,CAAE,EAAE,IAAK;AAK1B,qBAAU,MAAO,CAAE,CAAE,IAAI,WAAW;AACnC,uBAAU,MAAO,CAAE,IAAI,MAAO,EAAG,SAAS,WAAW,SAAY,MAAM,SAAU;AACjF,qBAAO;AAAA,YACR;AAKA,qBAAU,MAAO,CAAE,IAAI,MAAO,IAAI,KAAK;AAAA,UACxC,CAAE;AAGF,kBAAQ,QAAS,QAAS;AAG1B,cAAK,MAAO;AACX,iBAAK,KAAM,UAAU,QAAS;AAAA,UAC/B;AAGA,iBAAO;AAAA,QACR;AAAA;AAAA,QAGA,MAAM,SAAU,aAAc;AAC7B,cAGC,YAAY,UAAU,QAGtBA,KAAI,WAGJ,kBAAkB,MAAOA,EAAE,GAC3B,gBAAgB,MAAM,KAAM,SAAU,GAGtC,UAAUE,QAAO,SAAS,GAG1B,aAAa,SAAUF,IAAI;AAC1B,mBAAO,SAAU,OAAQ;AACxB,8BAAiBA,EAAE,IAAI;AACvB,4BAAeA,EAAE,IAAI,UAAU,SAAS,IAAI,MAAM,KAAM,SAAU,IAAI;AACtE,kBAAK,CAAG,EAAE,WAAc;AACvB,wBAAQ,YAAa,iBAAiB,aAAc;AAAA,cACrD;AAAA,YACD;AAAA,UACD;AAGD,cAAK,aAAa,GAAI;AACrB;AAAA,cAAY;AAAA,cAAa,QAAQ,KAAM,WAAYA,EAAE,CAAE,EAAE;AAAA,cAAS,QAAQ;AAAA,cACzE,CAAC;AAAA,YAAU;AAGZ,gBAAK,QAAQ,MAAM,MAAM,aACxBH,YAAY,cAAeG,EAAE,KAAK,cAAeA,EAAE,EAAE,IAAK,GAAI;AAE9D,qBAAO,QAAQ,KAAK;AAAA,YACrB;AAAA,UACD;AAGA,iBAAQA,MAAM;AACb,uBAAY,cAAeA,EAAE,GAAG,WAAYA,EAAE,GAAG,QAAQ,MAAO;AAAA,UACjE;AAEA,iBAAO,QAAQ,QAAQ;AAAA,QACxB;AAAA,MACD,CAAE;AAKF,UAAI,cAAc;AAElB,MAAAE,QAAO,SAAS,gBAAgB,SAAU,OAAO,OAAQ;AAIxD,YAAKT,QAAO,WAAWA,QAAO,QAAQ,QAAQ,SAAS,YAAY,KAAM,MAAM,IAAK,GAAI;AACvF,UAAAA,QAAO,QAAQ,KAAM,gCAAgC,MAAM,SAAS,MAAM,OAAO,KAAM;AAAA,QACxF;AAAA,MACD;AAKA,MAAAS,QAAO,iBAAiB,SAAU,OAAQ;AACzC,QAAAT,QAAO,WAAY,WAAW;AAC7B,gBAAM;AAAA,QACP,CAAE;AAAA,MACH;AAMA,UAAI,YAAYS,QAAO,SAAS;AAEhC,MAAAA,QAAO,GAAG,QAAQ,SAAU,IAAK;AAEhC,kBACE,KAAM,EAAG,EAKT,MAAO,SAAU,OAAQ;AACzB,UAAAA,QAAO,eAAgB,KAAM;AAAA,QAC9B,CAAE;AAEH,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA,QAGd,SAAS;AAAA;AAAA;AAAA,QAIT,WAAW;AAAA;AAAA,QAGX,OAAO,SAAU,MAAO;AAGvB,cAAK,SAAS,OAAO,EAAEA,QAAO,YAAYA,QAAO,SAAU;AAC1D;AAAA,UACD;AAGA,UAAAA,QAAO,UAAU;AAGjB,cAAK,SAAS,QAAQ,EAAEA,QAAO,YAAY,GAAI;AAC9C;AAAA,UACD;AAGA,oBAAU,YAAaH,WAAU,CAAEG,OAAO,CAAE;AAAA,QAC7C;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,MAAM,OAAO,UAAU;AAG9B,eAAS,YAAY;AACpB,QAAAH,UAAS,oBAAqB,oBAAoB,SAAU;AAC5D,QAAAN,QAAO,oBAAqB,QAAQ,SAAU;AAC9C,QAAAS,QAAO,MAAM;AAAA,MACd;AAMA,UAAKH,UAAS,eAAe,cAC1BA,UAAS,eAAe,aAAa,CAACA,UAAS,gBAAgB,UAAa;AAG9E,QAAAN,QAAO,WAAYS,QAAO,KAAM;AAAA,MAEjC,OAAO;AAGN,QAAAH,UAAS,iBAAkB,oBAAoB,SAAU;AAGzD,QAAAN,QAAO,iBAAkB,QAAQ,SAAU;AAAA,MAC5C;AAOA,UAAI,SAAS,SAAU,OAAO,IAAI,KAAK,OAAO,WAAW,UAAU,KAAM;AACxE,YAAIO,KAAI,GACPG,OAAM,MAAM,QACZ,OAAO,OAAO;AAGf,YAAK,OAAQ,GAAI,MAAM,UAAW;AACjC,sBAAY;AACZ,eAAMH,MAAK,KAAM;AAChB,mBAAQ,OAAO,IAAIA,IAAG,IAAKA,EAAE,GAAG,MAAM,UAAU,GAAI;AAAA,UACrD;AAAA,QAGD,WAAY,UAAU,QAAY;AACjC,sBAAY;AAEZ,cAAK,CAACH,YAAY,KAAM,GAAI;AAC3B,kBAAM;AAAA,UACP;AAEA,cAAK,MAAO;AAGX,gBAAK,KAAM;AACV,iBAAG,KAAM,OAAO,KAAM;AACtB,mBAAK;AAAA,YAGN,OAAO;AACN,qBAAO;AACP,mBAAK,SAAU,MAAM,MAAMqD,QAAQ;AAClC,uBAAO,KAAK,KAAMhD,QAAQ,IAAK,GAAGgD,MAAM;AAAA,cACzC;AAAA,YACD;AAAA,UACD;AAEA,cAAK,IAAK;AACT,mBAAQlD,KAAIG,MAAKH,MAAM;AACtB;AAAA,gBACC,MAAOA,EAAE;AAAA,gBAAG;AAAA,gBAAK,MAChB,QACA,MAAM,KAAM,MAAOA,EAAE,GAAGA,IAAG,GAAI,MAAOA,EAAE,GAAG,GAAI,CAAE;AAAA,cACnD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,YAAK,WAAY;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,MAAO;AACX,iBAAO,GAAG,KAAM,KAAM;AAAA,QACvB;AAEA,eAAOG,OAAM,GAAI,MAAO,CAAE,GAAG,GAAI,IAAI;AAAA,MACtC;AAIA,UAAI,YAAY,SACf,aAAa;AAGd,eAAS,WAAY,MAAM,QAAS;AACnC,eAAO,OAAO,YAAY;AAAA,MAC3B;AAKA,eAAS,UAAW,QAAS;AAC5B,eAAO,OAAO,QAAS,WAAW,KAAM,EAAE,QAAS,YAAY,UAAW;AAAA,MAC3E;AACA,UAAI,aAAa,SAAU,OAAQ;AAQlC,eAAO,MAAM,aAAa,KAAK,MAAM,aAAa,KAAK,CAAG,CAAC,MAAM;AAAA,MAClE;AAKA,eAAS,OAAO;AACf,aAAK,UAAUD,QAAO,UAAU,KAAK;AAAA,MACtC;AAEA,WAAK,MAAM;AAEX,WAAK,YAAY;AAAA,QAEhB,OAAO,SAAU,OAAQ;AAGxB,cAAI,QAAQ,MAAO,KAAK,OAAQ;AAGhC,cAAK,CAAC,OAAQ;AACb,oBAAQ,CAAC;AAKT,gBAAK,WAAY,KAAM,GAAI;AAI1B,kBAAK,MAAM,UAAW;AACrB,sBAAO,KAAK,OAAQ,IAAI;AAAA,cAKzB,OAAO;AACN,uBAAO,eAAgB,OAAO,KAAK,SAAS;AAAA,kBAC3C;AAAA,kBACA,cAAc;AAAA,gBACf,CAAE;AAAA,cACH;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QACA,KAAK,SAAU,OAAO,MAAM,OAAQ;AACnC,cAAI,MACH,QAAQ,KAAK,MAAO,KAAM;AAI3B,cAAK,OAAO,SAAS,UAAW;AAC/B,kBAAO,UAAW,IAAK,CAAE,IAAI;AAAA,UAG9B,OAAO;AAGN,iBAAM,QAAQ,MAAO;AACpB,oBAAO,UAAW,IAAK,CAAE,IAAI,KAAM,IAAK;AAAA,YACzC;AAAA,UACD;AACA,iBAAO;AAAA,QACR;AAAA,QACA,KAAK,SAAU,OAAO,KAAM;AAC3B,iBAAO,QAAQ,SACd,KAAK,MAAO,KAAM;AAAA;AAAA,YAGlB,MAAO,KAAK,OAAQ,KAAK,MAAO,KAAK,OAAQ,EAAG,UAAW,GAAI,CAAE;AAAA;AAAA,QACnE;AAAA,QACA,QAAQ,SAAU,OAAO,KAAK,OAAQ;AAarC,cAAK,QAAQ,UACP,OAAO,OAAO,QAAQ,YAAc,UAAU,QAAc;AAEjE,mBAAO,KAAK,IAAK,OAAO,GAAI;AAAA,UAC7B;AAQA,eAAK,IAAK,OAAO,KAAK,KAAM;AAI5B,iBAAO,UAAU,SAAY,QAAQ;AAAA,QACtC;AAAA,QACA,QAAQ,SAAU,OAAO,KAAM;AAC9B,cAAIF,IACH,QAAQ,MAAO,KAAK,OAAQ;AAE7B,cAAK,UAAU,QAAY;AAC1B;AAAA,UACD;AAEA,cAAK,QAAQ,QAAY;AAGxB,gBAAK,MAAM,QAAS,GAAI,GAAI;AAI3B,oBAAM,IAAI,IAAK,SAAU;AAAA,YAC1B,OAAO;AACN,oBAAM,UAAW,GAAI;AAIrB,oBAAM,OAAO,QACZ,CAAE,GAAI,IACJ,IAAI,MAAO,aAAc,KAAK,CAAC;AAAA,YACnC;AAEA,YAAAA,KAAI,IAAI;AAER,mBAAQA,MAAM;AACb,qBAAO,MAAO,IAAKA,EAAE,CAAE;AAAA,YACxB;AAAA,UACD;AAGA,cAAK,QAAQ,UAAaE,QAAO,cAAe,KAAM,GAAI;AAMzD,gBAAK,MAAM,UAAW;AACrB,oBAAO,KAAK,OAAQ,IAAI;AAAA,YACzB,OAAO;AACN,qBAAO,MAAO,KAAK,OAAQ;AAAA,YAC5B;AAAA,UACD;AAAA,QACD;AAAA,QACA,SAAS,SAAU,OAAQ;AAC1B,cAAI,QAAQ,MAAO,KAAK,OAAQ;AAChC,iBAAO,UAAU,UAAa,CAACA,QAAO,cAAe,KAAM;AAAA,QAC5D;AAAA,MACD;AACA,UAAI,WAAW,IAAI,KAAK;AAExB,UAAI,WAAW,IAAI,KAAK;AAcxB,UAAI,SAAS,iCACZ,aAAa;AAEd,eAASmD,SAAS,MAAO;AACxB,YAAK,SAAS,QAAS;AACtB,iBAAO;AAAA,QACR;AAEA,YAAK,SAAS,SAAU;AACvB,iBAAO;AAAA,QACR;AAEA,YAAK,SAAS,QAAS;AACtB,iBAAO;AAAA,QACR;AAGA,YAAK,SAAS,CAAC,OAAO,IAAK;AAC1B,iBAAO,CAAC;AAAA,QACT;AAEA,YAAK,OAAO,KAAM,IAAK,GAAI;AAC1B,iBAAO,KAAK,MAAO,IAAK;AAAA,QACzB;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,MAAM,KAAK,MAAO;AACpC,YAAI;AAIJ,YAAK,SAAS,UAAa,KAAK,aAAa,GAAI;AAChD,iBAAO,UAAU,IAAI,QAAS,YAAY,KAAM,EAAE,YAAY;AAC9D,iBAAO,KAAK,aAAc,IAAK;AAE/B,cAAK,OAAO,SAAS,UAAW;AAC/B,gBAAI;AACH,qBAAOA,SAAS,IAAK;AAAA,YACtB,SAAUlC,IAAI;AAAA,YAAC;AAGf,qBAAS,IAAK,MAAM,KAAK,IAAK;AAAA,UAC/B,OAAO;AACN,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAEA,MAAAjB,QAAO,OAAQ;AAAA,QACd,SAAS,SAAU,MAAO;AACzB,iBAAO,SAAS,QAAS,IAAK,KAAK,SAAS,QAAS,IAAK;AAAA,QAC3D;AAAA,QAEA,MAAM,SAAU,MAAM,MAAM,MAAO;AAClC,iBAAO,SAAS,OAAQ,MAAM,MAAM,IAAK;AAAA,QAC1C;AAAA,QAEA,YAAY,SAAU,MAAM,MAAO;AAClC,mBAAS,OAAQ,MAAM,IAAK;AAAA,QAC7B;AAAA;AAAA;AAAA,QAIA,OAAO,SAAU,MAAM,MAAM,MAAO;AACnC,iBAAO,SAAS,OAAQ,MAAM,MAAM,IAAK;AAAA,QAC1C;AAAA,QAEA,aAAa,SAAU,MAAM,MAAO;AACnC,mBAAS,OAAQ,MAAM,IAAK;AAAA,QAC7B;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,KAAK,OAAQ;AAC5B,cAAIF,IAAG,MAAM,MACZ,OAAO,KAAM,CAAE,GACfwB,SAAQ,QAAQ,KAAK;AAGtB,cAAK,QAAQ,QAAY;AACxB,gBAAK,KAAK,QAAS;AAClB,qBAAO,SAAS,IAAK,IAAK;AAE1B,kBAAK,KAAK,aAAa,KAAK,CAAC,SAAS,IAAK,MAAM,cAAe,GAAI;AACnE,gBAAAxB,KAAIwB,OAAM;AACV,uBAAQxB,MAAM;AAIb,sBAAKwB,OAAOxB,EAAE,GAAI;AACjB,2BAAOwB,OAAOxB,EAAE,EAAE;AAClB,wBAAK,KAAK,QAAS,OAAQ,MAAM,GAAI;AACpC,6BAAO,UAAW,KAAK,MAAO,CAAE,CAAE;AAClC,+BAAU,MAAM,MAAM,KAAM,IAAK,CAAE;AAAA,oBACpC;AAAA,kBACD;AAAA,gBACD;AACA,yBAAS,IAAK,MAAM,gBAAgB,IAAK;AAAA,cAC1C;AAAA,YACD;AAEA,mBAAO;AAAA,UACR;AAGA,cAAK,OAAO,QAAQ,UAAW;AAC9B,mBAAO,KAAK,KAAM,WAAW;AAC5B,uBAAS,IAAK,MAAM,GAAI;AAAA,YACzB,CAAE;AAAA,UACH;AAEA,iBAAO,OAAQ,MAAM,SAAUkD,QAAQ;AACtC,gBAAII;AAOJ,gBAAK,QAAQJ,WAAU,QAAY;AAIlC,cAAAI,QAAO,SAAS,IAAK,MAAM,GAAI;AAC/B,kBAAKA,UAAS,QAAY;AACzB,uBAAOA;AAAA,cACR;AAIA,cAAAA,QAAO,SAAU,MAAM,GAAI;AAC3B,kBAAKA,UAAS,QAAY;AACzB,uBAAOA;AAAA,cACR;AAGA;AAAA,YACD;AAGA,iBAAK,KAAM,WAAW;AAGrB,uBAAS,IAAK,MAAM,KAAKJ,MAAM;AAAA,YAChC,CAAE;AAAA,UACH,GAAG,MAAM,OAAO,UAAU,SAAS,GAAG,MAAM,IAAK;AAAA,QAClD;AAAA,QAEA,YAAY,SAAU,KAAM;AAC3B,iBAAO,KAAK,KAAM,WAAW;AAC5B,qBAAS,OAAQ,MAAM,GAAI;AAAA,UAC5B,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAGF,MAAAhD,QAAO,OAAQ;AAAA,QACd,OAAO,SAAU,MAAMO,OAAM,MAAO;AACnC,cAAIqC;AAEJ,cAAK,MAAO;AACX,YAAArC,SAASA,SAAQ,QAAS;AAC1B,YAAAqC,SAAQ,SAAS,IAAK,MAAMrC,KAAK;AAGjC,gBAAK,MAAO;AACX,kBAAK,CAACqC,UAAS,MAAM,QAAS,IAAK,GAAI;AACtC,gBAAAA,SAAQ,SAAS,OAAQ,MAAMrC,OAAMP,QAAO,UAAW,IAAK,CAAE;AAAA,cAC/D,OAAO;AACN,gBAAA4C,OAAM,KAAM,IAAK;AAAA,cAClB;AAAA,YACD;AACA,mBAAOA,UAAS,CAAC;AAAA,UAClB;AAAA,QACD;AAAA,QAEA,SAAS,SAAU,MAAMrC,OAAO;AAC/B,UAAAA,QAAOA,SAAQ;AAEf,cAAIqC,SAAQ5C,QAAO,MAAO,MAAMO,KAAK,GACpC,cAAcqC,OAAM,QACpB,KAAKA,OAAM,MAAM,GACjBS,SAAQrD,QAAO,YAAa,MAAMO,KAAK,GACvC+C,QAAO,WAAW;AACjB,YAAAtD,QAAO,QAAS,MAAMO,KAAK;AAAA,UAC5B;AAGD,cAAK,OAAO,cAAe;AAC1B,iBAAKqC,OAAM,MAAM;AACjB;AAAA,UACD;AAEA,cAAK,IAAK;AAIT,gBAAKrC,UAAS,MAAO;AACpB,cAAAqC,OAAM,QAAS,YAAa;AAAA,YAC7B;AAGA,mBAAOS,OAAM;AACb,eAAG,KAAM,MAAMC,OAAMD,MAAM;AAAA,UAC5B;AAEA,cAAK,CAAC,eAAeA,QAAQ;AAC5B,YAAAA,OAAM,MAAM,KAAK;AAAA,UAClB;AAAA,QACD;AAAA;AAAA,QAGA,aAAa,SAAU,MAAM9C,OAAO;AACnC,cAAI,MAAMA,QAAO;AACjB,iBAAO,SAAS,IAAK,MAAM,GAAI,KAAK,SAAS,OAAQ,MAAM,KAAK;AAAA,YAC/D,OAAOP,QAAO,UAAW,aAAc,EAAE,IAAK,WAAW;AACxD,uBAAS,OAAQ,MAAM,CAAEO,QAAO,SAAS,GAAI,CAAE;AAAA,YAChD,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAP,QAAO,GAAG,OAAQ;AAAA,QACjB,OAAO,SAAUO,OAAM,MAAO;AAC7B,cAAI,SAAS;AAEb,cAAK,OAAOA,UAAS,UAAW;AAC/B,mBAAOA;AACP,YAAAA,QAAO;AACP;AAAA,UACD;AAEA,cAAK,UAAU,SAAS,QAAS;AAChC,mBAAOP,QAAO,MAAO,KAAM,CAAE,GAAGO,KAAK;AAAA,UACtC;AAEA,iBAAO,SAAS,SACf,OACA,KAAK,KAAM,WAAW;AACrB,gBAAIqC,SAAQ5C,QAAO,MAAO,MAAMO,OAAM,IAAK;AAG3C,YAAAP,QAAO,YAAa,MAAMO,KAAK;AAE/B,gBAAKA,UAAS,QAAQqC,OAAO,CAAE,MAAM,cAAe;AACnD,cAAA5C,QAAO,QAAS,MAAMO,KAAK;AAAA,YAC5B;AAAA,UACD,CAAE;AAAA,QACJ;AAAA,QACA,SAAS,SAAUA,OAAO;AACzB,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAP,QAAO,QAAS,MAAMO,KAAK;AAAA,UAC5B,CAAE;AAAA,QACH;AAAA,QACA,YAAY,SAAUA,OAAO;AAC5B,iBAAO,KAAK,MAAOA,SAAQ,MAAM,CAAC,CAAE;AAAA,QACrC;AAAA;AAAA;AAAA,QAIA,SAAS,SAAUA,OAAM,KAAM;AAC9B,cAAI,KACH,QAAQ,GACR,QAAQP,QAAO,SAAS,GACxB,WAAW,MACXF,KAAI,KAAK,QACT,UAAU,WAAW;AACpB,gBAAK,CAAG,EAAE,OAAU;AACnB,oBAAM,YAAa,UAAU,CAAE,QAAS,CAAE;AAAA,YAC3C;AAAA,UACD;AAED,cAAK,OAAOS,UAAS,UAAW;AAC/B,kBAAMA;AACN,YAAAA,QAAO;AAAA,UACR;AACA,UAAAA,QAAOA,SAAQ;AAEf,iBAAQT,MAAM;AACb,kBAAM,SAAS,IAAK,SAAUA,EAAE,GAAGS,QAAO,YAAa;AACvD,gBAAK,OAAO,IAAI,OAAQ;AACvB;AACA,kBAAI,MAAM,IAAK,OAAQ;AAAA,YACxB;AAAA,UACD;AACA,kBAAQ;AACR,iBAAO,MAAM,QAAS,GAAI;AAAA,QAC3B;AAAA,MACD,CAAE;AACF,UAAI,OAAS,sCAAwC;AAErD,UAAI,UAAU,IAAI,OAAQ,mBAAmB,OAAO,eAAe,GAAI;AAGvE,UAAI,YAAY,CAAE,OAAO,SAAS,UAAU,MAAO;AAEnD,UAAI,kBAAkBV,UAAS;AAI9B,UAAI,aAAa,SAAU,MAAO;AAChC,eAAOG,QAAO,SAAU,KAAK,eAAe,IAAK;AAAA,MAClD,GACA,WAAW,EAAE,UAAU,KAAK;AAO7B,UAAK,gBAAgB,aAAc;AAClC,qBAAa,SAAU,MAAO;AAC7B,iBAAOA,QAAO,SAAU,KAAK,eAAe,IAAK,KAChD,KAAK,YAAa,QAAS,MAAM,KAAK;AAAA,QACxC;AAAA,MACD;AACD,UAAI,qBAAqB,SAAU,MAAM,IAAK;AAI5C,eAAO,MAAM;AAGb,eAAO,KAAK,MAAM,YAAY,UAC7B,KAAK,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA,QAMvB,WAAY,IAAK,KAEjBA,QAAO,IAAK,MAAM,SAAU,MAAM;AAAA,MACpC;AAID,eAAS,UAAW,MAAM,MAAM,YAAY,OAAQ;AACnD,YAAI,UAAU,OACb,gBAAgB,IAChB,eAAe,QACd,WAAW;AACV,iBAAO,MAAM,IAAI;AAAA,QAClB,IACA,WAAW;AACV,iBAAOA,QAAO,IAAK,MAAM,MAAM,EAAG;AAAA,QACnC,GACD,UAAU,aAAa,GACvBuD,QAAO,cAAc,WAAY,CAAE,MAAOvD,QAAO,UAAW,IAAK,IAAI,KAAK,OAG1E,gBAAgB,KAAK,aAClBA,QAAO,UAAW,IAAK,KAAKuD,UAAS,QAAQ,CAAC,YAChD,QAAQ,KAAMvD,QAAO,IAAK,MAAM,IAAK,CAAE;AAEzC,YAAK,iBAAiB,cAAe,CAAE,MAAMuD,OAAO;AAInD,oBAAU,UAAU;AAGpB,UAAAA,QAAOA,SAAQ,cAAe,CAAE;AAGhC,0BAAgB,CAAC,WAAW;AAE5B,iBAAQ,iBAAkB;AAIzB,YAAAvD,QAAO,MAAO,MAAM,MAAM,gBAAgBuD,KAAK;AAC/C,iBAAO,IAAI,UAAY,KAAM,QAAQ,aAAa,IAAI,WAAW,SAAW,GAAI;AAC/E,8BAAgB;AAAA,YACjB;AACA,4BAAgB,gBAAgB;AAAA,UAEjC;AAEA,0BAAgB,gBAAgB;AAChC,UAAAvD,QAAO,MAAO,MAAM,MAAM,gBAAgBuD,KAAK;AAG/C,uBAAa,cAAc,CAAC;AAAA,QAC7B;AAEA,YAAK,YAAa;AACjB,0BAAgB,CAAC,iBAAiB,CAAC,WAAW;AAG9C,qBAAW,WAAY,CAAE,IACxB,iBAAkB,WAAY,CAAE,IAAI,KAAM,WAAY,CAAE,IACxD,CAAC,WAAY,CAAE;AAChB,cAAK,OAAQ;AACZ,kBAAM,OAAOA;AACb,kBAAM,QAAQ;AACd,kBAAM,MAAM;AAAA,UACb;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAGA,UAAI,oBAAoB,CAAC;AAEzB,eAAS,kBAAmB,MAAO;AAClC,YAAI,MACH,MAAM,KAAK,eACX7B,YAAW,KAAK,UAChB,UAAU,kBAAmBA,SAAS;AAEvC,YAAK,SAAU;AACd,iBAAO;AAAA,QACR;AAEA,eAAO,IAAI,KAAK,YAAa,IAAI,cAAeA,SAAS,CAAE;AAC3D,kBAAU1B,QAAO,IAAK,MAAM,SAAU;AAEtC,aAAK,WAAW,YAAa,IAAK;AAElC,YAAK,YAAY,QAAS;AACzB,oBAAU;AAAA,QACX;AACA,0BAAmB0B,SAAS,IAAI;AAEhC,eAAO;AAAA,MACR;AAEA,eAAS,SAAU,UAAU8B,OAAO;AACnC,YAAI,SAAS,MACZ,SAAS,CAAC,GACVV,SAAQ,GACR,SAAS,SAAS;AAGnB,eAAQA,SAAQ,QAAQA,UAAU;AACjC,iBAAO,SAAUA,MAAM;AACvB,cAAK,CAAC,KAAK,OAAQ;AAClB;AAAA,UACD;AAEA,oBAAU,KAAK,MAAM;AACrB,cAAKU,OAAO;AAKX,gBAAK,YAAY,QAAS;AACzB,qBAAQV,MAAM,IAAI,SAAS,IAAK,MAAM,SAAU,KAAK;AACrD,kBAAK,CAAC,OAAQA,MAAM,GAAI;AACvB,qBAAK,MAAM,UAAU;AAAA,cACtB;AAAA,YACD;AACA,gBAAK,KAAK,MAAM,YAAY,MAAM,mBAAoB,IAAK,GAAI;AAC9D,qBAAQA,MAAM,IAAI,kBAAmB,IAAK;AAAA,YAC3C;AAAA,UACD,OAAO;AACN,gBAAK,YAAY,QAAS;AACzB,qBAAQA,MAAM,IAAI;AAGlB,uBAAS,IAAK,MAAM,WAAW,OAAQ;AAAA,YACxC;AAAA,UACD;AAAA,QACD;AAGA,aAAMA,SAAQ,GAAGA,SAAQ,QAAQA,UAAU;AAC1C,cAAK,OAAQA,MAAM,KAAK,MAAO;AAC9B,qBAAUA,MAAM,EAAE,MAAM,UAAU,OAAQA,MAAM;AAAA,UACjD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAA9C,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,WAAW;AAChB,iBAAO,SAAU,MAAM,IAAK;AAAA,QAC7B;AAAA,QACA,MAAM,WAAW;AAChB,iBAAO,SAAU,IAAK;AAAA,QACvB;AAAA,QACA,QAAQ,SAAU,OAAQ;AACzB,cAAK,OAAO,UAAU,WAAY;AACjC,mBAAO,QAAQ,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,UACxC;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAK,mBAAoB,IAAK,GAAI;AACjC,cAAAA,QAAQ,IAAK,EAAE,KAAK;AAAA,YACrB,OAAO;AACN,cAAAA,QAAQ,IAAK,EAAE,KAAK;AAAA,YACrB;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AACF,UAAI,iBAAmB;AAEvB,UAAI,WAAa;AAEjB,UAAI,cAAgB;AAIpB,OAAE,WAAW;AACZ,YAAI,WAAWH,UAAS,uBAAuB,GAC9C4D,OAAM,SAAS,YAAa5D,UAAS,cAAe,KAAM,CAAE,GAC5D,QAAQA,UAAS,cAAe,OAAQ;AAMzC,cAAM,aAAc,QAAQ,OAAQ;AACpC,cAAM,aAAc,WAAW,SAAU;AACzC,cAAM,aAAc,QAAQ,GAAI;AAEhC,QAAA4D,KAAI,YAAa,KAAM;AAIvB,gBAAQ,aAAaA,KAAI,UAAW,IAAK,EAAE,UAAW,IAAK,EAAE,UAAU;AAIvE,QAAAA,KAAI,YAAY;AAChB,gBAAQ,iBAAiB,CAAC,CAACA,KAAI,UAAW,IAAK,EAAE,UAAU;AAK3D,QAAAA,KAAI,YAAY;AAChB,gBAAQ,SAAS,CAAC,CAACA,KAAI;AAAA,MACxB,GAAI;AAIJ,UAAI,UAAU;AAAA;AAAA;AAAA;AAAA,QAKb,OAAO,CAAE,GAAG,WAAW,UAAW;AAAA,QAClC,KAAK,CAAE,GAAG,qBAAqB,qBAAsB;AAAA,QACrD,IAAI,CAAE,GAAG,kBAAkB,kBAAmB;AAAA,QAC9C,IAAI,CAAE,GAAG,sBAAsB,uBAAwB;AAAA,QAEvD,UAAU,CAAE,GAAG,IAAI,EAAG;AAAA,MACvB;AAEA,cAAQ,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,UAAU,QAAQ;AAC7E,cAAQ,KAAK,QAAQ;AAGrB,UAAK,CAAC,QAAQ,QAAS;AACtB,gBAAQ,WAAW,QAAQ,SAAS,CAAE,GAAG,gCAAgC,WAAY;AAAA,MACtF;AAGA,eAAS,OAAQ,SAAS,KAAM;AAI/B,YAAI;AAEJ,YAAK,OAAO,QAAQ,yBAAyB,aAAc;AAC1D,gBAAM,QAAQ,qBAAsB,OAAO,GAAI;AAAA,QAEhD,WAAY,OAAO,QAAQ,qBAAqB,aAAc;AAC7D,gBAAM,QAAQ,iBAAkB,OAAO,GAAI;AAAA,QAE5C,OAAO;AACN,gBAAM,CAAC;AAAA,QACR;AAEA,YAAK,QAAQ,UAAa,OAAO,SAAU,SAAS,GAAI,GAAI;AAC3D,iBAAOzD,QAAO,MAAO,CAAE,OAAQ,GAAG,GAAI;AAAA,QACvC;AAEA,eAAO;AAAA,MACR;AAIA,eAAS,cAAe,OAAO,aAAc;AAC5C,YAAIF,KAAI,GACP4C,KAAI,MAAM;AAEX,eAAQ5C,KAAI4C,IAAG5C,MAAM;AACpB,mBAAS;AAAA,YACR,MAAOA,EAAE;AAAA,YACT;AAAA,YACA,CAAC,eAAe,SAAS,IAAK,YAAaA,EAAE,GAAG,YAAa;AAAA,UAC9D;AAAA,QACD;AAAA,MACD;AAGA,UAAI,QAAQ;AAEZ,eAAS,cAAe,OAAO,SAAS,SAAS4D,YAAW,SAAU;AACrE,YAAI,MAAM,KAAK,KAAK,MAAM,UAAUxD,IACnC,WAAW,QAAQ,uBAAuB,GAC1C,QAAQ,CAAC,GACTJ,KAAI,GACJ4C,KAAI,MAAM;AAEX,eAAQ5C,KAAI4C,IAAG5C,MAAM;AACpB,iBAAO,MAAOA,EAAE;AAEhB,cAAK,QAAQ,SAAS,GAAI;AAGzB,gBAAK,OAAQ,IAAK,MAAM,UAAW;AAIlC,cAAAE,QAAO,MAAO,OAAO,KAAK,WAAW,CAAE,IAAK,IAAI,IAAK;AAAA,YAGtD,WAAY,CAAC,MAAM,KAAM,IAAK,GAAI;AACjC,oBAAM,KAAM,QAAQ,eAAgB,IAAK,CAAE;AAAA,YAG5C,OAAO;AACN,oBAAM,OAAO,SAAS,YAAa,QAAQ,cAAe,KAAM,CAAE;AAGlE,qBAAQ,SAAS,KAAM,IAAK,KAAK,CAAE,IAAI,EAAG,GAAK,CAAE,EAAE,YAAY;AAC/D,qBAAO,QAAS,GAAI,KAAK,QAAQ;AACjC,kBAAI,YAAY,KAAM,CAAE,IAAIA,QAAO,cAAe,IAAK,IAAI,KAAM,CAAE;AAGnE,cAAAE,KAAI,KAAM,CAAE;AACZ,qBAAQA,MAAM;AACb,sBAAM,IAAI;AAAA,cACX;AAIA,cAAAF,QAAO,MAAO,OAAO,IAAI,UAAW;AAGpC,oBAAM,SAAS;AAGf,kBAAI,cAAc;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAGA,iBAAS,cAAc;AAEvB,QAAAF,KAAI;AACJ,eAAU,OAAO,MAAOA,IAAI,GAAM;AAGjC,cAAK4D,cAAa1D,QAAO,QAAS,MAAM0D,UAAU,IAAI,IAAK;AAC1D,gBAAK,SAAU;AACd,sBAAQ,KAAM,IAAK;AAAA,YACpB;AACA;AAAA,UACD;AAEA,qBAAW,WAAY,IAAK;AAG5B,gBAAM,OAAQ,SAAS,YAAa,IAAK,GAAG,QAAS;AAGrD,cAAK,UAAW;AACf,0BAAe,GAAI;AAAA,UACpB;AAGA,cAAK,SAAU;AACd,YAAAxD,KAAI;AACJ,mBAAU,OAAO,IAAKA,IAAI,GAAM;AAC/B,kBAAK,YAAY,KAAM,KAAK,QAAQ,EAAG,GAAI;AAC1C,wBAAQ,KAAM,IAAK;AAAA,cACpB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAGA,UAAI,iBAAiB;AAErB,eAAS,aAAa;AACrB,eAAO;AAAA,MACR;AAEA,eAAS,cAAc;AACtB,eAAO;AAAA,MACR;AAQA,eAAS,WAAY,MAAMK,OAAO;AACjC,eAAS,SAAS,kBAAkB,OAAUA,UAAS;AAAA,MACxD;AAKA,eAAS,oBAAoB;AAC5B,YAAI;AACH,iBAAOV,UAAS;AAAA,QACjB,SAAU,KAAM;AAAA,QAAE;AAAA,MACnB;AAEA,eAAS8D,IAAI,MAAM,OAAO,UAAU,MAAM,IAAIC,MAAM;AACnD,YAAI,QAAQrD;AAGZ,YAAK,OAAO,UAAU,UAAW;AAGhC,cAAK,OAAO,aAAa,UAAW;AAGnC,mBAAO,QAAQ;AACf,uBAAW;AAAA,UACZ;AACA,eAAMA,SAAQ,OAAQ;AACrB,YAAAoD,IAAI,MAAMpD,OAAM,UAAU,MAAM,MAAOA,KAAK,GAAGqD,IAAI;AAAA,UACpD;AACA,iBAAO;AAAA,QACR;AAEA,YAAK,QAAQ,QAAQ,MAAM,MAAO;AAGjC,eAAK;AACL,iBAAO,WAAW;AAAA,QACnB,WAAY,MAAM,MAAO;AACxB,cAAK,OAAO,aAAa,UAAW;AAGnC,iBAAK;AACL,mBAAO;AAAA,UACR,OAAO;AAGN,iBAAK;AACL,mBAAO;AACP,uBAAW;AAAA,UACZ;AAAA,QACD;AACA,YAAK,OAAO,OAAQ;AACnB,eAAK;AAAA,QACN,WAAY,CAAC,IAAK;AACjB,iBAAO;AAAA,QACR;AAEA,YAAKA,SAAQ,GAAI;AAChB,mBAAS;AACT,eAAK,SAAUC,QAAQ;AAGtB,YAAA7D,QAAO,EAAE,IAAK6D,MAAM;AACpB,mBAAO,OAAO,MAAO,MAAM,SAAU;AAAA,UACtC;AAGA,aAAG,OAAO,OAAO,SAAU,OAAO,OAAO7D,QAAO;AAAA,QACjD;AACA,eAAO,KAAK,KAAM,WAAW;AAC5B,UAAAA,QAAO,MAAM,IAAK,MAAM,OAAO,IAAI,MAAM,QAAS;AAAA,QACnD,CAAE;AAAA,MACH;AAMA,MAAAA,QAAO,QAAQ;AAAA,QAEd,QAAQ,CAAC;AAAA,QAET,KAAK,SAAU,MAAM,OAAO,SAAS,MAAM,UAAW;AAErD,cAAI,aAAa,aAAa,KAC7B8D,SAAQC,IAAG,WACX,SAAS,UAAUxD,OAAM,YAAY,UACrC,WAAW,SAAS,IAAK,IAAK;AAG/B,cAAK,CAAC,WAAY,IAAK,GAAI;AAC1B;AAAA,UACD;AAGA,cAAK,QAAQ,SAAU;AACtB,0BAAc;AACd,sBAAU,YAAY;AACtB,uBAAW,YAAY;AAAA,UACxB;AAIA,cAAK,UAAW;AACf,YAAAP,QAAO,KAAK,gBAAiB,iBAAiB,QAAS;AAAA,UACxD;AAGA,cAAK,CAAC,QAAQ,MAAO;AACpB,oBAAQ,OAAOA,QAAO;AAAA,UACvB;AAGA,cAAK,EAAG8D,UAAS,SAAS,SAAW;AACpC,YAAAA,UAAS,SAAS,SAAS,uBAAO,OAAQ,IAAK;AAAA,UAChD;AACA,cAAK,EAAG,cAAc,SAAS,SAAW;AACzC,0BAAc,SAAS,SAAS,SAAU7C,IAAI;AAI7C,qBAAO,OAAOjB,YAAW,eAAeA,QAAO,MAAM,cAAciB,GAAE,OACpEjB,QAAO,MAAM,SAAS,MAAO,MAAM,SAAU,IAAI;AAAA,YACnD;AAAA,UACD;AAGA,mBAAU,SAAS,IAAK,MAAO,aAAc,KAAK,CAAE,EAAG;AACvD,UAAA+D,KAAI,MAAM;AACV,iBAAQA,MAAM;AACb,kBAAM,eAAe,KAAM,MAAOA,EAAE,CAAE,KAAK,CAAC;AAC5C,YAAAxD,QAAO,WAAW,IAAK,CAAE;AACzB,0BAAe,IAAK,CAAE,KAAK,IAAK,MAAO,GAAI,EAAE,KAAK;AAGlD,gBAAK,CAACA,OAAO;AACZ;AAAA,YACD;AAGA,sBAAUP,QAAO,MAAM,QAASO,KAAK,KAAK,CAAC;AAG3C,YAAAA,SAAS,WAAW,QAAQ,eAAe,QAAQ,aAAcA;AAGjE,sBAAUP,QAAO,MAAM,QAASO,KAAK,KAAK,CAAC;AAG3C,wBAAYP,QAAO,OAAQ;AAAA,cAC1B,MAAMO;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM,QAAQ;AAAA,cACd;AAAA,cACA,cAAc,YAAYP,QAAO,KAAK,MAAM,aAAa,KAAM,QAAS;AAAA,cACxE,WAAW,WAAW,KAAM,GAAI;AAAA,YACjC,GAAG,WAAY;AAGf,gBAAK,EAAG,WAAW8D,QAAQvD,KAAK,IAAM;AACrC,yBAAWuD,QAAQvD,KAAK,IAAI,CAAC;AAC7B,uBAAS,gBAAgB;AAGzB,kBAAK,CAAC,QAAQ,SACb,QAAQ,MAAM,KAAM,MAAM,MAAM,YAAY,WAAY,MAAM,OAAQ;AAEtE,oBAAK,KAAK,kBAAmB;AAC5B,uBAAK,iBAAkBA,OAAM,WAAY;AAAA,gBAC1C;AAAA,cACD;AAAA,YACD;AAEA,gBAAK,QAAQ,KAAM;AAClB,sBAAQ,IAAI,KAAM,MAAM,SAAU;AAElC,kBAAK,CAAC,UAAU,QAAQ,MAAO;AAC9B,0BAAU,QAAQ,OAAO,QAAQ;AAAA,cAClC;AAAA,YACD;AAGA,gBAAK,UAAW;AACf,uBAAS,OAAQ,SAAS,iBAAiB,GAAG,SAAU;AAAA,YACzD,OAAO;AACN,uBAAS,KAAM,SAAU;AAAA,YAC1B;AAGA,YAAAP,QAAO,MAAM,OAAQO,KAAK,IAAI;AAAA,UAC/B;AAAA,QAED;AAAA;AAAA,QAGA,QAAQ,SAAU,MAAM,OAAO,SAAS,UAAU,aAAc;AAE/D,cAAIL,IAAG,WAAW,KACjB4D,SAAQC,IAAG,WACX,SAAS,UAAUxD,OAAM,YAAY,UACrC,WAAW,SAAS,QAAS,IAAK,KAAK,SAAS,IAAK,IAAK;AAE3D,cAAK,CAAC,YAAY,EAAGuD,UAAS,SAAS,SAAW;AACjD;AAAA,UACD;AAGA,mBAAU,SAAS,IAAK,MAAO,aAAc,KAAK,CAAE,EAAG;AACvD,UAAAC,KAAI,MAAM;AACV,iBAAQA,MAAM;AACb,kBAAM,eAAe,KAAM,MAAOA,EAAE,CAAE,KAAK,CAAC;AAC5C,YAAAxD,QAAO,WAAW,IAAK,CAAE;AACzB,0BAAe,IAAK,CAAE,KAAK,IAAK,MAAO,GAAI,EAAE,KAAK;AAGlD,gBAAK,CAACA,OAAO;AACZ,mBAAMA,SAAQuD,SAAS;AACtB,gBAAA9D,QAAO,MAAM,OAAQ,MAAMO,QAAO,MAAOwD,EAAE,GAAG,SAAS,UAAU,IAAK;AAAA,cACvE;AACA;AAAA,YACD;AAEA,sBAAU/D,QAAO,MAAM,QAASO,KAAK,KAAK,CAAC;AAC3C,YAAAA,SAAS,WAAW,QAAQ,eAAe,QAAQ,aAAcA;AACjE,uBAAWuD,QAAQvD,KAAK,KAAK,CAAC;AAC9B,kBAAM,IAAK,CAAE,KACZ,IAAI,OAAQ,YAAY,WAAW,KAAM,eAAgB,IAAI,SAAU;AAGxE,wBAAYL,KAAI,SAAS;AACzB,mBAAQA,MAAM;AACb,0BAAY,SAAUA,EAAE;AAExB,mBAAO,eAAe,aAAa,UAAU,cAC1C,CAAC,WAAW,QAAQ,SAAS,UAAU,UACvC,CAAC,OAAO,IAAI,KAAM,UAAU,SAAU,OACtC,CAAC,YAAY,aAAa,UAAU,YACrC,aAAa,QAAQ,UAAU,WAAa;AAC7C,yBAAS,OAAQA,IAAG,CAAE;AAEtB,oBAAK,UAAU,UAAW;AACzB,2BAAS;AAAA,gBACV;AACA,oBAAK,QAAQ,QAAS;AACrB,0BAAQ,OAAO,KAAM,MAAM,SAAU;AAAA,gBACtC;AAAA,cACD;AAAA,YACD;AAIA,gBAAK,aAAa,CAAC,SAAS,QAAS;AACpC,kBAAK,CAAC,QAAQ,YACb,QAAQ,SAAS,KAAM,MAAM,YAAY,SAAS,MAAO,MAAM,OAAQ;AAEvE,gBAAAF,QAAO,YAAa,MAAMO,OAAM,SAAS,MAAO;AAAA,cACjD;AAEA,qBAAOuD,QAAQvD,KAAK;AAAA,YACrB;AAAA,UACD;AAGA,cAAKP,QAAO,cAAe8D,OAAO,GAAI;AACrC,qBAAS,OAAQ,MAAM,eAAgB;AAAA,UACxC;AAAA,QACD;AAAA,QAEA,UAAU,SAAU,aAAc;AAEjC,cAAIhE,IAAGI,IAAG,KAAK,SAAS,WAAW,cAClC,OAAO,IAAI,MAAO,UAAU,MAAO,GAGnC2D,SAAQ7D,QAAO,MAAM,IAAK,WAAY,GAEtC,YACC,SAAS,IAAK,MAAM,QAAS,KAAK,uBAAO,OAAQ,IAAK,GACpD6D,OAAM,IAAK,KAAK,CAAC,GACpB,UAAU7D,QAAO,MAAM,QAAS6D,OAAM,IAAK,KAAK,CAAC;AAGlD,eAAM,CAAE,IAAIA;AAEZ,eAAM/D,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAM;AACxC,iBAAMA,EAAE,IAAI,UAAWA,EAAE;AAAA,UAC1B;AAEA,UAAA+D,OAAM,iBAAiB;AAGvB,cAAK,QAAQ,eAAe,QAAQ,YAAY,KAAM,MAAMA,MAAM,MAAM,OAAQ;AAC/E;AAAA,UACD;AAGA,yBAAe7D,QAAO,MAAM,SAAS,KAAM,MAAM6D,QAAO,QAAS;AAGjE,UAAA/D,KAAI;AACJ,kBAAU,UAAU,aAAcA,IAAI,MAAO,CAAC+D,OAAM,qBAAqB,GAAI;AAC5E,YAAAA,OAAM,gBAAgB,QAAQ;AAE9B,YAAA3D,KAAI;AACJ,oBAAU,YAAY,QAAQ,SAAUA,IAAI,MAC3C,CAAC2D,OAAM,8BAA8B,GAAI;AAIzC,kBAAK,CAACA,OAAM,cAAc,UAAU,cAAc,SACjDA,OAAM,WAAW,KAAM,UAAU,SAAU,GAAI;AAE/C,gBAAAA,OAAM,YAAY;AAClB,gBAAAA,OAAM,OAAO,UAAU;AAEvB,wBAAU7D,QAAO,MAAM,QAAS,UAAU,QAAS,KAAK,CAAC,GAAI,UAC5D,UAAU,SAAU,MAAO,QAAQ,MAAM,IAAK;AAE/C,oBAAK,QAAQ,QAAY;AACxB,uBAAO6D,OAAM,SAAS,SAAU,OAAQ;AACvC,oBAAAA,OAAM,eAAe;AACrB,oBAAAA,OAAM,gBAAgB;AAAA,kBACvB;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAGA,cAAK,QAAQ,cAAe;AAC3B,oBAAQ,aAAa,KAAM,MAAMA,MAAM;AAAA,UACxC;AAEA,iBAAOA,OAAM;AAAA,QACd;AAAA,QAEA,UAAU,SAAUA,QAAO,UAAW;AACrC,cAAI/D,IAAG,WAAW,KAAK,iBAAiB,kBACvC,eAAe,CAAC,GAChB,gBAAgB,SAAS,eACzB,MAAM+D,OAAM;AAGb,cAAK;AAAA;AAAA,UAIJ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,UAOJ,EAAGA,OAAM,SAAS,WAAWA,OAAM,UAAU,IAAM;AAEnD,mBAAQ,QAAQ,MAAM,MAAM,IAAI,cAAc,MAAO;AAIpD,kBAAK,IAAI,aAAa,KAAK,EAAGA,OAAM,SAAS,WAAW,IAAI,aAAa,OAAS;AACjF,kCAAkB,CAAC;AACnB,mCAAmB,CAAC;AACpB,qBAAM/D,KAAI,GAAGA,KAAI,eAAeA,MAAM;AACrC,8BAAY,SAAUA,EAAE;AAGxB,wBAAM,UAAU,WAAW;AAE3B,sBAAK,iBAAkB,GAAI,MAAM,QAAY;AAC5C,qCAAkB,GAAI,IAAI,UAAU,eACnCE,QAAQ,KAAK,IAAK,EAAE,MAAO,GAAI,IAAI,KACnCA,QAAO,KAAM,KAAK,MAAM,MAAM,CAAE,GAAI,CAAE,EAAE;AAAA,kBAC1C;AACA,sBAAK,iBAAkB,GAAI,GAAI;AAC9B,oCAAgB,KAAM,SAAU;AAAA,kBACjC;AAAA,gBACD;AACA,oBAAK,gBAAgB,QAAS;AAC7B,+BAAa,KAAM,EAAE,MAAM,KAAK,UAAU,gBAAgB,CAAE;AAAA,gBAC7D;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAGA,gBAAM;AACN,cAAK,gBAAgB,SAAS,QAAS;AACtC,yBAAa,KAAM,EAAE,MAAM,KAAK,UAAU,SAAS,MAAO,aAAc,EAAE,CAAE;AAAA,UAC7E;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAU,MAAM,MAAO;AAC/B,iBAAO,eAAgBA,QAAO,MAAM,WAAW,MAAM;AAAA,YACpD,YAAY;AAAA,YACZ,cAAc;AAAA,YAEd,KAAKL,YAAY,IAAK,IACrB,WAAW;AACV,kBAAK,KAAK,eAAgB;AACzB,uBAAO,KAAM,KAAK,aAAc;AAAA,cACjC;AAAA,YACD,IACA,WAAW;AACV,kBAAK,KAAK,eAAgB;AACzB,uBAAO,KAAK,cAAe,IAAK;AAAA,cACjC;AAAA,YACD;AAAA,YAED,KAAK,SAAU,OAAQ;AACtB,qBAAO,eAAgB,MAAM,MAAM;AAAA,gBAClC,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,UAAU;AAAA,gBACV;AAAA,cACD,CAAE;AAAA,YACH;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,KAAK,SAAU,eAAgB;AAC9B,iBAAO,cAAeK,QAAO,OAAQ,IACpC,gBACA,IAAIA,QAAO,MAAO,aAAc;AAAA,QAClC;AAAA,QAEA,SAAS;AAAA,UACR,MAAM;AAAA;AAAA,YAGL,UAAU;AAAA,UACX;AAAA,UACA,OAAO;AAAA;AAAA,YAGN,OAAO,SAAU,MAAO;AAIvB,kBAAI,KAAK,QAAQ;AAGjB,kBAAK,eAAe,KAAM,GAAG,IAAK,KACjC,GAAG,SAAS,SAAU,IAAI,OAAQ,GAAI;AAGtC,+BAAgB,IAAI,SAAS,UAAW;AAAA,cACzC;AAGA,qBAAO;AAAA,YACR;AAAA,YACA,SAAS,SAAU,MAAO;AAIzB,kBAAI,KAAK,QAAQ;AAGjB,kBAAK,eAAe,KAAM,GAAG,IAAK,KACjC,GAAG,SAAS,SAAU,IAAI,OAAQ,GAAI;AAEtC,+BAAgB,IAAI,OAAQ;AAAA,cAC7B;AAGA,qBAAO;AAAA,YACR;AAAA;AAAA;AAAA,YAIA,UAAU,SAAU6D,QAAQ;AAC3B,kBAAIzD,UAASyD,OAAM;AACnB,qBAAO,eAAe,KAAMzD,QAAO,IAAK,KACvCA,QAAO,SAAS,SAAUA,SAAQ,OAAQ,KAC1C,SAAS,IAAKA,SAAQ,OAAQ,KAC9B,SAAUA,SAAQ,GAAI;AAAA,YACxB;AAAA,UACD;AAAA,UAEA,cAAc;AAAA,YACb,cAAc,SAAUyD,QAAQ;AAI/B,kBAAKA,OAAM,WAAW,UAAaA,OAAM,eAAgB;AACxD,gBAAAA,OAAM,cAAc,cAAcA,OAAM;AAAA,cACzC;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAMA,eAAS,eAAgB,IAAItD,OAAMyD,aAAa;AAG/C,YAAK,CAACA,aAAa;AAClB,cAAK,SAAS,IAAK,IAAIzD,KAAK,MAAM,QAAY;AAC7C,YAAAP,QAAO,MAAM,IAAK,IAAIO,OAAM,UAAW;AAAA,UACxC;AACA;AAAA,QACD;AAGA,iBAAS,IAAK,IAAIA,OAAM,KAAM;AAC9B,QAAAP,QAAO,MAAM,IAAK,IAAIO,OAAM;AAAA,UAC3B,WAAW;AAAA,UACX,SAAS,SAAUsD,QAAQ;AAC1B,gBAAI,UAAU,QACb,QAAQ,SAAS,IAAK,MAAMtD,KAAK;AAElC,gBAAOsD,OAAM,YAAY,KAAO,KAAMtD,KAAK,GAAI;AAK9C,kBAAK,CAAC,MAAM,QAAS;AAKpB,wBAAQ,MAAM,KAAM,SAAU;AAC9B,yBAAS,IAAK,MAAMA,OAAM,KAAM;AAKhC,2BAAWyD,YAAY,MAAMzD,KAAK;AAClC,qBAAMA,KAAK,EAAE;AACb,yBAAS,SAAS,IAAK,MAAMA,KAAK;AAClC,oBAAK,UAAU,UAAU,UAAW;AACnC,2BAAS,IAAK,MAAMA,OAAM,KAAM;AAAA,gBACjC,OAAO;AACN,2BAAS,CAAC;AAAA,gBACX;AACA,oBAAK,UAAU,QAAS;AAGvB,kBAAAsD,OAAM,yBAAyB;AAC/B,kBAAAA,OAAM,eAAe;AAOrB,yBAAO,UAAU,OAAO;AAAA,gBACzB;AAAA,cAQD,YAAc7D,QAAO,MAAM,QAASO,KAAK,KAAK,CAAC,GAAI,cAAe;AACjE,gBAAAsD,OAAM,gBAAgB;AAAA,cACvB;AAAA,YAID,WAAY,MAAM,QAAS;AAG1B,uBAAS,IAAK,MAAMtD,OAAM;AAAA,gBACzB,OAAOP,QAAO,MAAM;AAAA;AAAA;AAAA,kBAInBA,QAAO,OAAQ,MAAO,CAAE,GAAGA,QAAO,MAAM,SAAU;AAAA,kBAClD,MAAM,MAAO,CAAE;AAAA,kBACf;AAAA,gBACD;AAAA,cACD,CAAE;AAGF,cAAA6D,OAAM,yBAAyB;AAAA,YAChC;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AAEA,MAAA7D,QAAO,cAAc,SAAU,MAAMO,OAAM,QAAS;AAGnD,YAAK,KAAK,qBAAsB;AAC/B,eAAK,oBAAqBA,OAAM,MAAO;AAAA,QACxC;AAAA,MACD;AAEA,MAAAP,QAAO,QAAQ,SAAU,KAAKiE,QAAQ;AAGrC,YAAK,EAAG,gBAAgBjE,QAAO,QAAU;AACxC,iBAAO,IAAIA,QAAO,MAAO,KAAKiE,MAAM;AAAA,QACrC;AAGA,YAAK,OAAO,IAAI,MAAO;AACtB,eAAK,gBAAgB;AACrB,eAAK,OAAO,IAAI;AAIhB,eAAK,qBAAqB,IAAI,oBAC5B,IAAI,qBAAqB;AAAA,UAGzB,IAAI,gBAAgB,QACrB,aACA;AAKD,eAAK,SAAW,IAAI,UAAU,IAAI,OAAO,aAAa,IACrD,IAAI,OAAO,aACX,IAAI;AAEL,eAAK,gBAAgB,IAAI;AACzB,eAAK,gBAAgB,IAAI;AAAA,QAG1B,OAAO;AACN,eAAK,OAAO;AAAA,QACb;AAGA,YAAKA,QAAQ;AACZ,UAAAjE,QAAO,OAAQ,MAAMiE,MAAM;AAAA,QAC5B;AAGA,aAAK,YAAY,OAAO,IAAI,aAAa,KAAK,IAAI;AAGlD,aAAMjE,QAAO,OAAQ,IAAI;AAAA,MAC1B;AAIA,MAAAA,QAAO,MAAM,YAAY;AAAA,QACxB,aAAaA,QAAO;AAAA,QACpB,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,+BAA+B;AAAA,QAC/B,aAAa;AAAA,QAEb,gBAAgB,WAAW;AAC1B,cAAIiB,KAAI,KAAK;AAEb,eAAK,qBAAqB;AAE1B,cAAKA,MAAK,CAAC,KAAK,aAAc;AAC7B,YAAAA,GAAE,eAAe;AAAA,UAClB;AAAA,QACD;AAAA,QACA,iBAAiB,WAAW;AAC3B,cAAIA,KAAI,KAAK;AAEb,eAAK,uBAAuB;AAE5B,cAAKA,MAAK,CAAC,KAAK,aAAc;AAC7B,YAAAA,GAAE,gBAAgB;AAAA,UACnB;AAAA,QACD;AAAA,QACA,0BAA0B,WAAW;AACpC,cAAIA,KAAI,KAAK;AAEb,eAAK,gCAAgC;AAErC,cAAKA,MAAK,CAAC,KAAK,aAAc;AAC7B,YAAAA,GAAE,yBAAyB;AAAA,UAC5B;AAEA,eAAK,gBAAgB;AAAA,QACtB;AAAA,MACD;AAGA,MAAAjB,QAAO,KAAM;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK;AAAA,QACL,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,WAAW;AAAA,QACX,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS;AAAA,QACT,eAAe;AAAA,QACf,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,MACR,GAAGA,QAAO,MAAM,OAAQ;AAExB,MAAAA,QAAO,KAAM,EAAE,OAAO,WAAW,MAAM,WAAW,GAAG,SAAUO,OAAM,cAAe;AACnF,QAAAP,QAAO,MAAM,QAASO,KAAK,IAAI;AAAA;AAAA,UAG9B,OAAO,WAAW;AAKjB,2BAAgB,MAAMA,OAAM,UAAW;AAGvC,mBAAO;AAAA,UACR;AAAA,UACA,SAAS,WAAW;AAGnB,2BAAgB,MAAMA,KAAK;AAG3B,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA,UAIA,UAAU,WAAW;AACpB,mBAAO;AAAA,UACR;AAAA,UAEA;AAAA,QACD;AAAA,MACD,CAAE;AAUF,MAAAP,QAAO,KAAM;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,cAAc;AAAA,MACf,GAAG,SAAU,MAAM,KAAM;AACxB,QAAAA,QAAO,MAAM,QAAS,IAAK,IAAI;AAAA,UAC9B,cAAc;AAAA,UACd,UAAU;AAAA,UAEV,QAAQ,SAAU6D,QAAQ;AACzB,gBAAI,KACHzD,UAAS,MACT,UAAUyD,OAAM,eAChB,YAAYA,OAAM;AAInB,gBAAK,CAAC,WAAa,YAAYzD,WAAU,CAACJ,QAAO,SAAUI,SAAQ,OAAQ,GAAM;AAChF,cAAAyD,OAAM,OAAO,UAAU;AACvB,oBAAM,UAAU,QAAQ,MAAO,MAAM,SAAU;AAC/C,cAAAA,OAAM,OAAO;AAAA,YACd;AACA,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAA7D,QAAO,GAAG,OAAQ;AAAA,QAEjB,IAAI,SAAU,OAAO,UAAU,MAAM,IAAK;AACzC,iBAAO2D,IAAI,MAAM,OAAO,UAAU,MAAM,EAAG;AAAA,QAC5C;AAAA,QACA,KAAK,SAAU,OAAO,UAAU,MAAM,IAAK;AAC1C,iBAAOA,IAAI,MAAM,OAAO,UAAU,MAAM,IAAI,CAAE;AAAA,QAC/C;AAAA,QACA,KAAK,SAAU,OAAO,UAAU,IAAK;AACpC,cAAI,WAAWpD;AACf,cAAK,SAAS,MAAM,kBAAkB,MAAM,WAAY;AAGvD,wBAAY,MAAM;AAClB,YAAAP,QAAQ,MAAM,cAAe,EAAE;AAAA,cAC9B,UAAU,YACT,UAAU,WAAW,MAAM,UAAU,YACrC,UAAU;AAAA,cACX,UAAU;AAAA,cACV,UAAU;AAAA,YACX;AACA,mBAAO;AAAA,UACR;AACA,cAAK,OAAO,UAAU,UAAW;AAGhC,iBAAMO,SAAQ,OAAQ;AACrB,mBAAK,IAAKA,OAAM,UAAU,MAAOA,KAAK,CAAE;AAAA,YACzC;AACA,mBAAO;AAAA,UACR;AACA,cAAK,aAAa,SAAS,OAAO,aAAa,YAAa;AAG3D,iBAAK;AACL,uBAAW;AAAA,UACZ;AACA,cAAK,OAAO,OAAQ;AACnB,iBAAK;AAAA,UACN;AACA,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAP,QAAO,MAAM,OAAQ,MAAM,OAAO,IAAI,QAAS;AAAA,UAChD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAGF,UAKC,eAAe,yBAGf,WAAW,qCACX,eAAe;AAGhB,eAAS,mBAAoB,MAAM,SAAU;AAC5C,YAAK,SAAU,MAAM,OAAQ,KAC5B,SAAU,QAAQ,aAAa,KAAK,UAAU,QAAQ,YAAY,IAAK,GAAI;AAE3E,iBAAOA,QAAQ,IAAK,EAAE,SAAU,OAAQ,EAAG,CAAE,KAAK;AAAA,QACnD;AAEA,eAAO;AAAA,MACR;AAGA,eAAS,cAAe,MAAO;AAC9B,aAAK,QAAS,KAAK,aAAc,MAAO,MAAM,QAAS,MAAM,KAAK;AAClE,eAAO;AAAA,MACR;AACA,eAAS,cAAe,MAAO;AAC9B,aAAO,KAAK,QAAQ,IAAK,MAAO,GAAG,CAAE,MAAM,SAAU;AACpD,eAAK,OAAO,KAAK,KAAK,MAAO,CAAE;AAAA,QAChC,OAAO;AACN,eAAK,gBAAiB,MAAO;AAAA,QAC9B;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,eAAgB,KAAK,MAAO;AACpC,YAAIF,IAAG4C,IAAGnC,OAAM,UAAU,UAAU,UAAUuD;AAE9C,YAAK,KAAK,aAAa,GAAI;AAC1B;AAAA,QACD;AAGA,YAAK,SAAS,QAAS,GAAI,GAAI;AAC9B,qBAAW,SAAS,IAAK,GAAI;AAC7B,UAAAA,UAAS,SAAS;AAElB,cAAKA,SAAS;AACb,qBAAS,OAAQ,MAAM,eAAgB;AAEvC,iBAAMvD,SAAQuD,SAAS;AACtB,mBAAMhE,KAAI,GAAG4C,KAAIoB,QAAQvD,KAAK,EAAE,QAAQT,KAAI4C,IAAG5C,MAAM;AACpD,gBAAAE,QAAO,MAAM,IAAK,MAAMO,OAAMuD,QAAQvD,KAAK,EAAGT,EAAE,CAAE;AAAA,cACnD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,YAAK,SAAS,QAAS,GAAI,GAAI;AAC9B,qBAAW,SAAS,OAAQ,GAAI;AAChC,qBAAWE,QAAO,OAAQ,CAAC,GAAG,QAAS;AAEvC,mBAAS,IAAK,MAAM,QAAS;AAAA,QAC9B;AAAA,MACD;AAGA,eAAS,SAAU,KAAK,MAAO;AAC9B,YAAI0B,YAAW,KAAK,SAAS,YAAY;AAGzC,YAAKA,cAAa,WAAW,eAAe,KAAM,IAAI,IAAK,GAAI;AAC9D,eAAK,UAAU,IAAI;AAAA,QAGpB,WAAYA,cAAa,WAAWA,cAAa,YAAa;AAC7D,eAAK,eAAe,IAAI;AAAA,QACzB;AAAA,MACD;AAEA,eAAS,SAAU,YAAY,MAAM,UAAU,SAAU;AAGxD,eAAO,KAAM,IAAK;AAElB,YAAI,UAAU,OAAO,SAAS,YAAY,MAAM,KAC/C5B,KAAI,GACJ4C,KAAI,WAAW,QACf,WAAWA,KAAI,GACf,QAAQ,KAAM,CAAE,GAChB,kBAAkB/C,YAAY,KAAM;AAGrC,YAAK,mBACD+C,KAAI,KAAK,OAAO,UAAU,YAC3B,CAAC,QAAQ,cAAc,SAAS,KAAM,KAAM,GAAM;AACpD,iBAAO,WAAW,KAAM,SAAUI,QAAQ;AACzC,gBAAIP,QAAO,WAAW,GAAIO,MAAM;AAChC,gBAAK,iBAAkB;AACtB,mBAAM,CAAE,IAAI,MAAM,KAAM,MAAMA,QAAOP,MAAK,KAAK,CAAE;AAAA,YAClD;AACA,qBAAUA,OAAM,MAAM,UAAU,OAAQ;AAAA,UACzC,CAAE;AAAA,QACH;AAEA,YAAKG,IAAI;AACR,qBAAW,cAAe,MAAM,WAAY,CAAE,EAAE,eAAe,OAAO,YAAY,OAAQ;AAC1F,kBAAQ,SAAS;AAEjB,cAAK,SAAS,WAAW,WAAW,GAAI;AACvC,uBAAW;AAAA,UACZ;AAGA,cAAK,SAAS,SAAU;AACvB,sBAAU1C,QAAO,IAAK,OAAQ,UAAU,QAAS,GAAG,aAAc;AAClE,yBAAa,QAAQ;AAKrB,mBAAQF,KAAI4C,IAAG5C,MAAM;AACpB,qBAAO;AAEP,kBAAKA,OAAM,UAAW;AACrB,uBAAOE,QAAO,MAAO,MAAM,MAAM,IAAK;AAGtC,oBAAK,YAAa;AAIjB,kBAAAA,QAAO,MAAO,SAAS,OAAQ,MAAM,QAAS,CAAE;AAAA,gBACjD;AAAA,cACD;AAEA,uBAAS,KAAM,WAAYF,EAAE,GAAG,MAAMA,EAAE;AAAA,YACzC;AAEA,gBAAK,YAAa;AACjB,oBAAM,QAAS,QAAQ,SAAS,CAAE,EAAE;AAGpC,cAAAE,QAAO,IAAK,SAAS,aAAc;AAGnC,mBAAMF,KAAI,GAAGA,KAAI,YAAYA,MAAM;AAClC,uBAAO,QAASA,EAAE;AAClB,oBAAK,YAAY,KAAM,KAAK,QAAQ,EAAG,KACtC,CAAC,SAAS,OAAQ,MAAM,YAAa,KACrCE,QAAO,SAAU,KAAK,IAAK,GAAI;AAE/B,sBAAK,KAAK,QAAS,KAAK,QAAQ,IAAK,YAAY,MAAO,UAAW;AAGlE,wBAAKA,QAAO,YAAY,CAAC,KAAK,UAAW;AACxC,sBAAAA,QAAO,SAAU,KAAK,KAAK;AAAA,wBAC1B,OAAO,KAAK,SAAS,KAAK,aAAc,OAAQ;AAAA,sBACjD,GAAG,GAAI;AAAA,oBACR;AAAA,kBACD,OAAO;AACN,4BAAS,KAAK,YAAY,QAAS,cAAc,EAAG,GAAG,MAAM,GAAI;AAAA,kBAClE;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,eAASkE,QAAQ,MAAM,UAAU,UAAW;AAC3C,YAAI,MACH,QAAQ,WAAWlE,QAAO,OAAQ,UAAU,IAAK,IAAI,MACrDF,KAAI;AAEL,gBAAU,OAAO,MAAOA,EAAE,MAAO,MAAMA,MAAM;AAC5C,cAAK,CAAC,YAAY,KAAK,aAAa,GAAI;AACvC,YAAAE,QAAO,UAAW,OAAQ,IAAK,CAAE;AAAA,UAClC;AAEA,cAAK,KAAK,YAAa;AACtB,gBAAK,YAAY,WAAY,IAAK,GAAI;AACrC,4BAAe,OAAQ,MAAM,QAAS,CAAE;AAAA,YACzC;AACA,iBAAK,WAAW,YAAa,IAAK;AAAA,UACnC;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,OAAQ;AAAA,QACd,eAAe,SAAUmE,OAAO;AAC/B,iBAAOA;AAAA,QACR;AAAA,QAEA,OAAO,SAAU,MAAM,eAAe,mBAAoB;AACzD,cAAIrE,IAAG4C,IAAG,aAAa,cACtB,QAAQ,KAAK,UAAW,IAAK,GAC7B,SAAS,WAAY,IAAK;AAG3B,cAAK,CAAC,QAAQ,mBAAoB,KAAK,aAAa,KAAK,KAAK,aAAa,OACzE,CAAC1C,QAAO,SAAU,IAAK,GAAI;AAG5B,2BAAe,OAAQ,KAAM;AAC7B,0BAAc,OAAQ,IAAK;AAE3B,iBAAMF,KAAI,GAAG4C,KAAI,YAAY,QAAQ5C,KAAI4C,IAAG5C,MAAM;AACjD,uBAAU,YAAaA,EAAE,GAAG,aAAcA,EAAE,CAAE;AAAA,YAC/C;AAAA,UACD;AAGA,cAAK,eAAgB;AACpB,gBAAK,mBAAoB;AACxB,4BAAc,eAAe,OAAQ,IAAK;AAC1C,6BAAe,gBAAgB,OAAQ,KAAM;AAE7C,mBAAMA,KAAI,GAAG4C,KAAI,YAAY,QAAQ5C,KAAI4C,IAAG5C,MAAM;AACjD,+BAAgB,YAAaA,EAAE,GAAG,aAAcA,EAAE,CAAE;AAAA,cACrD;AAAA,YACD,OAAO;AACN,6BAAgB,MAAM,KAAM;AAAA,YAC7B;AAAA,UACD;AAGA,yBAAe,OAAQ,OAAO,QAAS;AACvC,cAAK,aAAa,SAAS,GAAI;AAC9B,0BAAe,cAAc,CAAC,UAAU,OAAQ,MAAM,QAAS,CAAE;AAAA,UAClE;AAGA,iBAAO;AAAA,QACR;AAAA,QAEA,WAAW,SAAU,OAAQ;AAC5B,cAAI,MAAM,MAAMS,OACf,UAAUP,QAAO,MAAM,SACvBF,KAAI;AAEL,kBAAU,OAAO,MAAOA,EAAE,OAAQ,QAAWA,MAAM;AAClD,gBAAK,WAAY,IAAK,GAAI;AACzB,kBAAO,OAAO,KAAM,SAAS,OAAQ,GAAM;AAC1C,oBAAK,KAAK,QAAS;AAClB,uBAAMS,SAAQ,KAAK,QAAS;AAC3B,wBAAK,QAASA,KAAK,GAAI;AACtB,sBAAAP,QAAO,MAAM,OAAQ,MAAMO,KAAK;AAAA,oBAGjC,OAAO;AACN,sBAAAP,QAAO,YAAa,MAAMO,OAAM,KAAK,MAAO;AAAA,oBAC7C;AAAA,kBACD;AAAA,gBACD;AAIA,qBAAM,SAAS,OAAQ,IAAI;AAAA,cAC5B;AACA,kBAAK,KAAM,SAAS,OAAQ,GAAI;AAI/B,qBAAM,SAAS,OAAQ,IAAI;AAAA,cAC5B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAP,QAAO,GAAG,OAAQ;AAAA,QACjB,QAAQ,SAAU,UAAW;AAC5B,iBAAOkE,QAAQ,MAAM,UAAU,IAAK;AAAA,QACrC;AAAA,QAEA,QAAQ,SAAU,UAAW;AAC5B,iBAAOA,QAAQ,MAAM,QAAS;AAAA,QAC/B;AAAA,QAEA,MAAM,SAAU,OAAQ;AACvB,iBAAO,OAAQ,MAAM,SAAUlB,QAAQ;AACtC,mBAAOA,WAAU,SAChBhD,QAAO,KAAM,IAAK,IAClB,KAAK,MAAM,EAAE,KAAM,WAAW;AAC7B,kBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,qBAAK,cAAcgD;AAAA,cACpB;AAAA,YACD,CAAE;AAAA,UACJ,GAAG,MAAM,OAAO,UAAU,MAAO;AAAA,QAClC;AAAA,QAEA,QAAQ,WAAW;AAClB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,kBAAI5C,UAAS,mBAAoB,MAAM,IAAK;AAC5C,cAAAA,QAAO,YAAa,IAAK;AAAA,YAC1B;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,WAAW;AACnB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,aAAa,KAAK,KAAK,aAAa,MAAM,KAAK,aAAa,GAAI;AACzE,kBAAIA,UAAS,mBAAoB,MAAM,IAAK;AAC5C,cAAAA,QAAO,aAAc,MAAMA,QAAO,UAAW;AAAA,YAC9C;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,QAAQ,WAAW;AAClB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,YAAa;AACtB,mBAAK,WAAW,aAAc,MAAM,IAAK;AAAA,YAC1C;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,OAAO,WAAW;AACjB,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAK,KAAK,YAAa;AACtB,mBAAK,WAAW,aAAc,MAAM,KAAK,WAAY;AAAA,YACtD;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,OAAO,WAAW;AACjB,cAAI,MACHN,KAAI;AAEL,kBAAU,OAAO,KAAMA,EAAE,MAAO,MAAMA,MAAM;AAC3C,gBAAK,KAAK,aAAa,GAAI;AAG1B,cAAAE,QAAO,UAAW,OAAQ,MAAM,KAAM,CAAE;AAGxC,mBAAK,cAAc;AAAA,YACpB;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,OAAO,SAAU,eAAe,mBAAoB;AACnD,0BAAgB,iBAAiB,OAAO,QAAQ;AAChD,8BAAoB,qBAAqB,OAAO,gBAAgB;AAEhE,iBAAO,KAAK,IAAK,WAAW;AAC3B,mBAAOA,QAAO,MAAO,MAAM,eAAe,iBAAkB;AAAA,UAC7D,CAAE;AAAA,QACH;AAAA,QAEA,MAAM,SAAU,OAAQ;AACvB,iBAAO,OAAQ,MAAM,SAAUgD,QAAQ;AACtC,gBAAI,OAAO,KAAM,CAAE,KAAK,CAAC,GACxBlD,KAAI,GACJ4C,KAAI,KAAK;AAEV,gBAAKM,WAAU,UAAa,KAAK,aAAa,GAAI;AACjD,qBAAO,KAAK;AAAA,YACb;AAGA,gBAAK,OAAOA,WAAU,YAAY,CAAC,aAAa,KAAMA,MAAM,KAC3D,CAAC,SAAW,SAAS,KAAMA,MAAM,KAAK,CAAE,IAAI,EAAG,GAAK,CAAE,EAAE,YAAY,CAAE,GAAI;AAE1E,cAAAA,SAAQhD,QAAO,cAAegD,MAAM;AAEpC,kBAAI;AACH,uBAAQlD,KAAI4C,IAAG5C,MAAM;AACpB,yBAAO,KAAMA,EAAE,KAAK,CAAC;AAGrB,sBAAK,KAAK,aAAa,GAAI;AAC1B,oBAAAE,QAAO,UAAW,OAAQ,MAAM,KAAM,CAAE;AACxC,yBAAK,YAAYgD;AAAA,kBAClB;AAAA,gBACD;AAEA,uBAAO;AAAA,cAGR,SAAU/B,IAAI;AAAA,cAAC;AAAA,YAChB;AAEA,gBAAK,MAAO;AACX,mBAAK,MAAM,EAAE,OAAQ+B,MAAM;AAAA,YAC5B;AAAA,UACD,GAAG,MAAM,OAAO,UAAU,MAAO;AAAA,QAClC;AAAA,QAEA,aAAa,WAAW;AACvB,cAAI,UAAU,CAAC;AAGf,iBAAO,SAAU,MAAM,WAAW,SAAU,MAAO;AAClD,gBAAI,SAAS,KAAK;AAElB,gBAAKhD,QAAO,QAAS,MAAM,OAAQ,IAAI,GAAI;AAC1C,cAAAA,QAAO,UAAW,OAAQ,IAAK,CAAE;AACjC,kBAAK,QAAS;AACb,uBAAO,aAAc,MAAM,IAAK;AAAA,cACjC;AAAA,YACD;AAAA,UAGD,GAAG,OAAQ;AAAA,QACZ;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,KAAM;AAAA,QACZ,UAAU;AAAA,QACV,WAAW;AAAA,QACX,cAAc;AAAA,QACd,aAAa;AAAA,QACb,YAAY;AAAA,MACb,GAAG,SAAU,MAAM,UAAW;AAC7B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,UAAW;AACxC,cAAI,OACH,MAAM,CAAC,GACP,SAASA,QAAQ,QAAS,GAC1B,OAAO,OAAO,SAAS,GACvBF,KAAI;AAEL,iBAAQA,MAAK,MAAMA,MAAM;AACxB,oBAAQA,OAAM,OAAO,OAAO,KAAK,MAAO,IAAK;AAC7C,YAAAE,QAAQ,OAAQF,EAAE,CAAE,EAAG,QAAS,EAAG,KAAM;AAIzC,iBAAK,MAAO,KAAK,MAAM,IAAI,CAAE;AAAA,UAC9B;AAEA,iBAAO,KAAK,UAAW,GAAI;AAAA,QAC5B;AAAA,MACD,CAAE;AACF,UAAI,YAAY,IAAI,OAAQ,OAAO,OAAO,mBAAmB,GAAI;AAEjE,UAAI,YAAY,SAAU,MAAO;AAK/B,YAAI,OAAO,KAAK,cAAc;AAE9B,YAAK,CAAC,QAAQ,CAAC,KAAK,QAAS;AAC5B,iBAAOP;AAAA,QACR;AAEA,eAAO,KAAK,iBAAkB,IAAK;AAAA,MACpC;AAED,UAAI,OAAO,SAAU,MAAM,SAAS,UAAW;AAC9C,YAAI,KAAK,MACR,MAAM,CAAC;AAGR,aAAM,QAAQ,SAAU;AACvB,cAAK,IAAK,IAAI,KAAK,MAAO,IAAK;AAC/B,eAAK,MAAO,IAAK,IAAI,QAAS,IAAK;AAAA,QACpC;AAEA,cAAM,SAAS,KAAM,IAAK;AAG1B,aAAM,QAAQ,SAAU;AACvB,eAAK,MAAO,IAAK,IAAI,IAAK,IAAK;AAAA,QAChC;AAEA,eAAO;AAAA,MACR;AAGA,UAAI,YAAY,IAAI,OAAQ,UAAU,KAAM,GAAI,GAAG,GAAI;AAIvD,OAAE,WAAW;AAIZ,iBAAS,oBAAoB;AAG5B,cAAK,CAACkE,MAAM;AACX;AAAA,UACD;AAEA,oBAAU,MAAM,UAAU;AAE1B,UAAAA,KAAI,MAAM,UACT;AAGD,0BAAgB,YAAa,SAAU,EAAE,YAAaA,IAAI;AAE1D,cAAI,WAAWlE,QAAO,iBAAkBkE,IAAI;AAC5C,6BAAmB,SAAS,QAAQ;AAGpC,kCAAwB,mBAAoB,SAAS,UAAW,MAAM;AAItE,UAAAA,KAAI,MAAM,QAAQ;AAClB,8BAAoB,mBAAoB,SAAS,KAAM,MAAM;AAI7D,iCAAuB,mBAAoB,SAAS,KAAM,MAAM;AAMhE,UAAAA,KAAI,MAAM,WAAW;AACrB,6BAAmB,mBAAoBA,KAAI,cAAc,CAAE,MAAM;AAEjE,0BAAgB,YAAa,SAAU;AAIvC,UAAAA,OAAM;AAAA,QACP;AAEA,iBAAS,mBAAoBW,UAAU;AACtC,iBAAO,KAAK,MAAO,WAAYA,QAAQ,CAAE;AAAA,QAC1C;AAEA,YAAI,kBAAkB,sBAAsB,kBAAkB,mBAC7D,yBAAyB,uBACzB,YAAYvE,UAAS,cAAe,KAAM,GAC1C4D,OAAM5D,UAAS,cAAe,KAAM;AAGrC,YAAK,CAAC4D,KAAI,OAAQ;AACjB;AAAA,QACD;AAIA,QAAAA,KAAI,MAAM,iBAAiB;AAC3B,QAAAA,KAAI,UAAW,IAAK,EAAE,MAAM,iBAAiB;AAC7C,gBAAQ,kBAAkBA,KAAI,MAAM,mBAAmB;AAEvD,QAAAzD,QAAO,OAAQ,SAAS;AAAA,UACvB,mBAAmB,WAAW;AAC7B,8BAAkB;AAClB,mBAAO;AAAA,UACR;AAAA,UACA,gBAAgB,WAAW;AAC1B,8BAAkB;AAClB,mBAAO;AAAA,UACR;AAAA,UACA,eAAe,WAAW;AACzB,8BAAkB;AAClB,mBAAO;AAAA,UACR;AAAA,UACA,oBAAoB,WAAW;AAC9B,8BAAkB;AAClB,mBAAO;AAAA,UACR;AAAA,UACA,eAAe,WAAW;AACzB,8BAAkB;AAClB,mBAAO;AAAA,UACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAWA,sBAAsB,WAAW;AAChC,gBAAI,OAAO,IAAI,SAAS;AACxB,gBAAK,2BAA2B,MAAO;AACtC,sBAAQH,UAAS,cAAe,OAAQ;AACxC,mBAAKA,UAAS,cAAe,IAAK;AAClC,wBAAUA,UAAS,cAAe,KAAM;AAExC,oBAAM,MAAM,UAAU;AACtB,iBAAG,MAAM,UAAU;AAKnB,iBAAG,MAAM,SAAS;AAClB,sBAAQ,MAAM,SAAS;AAQvB,sBAAQ,MAAM,UAAU;AAExB,8BACE,YAAa,KAAM,EACnB,YAAa,EAAG,EAChB,YAAa,OAAQ;AAEvB,wBAAUN,QAAO,iBAAkB,EAAG;AACtC,wCAA4B,SAAU,QAAQ,QAAQ,EAAG,IACxD,SAAU,QAAQ,gBAAgB,EAAG,IACrC,SAAU,QAAQ,mBAAmB,EAAG,MAAQ,GAAG;AAEpD,8BAAgB,YAAa,KAAM;AAAA,YACpC;AACA,mBAAO;AAAA,UACR;AAAA,QACD,CAAE;AAAA,MACH,GAAI;AAGJ,eAAS,OAAQ,MAAM,MAAM8E,WAAW;AACvC,YAAI,OAAO,UAAU,UAAU,KAM9BC,SAAQ,KAAK;AAEd,QAAAD,YAAWA,aAAY,UAAW,IAAK;AAKvC,YAAKA,WAAW;AACf,gBAAMA,UAAS,iBAAkB,IAAK,KAAKA,UAAU,IAAK;AAE1D,cAAK,QAAQ,MAAM,CAAC,WAAY,IAAK,GAAI;AACxC,kBAAMrE,QAAO,MAAO,MAAM,IAAK;AAAA,UAChC;AAOA,cAAK,CAAC,QAAQ,eAAe,KAAK,UAAU,KAAM,GAAI,KAAK,UAAU,KAAM,IAAK,GAAI;AAGnF,oBAAQsE,OAAM;AACd,uBAAWA,OAAM;AACjB,uBAAWA,OAAM;AAGjB,YAAAA,OAAM,WAAWA,OAAM,WAAWA,OAAM,QAAQ;AAChD,kBAAMD,UAAS;AAGf,YAAAC,OAAM,QAAQ;AACd,YAAAA,OAAM,WAAW;AACjB,YAAAA,OAAM,WAAW;AAAA,UAClB;AAAA,QACD;AAEA,eAAO,QAAQ;AAAA;AAAA;AAAA,UAId,MAAM;AAAA,YACN;AAAA,MACF;AAGA,eAAS,aAAc,aAAa,QAAS;AAG5C,eAAO;AAAA,UACN,KAAK,WAAW;AACf,gBAAK,YAAY,GAAI;AAIpB,qBAAO,KAAK;AACZ;AAAA,YACD;AAGA,oBAAS,KAAK,MAAM,QAAS,MAAO,MAAM,SAAU;AAAA,UACrD;AAAA,QACD;AAAA,MACD;AAGA,UAAI,cAAc,CAAE,UAAU,OAAO,IAAK,GACzCC,cAAa1E,UAAS,cAAe,KAAM,EAAE,OAC7C,cAAc,CAAC;AAGhB,eAAS,eAAgB,MAAO;AAG/B,YAAI,UAAU,KAAM,CAAE,EAAE,YAAY,IAAI,KAAK,MAAO,CAAE,GACrDC,KAAI,YAAY;AAEjB,eAAQA,MAAM;AACb,iBAAO,YAAaA,EAAE,IAAI;AAC1B,cAAK,QAAQyE,aAAa;AACzB,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAGA,eAAS,cAAe,MAAO;AAC9B,YAAI,QAAQvE,QAAO,SAAU,IAAK,KAAK,YAAa,IAAK;AAEzD,YAAK,OAAQ;AACZ,iBAAO;AAAA,QACR;AACA,YAAK,QAAQuE,aAAa;AACzB,iBAAO;AAAA,QACR;AACA,eAAO,YAAa,IAAK,IAAI,eAAgB,IAAK,KAAK;AAAA,MACxD;AAGA,UAKC,eAAe,6BACf,cAAc,OACd,UAAU,EAAE,UAAU,YAAY,YAAY,UAAU,SAAS,QAAQ,GACzE,qBAAqB;AAAA,QACpB,eAAe;AAAA,QACf,YAAY;AAAA,MACb;AAED,eAAS,kBAAmB,OAAO,OAAO,UAAW;AAIpD,YAAIjE,WAAU,QAAQ,KAAM,KAAM;AAClC,eAAOA;AAAA;AAAA,UAGN,KAAK,IAAK,GAAGA,SAAS,CAAE,KAAM,YAAY,EAAI,KAAMA,SAAS,CAAE,KAAK;AAAA,YACpE;AAAA,MACF;AAEA,eAAS,mBAAoB,MAAM,WAAW,KAAK,aAAa,QAAQ,aAAc;AACrF,YAAIR,KAAI,cAAc,UAAU,IAAI,GACnC,QAAQ,GACR,QAAQ;AAGT,YAAK,SAAU,cAAc,WAAW,YAAc;AACrD,iBAAO;AAAA,QACR;AAEA,eAAQA,KAAI,GAAGA,MAAK,GAAI;AAGvB,cAAK,QAAQ,UAAW;AACvB,qBAASE,QAAO,IAAK,MAAM,MAAM,UAAWF,EAAE,GAAG,MAAM,MAAO;AAAA,UAC/D;AAGA,cAAK,CAAC,aAAc;AAGnB,qBAASE,QAAO,IAAK,MAAM,YAAY,UAAWF,EAAE,GAAG,MAAM,MAAO;AAGpE,gBAAK,QAAQ,WAAY;AACxB,uBAASE,QAAO,IAAK,MAAM,WAAW,UAAWF,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAG9E,OAAO;AACN,uBAASE,QAAO,IAAK,MAAM,WAAW,UAAWF,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAC9E;AAAA,UAID,OAAO;AAGN,gBAAK,QAAQ,WAAY;AACxB,uBAASE,QAAO,IAAK,MAAM,YAAY,UAAWF,EAAE,GAAG,MAAM,MAAO;AAAA,YACrE;AAGA,gBAAK,QAAQ,UAAW;AACvB,uBAASE,QAAO,IAAK,MAAM,WAAW,UAAWF,EAAE,IAAI,SAAS,MAAM,MAAO;AAAA,YAC9E;AAAA,UACD;AAAA,QACD;AAGA,YAAK,CAAC,eAAe,eAAe,GAAI;AAIvC,mBAAS,KAAK,IAAK,GAAG,KAAK;AAAA,YAC1B,KAAM,WAAW,UAAW,CAAE,EAAE,YAAY,IAAI,UAAU,MAAO,CAAE,CAAE,IACrE,cACA,QACA,QACA;AAAA;AAAA;AAAA,UAID,CAAE,KAAK;AAAA,QACR;AAEA,eAAO;AAAA,MACR;AAEA,eAAS,iBAAkB,MAAM,WAAW,OAAQ;AAGnD,YAAI,SAAS,UAAW,IAAK,GAI5B,kBAAkB,CAAC,QAAQ,kBAAkB,KAAK,OAClD,cAAc,mBACbE,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM,cACpD,mBAAmB,aAEnB,MAAM,OAAQ,MAAM,WAAW,MAAO,GACtC,aAAa,WAAW,UAAW,CAAE,EAAE,YAAY,IAAI,UAAU,MAAO,CAAE;AAI3E,YAAK,UAAU,KAAM,GAAI,GAAI;AAC5B,cAAK,CAAC,OAAQ;AACb,mBAAO;AAAA,UACR;AACA,gBAAM;AAAA,QACP;AAMA,aAAO,CAAC,QAAQ,kBAAkB,KAAK;AAAA;AAAA;AAAA;AAAA,QAMtC,CAAC,QAAQ,qBAAqB,KAAK,SAAU,MAAM,IAAK;AAAA;AAAA,QAIxD,QAAQ;AAAA;AAAA,QAIR,CAAC,WAAY,GAAI,KAAKA,QAAO,IAAK,MAAM,WAAW,OAAO,MAAO,MAAM;AAAA,QAGvE,KAAK,eAAe,EAAE,QAAS;AAE/B,wBAAcA,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM;AAKjE,6BAAmB,cAAc;AACjC,cAAK,kBAAmB;AACvB,kBAAM,KAAM,UAAW;AAAA,UACxB;AAAA,QACD;AAGA,cAAM,WAAY,GAAI,KAAK;AAG3B,eAAS,MACR;AAAA,UACC;AAAA,UACA;AAAA,UACA,UAAW,cAAc,WAAW;AAAA,UACpC;AAAA,UACA;AAAA;AAAA,UAGA;AAAA,QACD,IACG;AAAA,MACL;AAEA,MAAAA,QAAO,OAAQ;AAAA;AAAA;AAAA,QAId,UAAU;AAAA,UACT,SAAS;AAAA,YACR,KAAK,SAAU,MAAMqE,WAAW;AAC/B,kBAAKA,WAAW;AAGf,oBAAI,MAAM,OAAQ,MAAM,SAAU;AAClC,uBAAO,QAAQ,KAAK,MAAM;AAAA,cAC3B;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA;AAAA,QAGA,WAAW;AAAA,UACV,2BAA2B;AAAA,UAC3B,eAAe;AAAA,UACf,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,mBAAmB;AAAA,UACnB,WAAW;AAAA,UACX,cAAc;AAAA,UACd,gBAAgB;AAAA,UAChB,cAAc;AAAA,UACd,WAAW;AAAA,UACX,SAAS;AAAA,UACT,WAAW;AAAA,UACX,UAAU;AAAA,UACV,UAAU;AAAA,UACV,QAAQ;AAAA,QACT;AAAA;AAAA;AAAA,QAIA,UAAU,CAAC;AAAA;AAAA,QAGX,OAAO,SAAU,MAAM,MAAM,OAAO,OAAQ;AAG3C,cAAK,CAAC,QAAQ,KAAK,aAAa,KAAK,KAAK,aAAa,KAAK,CAAC,KAAK,OAAQ;AACzE;AAAA,UACD;AAGA,cAAI,KAAK9D,OAAM8C,QACd,WAAW,UAAW,IAAK,GAC3B,eAAe,YAAY,KAAM,IAAK,GACtCiB,SAAQ,KAAK;AAKd,cAAK,CAAC,cAAe;AACpB,mBAAO,cAAe,QAAS;AAAA,UAChC;AAGA,UAAAjB,SAAQrD,QAAO,SAAU,IAAK,KAAKA,QAAO,SAAU,QAAS;AAG7D,cAAK,UAAU,QAAY;AAC1B,YAAAO,QAAO,OAAO;AAGd,gBAAKA,UAAS,aAAc,MAAM,QAAQ,KAAM,KAAM,MAAO,IAAK,CAAE,GAAI;AACvE,sBAAQ,UAAW,MAAM,MAAM,GAAI;AAGnC,cAAAA,QAAO;AAAA,YACR;AAGA,gBAAK,SAAS,QAAQ,UAAU,OAAQ;AACvC;AAAA,YACD;AAKA,gBAAKA,UAAS,YAAY,CAAC,cAAe;AACzC,uBAAS,OAAO,IAAK,CAAE,MAAOP,QAAO,UAAW,QAAS,IAAI,KAAK;AAAA,YACnE;AAGA,gBAAK,CAAC,QAAQ,mBAAmB,UAAU,MAAM,KAAK,QAAS,YAAa,MAAM,GAAI;AACrF,cAAAsE,OAAO,IAAK,IAAI;AAAA,YACjB;AAGA,gBAAK,CAACjB,UAAS,EAAG,SAASA,YACxB,QAAQA,OAAM,IAAK,MAAM,OAAO,KAAM,OAAQ,QAAY;AAE5D,kBAAK,cAAe;AACnB,gBAAAiB,OAAM,YAAa,MAAM,KAAM;AAAA,cAChC,OAAO;AACN,gBAAAA,OAAO,IAAK,IAAI;AAAA,cACjB;AAAA,YACD;AAAA,UAED,OAAO;AAGN,gBAAKjB,UAAS,SAASA,WACpB,MAAMA,OAAM,IAAK,MAAM,OAAO,KAAM,OAAQ,QAAY;AAE1D,qBAAO;AAAA,YACR;AAGA,mBAAOiB,OAAO,IAAK;AAAA,UACpB;AAAA,QACD;AAAA,QAEA,KAAK,SAAU,MAAM,MAAM,OAAO,QAAS;AAC1C,cAAI,KAAK,KAAKjB,QACb,WAAW,UAAW,IAAK,GAC3B,eAAe,YAAY,KAAM,IAAK;AAKvC,cAAK,CAAC,cAAe;AACpB,mBAAO,cAAe,QAAS;AAAA,UAChC;AAGA,UAAAA,SAAQrD,QAAO,SAAU,IAAK,KAAKA,QAAO,SAAU,QAAS;AAG7D,cAAKqD,UAAS,SAASA,QAAQ;AAC9B,kBAAMA,OAAM,IAAK,MAAM,MAAM,KAAM;AAAA,UACpC;AAGA,cAAK,QAAQ,QAAY;AACxB,kBAAM,OAAQ,MAAM,MAAM,MAAO;AAAA,UAClC;AAGA,cAAK,QAAQ,YAAY,QAAQ,oBAAqB;AACrD,kBAAM,mBAAoB,IAAK;AAAA,UAChC;AAGA,cAAK,UAAU,MAAM,OAAQ;AAC5B,kBAAM,WAAY,GAAI;AACtB,mBAAO,UAAU,QAAQ,SAAU,GAAI,IAAI,OAAO,IAAI;AAAA,UACvD;AAEA,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAEF,MAAArD,QAAO,KAAM,CAAE,UAAU,OAAQ,GAAG,SAAU,IAAI,WAAY;AAC7D,QAAAA,QAAO,SAAU,SAAU,IAAI;AAAA,UAC9B,KAAK,SAAU,MAAMqE,WAAU,OAAQ;AACtC,gBAAKA,WAAW;AAIf,qBAAO,aAAa,KAAMrE,QAAO,IAAK,MAAM,SAAU,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAQrD,CAAC,KAAK,eAAe,EAAE,UAAU,CAAC,KAAK,sBAAsB,EAAE,SACjE,KAAM,MAAM,SAAS,WAAW;AAC/B,uBAAO,iBAAkB,MAAM,WAAW,KAAM;AAAA,cACjD,CAAE,IACF,iBAAkB,MAAM,WAAW,KAAM;AAAA,YAC3C;AAAA,UACD;AAAA,UAEA,KAAK,SAAU,MAAM,OAAO,OAAQ;AACnC,gBAAIM,UACH,SAAS,UAAW,IAAK,GAIzB,qBAAqB,CAAC,QAAQ,cAAc,KAC3C,OAAO,aAAa,YAGrB,kBAAkB,sBAAsB,OACxC,cAAc,mBACbN,QAAO,IAAK,MAAM,aAAa,OAAO,MAAO,MAAM,cACpD,WAAW,QACV;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD,IACA;AAIF,gBAAK,eAAe,oBAAqB;AACxC,0BAAY,KAAK;AAAA,gBAChB,KAAM,WAAW,UAAW,CAAE,EAAE,YAAY,IAAI,UAAU,MAAO,CAAE,CAAE,IACrE,WAAY,OAAQ,SAAU,CAAE,IAChC,mBAAoB,MAAM,WAAW,UAAU,OAAO,MAAO,IAC7D;AAAA,cACD;AAAA,YACD;AAGA,gBAAK,aAAcM,WAAU,QAAQ,KAAM,KAAM,OAC9CA,SAAS,CAAE,KAAK,UAAW,MAAO;AAEpC,mBAAK,MAAO,SAAU,IAAI;AAC1B,sBAAQN,QAAO,IAAK,MAAM,SAAU;AAAA,YACrC;AAEA,mBAAO,kBAAmB,MAAM,OAAO,QAAS;AAAA,UACjD;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,SAAS,aAAa;AAAA,QAAc,QAAQ;AAAA,QAClD,SAAU,MAAMqE,WAAW;AAC1B,cAAKA,WAAW;AACf,oBAAS,WAAY,OAAQ,MAAM,YAAa,CAAE,KACjD,KAAK,sBAAsB,EAAE,OAC5B,KAAM,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW;AACzC,qBAAO,KAAK,sBAAsB,EAAE;AAAA,YACrC,CAAE,KACA;AAAA,UACL;AAAA,QACD;AAAA,MACD;AAGA,MAAArE,QAAO,KAAM;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,MACT,GAAG,SAAU,QAAQ,QAAS;AAC7B,QAAAA,QAAO,SAAU,SAAS,MAAO,IAAI;AAAA,UACpC,QAAQ,SAAU,OAAQ;AACzB,gBAAIF,KAAI,GACP,WAAW,CAAC,GAGZ,QAAQ,OAAO,UAAU,WAAW,MAAM,MAAO,GAAI,IAAI,CAAE,KAAM;AAElE,mBAAQA,KAAI,GAAGA,MAAM;AACpB,uBAAU,SAAS,UAAWA,EAAE,IAAI,MAAO,IAC1C,MAAOA,EAAE,KAAK,MAAOA,KAAI,CAAE,KAAK,MAAO,CAAE;AAAA,YAC3C;AAEA,mBAAO;AAAA,UACR;AAAA,QACD;AAEA,YAAK,WAAW,UAAW;AAC1B,UAAAE,QAAO,SAAU,SAAS,MAAO,EAAE,MAAM;AAAA,QAC1C;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,MAAM,OAAQ;AAC5B,iBAAO,OAAQ,MAAM,SAAU,MAAMwE,OAAMxB,QAAQ;AAClD,gBAAI,QAAQ/C,MACX+B,OAAM,CAAC,GACPlC,KAAI;AAEL,gBAAK,MAAM,QAAS0E,KAAK,GAAI;AAC5B,uBAAS,UAAW,IAAK;AACzB,cAAAvE,OAAMuE,MAAK;AAEX,qBAAQ1E,KAAIG,MAAKH,MAAM;AACtB,gBAAAkC,KAAKwC,MAAM1E,EAAE,CAAE,IAAIE,QAAO,IAAK,MAAMwE,MAAM1E,EAAE,GAAG,OAAO,MAAO;AAAA,cAC/D;AAEA,qBAAOkC;AAAA,YACR;AAEA,mBAAOgB,WAAU,SAChBhD,QAAO,MAAO,MAAMwE,OAAMxB,MAAM,IAChChD,QAAO,IAAK,MAAMwE,KAAK;AAAA,UACzB,GAAG,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACtC;AAAA,MACD,CAAE;AAGF,eAAS,MAAO,MAAM,SAAS,MAAM,KAAK,QAAS;AAClD,eAAO,IAAI,MAAM,UAAU,KAAM,MAAM,SAAS,MAAM,KAAK,MAAO;AAAA,MACnE;AACA,MAAAxE,QAAO,QAAQ;AAEf,YAAM,YAAY;AAAA,QACjB,aAAa;AAAA,QACb,MAAM,SAAU,MAAM,SAAS,MAAM,KAAK,QAAQuD,OAAO;AACxD,eAAK,OAAO;AACZ,eAAK,OAAO;AACZ,eAAK,SAAS,UAAUvD,QAAO,OAAO;AACtC,eAAK,UAAU;AACf,eAAK,QAAQ,KAAK,MAAM,KAAK,IAAI;AACjC,eAAK,MAAM;AACX,eAAK,OAAOuD,UAAUvD,QAAO,UAAW,IAAK,IAAI,KAAK;AAAA,QACvD;AAAA,QACA,KAAK,WAAW;AACf,cAAIqD,SAAQ,MAAM,UAAW,KAAK,IAAK;AAEvC,iBAAOA,UAASA,OAAM,MACrBA,OAAM,IAAK,IAAK,IAChB,MAAM,UAAU,SAAS,IAAK,IAAK;AAAA,QACrC;AAAA,QACA,KAAK,SAAUoB,UAAU;AACxB,cAAI,OACHpB,SAAQ,MAAM,UAAW,KAAK,IAAK;AAEpC,cAAK,KAAK,QAAQ,UAAW;AAC5B,iBAAK,MAAM,QAAQrD,QAAO,OAAQ,KAAK,MAAO;AAAA,cAC7CyE;AAAA,cAAS,KAAK,QAAQ,WAAWA;AAAA,cAAS;AAAA,cAAG;AAAA,cAAG,KAAK,QAAQ;AAAA,YAC9D;AAAA,UACD,OAAO;AACN,iBAAK,MAAM,QAAQA;AAAA,UACpB;AACA,eAAK,OAAQ,KAAK,MAAM,KAAK,SAAU,QAAQ,KAAK;AAEpD,cAAK,KAAK,QAAQ,MAAO;AACxB,iBAAK,QAAQ,KAAK,KAAM,KAAK,MAAM,KAAK,KAAK,IAAK;AAAA,UACnD;AAEA,cAAKpB,UAASA,OAAM,KAAM;AACzB,YAAAA,OAAM,IAAK,IAAK;AAAA,UACjB,OAAO;AACN,kBAAM,UAAU,SAAS,IAAK,IAAK;AAAA,UACpC;AACA,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,YAAM,UAAU,KAAK,YAAY,MAAM;AAEvC,YAAM,YAAY;AAAA,QACjB,UAAU;AAAA,UACT,KAAK,SAAU,OAAQ;AACtB,gBAAI;AAIJ,gBAAK,MAAM,KAAK,aAAa,KAC5B,MAAM,KAAM,MAAM,IAAK,KAAK,QAAQ,MAAM,KAAK,MAAO,MAAM,IAAK,KAAK,MAAO;AAC7E,qBAAO,MAAM,KAAM,MAAM,IAAK;AAAA,YAC/B;AAMA,qBAASrD,QAAO,IAAK,MAAM,MAAM,MAAM,MAAM,EAAG;AAGhD,mBAAO,CAAC,UAAU,WAAW,SAAS,IAAI;AAAA,UAC3C;AAAA,UACA,KAAK,SAAU,OAAQ;AAKtB,gBAAKA,QAAO,GAAG,KAAM,MAAM,IAAK,GAAI;AACnC,cAAAA,QAAO,GAAG,KAAM,MAAM,IAAK,EAAG,KAAM;AAAA,YACrC,WAAY,MAAM,KAAK,aAAa,MACnCA,QAAO,SAAU,MAAM,IAAK,KAC3B,MAAM,KAAK,MAAO,cAAe,MAAM,IAAK,CAAE,KAAK,OAAS;AAC7D,cAAAA,QAAO,MAAO,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAK;AAAA,YAC9D,OAAO;AACN,oBAAM,KAAM,MAAM,IAAK,IAAI,MAAM;AAAA,YAClC;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAIA,YAAM,UAAU,YAAY,MAAM,UAAU,aAAa;AAAA,QACxD,KAAK,SAAU,OAAQ;AACtB,cAAK,MAAM,KAAK,YAAY,MAAM,KAAK,YAAa;AACnD,kBAAM,KAAM,MAAM,IAAK,IAAI,MAAM;AAAA,UAClC;AAAA,QACD;AAAA,MACD;AAEA,MAAAA,QAAO,SAAS;AAAA,QACf,QAAQ,SAAU0E,IAAI;AACrB,iBAAOA;AAAA,QACR;AAAA,QACA,OAAO,SAAUA,IAAI;AACpB,iBAAO,MAAM,KAAK,IAAKA,KAAI,KAAK,EAAG,IAAI;AAAA,QACxC;AAAA,QACA,UAAU;AAAA,MACX;AAEA,MAAA1E,QAAO,KAAK,MAAM,UAAU;AAG5B,MAAAA,QAAO,GAAG,OAAO,CAAC;AAKlB,UACC,OAAO,YACP,WAAW,0BACX,OAAO;AAER,eAAS,WAAW;AACnB,YAAK,YAAa;AACjB,cAAKH,UAAS,WAAW,SAASN,QAAO,uBAAwB;AAChE,YAAAA,QAAO,sBAAuB,QAAS;AAAA,UACxC,OAAO;AACN,YAAAA,QAAO,WAAY,UAAUS,QAAO,GAAG,QAAS;AAAA,UACjD;AAEA,UAAAA,QAAO,GAAG,KAAK;AAAA,QAChB;AAAA,MACD;AAGA,eAAS,cAAc;AACtB,QAAAT,QAAO,WAAY,WAAW;AAC7B,kBAAQ;AAAA,QACT,CAAE;AACF,eAAS,QAAQ,KAAK,IAAI;AAAA,MAC3B;AAGA,eAAS,MAAOgB,OAAM,cAAe;AACpC,YAAI,OACHT,KAAI,GACJwB,SAAQ,EAAE,QAAQf,MAAK;AAIxB,uBAAe,eAAe,IAAI;AAClC,eAAQT,KAAI,GAAGA,MAAK,IAAI,cAAe;AACtC,kBAAQ,UAAWA,EAAE;AACrB,UAAAwB,OAAO,WAAW,KAAM,IAAIA,OAAO,YAAY,KAAM,IAAIf;AAAA,QAC1D;AAEA,YAAK,cAAe;AACnB,UAAAe,OAAM,UAAUA,OAAM,QAAQf;AAAA,QAC/B;AAEA,eAAOe;AAAA,MACR;AAEA,eAAS,YAAa,OAAO,MAAM,WAAY;AAC9C,YAAI,OACH,cAAe,UAAU,SAAU,IAAK,KAAK,CAAC,GAAI,OAAQ,UAAU,SAAU,GAAI,CAAE,GACpFwB,SAAQ,GACR,SAAS,WAAW;AACrB,eAAQA,SAAQ,QAAQA,UAAU;AACjC,cAAO,QAAQ,WAAYA,MAAM,EAAE,KAAM,WAAW,MAAM,KAAM,GAAM;AAGrE,mBAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD;AAEA,eAAS,iBAAkB,MAAMmB,QAAO,MAAO;AAC9C,YAAI,MAAM,OAAO,QAAQZ,QAAO,SAAS,WAAW,gBAAgB,SACnE,QAAQ,WAAWY,UAAS,YAAYA,QACxC,OAAO,MACP,OAAO,CAAC,GACRK,SAAQ,KAAK,OACb,SAAS,KAAK,YAAY,mBAAoB,IAAK,GACnD,WAAW,SAAS,IAAK,MAAM,QAAS;AAGzC,YAAK,CAAC,KAAK,OAAQ;AAClB,UAAAjB,SAAQrD,QAAO,YAAa,MAAM,IAAK;AACvC,cAAKqD,OAAM,YAAY,MAAO;AAC7B,YAAAA,OAAM,WAAW;AACjB,sBAAUA,OAAM,MAAM;AACtB,YAAAA,OAAM,MAAM,OAAO,WAAW;AAC7B,kBAAK,CAACA,OAAM,UAAW;AACtB,wBAAQ;AAAA,cACT;AAAA,YACD;AAAA,UACD;AACA,UAAAA,OAAM;AAEN,eAAK,OAAQ,WAAW;AAGvB,iBAAK,OAAQ,WAAW;AACvB,cAAAA,OAAM;AACN,kBAAK,CAACrD,QAAO,MAAO,MAAM,IAAK,EAAE,QAAS;AACzC,gBAAAqD,OAAM,MAAM,KAAK;AAAA,cAClB;AAAA,YACD,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAGA,aAAM,QAAQY,QAAQ;AACrB,kBAAQA,OAAO,IAAK;AACpB,cAAK,SAAS,KAAM,KAAM,GAAI;AAC7B,mBAAOA,OAAO,IAAK;AACnB,qBAAS,UAAU,UAAU;AAC7B,gBAAK,WAAY,SAAS,SAAS,SAAW;AAI7C,kBAAK,UAAU,UAAU,YAAY,SAAU,IAAK,MAAM,QAAY;AACrE,yBAAS;AAAA,cAGV,OAAO;AACN;AAAA,cACD;AAAA,YACD;AACA,iBAAM,IAAK,IAAI,YAAY,SAAU,IAAK,KAAKjE,QAAO,MAAO,MAAM,IAAK;AAAA,UACzE;AAAA,QACD;AAGA,oBAAY,CAACA,QAAO,cAAeiE,MAAM;AACzC,YAAK,CAAC,aAAajE,QAAO,cAAe,IAAK,GAAI;AACjD;AAAA,QACD;AAGA,YAAK,SAAS,KAAK,aAAa,GAAI;AAMnC,eAAK,WAAW,CAAEsE,OAAM,UAAUA,OAAM,WAAWA,OAAM,SAAU;AAGnE,2BAAiB,YAAY,SAAS;AACtC,cAAK,kBAAkB,MAAO;AAC7B,6BAAiB,SAAS,IAAK,MAAM,SAAU;AAAA,UAChD;AACA,oBAAUtE,QAAO,IAAK,MAAM,SAAU;AACtC,cAAK,YAAY,QAAS;AACzB,gBAAK,gBAAiB;AACrB,wBAAU;AAAA,YACX,OAAO;AAGN,uBAAU,CAAE,IAAK,GAAG,IAAK;AACzB,+BAAiB,KAAK,MAAM,WAAW;AACvC,wBAAUA,QAAO,IAAK,MAAM,SAAU;AACtC,uBAAU,CAAE,IAAK,CAAE;AAAA,YACpB;AAAA,UACD;AAGA,cAAK,YAAY,YAAY,YAAY,kBAAkB,kBAAkB,MAAO;AACnF,gBAAKA,QAAO,IAAK,MAAM,OAAQ,MAAM,QAAS;AAG7C,kBAAK,CAAC,WAAY;AACjB,qBAAK,KAAM,WAAW;AACrB,kBAAAsE,OAAM,UAAU;AAAA,gBACjB,CAAE;AACF,oBAAK,kBAAkB,MAAO;AAC7B,4BAAUA,OAAM;AAChB,mCAAiB,YAAY,SAAS,KAAK;AAAA,gBAC5C;AAAA,cACD;AACA,cAAAA,OAAM,UAAU;AAAA,YACjB;AAAA,UACD;AAAA,QACD;AAEA,YAAK,KAAK,UAAW;AACpB,UAAAA,OAAM,WAAW;AACjB,eAAK,OAAQ,WAAW;AACvB,YAAAA,OAAM,WAAW,KAAK,SAAU,CAAE;AAClC,YAAAA,OAAM,YAAY,KAAK,SAAU,CAAE;AACnC,YAAAA,OAAM,YAAY,KAAK,SAAU,CAAE;AAAA,UACpC,CAAE;AAAA,QACH;AAGA,oBAAY;AACZ,aAAM,QAAQ,MAAO;AAGpB,cAAK,CAAC,WAAY;AACjB,gBAAK,UAAW;AACf,kBAAK,YAAY,UAAW;AAC3B,yBAAS,SAAS;AAAA,cACnB;AAAA,YACD,OAAO;AACN,yBAAW,SAAS,OAAQ,MAAM,UAAU,EAAE,SAAS,eAAe,CAAE;AAAA,YACzE;AAGA,gBAAK,QAAS;AACb,uBAAS,SAAS,CAAC;AAAA,YACpB;AAGA,gBAAK,QAAS;AACb,uBAAU,CAAE,IAAK,GAAG,IAAK;AAAA,YAC1B;AAIA,iBAAK,KAAM,WAAW;AAKrB,kBAAK,CAAC,QAAS;AACd,yBAAU,CAAE,IAAK,CAAE;AAAA,cACpB;AACA,uBAAS,OAAQ,MAAM,QAAS;AAChC,mBAAM,QAAQ,MAAO;AACpB,gBAAAtE,QAAO,MAAO,MAAM,MAAM,KAAM,IAAK,CAAE;AAAA,cACxC;AAAA,YACD,CAAE;AAAA,UACH;AAGA,sBAAY,YAAa,SAAS,SAAU,IAAK,IAAI,GAAG,MAAM,IAAK;AACnE,cAAK,EAAG,QAAQ,WAAa;AAC5B,qBAAU,IAAK,IAAI,UAAU;AAC7B,gBAAK,QAAS;AACb,wBAAU,MAAM,UAAU;AAC1B,wBAAU,QAAQ;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,eAAS,WAAYiE,QAAO,eAAgB;AAC3C,YAAInB,QAAO,MAAM,QAAQ,OAAOO;AAGhC,aAAMP,UAASmB,QAAQ;AACtB,iBAAO,UAAWnB,MAAM;AACxB,mBAAS,cAAe,IAAK;AAC7B,kBAAQmB,OAAOnB,MAAM;AACrB,cAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,qBAAS,MAAO,CAAE;AAClB,oBAAQmB,OAAOnB,MAAM,IAAI,MAAO,CAAE;AAAA,UACnC;AAEA,cAAKA,WAAU,MAAO;AACrB,YAAAmB,OAAO,IAAK,IAAI;AAChB,mBAAOA,OAAOnB,MAAM;AAAA,UACrB;AAEA,UAAAO,SAAQrD,QAAO,SAAU,IAAK;AAC9B,cAAKqD,UAAS,YAAYA,QAAQ;AACjC,oBAAQA,OAAM,OAAQ,KAAM;AAC5B,mBAAOY,OAAO,IAAK;AAInB,iBAAMnB,UAAS,OAAQ;AACtB,kBAAK,EAAGA,UAASmB,SAAU;AAC1B,gBAAAA,OAAOnB,MAAM,IAAI,MAAOA,MAAM;AAC9B,8BAAeA,MAAM,IAAI;AAAA,cAC1B;AAAA,YACD;AAAA,UACD,OAAO;AACN,0BAAe,IAAK,IAAI;AAAA,UACzB;AAAA,QACD;AAAA,MACD;AAEA,eAAS,UAAW,MAAM,YAAY,SAAU;AAC/C,YAAI,QACH,SACAA,SAAQ,GACR,SAAS,UAAU,WAAW,QAC9B,WAAW9C,QAAO,SAAS,EAAE,OAAQ,WAAW;AAG/C,iBAAO,KAAK;AAAA,QACb,CAAE,GACF,OAAO,WAAW;AACjB,cAAK,SAAU;AACd,mBAAO;AAAA,UACR;AACA,cAAI,cAAc,SAAS,YAAY,GACtC,YAAY,KAAK,IAAK,GAAG,UAAU,YAAY,UAAU,WAAW,WAAY,GAIhF,OAAO,YAAY,UAAU,YAAY,GACzCyE,WAAU,IAAI,MACd3B,SAAQ,GACR6B,UAAS,UAAU,OAAO;AAE3B,iBAAQ7B,SAAQ6B,SAAQ7B,UAAU;AACjC,sBAAU,OAAQA,MAAM,EAAE,IAAK2B,QAAQ;AAAA,UACxC;AAEA,mBAAS,WAAY,MAAM,CAAE,WAAWA,UAAS,SAAU,CAAE;AAG7D,cAAKA,WAAU,KAAKE,SAAS;AAC5B,mBAAO;AAAA,UACR;AAGA,cAAK,CAACA,SAAS;AACd,qBAAS,WAAY,MAAM,CAAE,WAAW,GAAG,CAAE,CAAE;AAAA,UAChD;AAGA,mBAAS,YAAa,MAAM,CAAE,SAAU,CAAE;AAC1C,iBAAO;AAAA,QACR,GACA,YAAY,SAAS,QAAS;AAAA,UAC7B;AAAA,UACA,OAAO3E,QAAO,OAAQ,CAAC,GAAG,UAAW;AAAA,UACrC,MAAMA,QAAO,OAAQ,MAAM;AAAA,YAC1B,eAAe,CAAC;AAAA,YAChB,QAAQA,QAAO,OAAO;AAAA,UACvB,GAAG,OAAQ;AAAA,UACX,oBAAoB;AAAA,UACpB,iBAAiB;AAAA,UACjB,WAAW,SAAS,YAAY;AAAA,UAChC,UAAU,QAAQ;AAAA,UAClB,QAAQ,CAAC;AAAA,UACT,aAAa,SAAU,MAAM,KAAM;AAClC,gBAAI,QAAQA,QAAO;AAAA,cAAO;AAAA,cAAM,UAAU;AAAA,cAAM;AAAA,cAAM;AAAA,cACrD,UAAU,KAAK,cAAe,IAAK,KAAK,UAAU,KAAK;AAAA,YAAO;AAC/D,sBAAU,OAAO,KAAM,KAAM;AAC7B,mBAAO;AAAA,UACR;AAAA,UACA,MAAM,SAAU,SAAU;AACzB,gBAAI8C,SAAQ,GAIX6B,UAAS,UAAU,UAAU,OAAO,SAAS;AAC9C,gBAAK,SAAU;AACd,qBAAO;AAAA,YACR;AACA,sBAAU;AACV,mBAAQ7B,SAAQ6B,SAAQ7B,UAAU;AACjC,wBAAU,OAAQA,MAAM,EAAE,IAAK,CAAE;AAAA,YAClC;AAGA,gBAAK,SAAU;AACd,uBAAS,WAAY,MAAM,CAAE,WAAW,GAAG,CAAE,CAAE;AAC/C,uBAAS,YAAa,MAAM,CAAE,WAAW,OAAQ,CAAE;AAAA,YACpD,OAAO;AACN,uBAAS,WAAY,MAAM,CAAE,WAAW,OAAQ,CAAE;AAAA,YACnD;AACA,mBAAO;AAAA,UACR;AAAA,QACD,CAAE,GACFmB,SAAQ,UAAU;AAEnB,mBAAYA,QAAO,UAAU,KAAK,aAAc;AAEhD,eAAQnB,SAAQ,QAAQA,UAAU;AACjC,mBAAS,UAAU,WAAYA,MAAM,EAAE,KAAM,WAAW,MAAMmB,QAAO,UAAU,IAAK;AACpF,cAAK,QAAS;AACb,gBAAKtE,YAAY,OAAO,IAAK,GAAI;AAChC,cAAAK,QAAO,YAAa,UAAU,MAAM,UAAU,KAAK,KAAM,EAAE,OAC1D,OAAO,KAAK,KAAM,MAAO;AAAA,YAC3B;AACA,mBAAO;AAAA,UACR;AAAA,QACD;AAEA,QAAAA,QAAO,IAAKiE,QAAO,aAAa,SAAU;AAE1C,YAAKtE,YAAY,UAAU,KAAK,KAAM,GAAI;AACzC,oBAAU,KAAK,MAAM,KAAM,MAAM,SAAU;AAAA,QAC5C;AAGA,kBACE,SAAU,UAAU,KAAK,QAAS,EAClC,KAAM,UAAU,KAAK,MAAM,UAAU,KAAK,QAAS,EACnD,KAAM,UAAU,KAAK,IAAK,EAC1B,OAAQ,UAAU,KAAK,MAAO;AAEhC,QAAAK,QAAO,GAAG;AAAA,UACTA,QAAO,OAAQ,MAAM;AAAA,YACpB;AAAA,YACA,MAAM;AAAA,YACN,OAAO,UAAU,KAAK;AAAA,UACvB,CAAE;AAAA,QACH;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,YAAYA,QAAO,OAAQ,WAAW;AAAA,QAE5C,UAAU;AAAA,UACT,KAAK,CAAE,SAAU,MAAM,OAAQ;AAC9B,gBAAI,QAAQ,KAAK,YAAa,MAAM,KAAM;AAC1C,sBAAW,MAAM,MAAM,MAAM,QAAQ,KAAM,KAAM,GAAG,KAAM;AAC1D,mBAAO;AAAA,UACR,CAAE;AAAA,QACH;AAAA,QAEA,SAAS,SAAUiE,QAAO,UAAW;AACpC,cAAKtE,YAAYsE,MAAM,GAAI;AAC1B,uBAAWA;AACX,YAAAA,SAAQ,CAAE,GAAI;AAAA,UACf,OAAO;AACN,YAAAA,SAAQA,OAAM,MAAO,aAAc;AAAA,UACpC;AAEA,cAAI,MACHnB,SAAQ,GACR,SAASmB,OAAM;AAEhB,iBAAQnB,SAAQ,QAAQA,UAAU;AACjC,mBAAOmB,OAAOnB,MAAM;AACpB,sBAAU,SAAU,IAAK,IAAI,UAAU,SAAU,IAAK,KAAK,CAAC;AAC5D,sBAAU,SAAU,IAAK,EAAE,QAAS,QAAS;AAAA,UAC9C;AAAA,QACD;AAAA,QAEA,YAAY,CAAE,gBAAiB;AAAA,QAE/B,WAAW,SAAU,UAAU,SAAU;AACxC,cAAK,SAAU;AACd,sBAAU,WAAW,QAAS,QAAS;AAAA,UACxC,OAAO;AACN,sBAAU,WAAW,KAAM,QAAS;AAAA,UACrC;AAAA,QACD;AAAA,MACD,CAAE;AAEF,MAAA9C,QAAO,QAAQ,SAAU,OAAO,QAAQ,IAAK;AAC5C,YAAI,MAAM,SAAS,OAAO,UAAU,WAAWA,QAAO,OAAQ,CAAC,GAAG,KAAM,IAAI;AAAA,UAC3E,UAAU,MAAM,CAAC,MAAM,UACtBL,YAAY,KAAM,KAAK;AAAA,UACxB,UAAU;AAAA,UACV,QAAQ,MAAM,UAAU,UAAU,CAACA,YAAY,MAAO,KAAK;AAAA,QAC5D;AAGA,YAAKK,QAAO,GAAG,KAAM;AACpB,cAAI,WAAW;AAAA,QAEhB,OAAO;AACN,cAAK,OAAO,IAAI,aAAa,UAAW;AACvC,gBAAK,IAAI,YAAYA,QAAO,GAAG,QAAS;AACvC,kBAAI,WAAWA,QAAO,GAAG,OAAQ,IAAI,QAAS;AAAA,YAE/C,OAAO;AACN,kBAAI,WAAWA,QAAO,GAAG,OAAO;AAAA,YACjC;AAAA,UACD;AAAA,QACD;AAGA,YAAK,IAAI,SAAS,QAAQ,IAAI,UAAU,MAAO;AAC9C,cAAI,QAAQ;AAAA,QACb;AAGA,YAAI,MAAM,IAAI;AAEd,YAAI,WAAW,WAAW;AACzB,cAAKL,YAAY,IAAI,GAAI,GAAI;AAC5B,gBAAI,IAAI,KAAM,IAAK;AAAA,UACpB;AAEA,cAAK,IAAI,OAAQ;AAChB,YAAAK,QAAO,QAAS,MAAM,IAAI,KAAM;AAAA,UACjC;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,QAAQ,SAAU,OAAO,IAAI,QAAQ,UAAW;AAG/C,iBAAO,KAAK,OAAQ,kBAAmB,EAAE,IAAK,WAAW,CAAE,EAAE,KAAK,EAGhE,IAAI,EAAE,QAAS,EAAE,SAAS,GAAG,GAAG,OAAO,QAAQ,QAAS;AAAA,QAC3D;AAAA,QACA,SAAS,SAAU,MAAM,OAAO,QAAQ,UAAW;AAClD,cAAI4E,SAAQ5E,QAAO,cAAe,IAAK,GACtC,SAASA,QAAO,MAAO,OAAO,QAAQ,QAAS,GAC/C,cAAc,WAAW;AAGxB,gBAAI,OAAO,UAAW,MAAMA,QAAO,OAAQ,CAAC,GAAG,IAAK,GAAG,MAAO;AAG9D,gBAAK4E,UAAS,SAAS,IAAK,MAAM,QAAS,GAAI;AAC9C,mBAAK,KAAM,IAAK;AAAA,YACjB;AAAA,UACD;AAED,sBAAY,SAAS;AAErB,iBAAOA,UAAS,OAAO,UAAU,QAChC,KAAK,KAAM,WAAY,IACvB,KAAK,MAAO,OAAO,OAAO,WAAY;AAAA,QACxC;AAAA,QACA,MAAM,SAAUrE,OAAM,YAAY,SAAU;AAC3C,cAAI,YAAY,SAAU8C,QAAQ;AACjC,gBAAI,OAAOA,OAAM;AACjB,mBAAOA,OAAM;AACb,iBAAM,OAAQ;AAAA,UACf;AAEA,cAAK,OAAO9C,UAAS,UAAW;AAC/B,sBAAU;AACV,yBAAaA;AACb,YAAAA,QAAO;AAAA,UACR;AACA,cAAK,YAAa;AACjB,iBAAK,MAAOA,SAAQ,MAAM,CAAC,CAAE;AAAA,UAC9B;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAI,UAAU,MACbuC,SAAQvC,SAAQ,QAAQA,QAAO,cAC/B,SAASP,QAAO,QAChB,OAAO,SAAS,IAAK,IAAK;AAE3B,gBAAK8C,QAAQ;AACZ,kBAAK,KAAMA,MAAM,KAAK,KAAMA,MAAM,EAAE,MAAO;AAC1C,0BAAW,KAAMA,MAAM,CAAE;AAAA,cAC1B;AAAA,YACD,OAAO;AACN,mBAAMA,UAAS,MAAO;AACrB,oBAAK,KAAMA,MAAM,KAAK,KAAMA,MAAM,EAAE,QAAQ,KAAK,KAAMA,MAAM,GAAI;AAChE,4BAAW,KAAMA,MAAM,CAAE;AAAA,gBAC1B;AAAA,cACD;AAAA,YACD;AAEA,iBAAMA,SAAQ,OAAO,QAAQA,YAAW;AACvC,kBAAK,OAAQA,MAAM,EAAE,SAAS,SAC3BvC,SAAQ,QAAQ,OAAQuC,MAAM,EAAE,UAAUvC,QAAS;AAErD,uBAAQuC,MAAM,EAAE,KAAK,KAAM,OAAQ;AACnC,0BAAU;AACV,uBAAO,OAAQA,QAAO,CAAE;AAAA,cACzB;AAAA,YACD;AAKA,gBAAK,WAAW,CAAC,SAAU;AAC1B,cAAA9C,QAAO,QAAS,MAAMO,KAAK;AAAA,YAC5B;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QACA,QAAQ,SAAUA,OAAO;AACxB,cAAKA,UAAS,OAAQ;AACrB,YAAAA,QAAOA,SAAQ;AAAA,UAChB;AACA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAIuC,QACH,OAAO,SAAS,IAAK,IAAK,GAC1BF,SAAQ,KAAMrC,QAAO,OAAQ,GAC7B8C,SAAQ,KAAM9C,QAAO,YAAa,GAClC,SAASP,QAAO,QAChB,SAAS4C,SAAQA,OAAM,SAAS;AAGjC,iBAAK,SAAS;AAGd,YAAA5C,QAAO,MAAO,MAAMO,OAAM,CAAC,CAAE;AAE7B,gBAAK8C,UAASA,OAAM,MAAO;AAC1B,cAAAA,OAAM,KAAK,KAAM,MAAM,IAAK;AAAA,YAC7B;AAGA,iBAAMP,SAAQ,OAAO,QAAQA,YAAW;AACvC,kBAAK,OAAQA,MAAM,EAAE,SAAS,QAAQ,OAAQA,MAAM,EAAE,UAAUvC,OAAO;AACtE,uBAAQuC,MAAM,EAAE,KAAK,KAAM,IAAK;AAChC,uBAAO,OAAQA,QAAO,CAAE;AAAA,cACzB;AAAA,YACD;AAGA,iBAAMA,SAAQ,GAAGA,SAAQ,QAAQA,UAAU;AAC1C,kBAAKF,OAAOE,MAAM,KAAKF,OAAOE,MAAM,EAAE,QAAS;AAC9C,gBAAAF,OAAOE,MAAM,EAAE,OAAO,KAAM,IAAK;AAAA,cAClC;AAAA,YACD;AAGA,mBAAO,KAAK;AAAA,UACb,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAA9C,QAAO,KAAM,CAAE,UAAU,QAAQ,MAAO,GAAG,SAAU,IAAI,MAAO;AAC/D,YAAI,QAAQA,QAAO,GAAI,IAAK;AAC5B,QAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,QAAQ,UAAW;AACvD,iBAAO,SAAS,QAAQ,OAAO,UAAU,YACxC,MAAM,MAAO,MAAM,SAAU,IAC7B,KAAK,QAAS,MAAO,MAAM,IAAK,GAAG,OAAO,QAAQ,QAAS;AAAA,QAC7D;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM;AAAA,QACZ,WAAW,MAAO,MAAO;AAAA,QACzB,SAAS,MAAO,MAAO;AAAA,QACvB,aAAa,MAAO,QAAS;AAAA,QAC7B,QAAQ,EAAE,SAAS,OAAO;AAAA,QAC1B,SAAS,EAAE,SAAS,OAAO;AAAA,QAC3B,YAAY,EAAE,SAAS,SAAS;AAAA,MACjC,GAAG,SAAU,MAAMiE,QAAQ;AAC1B,QAAAjE,QAAO,GAAI,IAAK,IAAI,SAAU,OAAO,QAAQ,UAAW;AACvD,iBAAO,KAAK,QAASiE,QAAO,OAAO,QAAQ,QAAS;AAAA,QACrD;AAAA,MACD,CAAE;AAEF,MAAAjE,QAAO,SAAS,CAAC;AACjB,MAAAA,QAAO,GAAG,OAAO,WAAW;AAC3B,YAAI6E,QACH/E,KAAI,GACJ,SAASE,QAAO;AAEjB,gBAAQ,KAAK,IAAI;AAEjB,eAAQF,KAAI,OAAO,QAAQA,MAAM;AAChC,UAAA+E,SAAQ,OAAQ/E,EAAE;AAGlB,cAAK,CAAC+E,OAAM,KAAK,OAAQ/E,EAAE,MAAM+E,QAAQ;AACxC,mBAAO,OAAQ/E,MAAK,CAAE;AAAA,UACvB;AAAA,QACD;AAEA,YAAK,CAAC,OAAO,QAAS;AACrB,UAAAE,QAAO,GAAG,KAAK;AAAA,QAChB;AACA,gBAAQ;AAAA,MACT;AAEA,MAAAA,QAAO,GAAG,QAAQ,SAAU6E,QAAQ;AACnC,QAAA7E,QAAO,OAAO,KAAM6E,MAAM;AAC1B,QAAA7E,QAAO,GAAG,MAAM;AAAA,MACjB;AAEA,MAAAA,QAAO,GAAG,WAAW;AACrB,MAAAA,QAAO,GAAG,QAAQ,WAAW;AAC5B,YAAK,YAAa;AACjB;AAAA,QACD;AAEA,qBAAa;AACb,iBAAS;AAAA,MACV;AAEA,MAAAA,QAAO,GAAG,OAAO,WAAW;AAC3B,qBAAa;AAAA,MACd;AAEA,MAAAA,QAAO,GAAG,SAAS;AAAA,QAClB,MAAM;AAAA,QACN,MAAM;AAAA;AAAA,QAGN,UAAU;AAAA,MACX;AAKA,MAAAA,QAAO,GAAG,QAAQ,SAAU8E,OAAMvE,OAAO;AACxC,QAAAuE,QAAO9E,QAAO,KAAKA,QAAO,GAAG,OAAQ8E,KAAK,KAAKA,QAAOA;AACtD,QAAAvE,QAAOA,SAAQ;AAEf,eAAO,KAAK,MAAOA,OAAM,SAAU+C,OAAMD,QAAQ;AAChD,cAAI0B,WAAUxF,QAAO,WAAY+D,OAAMwB,KAAK;AAC5C,UAAAzB,OAAM,OAAO,WAAW;AACvB,YAAA9D,QAAO,aAAcwF,QAAQ;AAAA,UAC9B;AAAA,QACD,CAAE;AAAA,MACH;AAGA,OAAE,WAAW;AACZ,YAAI,QAAQlF,UAAS,cAAe,OAAQ,GAC3C,SAASA,UAAS,cAAe,QAAS,GAC1C,MAAM,OAAO,YAAaA,UAAS,cAAe,QAAS,CAAE;AAE9D,cAAM,OAAO;AAIb,gBAAQ,UAAU,MAAM,UAAU;AAIlC,gBAAQ,cAAc,IAAI;AAI1B,gBAAQA,UAAS,cAAe,OAAQ;AACxC,cAAM,QAAQ;AACd,cAAM,OAAO;AACb,gBAAQ,aAAa,MAAM,UAAU;AAAA,MACtC,GAAI;AAGJ,UAAI,UACH,aAAaG,QAAO,KAAK;AAE1B,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,iBAAO,OAAQ,MAAMA,QAAO,MAAM,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACrE;AAAA,QAEA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAA,QAAO,WAAY,MAAM,IAAK;AAAA,UAC/B,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,cAAI,KAAKqD,QACR,QAAQ,KAAK;AAGd,cAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA,UACD;AAGA,cAAK,OAAO,KAAK,iBAAiB,aAAc;AAC/C,mBAAOrD,QAAO,KAAM,MAAM,MAAM,KAAM;AAAA,UACvC;AAIA,cAAK,UAAU,KAAK,CAACA,QAAO,SAAU,IAAK,GAAI;AAC9C,YAAAqD,SAAQrD,QAAO,UAAW,KAAK,YAAY,CAAE,MAC1CA,QAAO,KAAK,MAAM,KAAK,KAAM,IAAK,IAAI,WAAW;AAAA,UACrD;AAEA,cAAK,UAAU,QAAY;AAC1B,gBAAK,UAAU,MAAO;AACrB,cAAAA,QAAO,WAAY,MAAM,IAAK;AAC9B;AAAA,YACD;AAEA,gBAAKqD,UAAS,SAASA,WACpB,MAAMA,OAAM,IAAK,MAAM,OAAO,IAAK,OAAQ,QAAY;AACzD,qBAAO;AAAA,YACR;AAEA,iBAAK,aAAc,MAAM,QAAQ,EAAG;AACpC,mBAAO;AAAA,UACR;AAEA,cAAKA,UAAS,SAASA,WAAW,MAAMA,OAAM,IAAK,MAAM,IAAK,OAAQ,MAAO;AAC5E,mBAAO;AAAA,UACR;AAEA,gBAAMrD,QAAO,KAAK,KAAM,MAAM,IAAK;AAGnC,iBAAO,OAAO,OAAO,SAAY;AAAA,QAClC;AAAA,QAEA,WAAW;AAAA,UACV,MAAM;AAAA,YACL,KAAK,SAAU,MAAM,OAAQ;AAC5B,kBAAK,CAAC,QAAQ,cAAc,UAAU,WACrC,SAAU,MAAM,OAAQ,GAAI;AAC5B,oBAAI,MAAM,KAAK;AACf,qBAAK,aAAc,QAAQ,KAAM;AACjC,oBAAK,KAAM;AACV,uBAAK,QAAQ;AAAA,gBACd;AACA,uBAAO;AAAA,cACR;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,QAEA,YAAY,SAAU,MAAM,OAAQ;AACnC,cAAI,MACHF,KAAI,GAIJ,YAAY,SAAS,MAAM,MAAO,aAAc;AAEjD,cAAK,aAAa,KAAK,aAAa,GAAI;AACvC,mBAAU,OAAO,UAAWA,IAAI,GAAM;AACrC,mBAAK,gBAAiB,IAAK;AAAA,YAC5B;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAGF,iBAAW;AAAA,QACV,KAAK,SAAU,MAAM,OAAO,MAAO;AAClC,cAAK,UAAU,OAAQ;AAGtB,YAAAE,QAAO,WAAY,MAAM,IAAK;AAAA,UAC/B,OAAO;AACN,iBAAK,aAAc,MAAM,IAAK;AAAA,UAC/B;AACA,iBAAO;AAAA,QACR;AAAA,MACD;AAEA,MAAAA,QAAO,KAAMA,QAAO,KAAK,MAAM,KAAK,OAAO,MAAO,MAAO,GAAG,SAAU,IAAI,MAAO;AAChF,YAAI,SAAS,WAAY,IAAK,KAAKA,QAAO,KAAK;AAE/C,mBAAY,IAAK,IAAI,SAAU,MAAMwE,OAAM,OAAQ;AAClD,cAAI,KAAK,QACR,gBAAgBA,MAAK,YAAY;AAElC,cAAK,CAAC,OAAQ;AAGb,qBAAS,WAAY,aAAc;AACnC,uBAAY,aAAc,IAAI;AAC9B,kBAAM,OAAQ,MAAMA,OAAM,KAAM,KAAK,OACpC,gBACA;AACD,uBAAY,aAAc,IAAI;AAAA,UAC/B;AACA,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAKF,UAAI,aAAa,uCAChB,aAAa;AAEd,MAAAxE,QAAO,GAAG,OAAQ;AAAA,QACjB,MAAM,SAAU,MAAM,OAAQ;AAC7B,iBAAO,OAAQ,MAAMA,QAAO,MAAM,MAAM,OAAO,UAAU,SAAS,CAAE;AAAA,QACrE;AAAA,QAEA,YAAY,SAAU,MAAO;AAC5B,iBAAO,KAAK,KAAM,WAAW;AAC5B,mBAAO,KAAMA,QAAO,QAAS,IAAK,KAAK,IAAK;AAAA,UAC7C,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,OAAQ;AAAA,QACd,MAAM,SAAU,MAAM,MAAM,OAAQ;AACnC,cAAI,KAAKqD,QACR,QAAQ,KAAK;AAGd,cAAK,UAAU,KAAK,UAAU,KAAK,UAAU,GAAI;AAChD;AAAA,UACD;AAEA,cAAK,UAAU,KAAK,CAACrD,QAAO,SAAU,IAAK,GAAI;AAG9C,mBAAOA,QAAO,QAAS,IAAK,KAAK;AACjC,YAAAqD,SAAQrD,QAAO,UAAW,IAAK;AAAA,UAChC;AAEA,cAAK,UAAU,QAAY;AAC1B,gBAAKqD,UAAS,SAASA,WACpB,MAAMA,OAAM,IAAK,MAAM,OAAO,IAAK,OAAQ,QAAY;AACzD,qBAAO;AAAA,YACR;AAEA,mBAAS,KAAM,IAAK,IAAI;AAAA,UACzB;AAEA,cAAKA,UAAS,SAASA,WAAW,MAAMA,OAAM,IAAK,MAAM,IAAK,OAAQ,MAAO;AAC5E,mBAAO;AAAA,UACR;AAEA,iBAAO,KAAM,IAAK;AAAA,QACnB;AAAA,QAEA,WAAW;AAAA,UACV,UAAU;AAAA,YACT,KAAK,SAAU,MAAO;AAOrB,kBAAI,WAAWrD,QAAO,KAAK,KAAM,MAAM,UAAW;AAElD,kBAAK,UAAW;AACf,uBAAO,SAAU,UAAU,EAAG;AAAA,cAC/B;AAEA,kBACC,WAAW,KAAM,KAAK,QAAS,KAC/B,WAAW,KAAM,KAAK,QAAS,KAC/B,KAAK,MACJ;AACD,uBAAO;AAAA,cACR;AAEA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,QAEA,SAAS;AAAA,UACR,OAAO;AAAA,UACP,SAAS;AAAA,QACV;AAAA,MACD,CAAE;AAUF,UAAK,CAAC,QAAQ,aAAc;AAC3B,QAAAA,QAAO,UAAU,WAAW;AAAA,UAC3B,KAAK,SAAU,MAAO;AAIrB,gBAAI,SAAS,KAAK;AAClB,gBAAK,UAAU,OAAO,YAAa;AAClC,qBAAO,WAAW;AAAA,YACnB;AACA,mBAAO;AAAA,UACR;AAAA,UACA,KAAK,SAAU,MAAO;AAIrB,gBAAI,SAAS,KAAK;AAClB,gBAAK,QAAS;AACb,qBAAO;AAEP,kBAAK,OAAO,YAAa;AACxB,uBAAO,WAAW;AAAA,cACnB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAEA,MAAAA,QAAO,KAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAAG,WAAW;AACb,QAAAA,QAAO,QAAS,KAAK,YAAY,CAAE,IAAI;AAAA,MACxC,CAAE;AAOD,eAAS,iBAAkB,OAAQ;AAClC,YAAI,SAAS,MAAM,MAAO,aAAc,KAAK,CAAC;AAC9C,eAAO,OAAO,KAAM,GAAI;AAAA,MACzB;AAGD,eAAS,SAAU,MAAO;AACzB,eAAO,KAAK,gBAAgB,KAAK,aAAc,OAAQ,KAAK;AAAA,MAC7D;AAEA,eAAS,eAAgB,OAAQ;AAChC,YAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,iBAAO;AAAA,QACR;AACA,YAAK,OAAO,UAAU,UAAW;AAChC,iBAAO,MAAM,MAAO,aAAc,KAAK,CAAC;AAAA,QACzC;AACA,eAAO,CAAC;AAAA,MACT;AAEA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,UAAU,SAAU,OAAQ;AAC3B,cAAI,SAAS,MAAM,KAAK,UAAU,OAAOE,IAAG,YAC3CJ,KAAI;AAEL,cAAKH,YAAY,KAAM,GAAI;AAC1B,mBAAO,KAAK,KAAM,SAAUO,IAAI;AAC/B,cAAAF,QAAQ,IAAK,EAAE,SAAU,MAAM,KAAM,MAAME,IAAG,SAAU,IAAK,CAAE,CAAE;AAAA,YAClE,CAAE;AAAA,UACH;AAEA,oBAAU,eAAgB,KAAM;AAEhC,cAAK,QAAQ,QAAS;AACrB,mBAAU,OAAO,KAAMJ,IAAI,GAAM;AAChC,yBAAW,SAAU,IAAK;AAC1B,oBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,QAAS,IAAI;AAEpE,kBAAK,KAAM;AACV,gBAAAI,KAAI;AACJ,uBAAU,QAAQ,QAASA,IAAI,GAAM;AACpC,sBAAK,IAAI,QAAS,MAAM,QAAQ,GAAI,IAAI,GAAI;AAC3C,2BAAO,QAAQ;AAAA,kBAChB;AAAA,gBACD;AAGA,6BAAa,iBAAkB,GAAI;AACnC,oBAAK,aAAa,YAAa;AAC9B,uBAAK,aAAc,SAAS,UAAW;AAAA,gBACxC;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,aAAa,SAAU,OAAQ;AAC9B,cAAI,SAAS,MAAM,KAAK,UAAU,OAAOA,IAAG,YAC3CJ,KAAI;AAEL,cAAKH,YAAY,KAAM,GAAI;AAC1B,mBAAO,KAAK,KAAM,SAAUO,IAAI;AAC/B,cAAAF,QAAQ,IAAK,EAAE,YAAa,MAAM,KAAM,MAAME,IAAG,SAAU,IAAK,CAAE,CAAE;AAAA,YACrE,CAAE;AAAA,UACH;AAEA,cAAK,CAAC,UAAU,QAAS;AACxB,mBAAO,KAAK,KAAM,SAAS,EAAG;AAAA,UAC/B;AAEA,oBAAU,eAAgB,KAAM;AAEhC,cAAK,QAAQ,QAAS;AACrB,mBAAU,OAAO,KAAMJ,IAAI,GAAM;AAChC,yBAAW,SAAU,IAAK;AAG1B,oBAAM,KAAK,aAAa,KAAO,MAAM,iBAAkB,QAAS,IAAI;AAEpE,kBAAK,KAAM;AACV,gBAAAI,KAAI;AACJ,uBAAU,QAAQ,QAASA,IAAI,GAAM;AAGpC,yBAAQ,IAAI,QAAS,MAAM,QAAQ,GAAI,IAAI,IAAK;AAC/C,0BAAM,IAAI,QAAS,MAAM,QAAQ,KAAK,GAAI;AAAA,kBAC3C;AAAA,gBACD;AAGA,6BAAa,iBAAkB,GAAI;AACnC,oBAAK,aAAa,YAAa;AAC9B,uBAAK,aAAc,SAAS,UAAW;AAAA,gBACxC;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,aAAa,SAAU,OAAO,UAAW;AACxC,cAAIK,QAAO,OAAO,OACjB,eAAeA,UAAS,YAAY,MAAM,QAAS,KAAM;AAE1D,cAAK,OAAO,aAAa,aAAa,cAAe;AACpD,mBAAO,WAAW,KAAK,SAAU,KAAM,IAAI,KAAK,YAAa,KAAM;AAAA,UACpE;AAEA,cAAKZ,YAAY,KAAM,GAAI;AAC1B,mBAAO,KAAK,KAAM,SAAUG,IAAI;AAC/B,cAAAE,QAAQ,IAAK,EAAE;AAAA,gBACd,MAAM,KAAM,MAAMF,IAAG,SAAU,IAAK,GAAG,QAAS;AAAA,gBAChD;AAAA,cACD;AAAA,YACD,CAAE;AAAA,UACH;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAI,WAAWA,IAAGyC,OAAM;AAExB,gBAAK,cAAe;AAGnB,cAAAzC,KAAI;AACJ,cAAAyC,QAAOvC,QAAQ,IAAK;AACpB,2BAAa,eAAgB,KAAM;AAEnC,qBAAU,YAAY,WAAYF,IAAI,GAAM;AAG3C,oBAAKyC,MAAK,SAAU,SAAU,GAAI;AACjC,kBAAAA,MAAK,YAAa,SAAU;AAAA,gBAC7B,OAAO;AACN,kBAAAA,MAAK,SAAU,SAAU;AAAA,gBAC1B;AAAA,cACD;AAAA,YAGD,WAAY,UAAU,UAAahC,UAAS,WAAY;AACvD,0BAAY,SAAU,IAAK;AAC3B,kBAAK,WAAY;AAGhB,yBAAS,IAAK,MAAM,iBAAiB,SAAU;AAAA,cAChD;AAMA,kBAAK,KAAK,cAAe;AACxB,qBAAK;AAAA,kBAAc;AAAA,kBAClB,aAAa,UAAU,QACtB,KACA,SAAS,IAAK,MAAM,eAAgB,KAAK;AAAA,gBAC3C;AAAA,cACD;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,UAAU,SAAU,UAAW;AAC9B,cAAI,WAAW,MACdT,KAAI;AAEL,sBAAY,MAAM,WAAW;AAC7B,iBAAU,OAAO,KAAMA,IAAI,GAAM;AAChC,gBAAK,KAAK,aAAa,MACpB,MAAM,iBAAkB,SAAU,IAAK,CAAE,IAAI,KAAM,QAAS,SAAU,IAAI,IAAK;AACjF,qBAAO;AAAA,YACR;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAKF,UAAI,UAAU;AAEd,MAAAE,QAAO,GAAG,OAAQ;AAAA,QACjB,KAAK,SAAU,OAAQ;AACtB,cAAIqD,QAAO,KAAK,iBACf,OAAO,KAAM,CAAE;AAEhB,cAAK,CAAC,UAAU,QAAS;AACxB,gBAAK,MAAO;AACX,cAAAA,SAAQrD,QAAO,SAAU,KAAK,IAAK,KAClCA,QAAO,SAAU,KAAK,SAAS,YAAY,CAAE;AAE9C,kBAAKqD,UACJ,SAASA,WACP,MAAMA,OAAM,IAAK,MAAM,OAAQ,OAAQ,QACxC;AACD,uBAAO;AAAA,cACR;AAEA,oBAAM,KAAK;AAGX,kBAAK,OAAO,QAAQ,UAAW;AAC9B,uBAAO,IAAI,QAAS,SAAS,EAAG;AAAA,cACjC;AAGA,qBAAO,OAAO,OAAO,KAAK;AAAA,YAC3B;AAEA;AAAA,UACD;AAEA,4BAAkB1D,YAAY,KAAM;AAEpC,iBAAO,KAAK,KAAM,SAAUG,IAAI;AAC/B,gBAAI;AAEJ,gBAAK,KAAK,aAAa,GAAI;AAC1B;AAAA,YACD;AAEA,gBAAK,iBAAkB;AACtB,oBAAM,MAAM,KAAM,MAAMA,IAAGE,QAAQ,IAAK,EAAE,IAAI,CAAE;AAAA,YACjD,OAAO;AACN,oBAAM;AAAA,YACP;AAGA,gBAAK,OAAO,MAAO;AAClB,oBAAM;AAAA,YAEP,WAAY,OAAO,QAAQ,UAAW;AACrC,qBAAO;AAAA,YAER,WAAY,MAAM,QAAS,GAAI,GAAI;AAClC,oBAAMA,QAAO,IAAK,KAAK,SAAUgD,QAAQ;AACxC,uBAAOA,UAAS,OAAO,KAAKA,SAAQ;AAAA,cACrC,CAAE;AAAA,YACH;AAEA,YAAAK,SAAQrD,QAAO,SAAU,KAAK,IAAK,KAAKA,QAAO,SAAU,KAAK,SAAS,YAAY,CAAE;AAGrF,gBAAK,CAACqD,UAAS,EAAG,SAASA,WAAWA,OAAM,IAAK,MAAM,KAAK,OAAQ,MAAM,QAAY;AACrF,mBAAK,QAAQ;AAAA,YACd;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAEF,MAAArD,QAAO,OAAQ;AAAA,QACd,UAAU;AAAA,UACT,QAAQ;AAAA,YACP,KAAK,SAAU,MAAO;AAErB,kBAAI,MAAMA,QAAO,KAAK,KAAM,MAAM,OAAQ;AAC1C,qBAAO,OAAO,OACb;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMA,iBAAkBA,QAAO,KAAM,IAAK,CAAE;AAAA;AAAA,YACxC;AAAA,UACD;AAAA,UACA,QAAQ;AAAA,YACP,KAAK,SAAU,MAAO;AACrB,kBAAI,OAAO,QAAQF,IAClB,UAAU,KAAK,SACfgD,SAAQ,KAAK,eACbc,OAAM,KAAK,SAAS,cACpB,SAASA,OAAM,OAAO,CAAC,GACvBoB,OAAMpB,OAAMd,SAAQ,IAAI,QAAQ;AAEjC,kBAAKA,SAAQ,GAAI;AAChB,gBAAAhD,KAAIkF;AAAA,cAEL,OAAO;AACN,gBAAAlF,KAAI8D,OAAMd,SAAQ;AAAA,cACnB;AAGA,qBAAQhD,KAAIkF,MAAKlF,MAAM;AACtB,yBAAS,QAASA,EAAE;AAIpB,qBAAO,OAAO,YAAYA,OAAMgD;AAAA,gBAG9B,CAAC,OAAO,aACN,CAAC,OAAO,WAAW,YACpB,CAAC,SAAU,OAAO,YAAY,UAAW,IAAM;AAGjD,0BAAQ9C,QAAQ,MAAO,EAAE,IAAI;AAG7B,sBAAK4D,MAAM;AACV,2BAAO;AAAA,kBACR;AAGA,yBAAO,KAAM,KAAM;AAAA,gBACpB;AAAA,cACD;AAEA,qBAAO;AAAA,YACR;AAAA,YAEA,KAAK,SAAU,MAAM,OAAQ;AAC5B,kBAAI,WAAW,QACd,UAAU,KAAK,SACf,SAAS5D,QAAO,UAAW,KAAM,GACjCF,KAAI,QAAQ;AAEb,qBAAQA,MAAM;AACb,yBAAS,QAASA,EAAE;AAIpB,oBAAK,OAAO,WACXE,QAAO,QAASA,QAAO,SAAS,OAAO,IAAK,MAAO,GAAG,MAAO,IAAI,IAChE;AACD,8BAAY;AAAA,gBACb;AAAA,cAGD;AAGA,kBAAK,CAAC,WAAY;AACjB,qBAAK,gBAAgB;AAAA,cACtB;AACA,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM,CAAE,SAAS,UAAW,GAAG,WAAW;AAChD,QAAAA,QAAO,SAAU,IAAK,IAAI;AAAA,UACzB,KAAK,SAAU,MAAM,OAAQ;AAC5B,gBAAK,MAAM,QAAS,KAAM,GAAI;AAC7B,qBAAS,KAAK,UAAUA,QAAO,QAASA,QAAQ,IAAK,EAAE,IAAI,GAAG,KAAM,IAAI;AAAA,YACzE;AAAA,UACD;AAAA,QACD;AACA,YAAK,CAAC,QAAQ,SAAU;AACvB,UAAAA,QAAO,SAAU,IAAK,EAAE,MAAM,SAAU,MAAO;AAC9C,mBAAO,KAAK,aAAc,OAAQ,MAAM,OAAO,OAAO,KAAK;AAAA,UAC5D;AAAA,QACD;AAAA,MACD,CAAE;AAQF,cAAQ,UAAU,eAAeT;AAGjC,UAAI,cAAc,mCACjB,0BAA0B,SAAU0B,IAAI;AACvC,QAAAA,GAAE,gBAAgB;AAAA,MACnB;AAED,MAAAjB,QAAO,OAAQA,QAAO,OAAO;AAAA,QAE5B,SAAS,SAAU6D,QAAO,MAAM,MAAM,cAAe;AAEpD,cAAI/D,IAAG,KAAK,KAAK,YAAY,QAAQ,QAAQ,SAAS,aACrD,YAAY,CAAE,QAAQD,SAAS,GAC/BU,QAAOb,QAAO,KAAMmE,QAAO,MAAO,IAAIA,OAAM,OAAOA,QACnD,aAAanE,QAAO,KAAMmE,QAAO,WAAY,IAAIA,OAAM,UAAU,MAAO,GAAI,IAAI,CAAC;AAElF,gBAAM,cAAc,MAAM,OAAO,QAAQhE;AAGzC,cAAK,KAAK,aAAa,KAAK,KAAK,aAAa,GAAI;AACjD;AAAA,UACD;AAGA,cAAK,YAAY,KAAMU,QAAOP,QAAO,MAAM,SAAU,GAAI;AACxD;AAAA,UACD;AAEA,cAAKO,MAAK,QAAS,GAAI,IAAI,IAAK;AAG/B,yBAAaA,MAAK,MAAO,GAAI;AAC7B,YAAAA,QAAO,WAAW,MAAM;AACxB,uBAAW,KAAK;AAAA,UACjB;AACA,mBAASA,MAAK,QAAS,GAAI,IAAI,KAAK,OAAOA;AAG3C,UAAAsD,SAAQA,OAAO7D,QAAO,OAAQ,IAC7B6D,SACA,IAAI7D,QAAO,MAAOO,OAAM,OAAOsD,WAAU,YAAYA,MAAM;AAG5D,UAAAA,OAAM,YAAY,eAAe,IAAI;AACrC,UAAAA,OAAM,YAAY,WAAW,KAAM,GAAI;AACvC,UAAAA,OAAM,aAAaA,OAAM,YACxB,IAAI,OAAQ,YAAY,WAAW,KAAM,eAAgB,IAAI,SAAU,IACvE;AAGD,UAAAA,OAAM,SAAS;AACf,cAAK,CAACA,OAAM,QAAS;AACpB,YAAAA,OAAM,SAAS;AAAA,UAChB;AAGA,iBAAO,QAAQ,OACd,CAAEA,MAAM,IACR7D,QAAO,UAAW,MAAM,CAAE6D,MAAM,CAAE;AAGnC,oBAAU7D,QAAO,MAAM,QAASO,KAAK,KAAK,CAAC;AAC3C,cAAK,CAAC,gBAAgB,QAAQ,WAAW,QAAQ,QAAQ,MAAO,MAAM,IAAK,MAAM,OAAQ;AACxF;AAAA,UACD;AAIA,cAAK,CAAC,gBAAgB,CAAC,QAAQ,YAAY,CAAC,SAAU,IAAK,GAAI;AAE9D,yBAAa,QAAQ,gBAAgBA;AACrC,gBAAK,CAAC,YAAY,KAAM,aAAaA,KAAK,GAAI;AAC7C,oBAAM,IAAI;AAAA,YACX;AACA,mBAAQ,KAAK,MAAM,IAAI,YAAa;AACnC,wBAAU,KAAM,GAAI;AACpB,oBAAM;AAAA,YACP;AAGA,gBAAK,SAAU,KAAK,iBAAiBV,YAAa;AACjD,wBAAU,KAAM,IAAI,eAAe,IAAI,gBAAgBN,OAAO;AAAA,YAC/D;AAAA,UACD;AAGA,UAAAO,KAAI;AACJ,kBAAU,MAAM,UAAWA,IAAI,MAAO,CAAC+D,OAAM,qBAAqB,GAAI;AACrE,0BAAc;AACd,YAAAA,OAAM,OAAO/D,KAAI,IAChB,aACA,QAAQ,YAAYS;AAGrB,sBAAW,SAAS,IAAK,KAAK,QAAS,KAAK,uBAAO,OAAQ,IAAK,GAAKsD,OAAM,IAAK,KAC/E,SAAS,IAAK,KAAK,QAAS;AAC7B,gBAAK,QAAS;AACb,qBAAO,MAAO,KAAK,IAAK;AAAA,YACzB;AAGA,qBAAS,UAAU,IAAK,MAAO;AAC/B,gBAAK,UAAU,OAAO,SAAS,WAAY,GAAI,GAAI;AAClD,cAAAA,OAAM,SAAS,OAAO,MAAO,KAAK,IAAK;AACvC,kBAAKA,OAAM,WAAW,OAAQ;AAC7B,gBAAAA,OAAM,eAAe;AAAA,cACtB;AAAA,YACD;AAAA,UACD;AACA,UAAAA,OAAM,OAAOtD;AAGb,cAAK,CAAC,gBAAgB,CAACsD,OAAM,mBAAmB,GAAI;AAEnD,iBAAO,CAAC,QAAQ,YACf,QAAQ,SAAS,MAAO,UAAU,IAAI,GAAG,IAAK,MAAM,UACpD,WAAY,IAAK,GAAI;AAIrB,kBAAK,UAAUlE,YAAY,KAAMY,KAAK,CAAE,KAAK,CAAC,SAAU,IAAK,GAAI;AAGhE,sBAAM,KAAM,MAAO;AAEnB,oBAAK,KAAM;AACV,uBAAM,MAAO,IAAI;AAAA,gBAClB;AAGA,gBAAAP,QAAO,MAAM,YAAYO;AAEzB,oBAAKsD,OAAM,qBAAqB,GAAI;AACnC,8BAAY,iBAAkBtD,OAAM,uBAAwB;AAAA,gBAC7D;AAEA,qBAAMA,KAAK,EAAE;AAEb,oBAAKsD,OAAM,qBAAqB,GAAI;AACnC,8BAAY,oBAAqBtD,OAAM,uBAAwB;AAAA,gBAChE;AAEA,gBAAAP,QAAO,MAAM,YAAY;AAEzB,oBAAK,KAAM;AACV,uBAAM,MAAO,IAAI;AAAA,gBAClB;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAEA,iBAAO6D,OAAM;AAAA,QACd;AAAA;AAAA;AAAA,QAIA,UAAU,SAAUtD,OAAM,MAAMsD,QAAQ;AACvC,cAAI5C,KAAIjB,QAAO;AAAA,YACd,IAAIA,QAAO,MAAM;AAAA,YACjB6D;AAAA,YACA;AAAA,cACC,MAAMtD;AAAA,cACN,aAAa;AAAA,YACd;AAAA,UACD;AAEA,UAAAP,QAAO,MAAM,QAASiB,IAAG,MAAM,IAAK;AAAA,QACrC;AAAA,MAED,CAAE;AAEF,MAAAjB,QAAO,GAAG,OAAQ;AAAA,QAEjB,SAAS,SAAUO,OAAM,MAAO;AAC/B,iBAAO,KAAK,KAAM,WAAW;AAC5B,YAAAP,QAAO,MAAM,QAASO,OAAM,MAAM,IAAK;AAAA,UACxC,CAAE;AAAA,QACH;AAAA,QACA,gBAAgB,SAAUA,OAAM,MAAO;AACtC,cAAI,OAAO,KAAM,CAAE;AACnB,cAAK,MAAO;AACX,mBAAOP,QAAO,MAAM,QAASO,OAAM,MAAM,MAAM,IAAK;AAAA,UACrD;AAAA,QACD;AAAA,MACD,CAAE;AAWF,UAAK,CAAC,QAAQ,SAAU;AACvB,QAAAP,QAAO,KAAM,EAAE,OAAO,WAAW,MAAM,WAAW,GAAG,SAAU,MAAM,KAAM;AAG1E,cAAI,UAAU,SAAU6D,QAAQ;AAC/B,YAAA7D,QAAO,MAAM,SAAU,KAAK6D,OAAM,QAAQ7D,QAAO,MAAM,IAAK6D,MAAM,CAAE;AAAA,UACrE;AAEA,UAAA7D,QAAO,MAAM,QAAS,GAAI,IAAI;AAAA,YAC7B,OAAO,WAAW;AAIjB,kBAAI,MAAM,KAAK,iBAAiB,KAAK,YAAY,MAChD,WAAW,SAAS,OAAQ,KAAK,GAAI;AAEtC,kBAAK,CAAC,UAAW;AAChB,oBAAI,iBAAkB,MAAM,SAAS,IAAK;AAAA,cAC3C;AACA,uBAAS,OAAQ,KAAK,MAAO,YAAY,KAAM,CAAE;AAAA,YAClD;AAAA,YACA,UAAU,WAAW;AACpB,kBAAI,MAAM,KAAK,iBAAiB,KAAK,YAAY,MAChD,WAAW,SAAS,OAAQ,KAAK,GAAI,IAAI;AAE1C,kBAAK,CAAC,UAAW;AAChB,oBAAI,oBAAqB,MAAM,SAAS,IAAK;AAC7C,yBAAS,OAAQ,KAAK,GAAI;AAAA,cAE3B,OAAO;AACN,yBAAS,OAAQ,KAAK,KAAK,QAAS;AAAA,cACrC;AAAA,YACD;AAAA,UACD;AAAA,QACD,CAAE;AAAA,MACH;AACA,UAAIiF,YAAW1F,QAAO;AAEtB,UAAI,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE;AAE/B,UAAI,SAAW;AAKf,MAAAS,QAAO,WAAW,SAAU,MAAO;AAClC,YAAI,KAAK;AACT,YAAK,CAAC,QAAQ,OAAO,SAAS,UAAW;AACxC,iBAAO;AAAA,QACR;AAIA,YAAI;AACH,gBAAQ,IAAIT,QAAO,UAAU,EAAI,gBAAiB,MAAM,UAAW;AAAA,QACpE,SAAU0B,IAAI;AAAA,QAAC;AAEf,0BAAkB,OAAO,IAAI,qBAAsB,aAAc,EAAG,CAAE;AACtE,YAAK,CAAC,OAAO,iBAAkB;AAC9B,UAAAjB,QAAO,MAAO,mBACb,kBACCA,QAAO,IAAK,gBAAgB,YAAY,SAAU,IAAK;AACtD,mBAAO,GAAG;AAAA,UACX,CAAE,EAAE,KAAM,IAAK,IACf,KACA;AAAA,QACH;AACA,eAAO;AAAA,MACR;AAGA,UACC,WAAW,SACX,QAAQ,UACR,kBAAkB,yCAClB,eAAe;AAEhB,eAAS,YAAa,QAAQ,KAAK,aAAa6C,MAAM;AACrD,YAAI;AAEJ,YAAK,MAAM,QAAS,GAAI,GAAI;AAG3B,UAAA7C,QAAO,KAAM,KAAK,SAAUF,IAAGiD,IAAI;AAClC,gBAAK,eAAe,SAAS,KAAM,MAAO,GAAI;AAG7C,cAAAF,KAAK,QAAQE,EAAE;AAAA,YAEhB,OAAO;AAGN;AAAA,gBACC,SAAS,OAAQ,OAAOA,OAAM,YAAYA,MAAK,OAAOjD,KAAI,MAAO;AAAA,gBACjEiD;AAAA,gBACA;AAAA,gBACAF;AAAA,cACD;AAAA,YACD;AAAA,UACD,CAAE;AAAA,QAEH,WAAY,CAAC,eAAe,OAAQ,GAAI,MAAM,UAAW;AAGxD,eAAM,QAAQ,KAAM;AACnB,wBAAa,SAAS,MAAM,OAAO,KAAK,IAAK,IAAK,GAAG,aAAaA,IAAI;AAAA,UACvE;AAAA,QAED,OAAO;AAGN,UAAAA,KAAK,QAAQ,GAAI;AAAA,QAClB;AAAA,MACD;AAIA,MAAA7C,QAAO,QAAQ,SAAUS,IAAG,aAAc;AACzC,YAAI,QACHyE,KAAI,CAAC,GACLrC,OAAM,SAAU,KAAK,iBAAkB;AAGtC,cAAI,QAAQlD,YAAY,eAAgB,IACvC,gBAAgB,IAChB;AAED,UAAAuF,GAAGA,GAAE,MAAO,IAAI,mBAAoB,GAAI,IAAI,MAC3C,mBAAoB,SAAS,OAAO,KAAK,KAAM;AAAA,QACjD;AAED,YAAKzE,MAAK,MAAO;AAChB,iBAAO;AAAA,QACR;AAGA,YAAK,MAAM,QAASA,EAAE,KAAOA,GAAE,UAAU,CAACT,QAAO,cAAeS,EAAE,GAAM;AAGvE,UAAAT,QAAO,KAAMS,IAAG,WAAW;AAC1B,YAAAoC,KAAK,KAAK,MAAM,KAAK,KAAM;AAAA,UAC5B,CAAE;AAAA,QAEH,OAAO;AAIN,eAAM,UAAUpC,IAAI;AACnB,wBAAa,QAAQA,GAAG,MAAO,GAAG,aAAaoC,IAAI;AAAA,UACpD;AAAA,QACD;AAGA,eAAOqC,GAAE,KAAM,GAAI;AAAA,MACpB;AAEA,MAAAlF,QAAO,GAAG,OAAQ;AAAA,QACjB,WAAW,WAAW;AACrB,iBAAOA,QAAO,MAAO,KAAK,eAAe,CAAE;AAAA,QAC5C;AAAA,QACA,gBAAgB,WAAW;AAC1B,iBAAO,KAAK,IAAK,WAAW;AAG3B,gBAAI,WAAWA,QAAO,KAAM,MAAM,UAAW;AAC7C,mBAAO,WAAWA,QAAO,UAAW,QAAS,IAAI;AAAA,UAClD,CAAE,EAAE,OAAQ,WAAW;AACtB,gBAAIO,QAAO,KAAK;AAGhB,mBAAO,KAAK,QAAQ,CAACP,QAAQ,IAAK,EAAE,GAAI,WAAY,KACnD,aAAa,KAAM,KAAK,QAAS,KAAK,CAAC,gBAAgB,KAAMO,KAAK,MAChE,KAAK,WAAW,CAAC,eAAe,KAAMA,KAAK;AAAA,UAC/C,CAAE,EAAE,IAAK,SAAU,IAAI,MAAO;AAC7B,gBAAI,MAAMP,QAAQ,IAAK,EAAE,IAAI;AAE7B,gBAAK,OAAO,MAAO;AAClB,qBAAO;AAAA,YACR;AAEA,gBAAK,MAAM,QAAS,GAAI,GAAI;AAC3B,qBAAOA,QAAO,IAAK,KAAK,SAAUmF,MAAM;AACvC,uBAAO,EAAE,MAAM,KAAK,MAAM,OAAOA,KAAI,QAAS,OAAO,MAAO,EAAE;AAAA,cAC/D,CAAE;AAAA,YACH;AAEA,mBAAO,EAAE,MAAM,KAAK,MAAM,OAAO,IAAI,QAAS,OAAO,MAAO,EAAE;AAAA,UAC/D,CAAE,EAAE,IAAI;AAAA,QACT;AAAA,MACD,CAAE;AAGF,UACC,MAAM,QACN,QAAQ,QACR,aAAa,iBACb,WAAW,8BAGX,iBAAiB,6DACjB,aAAa,kBACb,YAAY,SAWZ,aAAa,CAAC,GAOd,aAAa,CAAC,GAGd,WAAW,KAAK,OAAQ,GAAI,GAG5B,eAAetF,UAAS,cAAe,GAAI;AAE5C,mBAAa,OAAOoF,UAAS;AAG7B,eAAS,4BAA6B,WAAY;AAGjD,eAAO,SAAU,oBAAoB,MAAO;AAE3C,cAAK,OAAO,uBAAuB,UAAW;AAC7C,mBAAO;AACP,iCAAqB;AAAA,UACtB;AAEA,cAAI,UACHnF,KAAI,GACJ,YAAY,mBAAmB,YAAY,EAAE,MAAO,aAAc,KAAK,CAAC;AAEzE,cAAKH,YAAY,IAAK,GAAI;AAGzB,mBAAU,WAAW,UAAWG,IAAI,GAAM;AAGzC,kBAAK,SAAU,CAAE,MAAM,KAAM;AAC5B,2BAAW,SAAS,MAAO,CAAE,KAAK;AAClC,iBAAE,UAAW,QAAS,IAAI,UAAW,QAAS,KAAK,CAAC,GAAI,QAAS,IAAK;AAAA,cAGvE,OAAO;AACN,iBAAE,UAAW,QAAS,IAAI,UAAW,QAAS,KAAK,CAAC,GAAI,KAAM,IAAK;AAAA,cACpE;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAGA,eAAS,8BAA+B,WAAW,SAAS,iBAAiB,OAAQ;AAEpF,YAAI,YAAY,CAAC,GAChB,mBAAqB,cAAc;AAEpC,iBAAS,QAAS,UAAW;AAC5B,cAAI;AACJ,oBAAW,QAAS,IAAI;AACxB,UAAAE,QAAO,KAAM,UAAW,QAAS,KAAK,CAAC,GAAG,SAAU2C,IAAG,oBAAqB;AAC3E,gBAAI,sBAAsB,mBAAoB,SAAS,iBAAiB,KAAM;AAC9E,gBAAK,OAAO,wBAAwB,YACnC,CAAC,oBAAoB,CAAC,UAAW,mBAAoB,GAAI;AAEzD,sBAAQ,UAAU,QAAS,mBAAoB;AAC/C,sBAAS,mBAAoB;AAC7B,qBAAO;AAAA,YACR,WAAY,kBAAmB;AAC9B,qBAAO,EAAG,WAAW;AAAA,YACtB;AAAA,UACD,CAAE;AACF,iBAAO;AAAA,QACR;AAEA,eAAO,QAAS,QAAQ,UAAW,CAAE,CAAE,KAAK,CAAC,UAAW,GAAI,KAAK,QAAS,GAAI;AAAA,MAC/E;AAKA,eAAS,WAAYvC,SAAQ,KAAM;AAClC,YAAI,KAAK,MACR,cAAcJ,QAAO,aAAa,eAAe,CAAC;AAEnD,aAAM,OAAO,KAAM;AAClB,cAAK,IAAK,GAAI,MAAM,QAAY;AAC/B,aAAE,YAAa,GAAI,IAAII,UAAW,SAAU,OAAO,CAAC,IAAS,GAAI,IAAI,IAAK,GAAI;AAAA,UAC/E;AAAA,QACD;AACA,YAAK,MAAO;AACX,UAAAJ,QAAO,OAAQ,MAAMI,SAAQ,IAAK;AAAA,QACnC;AAEA,eAAOA;AAAA,MACR;AAMA,eAAS,oBAAqB8E,IAAG,OAAO,WAAY;AAEnD,YAAIE,KAAI7E,OAAM,eAAe,eAC5B,WAAW2E,GAAE,UACb,YAAYA,GAAE;AAGf,eAAQ,UAAW,CAAE,MAAM,KAAM;AAChC,oBAAU,MAAM;AAChB,cAAKE,QAAO,QAAY;AACvB,YAAAA,MAAKF,GAAE,YAAY,MAAM,kBAAmB,cAAe;AAAA,UAC5D;AAAA,QACD;AAGA,YAAKE,KAAK;AACT,eAAM7E,SAAQ,UAAW;AACxB,gBAAK,SAAUA,KAAK,KAAK,SAAUA,KAAK,EAAE,KAAM6E,GAAG,GAAI;AACtD,wBAAU,QAAS7E,KAAK;AACxB;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAGA,YAAK,UAAW,CAAE,KAAK,WAAY;AAClC,0BAAgB,UAAW,CAAE;AAAA,QAC9B,OAAO;AAGN,eAAMA,SAAQ,WAAY;AACzB,gBAAK,CAAC,UAAW,CAAE,KAAK2E,GAAE,WAAY3E,QAAO,MAAM,UAAW,CAAE,CAAE,GAAI;AACrE,8BAAgBA;AAChB;AAAA,YACD;AACA,gBAAK,CAAC,eAAgB;AACrB,8BAAgBA;AAAA,YACjB;AAAA,UACD;AAGA,0BAAgB,iBAAiB;AAAA,QAClC;AAKA,YAAK,eAAgB;AACpB,cAAK,kBAAkB,UAAW,CAAE,GAAI;AACvC,sBAAU,QAAS,aAAc;AAAA,UAClC;AACA,iBAAO,UAAW,aAAc;AAAA,QACjC;AAAA,MACD;AAKA,eAAS,YAAa2E,IAAG,UAAU,OAAO,WAAY;AACrD,YAAI,OAAO,SAAS,MAAM,KAAK,MAC9B,aAAa,CAAC,GAGd,YAAYA,GAAE,UAAU,MAAM;AAG/B,YAAK,UAAW,CAAE,GAAI;AACrB,eAAM,QAAQA,GAAE,YAAa;AAC5B,uBAAY,KAAK,YAAY,CAAE,IAAIA,GAAE,WAAY,IAAK;AAAA,UACvD;AAAA,QACD;AAEA,kBAAU,UAAU,MAAM;AAG1B,eAAQ,SAAU;AAEjB,cAAKA,GAAE,eAAgB,OAAQ,GAAI;AAClC,kBAAOA,GAAE,eAAgB,OAAQ,CAAE,IAAI;AAAA,UACxC;AAGA,cAAK,CAAC,QAAQ,aAAaA,GAAE,YAAa;AACzC,uBAAWA,GAAE,WAAY,UAAUA,GAAE,QAAS;AAAA,UAC/C;AAEA,iBAAO;AACP,oBAAU,UAAU,MAAM;AAE1B,cAAK,SAAU;AAGd,gBAAK,YAAY,KAAM;AAEtB,wBAAU;AAAA,YAGX,WAAY,SAAS,OAAO,SAAS,SAAU;AAG9C,qBAAO,WAAY,OAAO,MAAM,OAAQ,KAAK,WAAY,OAAO,OAAQ;AAGxE,kBAAK,CAAC,MAAO;AACZ,qBAAM,SAAS,YAAa;AAG3B,wBAAM,MAAM,MAAO,GAAI;AACvB,sBAAK,IAAK,CAAE,MAAM,SAAU;AAG3B,2BAAO,WAAY,OAAO,MAAM,IAAK,CAAE,CAAE,KACxC,WAAY,OAAO,IAAK,CAAE,CAAE;AAC7B,wBAAK,MAAO;AAGX,0BAAK,SAAS,MAAO;AACpB,+BAAO,WAAY,KAAM;AAAA,sBAG1B,WAAY,WAAY,KAAM,MAAM,MAAO;AAC1C,kCAAU,IAAK,CAAE;AACjB,kCAAU,QAAS,IAAK,CAAE,CAAE;AAAA,sBAC7B;AACA;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAGA,kBAAK,SAAS,MAAO;AAGpB,oBAAK,QAAQA,GAAE,QAAS;AACvB,6BAAW,KAAM,QAAS;AAAA,gBAC3B,OAAO;AACN,sBAAI;AACH,+BAAW,KAAM,QAAS;AAAA,kBAC3B,SAAUjE,IAAI;AACb,2BAAO;AAAA,sBACN,OAAO;AAAA,sBACP,OAAO,OAAOA,KAAI,wBAAwB,OAAO,SAAS;AAAA,oBAC3D;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAEA,eAAO,EAAE,OAAO,WAAW,MAAM,SAAS;AAAA,MAC3C;AAEA,MAAAjB,QAAO,OAAQ;AAAA;AAAA,QAGd,QAAQ;AAAA;AAAA,QAGR,cAAc,CAAC;AAAA,QACf,MAAM,CAAC;AAAA,QAEP,cAAc;AAAA,UACb,KAAKiF,UAAS;AAAA,UACd,MAAM;AAAA,UACN,SAAS,eAAe,KAAMA,UAAS,QAAS;AAAA,UAChD,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,OAAO;AAAA,UACP,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAcb,SAAS;AAAA,YACR,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,YACL,MAAM;AAAA,UACP;AAAA,UAEA,UAAU;AAAA,YACT,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACP;AAAA,UAEA,gBAAgB;AAAA,YACf,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UACP;AAAA;AAAA;AAAA,UAIA,YAAY;AAAA;AAAA,YAGX,UAAU;AAAA;AAAA,YAGV,aAAa;AAAA;AAAA,YAGb,aAAa,KAAK;AAAA;AAAA,YAGlB,YAAYjF,QAAO;AAAA,UACpB;AAAA;AAAA;AAAA;AAAA;AAAA,UAMA,aAAa;AAAA,YACZ,KAAK;AAAA,YACL,SAAS;AAAA,UACV;AAAA,QACD;AAAA;AAAA;AAAA;AAAA,QAKA,WAAW,SAAUI,SAAQ,UAAW;AACvC,iBAAO;AAAA;AAAA,YAGN,WAAY,WAAYA,SAAQJ,QAAO,YAAa,GAAG,QAAS;AAAA;AAAA;AAAA,YAGhE,WAAYA,QAAO,cAAcI,OAAO;AAAA;AAAA,QAC1C;AAAA,QAEA,eAAe,4BAA6B,UAAW;AAAA,QACvD,eAAe,4BAA6B,UAAW;AAAA;AAAA,QAGvD,MAAM,SAAU,KAAK,SAAU;AAG9B,cAAK,OAAO,QAAQ,UAAW;AAC9B,sBAAU;AACV,kBAAM;AAAA,UACP;AAGA,oBAAU,WAAW,CAAC;AAEtB,cAAI,WAGH,UAGA,uBACA,iBAGA,cAGA,WAGAiF,YAGA,aAGAvF,IAGA,UAGAoF,KAAIlF,QAAO,UAAW,CAAC,GAAG,OAAQ,GAGlC,kBAAkBkF,GAAE,WAAWA,IAG/B,qBAAqBA,GAAE,YACpB,gBAAgB,YAAY,gBAAgB,UAC9ClF,QAAQ,eAAgB,IACxBA,QAAO,OAGR,WAAWA,QAAO,SAAS,GAC3B,mBAAmBA,QAAO,UAAW,aAAc,GAGnD,aAAakF,GAAE,cAAc,CAAC,GAG9B,iBAAiB,CAAC,GAClB,sBAAsB,CAAC,GAGvB,WAAW,YAGX,QAAQ;AAAA,YACP,YAAY;AAAA;AAAA,YAGZ,mBAAmB,SAAU,KAAM;AAClC,kBAAI;AACJ,kBAAKG,YAAY;AAChB,oBAAK,CAAC,iBAAkB;AACvB,oCAAkB,CAAC;AACnB,yBAAU,QAAQ,SAAS,KAAM,qBAAsB,GAAM;AAC5D,oCAAiB,MAAO,CAAE,EAAE,YAAY,IAAI,GAAI,KAC7C,gBAAiB,MAAO,CAAE,EAAE,YAAY,IAAI,GAAI,KAAK,CAAC,GACtD,OAAQ,MAAO,CAAE,CAAE;AAAA,kBACvB;AAAA,gBACD;AACA,wBAAQ,gBAAiB,IAAI,YAAY,IAAI,GAAI;AAAA,cAClD;AACA,qBAAO,SAAS,OAAO,OAAO,MAAM,KAAM,IAAK;AAAA,YAChD;AAAA;AAAA,YAGA,uBAAuB,WAAW;AACjC,qBAAOA,aAAY,wBAAwB;AAAA,YAC5C;AAAA;AAAA,YAGA,kBAAkB,SAAU,MAAM,OAAQ;AACzC,kBAAKA,cAAa,MAAO;AACxB,uBAAO,oBAAqB,KAAK,YAAY,CAAE,IAC9C,oBAAqB,KAAK,YAAY,CAAE,KAAK;AAC9C,+BAAgB,IAAK,IAAI;AAAA,cAC1B;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,kBAAkB,SAAU9E,OAAO;AAClC,kBAAK8E,cAAa,MAAO;AACxB,gBAAAH,GAAE,WAAW3E;AAAA,cACd;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,YAAY,SAAUyB,MAAM;AAC3B,kBAAI;AACJ,kBAAKA,MAAM;AACV,oBAAKqD,YAAY;AAGhB,wBAAM,OAAQrD,KAAK,MAAM,MAAO,CAAE;AAAA,gBACnC,OAAO;AAGN,uBAAM,QAAQA,MAAM;AACnB,+BAAY,IAAK,IAAI,CAAE,WAAY,IAAK,GAAGA,KAAK,IAAK,CAAE;AAAA,kBACxD;AAAA,gBACD;AAAA,cACD;AACA,qBAAO;AAAA,YACR;AAAA;AAAA,YAGA,OAAO,SAAU,YAAa;AAC7B,kBAAI,YAAY,cAAc;AAC9B,kBAAK,WAAY;AAChB,0BAAU,MAAO,SAAU;AAAA,cAC5B;AACA,mBAAM,GAAG,SAAU;AACnB,qBAAO;AAAA,YACR;AAAA,UACD;AAGD,mBAAS,QAAS,KAAM;AAKxB,UAAAkD,GAAE,QAAU,OAAOA,GAAE,OAAOD,UAAS,QAAS,IAC5C,QAAS,WAAWA,UAAS,WAAW,IAAK;AAG/C,UAAAC,GAAE,OAAO,QAAQ,UAAU,QAAQ,QAAQA,GAAE,UAAUA,GAAE;AAGzD,UAAAA,GAAE,aAAcA,GAAE,YAAY,KAAM,YAAY,EAAE,MAAO,aAAc,KAAK,CAAE,EAAG;AAGjF,cAAKA,GAAE,eAAe,MAAO;AAC5B,wBAAYrF,UAAS,cAAe,GAAI;AAKxC,gBAAI;AACH,wBAAU,OAAOqF,GAAE;AAInB,wBAAU,OAAO,UAAU;AAC3B,cAAAA,GAAE,cAAc,aAAa,WAAW,OAAO,aAAa,SAC3D,UAAU,WAAW,OAAO,UAAU;AAAA,YACxC,SAAUjE,IAAI;AAIb,cAAAiE,GAAE,cAAc;AAAA,YACjB;AAAA,UACD;AAGA,cAAKA,GAAE,QAAQA,GAAE,eAAe,OAAOA,GAAE,SAAS,UAAW;AAC5D,YAAAA,GAAE,OAAOlF,QAAO,MAAOkF,GAAE,MAAMA,GAAE,WAAY;AAAA,UAC9C;AAGA,wCAA+B,YAAYA,IAAG,SAAS,KAAM;AAG7D,cAAKG,YAAY;AAChB,mBAAO;AAAA,UACR;AAIA,wBAAcrF,QAAO,SAASkF,GAAE;AAGhC,cAAK,eAAelF,QAAO,aAAa,GAAI;AAC3C,YAAAA,QAAO,MAAM,QAAS,WAAY;AAAA,UACnC;AAGA,UAAAkF,GAAE,OAAOA,GAAE,KAAK,YAAY;AAG5B,UAAAA,GAAE,aAAa,CAAC,WAAW,KAAMA,GAAE,IAAK;AAKxC,qBAAWA,GAAE,IAAI,QAAS,OAAO,EAAG;AAGpC,cAAK,CAACA,GAAE,YAAa;AAGpB,uBAAWA,GAAE,IAAI,MAAO,SAAS,MAAO;AAGxC,gBAAKA,GAAE,SAAUA,GAAE,eAAe,OAAOA,GAAE,SAAS,WAAa;AAChE,2BAAc,OAAO,KAAM,QAAS,IAAI,MAAM,OAAQA,GAAE;AAGxD,qBAAOA,GAAE;AAAA,YACV;AAGA,gBAAKA,GAAE,UAAU,OAAQ;AACxB,yBAAW,SAAS,QAAS,YAAY,IAAK;AAC9C,0BAAa,OAAO,KAAM,QAAS,IAAI,MAAM,OAAQ,OAAS,MAAM,SACnE;AAAA,YACF;AAGA,YAAAA,GAAE,MAAM,WAAW;AAAA,UAGpB,WAAYA,GAAE,QAAQA,GAAE,gBACrBA,GAAE,eAAe,IAAK,QAAS,mCAAoC,MAAM,GAAI;AAC/E,YAAAA,GAAE,OAAOA,GAAE,KAAK,QAAS,KAAK,GAAI;AAAA,UACnC;AAGA,cAAKA,GAAE,YAAa;AACnB,gBAAKlF,QAAO,aAAc,QAAS,GAAI;AACtC,oBAAM,iBAAkB,qBAAqBA,QAAO,aAAc,QAAS,CAAE;AAAA,YAC9E;AACA,gBAAKA,QAAO,KAAM,QAAS,GAAI;AAC9B,oBAAM,iBAAkB,iBAAiBA,QAAO,KAAM,QAAS,CAAE;AAAA,YAClE;AAAA,UACD;AAGA,cAAKkF,GAAE,QAAQA,GAAE,cAAcA,GAAE,gBAAgB,SAAS,QAAQ,aAAc;AAC/E,kBAAM,iBAAkB,gBAAgBA,GAAE,WAAY;AAAA,UACvD;AAGA,gBAAM;AAAA,YACL;AAAA,YACAA,GAAE,UAAW,CAAE,KAAKA,GAAE,QAASA,GAAE,UAAW,CAAE,CAAE,IAC/CA,GAAE,QAASA,GAAE,UAAW,CAAE,CAAE,KACzBA,GAAE,UAAW,CAAE,MAAM,MAAM,OAAO,WAAW,aAAa,MAC7DA,GAAE,QAAS,GAAI;AAAA,UACjB;AAGA,eAAMpF,MAAKoF,GAAE,SAAU;AACtB,kBAAM,iBAAkBpF,IAAGoF,GAAE,QAASpF,EAAE,CAAE;AAAA,UAC3C;AAGA,cAAKoF,GAAE,eACJA,GAAE,WAAW,KAAM,iBAAiB,OAAOA,EAAE,MAAM,SAASG,aAAc;AAG5E,mBAAO,MAAM,MAAM;AAAA,UACpB;AAGA,qBAAW;AAGX,2BAAiB,IAAKH,GAAE,QAAS;AACjC,gBAAM,KAAMA,GAAE,OAAQ;AACtB,gBAAM,KAAMA,GAAE,KAAM;AAGpB,sBAAY,8BAA+B,YAAYA,IAAG,SAAS,KAAM;AAGzE,cAAK,CAAC,WAAY;AACjB,iBAAM,IAAI,cAAe;AAAA,UAC1B,OAAO;AACN,kBAAM,aAAa;AAGnB,gBAAK,aAAc;AAClB,iCAAmB,QAAS,YAAY,CAAE,OAAOA,EAAE,CAAE;AAAA,YACtD;AAGA,gBAAKG,YAAY;AAChB,qBAAO;AAAA,YACR;AAGA,gBAAKH,GAAE,SAASA,GAAE,UAAU,GAAI;AAC/B,6BAAe3F,QAAO,WAAY,WAAW;AAC5C,sBAAM,MAAO,SAAU;AAAA,cACxB,GAAG2F,GAAE,OAAQ;AAAA,YACd;AAEA,gBAAI;AACH,cAAAG,aAAY;AACZ,wBAAU,KAAM,gBAAgB,IAAK;AAAA,YACtC,SAAUpE,IAAI;AAGb,kBAAKoE,YAAY;AAChB,sBAAMpE;AAAA,cACP;AAGA,mBAAM,IAAIA,EAAE;AAAA,YACb;AAAA,UACD;AAGA,mBAAS,KAAM,QAAQ,kBAAkB,WAAW,SAAU;AAC7D,gBAAI,WAAW,SAAS,OAAO,UAAU,UACxC,aAAa;AAGd,gBAAKoE,YAAY;AAChB;AAAA,YACD;AAEA,YAAAA,aAAY;AAGZ,gBAAK,cAAe;AACnB,cAAA9F,QAAO,aAAc,YAAa;AAAA,YACnC;AAIA,wBAAY;AAGZ,oCAAwB,WAAW;AAGnC,kBAAM,aAAa,SAAS,IAAI,IAAI;AAGpC,wBAAY,UAAU,OAAO,SAAS,OAAO,WAAW;AAGxD,gBAAK,WAAY;AAChB,yBAAW,oBAAqB2F,IAAG,OAAO,SAAU;AAAA,YACrD;AAGA,gBAAK,CAAC,aACLlF,QAAO,QAAS,UAAUkF,GAAE,SAAU,IAAI,MAC1ClF,QAAO,QAAS,QAAQkF,GAAE,SAAU,IAAI,GAAI;AAC5C,cAAAA,GAAE,WAAY,aAAc,IAAI,WAAW;AAAA,cAAC;AAAA,YAC7C;AAGA,uBAAW,YAAaA,IAAG,UAAU,OAAO,SAAU;AAGtD,gBAAK,WAAY;AAGhB,kBAAKA,GAAE,YAAa;AACnB,2BAAW,MAAM,kBAAmB,eAAgB;AACpD,oBAAK,UAAW;AACf,kBAAAlF,QAAO,aAAc,QAAS,IAAI;AAAA,gBACnC;AACA,2BAAW,MAAM,kBAAmB,MAAO;AAC3C,oBAAK,UAAW;AACf,kBAAAA,QAAO,KAAM,QAAS,IAAI;AAAA,gBAC3B;AAAA,cACD;AAGA,kBAAK,WAAW,OAAOkF,GAAE,SAAS,QAAS;AAC1C,6BAAa;AAAA,cAGd,WAAY,WAAW,KAAM;AAC5B,6BAAa;AAAA,cAGd,OAAO;AACN,6BAAa,SAAS;AACtB,0BAAU,SAAS;AACnB,wBAAQ,SAAS;AACjB,4BAAY,CAAC;AAAA,cACd;AAAA,YACD,OAAO;AAGN,sBAAQ;AACR,kBAAK,UAAU,CAAC,YAAa;AAC5B,6BAAa;AACb,oBAAK,SAAS,GAAI;AACjB,2BAAS;AAAA,gBACV;AAAA,cACD;AAAA,YACD;AAGA,kBAAM,SAAS;AACf,kBAAM,cAAe,oBAAoB,cAAe;AAGxD,gBAAK,WAAY;AAChB,uBAAS,YAAa,iBAAiB,CAAE,SAAS,YAAY,KAAM,CAAE;AAAA,YACvE,OAAO;AACN,uBAAS,WAAY,iBAAiB,CAAE,OAAO,YAAY,KAAM,CAAE;AAAA,YACpE;AAGA,kBAAM,WAAY,UAAW;AAC7B,yBAAa;AAEb,gBAAK,aAAc;AAClB,iCAAmB;AAAA,gBAAS,YAAY,gBAAgB;AAAA,gBACvD,CAAE,OAAOA,IAAG,YAAY,UAAU,KAAM;AAAA,cAAE;AAAA,YAC5C;AAGA,6BAAiB,SAAU,iBAAiB,CAAE,OAAO,UAAW,CAAE;AAElE,gBAAK,aAAc;AAClB,iCAAmB,QAAS,gBAAgB,CAAE,OAAOA,EAAE,CAAE;AAGzD,kBAAK,CAAG,EAAElF,QAAO,QAAW;AAC3B,gBAAAA,QAAO,MAAM,QAAS,UAAW;AAAA,cAClC;AAAA,YACD;AAAA,UACD;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,SAAS,SAAU,KAAK,MAAM,UAAW;AACxC,iBAAOA,QAAO,IAAK,KAAK,MAAM,UAAU,MAAO;AAAA,QAChD;AAAA,QAEA,WAAW,SAAU,KAAK,UAAW;AACpC,iBAAOA,QAAO,IAAK,KAAK,QAAW,UAAU,QAAS;AAAA,QACvD;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,KAAM,CAAE,OAAO,MAAO,GAAG,SAAU,IAAI,QAAS;AACtD,QAAAA,QAAQ,MAAO,IAAI,SAAU,KAAK,MAAM,UAAUO,OAAO;AAGxD,cAAKZ,YAAY,IAAK,GAAI;AACzB,YAAAY,QAAOA,SAAQ;AACf,uBAAW;AACX,mBAAO;AAAA,UACR;AAGA,iBAAOP,QAAO,KAAMA,QAAO,OAAQ;AAAA,YAClC;AAAA,YACA,MAAM;AAAA,YACN,UAAUO;AAAA,YACV;AAAA,YACA,SAAS;AAAA,UACV,GAAGP,QAAO,cAAe,GAAI,KAAK,GAAI,CAAE;AAAA,QACzC;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO,cAAe,SAAUkF,IAAI;AACnC,YAAIpF;AACJ,aAAMA,MAAKoF,GAAE,SAAU;AACtB,cAAKpF,GAAE,YAAY,MAAM,gBAAiB;AACzC,YAAAoF,GAAE,cAAcA,GAAE,QAASpF,EAAE,KAAK;AAAA,UACnC;AAAA,QACD;AAAA,MACD,CAAE;AAGF,MAAAE,QAAO,WAAW,SAAU,KAAK,SAAS,KAAM;AAC/C,eAAOA,QAAO,KAAM;AAAA,UACnB;AAAA;AAAA,UAGA,MAAM;AAAA,UACN,UAAU;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA;AAAA;AAAA;AAAA,UAKR,YAAY;AAAA,YACX,eAAe,WAAW;AAAA,YAAC;AAAA,UAC5B;AAAA,UACA,YAAY,SAAU,UAAW;AAChC,YAAAA,QAAO,WAAY,UAAU,SAAS,GAAI;AAAA,UAC3C;AAAA,QACD,CAAE;AAAA,MACH;AAGA,MAAAA,QAAO,GAAG,OAAQ;AAAA,QACjB,SAAS,SAAUmE,OAAO;AACzB,cAAI;AAEJ,cAAK,KAAM,CAAE,GAAI;AAChB,gBAAKxE,YAAYwE,KAAK,GAAI;AACzB,cAAAA,QAAOA,MAAK,KAAM,KAAM,CAAE,CAAE;AAAA,YAC7B;AAGA,mBAAOnE,QAAQmE,OAAM,KAAM,CAAE,EAAE,aAAc,EAAE,GAAI,CAAE,EAAE,MAAO,IAAK;AAEnE,gBAAK,KAAM,CAAE,EAAE,YAAa;AAC3B,mBAAK,aAAc,KAAM,CAAE,CAAE;AAAA,YAC9B;AAEA,iBAAK,IAAK,WAAW;AACpB,kBAAI,OAAO;AAEX,qBAAQ,KAAK,mBAAoB;AAChC,uBAAO,KAAK;AAAA,cACb;AAEA,qBAAO;AAAA,YACR,CAAE,EAAE,OAAQ,IAAK;AAAA,UAClB;AAEA,iBAAO;AAAA,QACR;AAAA,QAEA,WAAW,SAAUA,OAAO;AAC3B,cAAKxE,YAAYwE,KAAK,GAAI;AACzB,mBAAO,KAAK,KAAM,SAAUrE,IAAI;AAC/B,cAAAE,QAAQ,IAAK,EAAE,UAAWmE,MAAK,KAAM,MAAMrE,EAAE,CAAE;AAAA,YAChD,CAAE;AAAA,UACH;AAEA,iBAAO,KAAK,KAAM,WAAW;AAC5B,gBAAIyC,QAAOvC,QAAQ,IAAK,GACvB,WAAWuC,MAAK,SAAS;AAE1B,gBAAK,SAAS,QAAS;AACtB,uBAAS,QAAS4B,KAAK;AAAA,YAExB,OAAO;AACN,cAAA5B,MAAK,OAAQ4B,KAAK;AAAA,YACnB;AAAA,UACD,CAAE;AAAA,QACH;AAAA,QAEA,MAAM,SAAUA,OAAO;AACtB,cAAI,iBAAiBxE,YAAYwE,KAAK;AAEtC,iBAAO,KAAK,KAAM,SAAUrE,IAAI;AAC/B,YAAAE,QAAQ,IAAK,EAAE,QAAS,iBAAiBmE,MAAK,KAAM,MAAMrE,EAAE,IAAIqE,KAAK;AAAA,UACtE,CAAE;AAAA,QACH;AAAA,QAEA,QAAQ,SAAU,UAAW;AAC5B,eAAK,OAAQ,QAAS,EAAE,IAAK,MAAO,EAAE,KAAM,WAAW;AACtD,YAAAnE,QAAQ,IAAK,EAAE,YAAa,KAAK,UAAW;AAAA,UAC7C,CAAE;AACF,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAK,QAAQ,SAAS,SAAU,MAAO;AAC7C,eAAO,CAACA,QAAO,KAAK,QAAQ,QAAS,IAAK;AAAA,MAC3C;AACA,MAAAA,QAAO,KAAK,QAAQ,UAAU,SAAU,MAAO;AAC9C,eAAO,CAAC,EAAG,KAAK,eAAe,KAAK,gBAAgB,KAAK,eAAe,EAAE;AAAA,MAC3E;AAKA,MAAAA,QAAO,aAAa,MAAM,WAAW;AACpC,YAAI;AACH,iBAAO,IAAIT,QAAO,eAAe;AAAA,QAClC,SAAU0B,IAAI;AAAA,QAAC;AAAA,MAChB;AAEA,UAAI,mBAAmB;AAAA;AAAA,QAGrB,GAAG;AAAA;AAAA;AAAA,QAIH,MAAM;AAAA,MACP,GACA,eAAejB,QAAO,aAAa,IAAI;AAExC,cAAQ,OAAO,CAAC,CAAC,gBAAkB,qBAAqB;AACxD,cAAQ,OAAO,eAAe,CAAC,CAAC;AAEhC,MAAAA,QAAO,cAAe,SAAU,SAAU;AACzC,YAAI,UAAU;AAGd,YAAK,QAAQ,QAAQ,gBAAgB,CAAC,QAAQ,aAAc;AAC3D,iBAAO;AAAA,YACN,MAAM,SAAU,SAAS,UAAW;AACnC,kBAAIF,IACH,MAAM,QAAQ,IAAI;AAEnB,kBAAI;AAAA,gBACH,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACT;AAGA,kBAAK,QAAQ,WAAY;AACxB,qBAAMA,MAAK,QAAQ,WAAY;AAC9B,sBAAKA,EAAE,IAAI,QAAQ,UAAWA,EAAE;AAAA,gBACjC;AAAA,cACD;AAGA,kBAAK,QAAQ,YAAY,IAAI,kBAAmB;AAC/C,oBAAI,iBAAkB,QAAQ,QAAS;AAAA,cACxC;AAOA,kBAAK,CAAC,QAAQ,eAAe,CAAC,QAAS,kBAAmB,GAAI;AAC7D,wBAAS,kBAAmB,IAAI;AAAA,cACjC;AAGA,mBAAMA,MAAK,SAAU;AACpB,oBAAI,iBAAkBA,IAAG,QAASA,EAAE,CAAE;AAAA,cACvC;AAGA,yBAAW,SAAUS,OAAO;AAC3B,uBAAO,WAAW;AACjB,sBAAK,UAAW;AACf,+BAAW,gBAAgB,IAAI,SAC9B,IAAI,UAAU,IAAI,UAAU,IAAI,YAC/B,IAAI,qBAAqB;AAE3B,wBAAKA,UAAS,SAAU;AACvB,0BAAI,MAAM;AAAA,oBACX,WAAYA,UAAS,SAAU;AAK9B,0BAAK,OAAO,IAAI,WAAW,UAAW;AACrC,iCAAU,GAAG,OAAQ;AAAA,sBACtB,OAAO;AACN;AAAA;AAAA,0BAGC,IAAI;AAAA,0BACJ,IAAI;AAAA,wBACL;AAAA,sBACD;AAAA,oBACD,OAAO;AACN;AAAA,wBACC,iBAAkB,IAAI,MAAO,KAAK,IAAI;AAAA,wBACtC,IAAI;AAAA;AAAA;AAAA;AAAA,yBAKF,IAAI,gBAAgB,YAAa,UACnC,OAAO,IAAI,iBAAiB,WAC3B,EAAE,QAAQ,IAAI,SAAS,IACvB,EAAE,MAAM,IAAI,aAAa;AAAA,wBAC1B,IAAI,sBAAsB;AAAA,sBAC3B;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAGA,kBAAI,SAAS,SAAS;AACtB,8BAAgB,IAAI,UAAU,IAAI,YAAY,SAAU,OAAQ;AAKhE,kBAAK,IAAI,YAAY,QAAY;AAChC,oBAAI,UAAU;AAAA,cACf,OAAO;AACN,oBAAI,qBAAqB,WAAW;AAGnC,sBAAK,IAAI,eAAe,GAAI;AAM3B,oBAAAhB,QAAO,WAAY,WAAW;AAC7B,0BAAK,UAAW;AACf,sCAAc;AAAA,sBACf;AAAA,oBACD,CAAE;AAAA,kBACH;AAAA,gBACD;AAAA,cACD;AAGA,yBAAW,SAAU,OAAQ;AAE7B,kBAAI;AAGH,oBAAI,KAAM,QAAQ,cAAc,QAAQ,QAAQ,IAAK;AAAA,cACtD,SAAU0B,IAAI;AAGb,oBAAK,UAAW;AACf,wBAAMA;AAAA,gBACP;AAAA,cACD;AAAA,YACD;AAAA,YAEA,OAAO,WAAW;AACjB,kBAAK,UAAW;AACf,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAMF,MAAAjB,QAAO,cAAe,SAAUkF,IAAI;AACnC,YAAKA,GAAE,aAAc;AACpB,UAAAA,GAAE,SAAS,SAAS;AAAA,QACrB;AAAA,MACD,CAAE;AAGF,MAAAlF,QAAO,UAAW;AAAA,QACjB,SAAS;AAAA,UACR,QAAQ;AAAA,QAET;AAAA,QACA,UAAU;AAAA,UACT,QAAQ;AAAA,QACT;AAAA,QACA,YAAY;AAAA,UACX,eAAe,SAAU6B,OAAO;AAC/B,YAAA7B,QAAO,WAAY6B,KAAK;AACxB,mBAAOA;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAE;AAGF,MAAA7B,QAAO,cAAe,UAAU,SAAUkF,IAAI;AAC7C,YAAKA,GAAE,UAAU,QAAY;AAC5B,UAAAA,GAAE,QAAQ;AAAA,QACX;AACA,YAAKA,GAAE,aAAc;AACpB,UAAAA,GAAE,OAAO;AAAA,QACV;AAAA,MACD,CAAE;AAGF,MAAAlF,QAAO,cAAe,UAAU,SAAUkF,IAAI;AAG7C,YAAKA,GAAE,eAAeA,GAAE,aAAc;AACrC,cAAI,QAAQ;AACZ,iBAAO;AAAA,YACN,MAAM,SAAUvC,IAAG,UAAW;AAC7B,uBAAS3C,QAAQ,UAAW,EAC1B,KAAMkF,GAAE,eAAe,CAAC,CAAE,EAC1B,KAAM,EAAE,SAASA,GAAE,eAAe,KAAKA,GAAE,IAAI,CAAE,EAC/C,GAAI,cAAc,WAAW,SAAU,KAAM;AAC7C,uBAAO,OAAO;AACd,2BAAW;AACX,oBAAK,KAAM;AACV,2BAAU,IAAI,SAAS,UAAU,MAAM,KAAK,IAAI,IAAK;AAAA,gBACtD;AAAA,cACD,CAAE;AAGH,cAAArF,UAAS,KAAK,YAAa,OAAQ,CAAE,CAAE;AAAA,YACxC;AAAA,YACA,OAAO,WAAW;AACjB,kBAAK,UAAW;AACf,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAKF,UAAI,eAAe,CAAC,GACnB,SAAS;AAGV,MAAAG,QAAO,UAAW;AAAA,QACjB,OAAO;AAAA,QACP,eAAe,WAAW;AACzB,cAAI,WAAW,aAAa,IAAI,KAAOA,QAAO,UAAU,MAAQ,MAAM;AACtE,eAAM,QAAS,IAAI;AACnB,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,cAAe,cAAc,SAAUkF,IAAG,kBAAkB,OAAQ;AAE1E,YAAI,cAAc,aAAa,mBAC9B,WAAWA,GAAE,UAAU,UAAW,OAAO,KAAMA,GAAE,GAAI,IACpD,QACA,OAAOA,GAAE,SAAS,aACfA,GAAE,eAAe,IACjB,QAAS,mCAAoC,MAAM,KACrD,OAAO,KAAMA,GAAE,IAAK,KAAK;AAI5B,YAAK,YAAYA,GAAE,UAAW,CAAE,MAAM,SAAU;AAG/C,yBAAeA,GAAE,gBAAgBvF,YAAYuF,GAAE,aAAc,IAC5DA,GAAE,cAAc,IAChBA,GAAE;AAGH,cAAK,UAAW;AACf,YAAAA,GAAG,QAAS,IAAIA,GAAG,QAAS,EAAE,QAAS,QAAQ,OAAO,YAAa;AAAA,UACpE,WAAYA,GAAE,UAAU,OAAQ;AAC/B,YAAAA,GAAE,QAAS,OAAO,KAAMA,GAAE,GAAI,IAAI,MAAM,OAAQA,GAAE,QAAQ,MAAM;AAAA,UACjE;AAGA,UAAAA,GAAE,WAAY,aAAc,IAAI,WAAW;AAC1C,gBAAK,CAAC,mBAAoB;AACzB,cAAAlF,QAAO,MAAO,eAAe,iBAAkB;AAAA,YAChD;AACA,mBAAO,kBAAmB,CAAE;AAAA,UAC7B;AAGA,UAAAkF,GAAE,UAAW,CAAE,IAAI;AAGnB,wBAAc3F,QAAQ,YAAa;AACnC,UAAAA,QAAQ,YAAa,IAAI,WAAW;AACnC,gCAAoB;AAAA,UACrB;AAGA,gBAAM,OAAQ,WAAW;AAGxB,gBAAK,gBAAgB,QAAY;AAChC,cAAAS,QAAQT,OAAO,EAAE,WAAY,YAAa;AAAA,YAG3C,OAAO;AACN,cAAAA,QAAQ,YAAa,IAAI;AAAA,YAC1B;AAGA,gBAAK2F,GAAG,YAAa,GAAI;AAGxB,cAAAA,GAAE,gBAAgB,iBAAiB;AAGnC,2BAAa,KAAM,YAAa;AAAA,YACjC;AAGA,gBAAK,qBAAqBvF,YAAY,WAAY,GAAI;AACrD,0BAAa,kBAAmB,CAAE,CAAE;AAAA,YACrC;AAEA,gCAAoB,cAAc;AAAA,UACnC,CAAE;AAGF,iBAAO;AAAA,QACR;AAAA,MACD,CAAE;AAUF,cAAQ,qBAAuB,WAAW;AACzC,YAAI,OAAOE,UAAS,eAAe,mBAAoB,EAAG,EAAE;AAC5D,aAAK,YAAY;AACjB,eAAO,KAAK,WAAW,WAAW;AAAA,MACnC,EAAI;AAOJ,MAAAG,QAAO,YAAY,SAAU,MAAM,SAAS,aAAc;AACzD,YAAK,OAAO,SAAS,UAAW;AAC/B,iBAAO,CAAC;AAAA,QACT;AACA,YAAK,OAAO,YAAY,WAAY;AACnC,wBAAc;AACd,oBAAU;AAAA,QACX;AAEA,YAAI,MAAM,QAAQ;AAElB,YAAK,CAAC,SAAU;AAIf,cAAK,QAAQ,oBAAqB;AACjC,sBAAUH,UAAS,eAAe,mBAAoB,EAAG;AAKzD,mBAAO,QAAQ,cAAe,MAAO;AACrC,iBAAK,OAAOA,UAAS,SAAS;AAC9B,oBAAQ,KAAK,YAAa,IAAK;AAAA,UAChC,OAAO;AACN,sBAAUA;AAAA,UACX;AAAA,QACD;AAEA,iBAAS,WAAW,KAAM,IAAK;AAC/B,kBAAU,CAAC,eAAe,CAAC;AAG3B,YAAK,QAAS;AACb,iBAAO,CAAE,QAAQ,cAAe,OAAQ,CAAE,CAAE,CAAE;AAAA,QAC/C;AAEA,iBAAS,cAAe,CAAE,IAAK,GAAG,SAAS,OAAQ;AAEnD,YAAK,WAAW,QAAQ,QAAS;AAChC,UAAAG,QAAQ,OAAQ,EAAE,OAAO;AAAA,QAC1B;AAEA,eAAOA,QAAO,MAAO,CAAC,GAAG,OAAO,UAAW;AAAA,MAC5C;AAMA,MAAAA,QAAO,GAAG,OAAO,SAAU,KAAK,QAAQ,UAAW;AAClD,YAAI,UAAUO,OAAM,UACnBgC,QAAO,MACP,MAAM,IAAI,QAAS,GAAI;AAExB,YAAK,MAAM,IAAK;AACf,qBAAW,iBAAkB,IAAI,MAAO,GAAI,CAAE;AAC9C,gBAAM,IAAI,MAAO,GAAG,GAAI;AAAA,QACzB;AAGA,YAAK5C,YAAY,MAAO,GAAI;AAG3B,qBAAW;AACX,mBAAS;AAAA,QAGV,WAAY,UAAU,OAAO,WAAW,UAAW;AAClD,UAAAY,QAAO;AAAA,QACR;AAGA,YAAKgC,MAAK,SAAS,GAAI;AACtB,UAAAvC,QAAO,KAAM;AAAA,YACZ;AAAA;AAAA;AAAA;AAAA,YAKA,MAAMO,SAAQ;AAAA,YACd,UAAU;AAAA,YACV,MAAM;AAAA,UACP,CAAE,EAAE,KAAM,SAAU+E,eAAe;AAGlC,uBAAW;AAEX,YAAA/C,MAAK,KAAM;AAAA;AAAA;AAAA,cAIVvC,QAAQ,OAAQ,EAAE,OAAQA,QAAO,UAAWsF,aAAa,CAAE,EAAE,KAAM,QAAS;AAAA;AAAA;AAAA,cAG5EA;AAAA,aAAa;AAAA,UAKf,CAAE,EAAE,OAAQ,YAAY,SAAU,OAAO,QAAS;AACjD,YAAA/C,MAAK,KAAM,WAAW;AACrB,uBAAS,MAAO,MAAM,YAAY,CAAE,MAAM,cAAc,QAAQ,KAAM,CAAE;AAAA,YACzE,CAAE;AAAA,UACH,CAAE;AAAA,QACH;AAEA,eAAO;AAAA,MACR;AAKA,MAAAvC,QAAO,KAAK,QAAQ,WAAW,SAAU,MAAO;AAC/C,eAAOA,QAAO,KAAMA,QAAO,QAAQ,SAAU,IAAK;AACjD,iBAAO,SAAS,GAAG;AAAA,QACpB,CAAE,EAAE;AAAA,MACL;AAKA,MAAAA,QAAO,SAAS;AAAA,QACf,WAAW,SAAU,MAAM,SAASF,IAAI;AACvC,cAAI,aAAa,SAAS,WAAW,QAAQ,WAAW,YAAY,mBACnE,WAAWE,QAAO,IAAK,MAAM,UAAW,GACxC,UAAUA,QAAQ,IAAK,GACvBiE,SAAQ,CAAC;AAGV,cAAK,aAAa,UAAW;AAC5B,iBAAK,MAAM,WAAW;AAAA,UACvB;AAEA,sBAAY,QAAQ,OAAO;AAC3B,sBAAYjE,QAAO,IAAK,MAAM,KAAM;AACpC,uBAAaA,QAAO,IAAK,MAAM,MAAO;AACtC,+BAAsB,aAAa,cAAc,aAAa,aAC3D,YAAY,YAAa,QAAS,MAAO,IAAI;AAIhD,cAAK,mBAAoB;AACxB,0BAAc,QAAQ,SAAS;AAC/B,qBAAS,YAAY;AACrB,sBAAU,YAAY;AAAA,UAEvB,OAAO;AACN,qBAAS,WAAY,SAAU,KAAK;AACpC,sBAAU,WAAY,UAAW,KAAK;AAAA,UACvC;AAEA,cAAKL,YAAY,OAAQ,GAAI;AAG5B,sBAAU,QAAQ,KAAM,MAAMG,IAAGE,QAAO,OAAQ,CAAC,GAAG,SAAU,CAAE;AAAA,UACjE;AAEA,cAAK,QAAQ,OAAO,MAAO;AAC1B,YAAAiE,OAAM,MAAQ,QAAQ,MAAM,UAAU,MAAQ;AAAA,UAC/C;AACA,cAAK,QAAQ,QAAQ,MAAO;AAC3B,YAAAA,OAAM,OAAS,QAAQ,OAAO,UAAU,OAAS;AAAA,UAClD;AAEA,cAAK,WAAW,SAAU;AACzB,oBAAQ,MAAM,KAAM,MAAMA,MAAM;AAAA,UAEjC,OAAO;AACN,oBAAQ,IAAKA,MAAM;AAAA,UACpB;AAAA,QACD;AAAA,MACD;AAEA,MAAAjE,QAAO,GAAG,OAAQ;AAAA;AAAA,QAGjB,QAAQ,SAAU,SAAU;AAG3B,cAAK,UAAU,QAAS;AACvB,mBAAO,YAAY,SAClB,OACA,KAAK,KAAM,SAAUF,IAAI;AACxB,cAAAE,QAAO,OAAO,UAAW,MAAM,SAASF,EAAE;AAAA,YAC3C,CAAE;AAAA,UACJ;AAEA,cAAI,MAAM,KACT,OAAO,KAAM,CAAE;AAEhB,cAAK,CAAC,MAAO;AACZ;AAAA,UACD;AAMA,cAAK,CAAC,KAAK,eAAe,EAAE,QAAS;AACpC,mBAAO,EAAE,KAAK,GAAG,MAAM,EAAE;AAAA,UAC1B;AAGA,iBAAO,KAAK,sBAAsB;AAClC,gBAAM,KAAK,cAAc;AACzB,iBAAO;AAAA,YACN,KAAK,KAAK,MAAM,IAAI;AAAA,YACpB,MAAM,KAAK,OAAO,IAAI;AAAA,UACvB;AAAA,QACD;AAAA;AAAA;AAAA,QAIA,UAAU,WAAW;AACpB,cAAK,CAAC,KAAM,CAAE,GAAI;AACjB;AAAA,UACD;AAEA,cAAI,cAAc,QAAQ,KACzB,OAAO,KAAM,CAAE,GACf,eAAe,EAAE,KAAK,GAAG,MAAM,EAAE;AAGlC,cAAKE,QAAO,IAAK,MAAM,UAAW,MAAM,SAAU;AAGjD,qBAAS,KAAK,sBAAsB;AAAA,UAErC,OAAO;AACN,qBAAS,KAAK,OAAO;AAIrB,kBAAM,KAAK;AACX,2BAAe,KAAK,gBAAgB,IAAI;AACxC,mBAAQ,iBACL,iBAAiB,IAAI,QAAQ,iBAAiB,IAAI,oBACpDA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAEtD,6BAAe,aAAa;AAAA,YAC7B;AACA,gBAAK,gBAAgB,iBAAiB,QAAQ,aAAa,aAAa,GAAI;AAG3E,6BAAeA,QAAQ,YAAa,EAAE,OAAO;AAC7C,2BAAa,OAAOA,QAAO,IAAK,cAAc,kBAAkB,IAAK;AACrE,2BAAa,QAAQA,QAAO,IAAK,cAAc,mBAAmB,IAAK;AAAA,YACxE;AAAA,UACD;AAGA,iBAAO;AAAA,YACN,KAAK,OAAO,MAAM,aAAa,MAAMA,QAAO,IAAK,MAAM,aAAa,IAAK;AAAA,YACzE,MAAM,OAAO,OAAO,aAAa,OAAOA,QAAO,IAAK,MAAM,cAAc,IAAK;AAAA,UAC9E;AAAA,QACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYA,cAAc,WAAW;AACxB,iBAAO,KAAK,IAAK,WAAW;AAC3B,gBAAI,eAAe,KAAK;AAExB,mBAAQ,gBAAgBA,QAAO,IAAK,cAAc,UAAW,MAAM,UAAW;AAC7E,6BAAe,aAAa;AAAA,YAC7B;AAEA,mBAAO,gBAAgB;AAAA,UACxB,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAGF,MAAAA,QAAO,KAAM,EAAE,YAAY,eAAe,WAAW,cAAc,GAAG,SAAU,QAAQ,MAAO;AAC9F,YAAIuF,OAAM,kBAAkB;AAE5B,QAAAvF,QAAO,GAAI,MAAO,IAAI,SAAU,KAAM;AACrC,iBAAO,OAAQ,MAAM,SAAU,MAAMwF,SAAQL,MAAM;AAGlD,gBAAI;AACJ,gBAAK,SAAU,IAAK,GAAI;AACvB,oBAAM;AAAA,YACP,WAAY,KAAK,aAAa,GAAI;AACjC,oBAAM,KAAK;AAAA,YACZ;AAEA,gBAAKA,SAAQ,QAAY;AACxB,qBAAO,MAAM,IAAK,IAAK,IAAI,KAAMK,OAAO;AAAA,YACzC;AAEA,gBAAK,KAAM;AACV,kBAAI;AAAA,gBACH,CAACD,OAAMJ,OAAM,IAAI;AAAA,gBACjBI,OAAMJ,OAAM,IAAI;AAAA,cACjB;AAAA,YAED,OAAO;AACN,mBAAMK,OAAO,IAAIL;AAAA,YAClB;AAAA,UACD,GAAG,QAAQ,KAAK,UAAU,MAAO;AAAA,QAClC;AAAA,MACD,CAAE;AAQF,MAAAnF,QAAO,KAAM,CAAE,OAAO,MAAO,GAAG,SAAU,IAAI,MAAO;AACpD,QAAAA,QAAO,SAAU,IAAK,IAAI;AAAA,UAAc,QAAQ;AAAA,UAC/C,SAAU,MAAMqE,WAAW;AAC1B,gBAAKA,WAAW;AACf,cAAAA,YAAW,OAAQ,MAAM,IAAK;AAG9B,qBAAO,UAAU,KAAMA,SAAS,IAC/BrE,QAAQ,IAAK,EAAE,SAAS,EAAG,IAAK,IAAI,OACpCqE;AAAA,YACF;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAE;AAIF,MAAArE,QAAO,KAAM,EAAE,QAAQ,UAAU,OAAO,QAAQ,GAAG,SAAU,MAAMO,OAAO;AACzE,QAAAP,QAAO,KAAM;AAAA,UACZ,SAAS,UAAU;AAAA,UACnB,SAASO;AAAA,UACT,IAAI,UAAU;AAAA,QACf,GAAG,SAAU,cAAc,UAAW;AAGrC,UAAAP,QAAO,GAAI,QAAS,IAAI,SAAU,QAAQ,OAAQ;AACjD,gBAAI,YAAY,UAAU,WAAY,gBAAgB,OAAO,WAAW,YACvE,QAAQ,iBAAkB,WAAW,QAAQ,UAAU,OAAO,WAAW;AAE1E,mBAAO,OAAQ,MAAM,SAAU,MAAMO,OAAMyC,QAAQ;AAClD,kBAAI;AAEJ,kBAAK,SAAU,IAAK,GAAI;AAGvB,uBAAO,SAAS,QAAS,OAAQ,MAAM,IACtC,KAAM,UAAU,IAAK,IACrB,KAAK,SAAS,gBAAiB,WAAW,IAAK;AAAA,cACjD;AAGA,kBAAK,KAAK,aAAa,GAAI;AAC1B,sBAAM,KAAK;AAIX,uBAAO,KAAK;AAAA,kBACX,KAAK,KAAM,WAAW,IAAK;AAAA,kBAAG,IAAK,WAAW,IAAK;AAAA,kBACnD,KAAK,KAAM,WAAW,IAAK;AAAA,kBAAG,IAAK,WAAW,IAAK;AAAA,kBACnD,IAAK,WAAW,IAAK;AAAA,gBACtB;AAAA,cACD;AAEA,qBAAOA,WAAU;AAAA;AAAA,gBAGhBhD,QAAO,IAAK,MAAMO,OAAM,KAAM;AAAA;AAAA;AAAA,gBAG9BP,QAAO,MAAO,MAAMO,OAAMyC,QAAO,KAAM;AAAA;AAAA,YACzC,GAAGzC,OAAM,YAAY,SAAS,QAAW,SAAU;AAAA,UACpD;AAAA,QACD,CAAE;AAAA,MACH,CAAE;AAGF,MAAAP,QAAO,KAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,GAAG,SAAU,IAAIO,OAAO;AACvB,QAAAP,QAAO,GAAIO,KAAK,IAAI,SAAU,IAAK;AAClC,iBAAO,KAAK,GAAIA,OAAM,EAAG;AAAA,QAC1B;AAAA,MACD,CAAE;AAKF,MAAAP,QAAO,GAAG,OAAQ;AAAA,QAEjB,MAAM,SAAU,OAAO,MAAM,IAAK;AACjC,iBAAO,KAAK,GAAI,OAAO,MAAM,MAAM,EAAG;AAAA,QACvC;AAAA,QACA,QAAQ,SAAU,OAAO,IAAK;AAC7B,iBAAO,KAAK,IAAK,OAAO,MAAM,EAAG;AAAA,QAClC;AAAA,QAEA,UAAU,SAAU,UAAU,OAAO,MAAM,IAAK;AAC/C,iBAAO,KAAK,GAAI,OAAO,UAAU,MAAM,EAAG;AAAA,QAC3C;AAAA,QACA,YAAY,SAAU,UAAU,OAAO,IAAK;AAG3C,iBAAO,UAAU,WAAW,IAC3B,KAAK,IAAK,UAAU,IAAK,IACzB,KAAK,IAAK,OAAO,YAAY,MAAM,EAAG;AAAA,QACxC;AAAA,QAEA,OAAO,SAAU,QAAQ,OAAQ;AAChC,iBAAO,KAAK,WAAY,MAAO,EAAE,WAAY,SAAS,MAAO;AAAA,QAC9D;AAAA,MACD,CAAE;AAEF,MAAAA,QAAO;AAAA,QACJ,wLAE0D,MAAO,GAAI;AAAA,QACvE,SAAU,IAAI,MAAO;AAGpB,UAAAA,QAAO,GAAI,IAAK,IAAI,SAAU,MAAM,IAAK;AACxC,mBAAO,UAAU,SAAS,IACzB,KAAK,GAAI,MAAM,MAAM,MAAM,EAAG,IAC9B,KAAK,QAAS,IAAK;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAOA,UAAI,QAAQ;AAMZ,MAAAA,QAAO,QAAQ,SAAU,IAAI,SAAU;AACtC,YAAI,KAAK,MAAMyF;AAEf,YAAK,OAAO,YAAY,UAAW;AAClC,gBAAM,GAAI,OAAQ;AAClB,oBAAU;AACV,eAAK;AAAA,QACN;AAIA,YAAK,CAAC9F,YAAY,EAAG,GAAI;AACxB,iBAAO;AAAA,QACR;AAGA,eAAO,MAAM,KAAM,WAAW,CAAE;AAChC,QAAA8F,SAAQ,WAAW;AAClB,iBAAO,GAAG,MAAO,WAAW,MAAM,KAAK,OAAQ,MAAM,KAAM,SAAU,CAAE,CAAE;AAAA,QAC1E;AAGA,QAAAA,OAAM,OAAO,GAAG,OAAO,GAAG,QAAQzF,QAAO;AAEzC,eAAOyF;AAAA,MACR;AAEA,MAAAzF,QAAO,YAAY,SAAU,MAAO;AACnC,YAAK,MAAO;AACX,UAAAA,QAAO;AAAA,QACR,OAAO;AACN,UAAAA,QAAO,MAAO,IAAK;AAAA,QACpB;AAAA,MACD;AACA,MAAAA,QAAO,UAAU,MAAM;AACvB,MAAAA,QAAO,YAAY,KAAK;AACxB,MAAAA,QAAO,WAAW;AAClB,MAAAA,QAAO,aAAaL;AACpB,MAAAK,QAAO,WAAW;AAClB,MAAAA,QAAO,YAAY;AACnB,MAAAA,QAAO,OAAO;AAEd,MAAAA,QAAO,MAAM,KAAK;AAElB,MAAAA,QAAO,YAAY,SAAU,KAAM;AAKlC,YAAIO,QAAOP,QAAO,KAAM,GAAI;AAC5B,gBAASO,UAAS,YAAYA,UAAS;AAAA;AAAA;AAAA,QAKtC,CAAC,MAAO,MAAM,WAAY,GAAI,CAAE;AAAA,MAClC;AAEA,MAAAP,QAAO,OAAO,SAAU6B,OAAO;AAC9B,eAAOA,SAAQ,OACd,MACEA,QAAO,IAAK,QAAS,OAAO,EAAG;AAAA,MACnC;AAiBA,UAAK,OAAO,WAAW,cAAc,OAAO,KAAM;AACjD,eAAQ,UAAU,CAAC,GAAG,WAAW;AAChC,iBAAO7B;AAAA,QACR,CAAE;AAAA,MACH;AAKA,UAGC,UAAUT,QAAO,QAGjB,KAAKA,QAAO;AAEb,MAAAS,QAAO,aAAa,SAAU,MAAO;AACpC,YAAKT,QAAO,MAAMS,SAAS;AAC1B,UAAAT,QAAO,IAAI;AAAA,QACZ;AAEA,YAAK,QAAQA,QAAO,WAAWS,SAAS;AACvC,UAAAT,QAAO,SAAS;AAAA,QACjB;AAEA,eAAOS;AAAA,MACR;AAKA,UAAK,OAAO,aAAa,aAAc;AACtC,QAAAT,QAAO,SAASA,QAAO,IAAIS;AAAA,MAC5B;AAKA,aAAOA;AAAA,IACP,CAAE;AAAA;AAAA;;;AChoVF;AAAA;AAAA;AAiBC,KAAC,SAAU0F,OAAMC,UAAS;AACzB,UAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAE9C,eAAO,QAAQ,WAAU;AAAE,iBAAOA,SAAQD,KAAI;AAAA,QAAE,CAAC;AAAA,MACnD,WAAW,OAAO,WAAW,YAAY,OAAO,SAAS;AAIvD,eAAO,UAAUC,SAAQD,KAAI;AAAA,MAC/B,OAAO;AAEL,QAAAA,MAAK,OAAOC,SAAQD,KAAI;AAAA,MAC1B;AAAA,IACF,GAAE,SAAM,SAASE,SAAQ;AACvB;AAGA,UAAIC,QAAOD,WAAUA,QAAO,QAAQ,CAAC;AAGrC,UAAI,QAAQ,MAAM,UAAU;AAG5B,UAAI,UAAU,SAASE,SAAQ;AAC7B,gBAAQ,MAAMA,QAAO,SAAS,GAAG,OAAO,EAAE;AAAA,MAC5C;AAIA,UAAI,UAAU,SAASA,SAAQ,WAAW;AACxC,eAAO,cAAc,SAASA,SAAQ,CAAC,SAAS,EAAE,QAAQ,SAAS;AAAA,MACrE;AAIA,UAAIC,YAAW,SAAS,KAAK;AAC3B,YAAIC,QAAO,OAAO;AAClB,eAAOA,UAAS,cAAcA,UAAS;AAAA,MACzC;AAEA,UAAIC,cAAa,SAAS,MAAM;AAC9B,YAAID,QAAO,OAAO;AAClB,eAAOA,UAAS;AAAA,MAClB;AAGA,UAAI,QAAQ,SAAS,OAAO;AAC1B,eAAO,OAAO,UAAW,eAAe,UAAU;AAAA,MACpD;AAIA,UAAIE,WAAU,SAAS,KAAK;AAC1B,YAAI,MAAM,SAAS;AACjB,iBAAO,MAAM,QAAQ,GAAG;AAAA,QAC1B;AACA,eAAO,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,MACjD;AAEA,UAAIC,YAAW,SAAS,KAAK;AAC3B,eAAO,OAAO,QAAQ,YAAY,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,MAC5E;AAEA,UAAIC,YAAW,SAAS,KAAK;AAC3B,eAAO,OAAO,QAAQ,YAAY,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,MAC5E;AAEA,UAAIC,aAAY,SAAS,KAAK;AAC5B,eAAO,QAAQ,QAAQ,QAAQ;AAAA,MACjC;AAEA,UAAI,SAAS,SAAS,KAAK;AACzB,eAAO,QAAQ;AAAA,MACjB;AAEA,UAAI,gBAAgB,SAASL,OAAM,OAAO,KAAK;AAE7C,YAAI,OAAO,QAAQ,eAAe,CAAC,QAAQ,GAAG;AAC5C,iBAAO,KAAKA,KAAI,EAAE,KAAK;AAAA,QACzB;AACA,gBAAQ,CAAC;AACT,cAAM,CAAC;AAEP,YAAI,MAAM,KAAK,KAAK,EAAE,OAAO,QAAQ,YAAY,MAAM,MAAM,IAAI;AAC/D,iBAAO;AAAA,QACT;AAEA,gBAAQ,MAAM,SAAS,EAAE,MAAM,GAAG;AAClC,gBAAQ,KAAKA,KAAI,EAAE,EAAE,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,IAAK,CAAC,MAAM,CAAC,IAAI,MAAO,CAAC,KAAK;AAE5E,gBAAQ,MAAM,SAAS,EAAE,MAAM,GAAG;AAClC,eAAO,EAAE,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,IAAK,CAAC,MAAM,CAAC,IAAI,MAAO;AAAA,MAC5D;AAEA,UAAI,eAAe,SAAS,SAAS,OAAO;AAC1C,YAAIC,YAAW,OAAO,GAAG;AACvB,iBAAO,QAAQ,KAAK;AAAA,QACtB,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAIK,SAAQ,SAAU,MAAM,KAAK;AAC/B,YAAI,KAAK;AACT,aAAK,OAAO,IAAK,KAAI,IAAI,eAAe,GAAG,GAAG;AAC5C,kBAAQ,IAAI,GAAG;AACf,cAAIH,UAAS,KAAK,KAAKC,UAAS,KAAK,KAAKC,WAAU,KAAK,KAAKH,SAAQ,KAAK,KAAK,OAAO,KAAK,GAAG;AAC7F,iBAAK,GAAG,IAAI;AAAA,UACd,OAAO;AACL,gBAAI,KAAK,GAAG,KAAK,KAAM,MAAK,GAAG,IAAI,CAAC;AACpC,YAAAI,OAAM,KAAK,GAAG,GAAG,KAAK;AAAA,UACxB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAGA,UAAI,OAAO;AAAA,QACP,WAAW,CAAC,UAAU,UAAU,WAAW,aAAa,YAAY,UAAU,UAAU;AAAA,QACxF,gBAAgB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,QAChE,aAAa,CAAC,MAAM,WAAW,YAAY,SAAS,SAAS,OAAO,QAAQ,QAAQ,UAAU,aAAa,WAAW,YAAY,UAAU;AAAA,QAC5I,kBAAkB,CAAC,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,QAC3G,UAAU,CAAC,MAAM,IAAI;AAAA,MACzB;AAGA,UAAI,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,2BAA2B;AAAA,MAC/B;AAGA,UAAI,kBAAkB;AAAA,QAClB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,WAAW;AAAA,MACf;AAGA,UAAI,oBAAoB;AAAA,QACpB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,WAAW;AAAA,MACf;AAGA,UAAI,aAAa,CAAC,MAAM,MAAM,MAAM,MAAM,IAAI;AAG9C,UAAI,kBAAkB;AAAA;AAAA;AAAA,QAGlB,eAAe;AAAA,QAEf,QAAQ;AAAA,QAER,kBAAkB;AAAA,QAElB,aAAa;AAAA,QAGb,WAAW;AAAA,QAEX,cAAc,CAAC;AAAA,QAGf,kBAAkB;AAAA,QAIlB,0BAA0B;AAAA,MAC9B;AAIA,MAAAT,MAAK,QAAQ,WAAW;AACtB,YAAI;AACJ,aAAK,OAAO,iBAAiB;AAC3B,eAAK,GAAG,IAAI,gBAAgB,GAAG;AAAA,QACjC;AAAA,MACF;AAGA,MAAAA,MAAK,oBAAoB,WAAW;AAClC,YAAI;AACJ,aAAK,OAAO,gBAAiB,KAAI,CAAC,MAAM,KAAK,GAAG,CAAC,GAAG;AAClD,eAAK,GAAG,IAAI,gBAAgB,GAAG;AAAA,QACjC;AAAA,MACF;AACA,MAAAA,MAAK,kBAAkB;AAiBvB,MAAAA,MAAK,UAAU,CAAC;AAIhB,MAAAA,MAAK,QAAQ,MAAM,SAASU,SAAQ;AAClC,YAAI,SAAS,KAAKA,OAAM,KAAK,KAAKV,MAAK,MAAM,KAAK,KAAK,SAAS;AAEhE,YAAII,YAAW,MAAM,GAAG;AACtB,mBAAS,OAAOM,OAAM;AAAA,QACxB;AAEA,YAAIL,SAAQ,MAAM,MAAM,OAAO;AAC7B,mBAAS,CAAC,MAAM;AAAA,QAClB;AAEA,eAAO;AAAA,MACT;AAGA,MAAAL,MAAK,QAAQ,SAAS,IAAI,SAASU,SAAQ;AACzC,YAAI,UAAU,CAAC,GACX,OAAO,CAAC;AAKZ,YAAIA,SAAQ;AACV,kBAAQ,KAAKA,OAAM;AAAA,QACrB;AAGA,YAAI,CAACA,WAAUV,MAAK,QAAQ;AAC1B,kBAAQ,KAAKA,MAAK,MAAM;AAAA,QAC1B;AAGA,YAAIA,MAAK,aAAaA,MAAK,eAAe;AACxC,kBAAQ,KAAKA,MAAK,aAAa;AAAA,QACjC;AA0CA,gBAAQ,QAAQ,SAASU,SAAQ;AAC/B,cAAI,cAAcA,QAAO,MAAM,GAAG;AAClC,cAAI,gBAAgB;AACpB,cAAI,iBAAiB;AACrB,cAAI,YAAY,WAAW,GAAG;AAC5B,4BAAgB;AAAA,cACd,YAAY,CAAC;AAAA,cACb,YAAY,CAAC;AAAA,YACf,EAAE,KAAK,GAAG;AACV,6BAAiB,YAAY,CAAC;AAAA,UAChC,WACS,YAAY,WAAW,GAAG;AACjC,4BAAgB,YAAY,CAAC;AAAA,UAC/B;AAEA,cAAI,KAAK,QAAQA,OAAM,MAAM,IAAI;AAC/B,iBAAK,KAAKA,OAAM;AAAA,UAClB;AAEA,cAAI,CAAEV,MAAK,WAAW;AACpB;AAAA,UACF;AAEA;AAAA,YACE;AAAA,YACA;AAAA,UACF,EAAE,QAAQ,SAAS,wBAAwB;AAEzC,gBAAI,OAAO,2BAA2B,aAAa;AAAE;AAAA,YAAQ;AAC7D,gBAAI,2BAA2B,MAAM;AAAE;AAAA,YAAQ;AAK/C,gBAAI,2BAA2BU,SAAQ;AAAE;AAAA,YAAQ;AACjD,gBAAI,KAAK,QAAQ,sBAAsB,MAAM,IAAI;AAAE;AAAA,YAAQ;AAE3D,iBAAK,KAAK,sBAAsB;AAAA,UAClC,CAAC;AAAA,QACH,CAAC;AAGD,YAAI,CAAC,QAAQ,QAAQ;AACnB,kBAAQ,KAAK,IAAI;AAAA,QACnB;AAEA,eAAO;AAAA,MACT;AAGA,MAAAV,MAAK,gBAAgB,CAAC;AAItB,MAAAA,MAAK,cAAc,MAAM,SAASU,SAAQ;AACxC,eAAO,KAAKA,OAAM,KAAK,KAAKV,MAAK,MAAM,KAAK,KAAK,SAAS;AAAA,MAC5D;AAIA,MAAAA,MAAK,cAAc,SAAS,IAAI,SAAS,OAAO;AAC9C,gBAAQ,OAAO;AAAA,UACb,KAAK;AAAG,mBAAO,CAAC,QAAQ,OAAO;AAAA,UAC/B,KAAK;AAAG,mBAAO,CAAC,KAAK;AAAA,UACrB;AAAS,mBAAO,CAAC,OAAO;AAAA,QAC1B;AAAA,MACF;AAIA,MAAAA,MAAK,gBAAgB,WAAW;AAC9B,eAAO,KAAK,UAAU,KAAK;AAAA,MAC7B;AAGA,MAAAA,MAAK,QAAQ;AAKb,MAAAA,MAAK,SAAS,SAAS,OAAO,SAAS;AACrC,kBAAU,WAAW,CAAC;AAEtB,YAAI,UAAU,KAAK,QAAQ,IAAI,QAAQ,MAAM,EAAE,MAAM,GACjDU,SACA,QACA,WACA;AAGJ,oBAAY,KAAK,aAAa,OAAO,OAAO;AAE5C,eAAO,QAAQ,QAAQ;AACrB,UAAAA,UAAS,QAAQ,MAAM;AACvB,mBAAS,UAAU,MAAM,QAAQ,aAAa,KAAK,gBAAgB;AACnE,yBAAe,KAAK,aAAaA,OAAM;AAEvC,cAAI,CAAC,cAAc;AACjB;AAAA,UACF;AACA,iBAAO,OAAO,QAAQ;AACpB,2BAAe,aAAa,OAAO,MAAM,CAAC;AAE1C,gBAAI,iBAAiB,UAAa,iBAAiB,MAAM;AACvD;AAAA,YACF;AAAA,UACF;AAEA,cAAI,iBAAiB,UAAa,iBAAiB,MAAM;AACvD,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,YAAI,MAAM,QAAQ,YAAY,GAAG;AAC/B,iBAAO,aAAa,QAAQ,cAAc,KAAK;AAAA,QACjD;AAAA,MACF;AAGA,MAAAV,MAAK,qCAAqC,SAAS,OAAOU,SAAQ,cAAc;AAC9E,YAAI,aAAa,KAAK,cAAc,IAAIA,OAAM,GAC1C,iBAAiB,WAAW,KAAK,GACjC,eACA;AAEJ,YAAIR,UAAS,YAAY,GAAG;AAC1B,iBAAO,eAAe,QAAQ;AAC5B,4BAAgB,eAAe,MAAM;AACrC,gBAAI,MAAM,aAAa,aAAa,CAAC,GAAG;AACtC,wBAAU,aAAa,aAAa;AACpC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAGA,MAAAF,MAAK,sBAAsB,SAAS,OAAO,OAAO,SAAS;AACzD,kBAAU,WAAW,CAAC;AACtB,YAAI,UAAU,KAAK,QAAQ,IAAI,QAAQ,MAAM,EAAE,MAAM,GACjDU,SACA,QACA,cACA;AAEJ,gBAAQ,KAAK,aAAa,OAAO,OAAO;AAExC,eAAO,QAAQ,QAAQ;AACrB,UAAAA,UAAS,QAAQ,MAAM;AACvB,mBAAS,MAAM,MAAM,QAAQ,aAAa,KAAK,gBAAgB;AAC/D,yBAAe,KAAK,aAAaA,OAAM;AAEvC,cAAI,CAAC,cAAc;AACjB;AAAA,UACF;AAEA,iBAAO,OAAO,QAAQ;AACpB,2BAAe,aAAa,OAAO,MAAM,CAAC;AAC1C,gBAAI,CAACR,UAAS,YAAY,GAAG;AAC3B;AAAA,YACF;AACA,gBAAI,OAAO,WAAW,GAAG;AACvB,wBAAU,KAAK,mCAAmC,OAAOQ,SAAQ,YAAY;AAAA,YAC/E;AAAA,UACF;AACA,cAAI,OAAO,YAAY,eAAe,YAAY,MAAM;AACtD;AAAA,UACF;AAAA,QACF;AAEA,YAAI,OAAO,YAAY,eAAe,YAAY,MAAM;AACtD,cAAI,MAAM,QAAQ,YAAY,GAAG;AAC/B,gBAAIR,UAAS,QAAQ,YAAY,GAAG;AAClC,wBAAU,KAAK,mCAAmC,OAAO,QAAQ,QAAQ,QAAQ,YAAY;AAAA,YAC/F,OAAO;AACL,wBAAU,QAAQ;AAAA,YACpB;AACA,2BAAe,QAAQ;AAAA,UACzB;AAAA,QACF;AAEA,eAAO,EAAE,SAAkB,aAA2B;AAAA,MACxD;AAOA,MAAAF,MAAK,WAAW,WAAW;AACzB,YAAIW,QAAO,KAAK,OAAO,MAAM;AAC7B,YAAIC,QAAO,KAAK,OAAO,MAAM;AAE7B,YAAID,SAAQA,MAAK,MAAMA,MAAK,IAAI;AAC9B,iBAAO,CAACA,MAAK,IAAIA,MAAK,EAAE;AAAA,QAC1B,WAAWC,SAAQA,MAAK,UAAU;AAChC,iBAAOA,MAAK;AAAA,QACd,OAAO;AACL,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAQA,MAAAZ,MAAK,iBAAiB,WAAW;AAC/B,YAAI,OAAO,MAAM,KAAK,SAAS,GAC3B,UAAU,CAAC,GACX;AAGJ,eAAO,KAAK,QAAQ;AAClB,oBAAU,KAAK,MAAM;AAErB,cAAI,OAAO,WAAY,UAAU;AAC/B;AAAA,UACF;AAEA,mBAAS,QAAQ,SAAS;AACxB,gBAAI,CAAC,QAAQ,eAAe,IAAI,GAAG;AACjC;AAAA,YACF;AAEA,gBAAI,MAAM,QAAQ,IAAI,CAAC,GAAG;AACxB;AAAA,YACF;AAEA,oBAAQ,IAAI,IAAI,QAAQ,IAAI;AAAA,UAC9B;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAKA,MAAAA,MAAK,2BAA2B,SAAS,OAAO,SAAS;AACvD,YAAI,qBAAqB,CAAC,EAAC,MAAY,CAAC;AAIxC,YAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,+BAAqB,mBAAmB,OAAO,QAAQ,QAAQ;AAAA,QACjE;AAIA,YAAI,MAAM,QAAQ,YAAY,GAAG;AAC/B,6BAAmB,KAAK,EAAE,SAAS,QAAQ,aAAa,CAAC;AAAA,QAC3D;AAEA,eAAO;AAAA,MACT;AAGA,MAAAA,MAAK,YAAY,SAAS,OAAO,SAAS;AACxC,kBAAU,WAAW,CAAC;AAEtB,YAAI,qBAAqB,KAAK,yBAAyB,OAAO,OAAO;AAErE,YAAI;AACJ,YAAI,YAAY;AAEhB,YAAI,wBAAwB,KAAK,eAAe,OAAO;AACvD,eAAO,sBAAsB;AAI7B,YAAI,mBACF,mBAAmB,KAAK,SAAS,mBAAmB;AAClD,cAAI,MAAM,kBAAkB,KAAK,GAAG;AAClC,wBAAY,kBAAkB;AAC9B,0BAAc,KAAK,OAAO,WAAW,qBAAqB;AAAA,UAC5D,WAAW,MAAM,kBAAkB,OAAO,GAAG;AAC3C,0BAAc,aAAa,kBAAkB,SAAS,KAAK;AAAA,UAC7D;AAEA,cAAI,gBAAgB,UAAa,gBAAgB,MAAM;AACrD,mBAAO;AAAA,UACT;AAAA,QACF,GAAG,IAAI;AAET,YAAI,CAAC,kBAAkB;AACrB,iBAAO,KAAK,mBAAmB,OAAO,OAAO;AAAA,QAC/C;AAEA,YAAI,OAAO,gBAAiB,UAAU;AACpC,wBAAc,KAAK,YAAY,aAAa,OAAO;AAAA,QACrD,WAAWK,SAAQ,WAAW,GAAG;AAC/B,wBAAc,YAAY,IAAI,SAASQ,IAAG;AACxC,mBAAQ,OAAOA,OAAO,WAAW,KAAK,YAAYA,IAAG,OAAO,IAAIA;AAAA,UAClE,GAAG,IAAI;AAAA,QACT,WAAWX,UAAS,WAAW,KAAK,MAAM,QAAQ,KAAK,GAAG;AACxD,wBAAc,KAAK,UAAU,QAAQ,OAAO,WAAW,OAAO;AAAA,QAChE;AAEA,eAAO;AAAA,MACT;AAGA,MAAAF,MAAK,cAAc,SAAS,SAAS,SAAS;AAC5C,YAAI,WAAW,MAAM;AACnB,iBAAO;AAAA,QACT;AAEA,kBAAU,WAAW,CAAC;AACtB,YAAIc,WAAU,QAAQ,MAAM,KAAK,WAAW,GACxCC,cACA,OACA,MACA;AAGJ,YAAI,CAACD,UAAS;AACZ,iBAAO;AAAA,QACT;AAEA,eAAOA,SAAQ,QAAQ;AACrB,UAAAC,eAAcD,SAAQ,MAAM;AAC5B,iBAAOC,aAAY,QAAQ,KAAK,aAAa,IAAI;AAEjD,cAAI,MAAM,QAAQ,IAAI,CAAC,GAAG;AACxB,oBAAQ,QAAQ,IAAI,EAAE,SAAS,EAAE,QAAQ,QAAQ,OAAO;AAAA,UAC1D,WAAW,QAAQ,SAAS;AAC1B,oBAAQ,KAAK,gBAAgBA,cAAa,SAAS,OAAO;AAAA,UAC5D,OAAO;AACL,oBAAQ,KAAK,mBAAmBA,cAAa,SAAS,OAAO;AAAA,UAC/D;AAEA,kBAAQ,IAAI,OAAOA,aAAY,QAAQ,OAAO,KAAK,EAAE,QAAQ,OAAO,KAAK,CAAC;AAC1E,oBAAU,QAAQ,QAAQ,OAAO,KAAK;AAAA,QACxC;AAEA,eAAO,QAAQ,QAAQ,WAAW,GAAG;AAAA,MACvC;AAKA,MAAAf,MAAK,YAAY,SAAS,OAAO,OAAO,SAAS;AAC/C,kBAAU,KAAK,eAAe,EAAC,OAAO,OAAO,KAAK,EAAC,GAAG,OAAO;AAC7D,YAAI,YAAY;AAEhB,iBAAS,KAAK,oBAAoB,OAAO,OAAO,OAAO;AACvD,YAAI,OAAO,OAAO,iBAAiB,eAAe,OAAO,gBAAgB,MAAM;AAC7E,iBAAO,KAAK,mBAAmB,OAAO,OAAO;AAAA,QAC/C;AAEA,YAAI,OAAO,OAAO,YAAY,eAAe,OAAO,WAAW,MAAM;AACnE,iBAAO,KAAK,YAAY,OAAO,SAAS,OAAO;AAAA,QACjD,OACK;AACH,uBAAa,KAAK,cAAc,IAAI,QAAQ,MAAM;AAClD,iBAAO,KAAK,mBAAmB,QAAQ,MAAM,WAAW,KAAK,EAAE,CAAC,GAAG,OAAO;AAAA,QAC5E;AAAA,MACF;AAGA,MAAAA,MAAK,qBAAqB,SAAS,OAAO,SAAS;AAEjD,YAAG,KAAK,qBAAqB,SAAQ;AAEnC,cAAIgB,KAAI,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;AAEpC,kBAAQ,KAAK,yBAAyB,SAAS,IAAI,KAAK,2BAA2B,MAC/EA,GAAE,QAAQ,MAAK,GAAG,EAAE;AAAA,YAAQ;AAAA,YAC5B,SAAS,OAAO,IAAI,IAAI;AAAC,qBAAO,KAAK,MAAM,GAAG,YAAY;AAAA,YAAC;AAAA,UAAE;AAAA,QACnE;AAEA,YAAI,uBAAwB,WAAW,QAAQ,QAAQ,UAAU,OAAQ,QAAQ,SAAS,KAAK,cAAc;AAC7G,YAAI,YAAsB,KAAK,aAAa,OAAO,OAAO;AAC1D,YAAI,sBAAsB,CAAC,sBAAsB,SAAS,EAAE,KAAK,QAAQ,aAAa,KAAK,gBAAgB;AAE3G,eAAO,eAAe,sBAAsB;AAAA,MAC9C;AAGA,MAAAhB,MAAK,qBAAqB,SAASe,cAAa,SAAS,SAAS;AAChE,eAAO,cAAcA,eAAc;AAAA,MACrC;AAEA,MAAAf,MAAK,kBAAkB,WAAW;AAChC,eAAOA,MAAK,mBAAmB,MAAMA,OAAM,SAAS;AAAA,MACtD;AAaA,MAAAA,MAAK,WAAW,SAASC,SAAQ,SAAS;AACxC,kBAAU,KAAK;AAAA,UACX;AAAA,UACA,KAAK,OAAO,eAAe;AAAA,UAC3B;AAAA,QACJ;AAEA,YAAI,WAAWA,UAAS,GACpB,SAAS,QAAQ,KAAK,IAAIA,OAAM,GAAG,QAAQ,SAAS,EAAE,SAAS,GAC/D,QAAQ,OAAO,MAAM,GAAG,GACxB,WACA,SAAS,CAAC,GACV,iBACAgB,UAAS,QAAQ,UAAU,MAC3B,OAAO,WAAW,MAAM;AAG5B,QAAAhB,UAAS,MAAM,CAAC;AAChB,oBAAY,MAAM,CAAC;AAEnB,eAAOA,QAAO,SAAS,GAAG;AACxB,iBAAO,QAAQA,QAAO,OAAO,KAAK,IAAI,GAAGA,QAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AAC/D,UAAAA,UAASA,QAAO,OAAO,GAAGA,QAAO,SAAQ,CAAC;AAAA,QAC5C;AAEA,0BAAkB,OAAO,KAAK,QAAQ,SAAS;AAE/C,YAAI,QAAQ,6BAA6B,WAAW;AAClD,sBAAY,UAAU,QAAQ,OAAO,EAAE;AAAA,QACzC;AAEA,YAAI,QAAQ,YAAY,KAAK,WAAW;AACtC,6BAAmB,QAAQ,YAAY;AAAA,QACzC;AAEA,YAAI,QAAQ,YAAY;AACtB,UAAAgB,UAAS,OAAOA;AAAA,QAClB,OACK;AACH,UAAAA,UAASA,QAAO,QAAQ,MAAM,MAAM;AAAA,QACtC;AAEA,0BAAkBA,QACf,QAAQ,MAAM,QAAQ,IAAI,EAC1B,QAAQ,MAAM,eAAe,EAC7B,QAAQ,MAAM,IAAI;AAGrB,eAAO;AAAA,MACT;AAiBA,MAAAjB,MAAK,aAAa,SAASC,SAAQ,SAAS;AAC1C,kBAAU,KAAK;AAAA,UACX;AAAA,UACA,KAAK,OAAO,0BAA0B,OAAO;AAAA,UAC7C,KAAK,OAAO,iBAAiB,OAAO;AAAA,UACpC;AAAA,QACJ;AAEA,eAAO,KAAK,SAASA,SAAQ,OAAO;AAAA,MACtC;AASA,MAAAD,MAAK,WAAW,SAAS,OAAO,OAAO,SAAS;AAC9C,oBAAY,UAAU,CAAC;AAEvB,gBAAQ,OAAO;AAAA,UACb,KAAK;AACH,mBAAO,KAAK,WAAW,OAAO,OAAO;AAAA,UACvC,KAAK;AACH,oBAAQ,KAAK,OAAO,iBAAiB,OAAO;AAC5C,mBAAO,KAAK,SAAS,OAAO,KAAK;AAAA,UACnC,KAAK;AACH,mBAAO,KAAK,aAAa,OAAO,OAAO;AAAA,UACzC;AACE,gBAAI;AAEJ,gBAAI,MAAM,MAAM,cAAc,GAAG;AAC/B,+BAAiB,KAAK,OAAO,OAAO,OAAO,OAAO;AAAA,YACpD,OAAO;AACL,+BAAiB,MAAM,SAAS;AAAA,YAClC;AAEA,mBAAO,KAAK,YAAY,gBAAgB,OAAO;AAAA,QACnD;AAAA,MACF;AAeA,MAAAA,MAAK,YAAY,SAASY,OAAM;AAC9B,YAAIE,UAAS,eAAe;AAE5B,YAAIF,SAAQ,MAAM;AAChB,iBAAOA;AAAA,QACT;AAEA,YAAI,OAAOA,UAAU,UAAU;AAC7B,iBAAOA;AAAA,QACT;AAEA,QAAAE,WAAUF,MAAK,SAAS,EAAE,MAAM,qFAAqF;AAErH,YAAIE,UAAS;AACX,mBAASI,KAAI,GAAGA,MAAK,GAAGA,MAAK;AAC3B,YAAAJ,SAAQI,EAAC,IAAI,SAASJ,SAAQI,EAAC,GAAG,EAAE,KAAK;AAAA,UAC3C;AAGA,UAAAJ,SAAQ,CAAC,KAAK;AAEd,qBAAWA,SAAQ,CAAC,IAAI,OAAQ,MAAMA,SAAQ,CAAC,KAAK;AAEpD,cAAIA,SAAQ,CAAC,GAAG;AACd,4BAAgB,IAAI,KAAK,KAAK,IAAIA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAG,QAAQ,CAAC;AAAA,UACrH,OAAO;AACL,4BAAgB,IAAI,KAAKA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAGA,SAAQ,CAAC,GAAG,QAAQ;AAAA,UAC3G;AAAA,QACF,WAAW,OAAOF,SAAS,UAAU;AAEnC,0BAAgB,oBAAI,KAAK;AACzB,wBAAc,QAAQA,KAAI;AAAA,QAC5B,WAAWA,MAAK,MAAM,qEAAqE,GAAG;AAG5F,0BAAgB,oBAAI,KAAK;AACzB,wBAAc,QAAQ,KAAK,MAAM;AAAA,YAC/B,OAAO;AAAA,YAAI,OAAO;AAAA,YAAI,OAAO;AAAA,YAAI,OAAO;AAAA,YAAI,OAAO;AAAA,YAAI,OAAO;AAAA,UAChE,EAAE,KAAK,GAAG,CAAC,CAAC;AAAA,QACd,WAAWA,MAAK,MAAM,6BAA6B,GAAG;AAEpD,0BAAgB,oBAAI,KAAK;AACzB,wBAAc,QAAQ,KAAK,MAAMA,KAAI,CAAC;AAAA,QACxC,OAAO;AAEL,0BAAgB,oBAAI,KAAK;AACzB,wBAAc,QAAQ,KAAK,MAAMA,KAAI,CAAC;AAAA,QACxC;AAEA,eAAO;AAAA,MACT;AAiCA,MAAAZ,MAAK,WAAW,SAASY,OAAMK,SAAQ,SAAS;AAC9C,YAAI,UAAU,KAAK,OAAO,QAAQ,OAAO,GACrC,kBAAkBjB,MAAK,SAAS;AAGpC,YAAI,CAAC,SAAS;AACZ,oBAAU,CAAC;AAAA,QACb;AAEA,kBAAU,KAAK,eAAe,SAAS,IAAI;AAE3C,YAAI,MAAMY,MAAK,QAAQ,CAAC,GAAG;AACzB,gBAAM,IAAI,MAAM,6EAA6E;AAAA,QAC/F;AAEA,YAAI,UAAUA,MAAK,OAAO,GACtB,MAAMA,MAAK,QAAQ,GACnB,OAAOA,MAAK,YAAY,GACxB,QAAQA,MAAK,SAAS,IAAI,GAC1B,OAAOA,MAAK,SAAS,GACrB,SAAS,MACT,WAAW,OAAO,KAAK,IAAI,GAC3B,OAAOA,MAAK,WAAW,GACvB,OAAOA,MAAK,WAAW,GACvB,SAASA,MAAK,kBAAkB,GAChC,iBAAiB,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC,GACjD,mBAAmB,KAAK,IAAI,MAAM,IAAK,iBAAiB,IACxD,kBAAkB,SAAS,IAAI,MAAM,QAClC,eAAe,SAAS,EAAE,SAAS,IAAI,MAAM,iBAAiB,mBAC9D,iBAAiB,SAAS,EAAE,SAAS,IAAI,MAAM,mBAAmB;AAGzE,YAAI,SAAS,IAAI;AACf,mBAAS,SAAS;AAAA,QACpB,WAAW,WAAW,GAAG;AACvB,mBAAS;AAAA,QACX;AAEA,QAAAK,UAASA,QAAO,QAAQ,MAAM,QAAQ,eAAe,OAAO,CAAC;AAC7D,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,UAAU,OAAO,CAAC;AACxD,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,iBAAiB,KAAK,CAAC;AAC7D,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,YAAY,KAAK,CAAC;AACxD,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,GAAG,CAAC;AAC1C,QAAAA,UAASA,QAAO,QAAQ,MAAM,GAAG;AACjC,QAAAA,UAASA,QAAO,QAAQ,OAAO,GAAG;AAClC,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,IAAI,CAAC;AAC3C,QAAAA,UAASA,QAAO,QAAQ,OAAO,IAAI;AACnC,QAAAA,UAASA,QAAO,QAAQ,MAAM,IAAI;AAClC,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,MAAM,CAAC;AAC7C,QAAAA,UAASA,QAAO,QAAQ,OAAO,MAAM;AACrC,QAAAA,UAASA,QAAO,QAAQ,MAAM,MAAM;AACpC,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAC5C,QAAAA,UAASA,QAAO,QAAQ,OAAO,KAAK;AACpC,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,IAAI,CAAC;AAC3C,QAAAA,UAASA,QAAO,QAAQ,OAAO,IAAI;AACnC,QAAAA,UAASA,QAAO,QAAQ,MAAM,gBAAgB,QAAQ,CAAC;AACvD,QAAAA,UAASA,QAAO,QAAQ,MAAM,gBAAgB,QAAQ,EAAE,YAAY,CAAC;AACrE,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,IAAI,CAAC;AAC3C,QAAAA,UAASA,QAAO,QAAQ,OAAO,IAAI;AACnC,QAAAA,UAASA,QAAO,QAAQ,MAAM,OAAO;AACrC,QAAAA,UAASA,QAAO,QAAQ,MAAM,QAAQ,IAAI,CAAC;AAC3C,QAAAA,UAASA,QAAO,QAAQ,OAAO,QAAQ,IAAI,EAAE,QAAQ,OAAO,EAAE,CAAC;AAC/D,QAAAA,UAASA,QAAO,QAAQ,MAAM,IAAI;AAClC,QAAAA,UAASA,QAAO,QAAQ,MAAM,cAAc;AAC5C,QAAAA,UAASA,QAAO,QAAQ,MAAM,cAAc;AAE5C,eAAOA;AAAA,MACT;AAGA,MAAAjB,MAAK,SAAS,SAAS,OAAO,YAAY,SAAS;AACjD,YAAIY,QAAO,KAAK,UAAU,UAAU,GAChCK,UAAS,KAAK,OAAO,OAAO,OAAO;AAIvC,YAAIL,SAAQ,MAAM;AAChB,iBAAOA;AAAA,QACT;AAEA,YAAI,cAAcA,MAAK,SAAS;AAChC,YAAI,YAAY,MAAM,UAAU,GAAG;AACjC,iBAAO;AAAA,QACT;AAEA,YAAI,CAACK,SAAQ;AACX,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,SAASL,OAAMK,SAAQ,OAAO;AAAA,MAC5C;AAGA,MAAAjB,MAAK,eAAe,SAASC,SAAQ,SAAS;AAC5C,kBAAU,KAAK;AAAA,UACX;AAAA,UACA,KAAK,OAAO,4BAA4B,OAAO;AAAA,UAC/C,KAAK,OAAO,iBAAiB,OAAO;AAAA,UACpC;AAAA,QACJ;AAEA,eAAO,KAAK,SAASA,SAAQ,OAAO;AAAA,MACtC;AAGA,MAAAD,MAAK,cAAc,SAASC,SAAQ,SAAS;AAC3C,YAAI,KAAK,MACL,OAAOA,SACP,aAAa,GACbkB,OACA,WACA;AAGJ,eAAO,QAAQ,MAAM,aAAa,GAAG;AACnC,iBAAO,OAAO;AACd,wBAAc;AAAA,QAChB;AAEA,YAAI,eAAe,GAAG;AACpB,sBAAY,KAAK,aAAa,yCAAyC,OAAO;AAC9E,UAAAA,QAAO,KAAK,EAAE,WAAW,EAAC,OAAO,KAAI,CAAC;AACtC,sBAAY;AAAA,QACd,OAAO;AACL,sBAAY,KAAK,aAAa,sCAAsC,WAAW,UAAU,GAAG,OAAO;AACnG,UAAAA,QAAO,KAAK,EAAE,SAAS;AACvB,sBAAa,OAAO,KAAK,MAAM,IAAI,MAAM,IAAK,IAAI;AAAA,QACpD;AAEA,kBAAU,KAAK;AAAA,UACX;AAAA,UACA,EAAC,MAAMA,OAAM,WAAsB,QAAQ,QAAQ,WAAW,GAAE;AAAA,QACpE;AAEA,eAAO,KAAK,SAAS,MAAM,OAAO;AAAA,MACpC;AAEA,MAAAnB,MAAK,eAAe,SAAS,OAAO,SAAS;AAC3C,kBAAU,WAAW,CAAC;AAGtB,YAAIK,SAAQ,KAAK,GAAG;AAClB,kBAAQ,MAAM,KAAK,QAAQ,aAAa,KAAK,gBAAgB;AAAA,QAC/D;AAMA,YAAI,QAAQ,OAAO;AACjB,kBAAQ,CAAC,QAAQ,OAAO,KAAK,EAAE,KAAK,QAAQ,aAAa,KAAK,gBAAgB;AAAA,QAChF;AAEA,eAAO;AAAA,MACT;AAWA,MAAAL,MAAK,SAAS,SAAW,MAAM,MAAO;AACpC,YAAI,OAAO,SAAU,eAAe,OAAO,SAAU,aAAa;AAChE,iBAAO,CAAC;AAAA,QACV;AACA,eAAOS,OAAM,MAAM,IAAI;AAAA,MACzB;AAGA,MAAAT,MAAK,IAAIA,MAAK,UAAU,KAAKA,KAAI;AACjC,MAAAA,MAAK,IAAIA,MAAK,SAAS,KAAKA,KAAI;AAChC,MAAAA,MAAK,IAAIA,MAAK,UAAU,KAAKA,KAAI;AAEjC,aAAOA;AAAA,IACT,CAAC;AAAA;AAAA;;;ACtkCD;AAAA;AAAA;AAMA,KAAC,WAAW;AACV,UAAI,UAAU;AAEd,OAAC,WAAW;AACV,SAAC,WAAW;AACV,eAAK,QAAQ;AAAA,YACX,mBAAmB;AAAA,YACnB,qBAAqB;AAAA,cACnB,UAAU;AAAA,cACV,SAAS;AAAA,YACX;AAAA,YACA,qBAAqB;AAAA,YACrB,oBAAoB;AAAA,YACpB,wBAAwB;AAAA,YACxB,qBAAqB;AAAA,YACrB,oBAAoB;AAAA,YACpB,mBAAmB;AAAA,YACnB,qBAAqB;AAAA,YACrB,uBAAuB;AAAA,UACzB;AAAA,QAEF,GAAG,KAAK,IAAI;AAAA,MACd,GAAG,KAAK,OAAO;AAEf,UAAIoB,SAAQ,QAAQ;AAEpB,OAAC,WAAW;AACV,SAAC,WAAW;AACV,cAAI;AAEJ,kBAAQ;AAER,UAAAA,OAAM,eAAe,WAAW;AAC9B,gBAAIC;AACJ,mBAAO,SAASA,OAAM,SAAS,cAAc,sBAAsB,MAAM,OAAOA,KAAI,UAAU;AAAA,UAChG;AAEA,UAAAD,OAAM,WAAW,WAAW;AAC1B,mBAAO,SAAS,OAAO,QAAQA,OAAM,aAAa;AAAA,UACpD;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAI,SAASE;AAEb,UAAAA,KAAI,QAAQ,UAAU,WAAW,QAAQ,UAAU,mBAAmB,QAAQ,UAAU,sBAAsB,QAAQ,UAAU,qBAAqB,QAAQ,UAAU,oBAAoB,QAAQ,UAAU;AAE7M,UAAAF,OAAM,UAAU,SAAS,SAAS,UAAU;AAC1C,gBAAI,SAAS,WAAW,MAAM;AAC5B,qBAAOE,GAAE,KAAK,SAAS,SAAS,QAAQ,KAAK,CAACA,GAAE,KAAK,SAAS,SAAS,OAAO;AAAA,YAChF,OAAO;AACL,qBAAOA,GAAE,KAAK,SAAS,QAAQ;AAAA,YACjC;AAAA,UACF;AAEA,oBAAU;AAEV,UAAAF,OAAM,UAAU,SAAS,SAAS,KAAK;AACrC,gBAAIC;AACJ,oBAAQA,OAAM,QAAQ,OAAO,MAAM,OAAOA,KAAI,GAAG,IAAI;AAAA,UACvD;AAEA,UAAAD,OAAM,UAAU,SAAS,SAAS,KAAK,OAAO;AAC5C,gBAAI,QAAQ,OAAO,KAAK,MAAM;AAC5B,sBAAQ,OAAO,IAAI,CAAC;AAAA,YACtB;AACA,mBAAO,QAAQ,OAAO,EAAE,GAAG,IAAI;AAAA,UACjC;AAEA,UAAAA,OAAM,oBAAoB,SAAS,SAAS;AAC1C,gBAAI;AACJ,yBAAa;AACb,mBAAO,MAAM;AACX,kBAAI,QAAQ,mBAAmB;AAC7B,6BAAa;AACb;AAAA,cACF;AACA,wBAAU,QAAQ;AAClB,kBAAI,CAAC,SAAS;AACZ;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAEA,UAAAA,OAAM,IAAI,SAAS,UAAU;AAC3B,mBAAO,MAAM,UAAU,MAAM,KAAK,SAAS,iBAAiB,QAAQ,CAAC;AAAA,UACvE;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAIG,IAAG,WAAW;AAElB,UAAAA,KAAIH,OAAM;AAEV,sBAAYA,OAAM,YAAY,WAAW;AACvC,gBAAI;AACJ,mBAAO,SAAS,cAAc,uBAAuB;AACrD,mBAAO,QAAQ,KAAK;AAAA,UACtB;AAEA,sBAAYA,OAAM,YAAY,WAAW;AACvC,gBAAI;AACJ,mBAAO,SAAS,cAAc,uBAAuB;AACrD,mBAAO,QAAQ,KAAK;AAAA,UACtB;AAEA,UAAAA,OAAM,iBAAiB,SAAS,KAAK;AACnC,gBAAI;AACJ,oBAAQ,UAAU;AAClB,gBAAI,SAAS,MAAM;AACjB,qBAAO,IAAI,iBAAiB,gBAAgB,KAAK;AAAA,YACnD;AAAA,UACF;AAEA,UAAAA,OAAM,oBAAoB,WAAW;AACnC,gBAAI,OAAO;AACX,oBAAQ,UAAU;AAClB,oBAAQ,UAAU;AAClB,gBAAK,SAAS,QAAU,SAAS,MAAO;AACtC,qBAAOG,GAAE,sBAAsB,QAAQ,IAAI,EAAE,QAAQ,SAAS,OAAO;AACnE,uBAAO,MAAM,QAAQ;AAAA,cACvB,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAIC,cAAa,MAAMC,UAAS;AAEhC,UAAAA,WAAUL,OAAM;AAEhB,UAAAI,eAAc,OAAO;AAErB,cAAI,OAAOA,iBAAgB,YAAY;AACrC,YAAAA,eAAc,SAASE,QAAO,QAAQ;AACpC,kBAAI;AACJ,oBAAM,SAAS,YAAY,aAAa;AACxC,kBAAI,gBAAgBA,QAAO,OAAO,SAAS,OAAO,YAAY,OAAO,MAAM;AAC3E,qBAAO;AAAA,YACT;AACA,YAAAF,aAAY,YAAY,OAAO,MAAM;AACrC,6BAAiBA,aAAY,UAAU;AACvC,YAAAA,aAAY,UAAU,iBAAiB,WAAW;AAChD,kBAAI;AACJ,uBAAS,eAAe,KAAK,IAAI;AACjC,kBAAI,KAAK,cAAc,CAAC,KAAK,kBAAkB;AAC7C,uBAAO,eAAe,MAAM,oBAAoB;AAAA,kBAC9C,KAAK,WAAW;AACd,2BAAO;AAAA,kBACT;AAAA,gBACF,CAAC;AAAA,cACH;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AAEA,iBAAOJ,OAAM,OAAO,SAAS,KAAK,MAAM,MAAM;AAC5C,gBAAIM;AACJ,YAAAA,SAAQ,IAAIF,aAAY,MAAM;AAAA,cAC5B,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,QAAQ;AAAA,YACV,CAAC;AACD,gBAAI,cAAcE,MAAK;AACvB,mBAAO,CAACA,OAAM;AAAA,UAChB;AAEA,UAAAN,OAAM,iBAAiB,SAASO,IAAG;AACjC,iBAAKA,GAAE,QAAQ,uBAAuB;AACtC,YAAAA,GAAE,eAAe;AACjB,YAAAA,GAAE,gBAAgB;AAClB,mBAAOA,GAAE,yBAAyB;AAAA,UACpC;AAEA,UAAAP,OAAM,WAAW,SAAS,SAAS,UAAU,WAAW,SAAS;AAC/D,mBAAO,QAAQ,iBAAiB,WAAW,SAASO,IAAG;AACrD,kBAAIC;AACJ,cAAAA,UAASD,GAAE;AACX,qBAAO,EAAE,EAAEC,mBAAkB,YAAYH,SAAQG,SAAQ,QAAQ,IAAI;AACnE,gBAAAA,UAASA,QAAO;AAAA,cAClB;AACA,kBAAIA,mBAAkB,WAAW,QAAQ,KAAKA,SAAQD,EAAC,MAAM,OAAO;AAClE,gBAAAA,GAAE,eAAe;AACjB,uBAAOA,GAAE,gBAAgB;AAAA,cAC3B;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAI,eAAe,gBAAgB,WAAW,UAAU,MAAM,gBAAgB;AAE9E,qBAAWP,OAAM,UAAU,iBAAiBA,OAAM,gBAAgB,OAAOA,OAAM;AAE/E,0BAAgB;AAAA,YACd,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,YACL,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAEA,UAAAA,OAAM,OAAO,SAAS,SAAS;AAC7B,gBAAI;AACJ,sBAAU,eAAe,OAAO;AAChC,kBAAM,UAAU,SAAS,WAAW;AAClC,kBAAIC,MAAK;AACT,yBAAW,iBAAiBA,OAAM,IAAI,aAAa,OAAOA,OAAM,IAAI,cAAc,IAAI,kBAAkB,cAAc,CAAC;AACvH,kBAAI,KAAK,MAAM,IAAI,SAAS,GAAG,MAAM,GAAG;AACtC,oBAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,0BAAQ,QAAQ,UAAU,IAAI,YAAY,GAAG;AAAA,gBAC/C;AAAA,cACF,OAAO;AACL,oBAAI,OAAO,QAAQ,UAAU,YAAY;AACvC,0BAAQ,MAAM,UAAU,IAAI,YAAY,GAAG;AAAA,gBAC7C;AAAA,cACF;AACA,qBAAO,OAAO,QAAQ,aAAa,aAAa,QAAQ,SAAS,KAAK,IAAI,UAAU,IAAI;AAAA,YAC1F,CAAC;AACD,gBAAK,QAAQ,cAAc,QAAS,CAAC,QAAQ,WAAW,KAAK,OAAO,GAAG;AACrE,qBAAO;AAAA,YACT;AACA,gBAAI,IAAI,eAAe,eAAe,QAAQ;AAC5C,qBAAO,IAAI,KAAK,QAAQ,IAAI;AAAA,YAC9B;AAAA,UACF;AAEA,2BAAiB,SAAS,SAAS;AACjC,oBAAQ,MAAM,QAAQ,OAAO,SAAS;AACtC,oBAAQ,OAAO,QAAQ,KAAK,YAAY;AACxC,gBAAI,QAAQ,SAAS,SAAS,QAAQ,MAAM;AAC1C,kBAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,GAAG;AAChC,wBAAQ,OAAO,MAAM,QAAQ;AAAA,cAC/B,OAAO;AACL,wBAAQ,OAAO,MAAM,QAAQ;AAAA,cAC/B;AAAA,YACF;AACA,gBAAI,cAAc,QAAQ,QAAQ,KAAK,MAAM;AAC3C,sBAAQ,WAAW;AAAA,YACrB;AACA,oBAAQ,SAAS,cAAc,QAAQ,QAAQ;AAC/C,gBAAI,QAAQ,aAAa,KAAK;AAC5B,sBAAQ,UAAU;AAAA,YACpB;AACA,mBAAO;AAAA,UACT;AAEA,sBAAY,SAAS,SAAS,MAAM;AAClC,gBAAI;AACJ,kBAAM,IAAI,eAAe;AACzB,gBAAI,KAAK,QAAQ,MAAM,QAAQ,KAAK,IAAI;AACxC,gBAAI,iBAAiB,UAAU,QAAQ,MAAM;AAC7C,gBAAI,OAAO,QAAQ,SAAS,UAAU;AACpC,kBAAI,iBAAiB,gBAAgB,kDAAkD;AAAA,YACzF;AACA,gBAAI,CAAC,QAAQ,aAAa;AACxB,kBAAI,iBAAiB,oBAAoB,gBAAgB;AACzD,6BAAe,GAAG;AAAA,YACpB;AACA,gBAAI,kBAAkB,CAAC,CAAC,QAAQ;AAChC,gBAAI,qBAAqB,WAAW;AAClC,kBAAI,IAAI,eAAe,eAAe,MAAM;AAC1C,uBAAO,KAAK,GAAG;AAAA,cACjB;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAEA,4BAAkB,SAAS,UAAUQ,OAAM;AACzC,gBAAI,QAAQ;AACZ,gBAAI,OAAO,aAAa,YAAY,OAAOA,UAAS,UAAU;AAC5D,kBAAIA,MAAK,MAAM,UAAU,GAAG;AAC1B,oBAAI;AACF,6BAAW,KAAK,MAAM,QAAQ;AAAA,gBAChC,SAAS,OAAO;AAAA,gBAAC;AAAA,cACnB,WAAWA,MAAK,MAAM,yBAAyB,GAAG;AAChD,yBAAS,SAAS,cAAc,QAAQ;AACxC,uBAAO,aAAa,SAAS,SAAS,CAAC;AACvC,uBAAO,OAAO;AACd,yBAAS,KAAK,YAAY,MAAM,EAAE,WAAW,YAAY,MAAM;AAAA,cACjE,WAAWA,MAAK,MAAM,oBAAoB,GAAG;AAC3C,yBAAS,IAAI,UAAU;AACvB,gBAAAA,QAAOA,MAAK,QAAQ,OAAO,EAAE;AAC7B,oBAAI;AACF,6BAAW,OAAO,gBAAgB,UAAUA,KAAI;AAAA,gBAClD,SAAS,OAAO;AAAA,gBAAC;AAAA,cACnB;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAEA,UAAAT,OAAM,OAAO,SAAS,SAAS;AAC7B,mBAAO,QAAQ;AAAA,UACjB;AAEA,UAAAA,OAAM,gBAAgB,SAAS,KAAK;AAClC,gBAAIO,IAAG,cAAc;AACrB,2BAAe,SAAS,cAAc,GAAG;AACzC,yBAAa,OAAO,SAAS;AAC7B,wBAAY,SAAS,cAAc,GAAG;AACtC,gBAAI;AACF,wBAAU,OAAO;AACjB,qBAAO,GAAI,CAAC,UAAU,YAAY,UAAU,aAAa,QAAQ,CAAC,UAAU,QAAU,aAAa,WAAW,OAAO,aAAa,SAAS,UAAU,WAAW,OAAO,UAAU;AAAA,YACnL,SAAS,OAAO;AACd,cAAAA,KAAI;AACJ,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAIF,UAASK;AAEb,UAAAL,WAAUL,OAAM;AAEhB,UAAAU,WAAU,SAASH,IAAG;AACpB,mBAAO,MAAM,UAAU,MAAM,KAAKA,EAAC;AAAA,UACrC;AAEA,UAAAP,OAAM,mBAAmB,SAAS,SAAS,iBAAiB;AAC1D,gBAAI,QAAQ;AACZ,qBAAS,CAAC,OAAO;AACjB,gBAAIK,SAAQ,SAAS,MAAM,GAAG;AAC5B,uBAASK,SAAQ,QAAQ,QAAQ;AAAA,YACnC;AACA,qBAAS,CAAC;AACV,mBAAO,QAAQ,SAAS,OAAO;AAC7B,kBAAI,CAAC,MAAM,QAAQ,MAAM,UAAU;AACjC;AAAA,cACF;AACA,kBAAIL,SAAQ,OAAO,sBAAsB,GAAG;AAC1C;AAAA,cACF;AACA,kBAAIA,SAAQ,OAAO,QAAQ,GAAG;AAC5B,uBAAOK,SAAQ,MAAM,OAAO,EAAE,QAAQ,SAAS,QAAQ;AACrD,sBAAI,OAAO,UAAU;AACnB,2BAAO,OAAO,KAAK;AAAA,sBACjB,MAAM,MAAM;AAAA,sBACZ,OAAO,OAAO;AAAA,oBAChB,CAAC;AAAA,kBACH;AAAA,gBACF,CAAC;AAAA,cACH,WAAW,MAAM,WAAW,CAAC,SAAS,YAAY,QAAQ,EAAE,QAAQ,MAAM,IAAI,MAAM,IAAI;AACtF,uBAAO,OAAO,KAAK;AAAA,kBACjB,MAAM,MAAM;AAAA,kBACZ,OAAO,MAAM;AAAA,gBACf,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AACD,gBAAI,iBAAiB;AACnB,qBAAO,KAAK,eAAe;AAAA,YAC7B;AACA,mBAAO,OAAO,IAAI,SAAS,OAAO;AAChC,kBAAI,MAAM,QAAQ,MAAM;AACtB,uBAAQ,mBAAmB,MAAM,IAAI,IAAK,MAAO,mBAAmB,MAAM,KAAK;AAAA,cACjF,OAAO;AACL,uBAAO;AAAA,cACT;AAAA,YACF,CAAC,EAAE,KAAK,GAAG;AAAA,UACb;AAEA,UAAAV,OAAM,eAAe,SAAS,MAAM,UAAU;AAC5C,gBAAIK,SAAQ,MAAM,MAAM,GAAG;AACzB,qBAAOK,SAAQ,KAAK,QAAQ,EAAE,OAAO,SAAS,IAAI;AAChD,uBAAOL,SAAQ,IAAI,QAAQ;AAAA,cAC7B,CAAC;AAAA,YACH,OAAO;AACL,qBAAOK,SAAQ,KAAK,iBAAiB,QAAQ,CAAC;AAAA,YAChD;AAAA,UACF;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAI,aAAa,MAAM;AAEvB,iBAAOV,OAAM,MAAM,iBAAiBA,OAAM;AAE1C,UAAAA,OAAM,gBAAgB,SAASO,IAAG;AAChC,gBAAI,CAAC,YAAY,IAAI,GAAG;AACtB,qBAAO,eAAeA,EAAC;AAAA,YACzB;AAAA,UACF;AAEA,UAAAP,OAAM,UAAU,SAAS,SAAS,SAAS;AACzC,mBAAO,QAAQ,OAAO;AAAA,UACxB;AAEA,wBAAc,SAAS,SAAS;AAC9B,gBAAI,QAAQ,UAAU;AACtB,sBAAU,QAAQ,aAAa,cAAc;AAC7C,gBAAI,CAAC,SAAS;AACZ,qBAAO;AAAA,YACT;AACA,qBAAS;AACT,gBAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,kBAAI;AACF,yBAASA,OAAM,QAAQ,SAAS,OAAO;AAAA,cACzC,SAAS,OAAO;AAAA,cAAC;AACjB,yBAAW,KAAK,SAAS,oBAAoB,CAAC,MAAM,CAAC;AAAA,YACvD;AACA,mBAAO,UAAU;AAAA,UACnB;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAI,oBAAoB,qBAAqB,oBAAoB,mBAAmB,oBAAoB,mBAAmB,cAAcW,UAAS,mBAAmB,eAAeN,UAAS,SAAS;AAEtM,UAAAA,WAAUL,OAAM,SAASW,WAAUX,OAAM,SAAS,UAAUA,OAAM,SAAS,iBAAiBA,OAAM,gBAAgB,eAAeA,OAAM,cAAc,oBAAoBA,OAAM;AAE/K,UAAAA,OAAM,wBAAwB,SAASO,IAAG;AACxC,gBAAI;AACJ,sBAAU;AACV,gBAAI,QAAQ,UAAU;AACpB,qBAAO,eAAeA,EAAC;AAAA,YACzB;AAAA,UACF;AAEA,UAAAP,OAAM,gBAAgB,SAASO,IAAG;AAChC,gBAAI;AACJ,gBAAIA,cAAa,OAAO;AACtB,kBAAI,cAAcA,EAAC,GAAG;AACpB;AAAA,cACF;AACA,wBAAUA,GAAE;AAAA,YACd,OAAO;AACL,wBAAUA;AAAA,YACZ;AACA,gBAAI,kBAAkB,OAAO,GAAG;AAC9B;AAAA,YACF;AACA,gBAAIF,SAAQ,SAASL,OAAM,mBAAmB,GAAG;AAC/C,qBAAO,kBAAkB,OAAO;AAAA,YAClC,WAAWK,SAAQ,SAASL,OAAM,qBAAqB,KAAKK,SAAQ,SAASL,OAAM,kBAAkB,GAAG;AACtG,qBAAO,kBAAkB,OAAO;AAAA,YAClC,WAAWK,SAAQ,SAASL,OAAM,kBAAkB,GAAG;AACrD,qBAAO,mBAAmB,OAAO;AAAA,YACnC;AAAA,UACF;AAEA,UAAAA,OAAM,iBAAiB,SAASO,IAAG;AACjC,gBAAI;AACJ,sBAAUA,cAAa,QAAQA,GAAE,SAASA;AAC1C,gBAAI,kBAAkB,OAAO,GAAG;AAC9B;AAAA,YACF;AACA,gBAAIF,SAAQ,SAASL,OAAM,mBAAmB,GAAG;AAC/C,qBAAO,mBAAmB,OAAO;AAAA,YACnC,WAAWK,SAAQ,SAASL,OAAM,qBAAqB,KAAKK,SAAQ,SAASL,OAAM,mBAAmB,GAAG;AACvG,qBAAO,mBAAmB,OAAO;AAAA,YACnC,WAAWK,SAAQ,SAASL,OAAM,kBAAkB,GAAG;AACrD,qBAAO,oBAAoB,OAAO;AAAA,YACpC;AAAA,UACF;AAEA,+BAAqB,SAAS,SAAS;AACrC,gBAAI;AACJ,gBAAIW,SAAQ,SAAS,cAAc,GAAG;AACpC;AAAA,YACF;AACA,0BAAc,QAAQ,aAAa,mBAAmB;AACtD,gBAAI,eAAe,MAAM;AACvB,sBAAQ,SAAS,mBAAmB,QAAQ,SAAS;AACrD,sBAAQ,YAAY;AAAA,YACtB;AACA,oBAAQ,iBAAiB,SAAS,cAAc;AAChD,mBAAO,QAAQ,SAAS,gBAAgB,IAAI;AAAA,UAC9C;AAEA,8BAAoB,SAAS,SAAS;AACpC,gBAAI;AACJ,2BAAeA,SAAQ,SAAS,iBAAiB;AACjD,gBAAI,gBAAgB,MAAM;AACxB,sBAAQ,YAAY;AACpB,sBAAQ,SAAS,mBAAmB,IAAI;AAAA,YAC1C;AACA,oBAAQ,oBAAoB,SAAS,cAAc;AACnD,mBAAO,QAAQ,SAAS,gBAAgB,IAAI;AAAA,UAC9C;AAEA,gCAAsB,SAAS,MAAM;AACnC,mBAAO,aAAa,MAAMX,OAAM,mBAAmB,EAAE,QAAQ,kBAAkB;AAAA,UACjF;AAEA,+BAAqB,SAAS,SAAS;AACrC,gBAAI;AACJ,gBAAIW,SAAQ,SAAS,cAAc,GAAG;AACpC;AAAA,YACF;AACA,0BAAc,QAAQ,aAAa,mBAAmB;AACtD,gBAAI,eAAe,MAAM;AACvB,kBAAIN,SAAQ,SAAS,QAAQ,GAAG;AAC9B,wBAAQ,SAAS,mBAAmB,QAAQ,SAAS;AACrD,wBAAQ,YAAY;AAAA,cACtB,OAAO;AACL,wBAAQ,SAAS,mBAAmB,QAAQ,KAAK;AACjD,wBAAQ,QAAQ;AAAA,cAClB;AAAA,YACF;AACA,oBAAQ,WAAW;AACnB,mBAAO,QAAQ,SAAS,gBAAgB,IAAI;AAAA,UAC9C;AAEA,+BAAqB,SAAS,MAAM;AAClC,mBAAO,aAAa,MAAML,OAAM,kBAAkB,EAAE,QAAQ,iBAAiB;AAAA,UAC/E;AAEA,8BAAoB,SAAS,SAAS;AACpC,gBAAI;AACJ,2BAAeW,SAAQ,SAAS,iBAAiB;AACjD,gBAAI,gBAAgB,MAAM;AACxB,kBAAIN,SAAQ,SAAS,QAAQ,GAAG;AAC9B,wBAAQ,YAAY;AAAA,cACtB,OAAO;AACL,wBAAQ,QAAQ;AAAA,cAClB;AACA,sBAAQ,SAAS,mBAAmB,IAAI;AAAA,YAC1C;AACA,oBAAQ,WAAW;AACnB,mBAAO,QAAQ,SAAS,gBAAgB,IAAI;AAAA,UAC9C;AAEA,0BAAgB,SAASC,QAAO;AAC9B,gBAAIL,MAAK;AACT,mBAAOA,OAAMK,OAAM,WAAW,OAAOL,KAAI,CAAC,IAAI;AAC9C,oBAAQ,OAAO,OAAO,IAAI,kBAAkB,gBAAgB,IAAI,WAAW;AAAA,UAC7E;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAI,mBAAmB;AAEvB,2BAAiBD,OAAM;AAEvB,8BAAoBA,OAAM;AAE1B,UAAAA,OAAM,eAAe,SAASO,IAAG;AAC/B,gBAAI,WAAW,WAAW,MAAM,aAAa,MAAM,MAAM;AACzD,mBAAO;AACP,qBAAS,KAAK,aAAa,aAAa;AACxC,gBAAI,CAAC,QAAQ;AACX;AAAA,YACF;AACA,gBAAI,kBAAkB,IAAI,GAAG;AAC3B;AAAA,YACF;AACA,mBAAOP,OAAM,KAAK,IAAI;AACtB,wBAAYA,OAAM,UAAU;AAC5B,wBAAYA,OAAM,UAAU;AAC5B,mBAAO,SAAS,cAAc,MAAM;AACpC,0BAAc,kCAAkC,SAAS;AACzD,gBAAK,aAAa,QAAU,aAAa,QAAS,CAACA,OAAM,cAAc,IAAI,GAAG;AAC5E,6BAAe,kBAAkB,YAAY,cAAc,YAAY;AAAA,YACzE;AACA,2BAAe;AACf,iBAAK,SAAS;AACd,iBAAK,SAAS;AACd,iBAAK,SAAS,KAAK;AACnB,iBAAK,YAAY;AACjB,iBAAK,MAAM,UAAU;AACrB,qBAAS,KAAK,YAAY,IAAI;AAC9B,iBAAK,cAAc,iBAAiB,EAAE,MAAM;AAC5C,mBAAO,eAAeO,EAAC;AAAA,UACzB;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAI,MAAM,MAAMI,UAAS,mBAAmB,eAAe,UAAUN,UAAS,kBAAkB,SAAS,gBACvG,QAAQ,CAAC,EAAE;AAEb,UAAAA,WAAUL,OAAM,SAASW,WAAUX,OAAM,SAAS,UAAUA,OAAM,SAAS,OAAOA,OAAM,MAAM,iBAAiBA,OAAM,gBAAgB,OAAOA,OAAM,MAAM,gBAAgBA,OAAM,eAAe,mBAAmBA,OAAM,kBAAkB,oBAAoBA,OAAM;AAElQ,qBAAW,SAAS,SAAS;AAC3B,gBAAI;AACJ,oBAAQ,QAAQ,aAAa,aAAa;AAC1C,mBAAQ,SAAS,QAAS,UAAU;AAAA,UACtC;AAEA,UAAAA,OAAM,eAAe,SAASO,IAAG;AAC/B,gBAAI,QAAQ,MAAM,UAAU,SAAS,QAAQ,KAAK;AAClD,sBAAU;AACV,gBAAI,CAAC,SAAS,OAAO,GAAG;AACtB,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,KAAK,SAAS,aAAa,GAAG;AACjC,mBAAK,SAAS,cAAc;AAC5B,qBAAO;AAAA,YACT;AACA,gBAAI,kBAAkB,OAAO,GAAG;AAC9B,mBAAK,SAAS,cAAc;AAC5B,qBAAO;AAAA,YACT;AACA,8BAAkB,QAAQ,aAAa,uBAAuB;AAC9D,uBAAW,QAAQ,aAAa,WAAW,KAAK;AAChD,gBAAIF,SAAQ,SAASL,OAAM,kBAAkB,GAAG;AAC9C,uBAASW,SAAQ,SAAS,mBAAmB;AAC7C,uBAASA,SAAQ,SAAS,8BAA8B,KAAK,QAAQ;AACrE,oBAAMA,SAAQ,SAAS,8BAA8B,KAAK,QAAQ,aAAa,QAAQ,KAAK,SAAS;AACrG,kBAAI,OAAO,YAAY,MAAM,OAAO;AAClC,sBAAM,IAAI,QAAQ,SAAS,EAAE;AAAA,cAC/B;AACA,kBAAI,QAAQ,YAAY,uBAAuB;AAC7C,uBAAO,IAAI,SAAS,OAAO;AAC3B,oBAAI,UAAU,MAAM;AAClB,uBAAK,OAAO,OAAO,MAAM,OAAO,KAAK;AAAA,gBACvC;AAAA,cACF,OAAO;AACL,uBAAO,iBAAiB,SAAS,MAAM;AAAA,cACzC;AACA,sBAAQ,SAAS,qBAAqB,IAAI;AAC1C,sBAAQ,SAAS,gCAAgC,IAAI;AACrD,sBAAQ,SAAS,gCAAgC,IAAI;AAAA,YACvD,WAAWN,SAAQ,SAASL,OAAM,mBAAmB,KAAKK,SAAQ,SAASL,OAAM,mBAAmB,GAAG;AACrG,uBAAS,QAAQ,aAAa,aAAa;AAC3C,oBAAM,QAAQ,aAAa,UAAU;AACrC,qBAAO,iBAAiB,SAAS,QAAQ,aAAa,aAAa,CAAC;AAAA,YACtE,OAAO;AACL,uBAAS,QAAQ,aAAa,aAAa;AAC3C,oBAAMA,OAAM,KAAK,OAAO;AACxB,qBAAO,QAAQ,aAAa,aAAa;AAAA,YAC3C;AACA,iBAAK;AAAA,cACH,MAAM,UAAU;AAAA,cAChB;AAAA,cACA;AAAA,cACA;AAAA,cACA,YAAY,SAAS,KAAK,SAAS;AACjC,oBAAI,KAAK,SAAS,mBAAmB,CAAC,KAAK,OAAO,CAAC,GAAG;AACpD,yBAAO,KAAK,SAAS,aAAa,CAAC,GAAG,CAAC;AAAA,gBACzC,OAAO;AACL,uBAAK,SAAS,cAAc;AAC5B,yBAAO;AAAA,gBACT;AAAA,cACF;AAAA,cACA,SAAS,WAAW;AAClB,oBAAI;AACJ,uBAAO,KAAK,UAAU,SAAS,MAAM,KAAK,WAAW,CAAC,IAAI,CAAC;AAC3D,uBAAO,KAAK,SAAS,gBAAgB,IAAI;AAAA,cAC3C;AAAA,cACA,OAAO,WAAW;AAChB,oBAAI;AACJ,uBAAO,KAAK,UAAU,SAAS,MAAM,KAAK,WAAW,CAAC,IAAI,CAAC;AAC3D,uBAAO,KAAK,SAAS,cAAc,IAAI;AAAA,cACzC;AAAA,cACA,UAAU,WAAW;AACnB,oBAAI;AACJ,uBAAO,KAAK,UAAU,SAAS,MAAM,KAAK,WAAW,CAAC,IAAI,CAAC;AAC3D,uBAAO,KAAK,SAAS,iBAAiB,IAAI;AAAA,cAC5C;AAAA,cACA,aAAa,cAAc,GAAG;AAAA,cAC9B,iBAAkB,mBAAmB,QAAS,oBAAoB;AAAA,YACpE,CAAC;AACD,mBAAO,eAAeO,EAAC;AAAA,UACzB;AAEA,UAAAP,OAAM,wBAAwB,SAASO,IAAG;AACxC,gBAAI,QAAQ;AACZ,qBAAS;AACT,mBAAO,OAAO;AACd,gBAAI,CAAC,MAAM;AACT;AAAA,YACF;AACA,gBAAI,OAAO,MAAM;AACf,sBAAQ,MAAM,qBAAqB;AAAA,gBACjC,MAAM,OAAO;AAAA,gBACb,OAAO,OAAO;AAAA,cAChB,CAAC;AAAA,YACH;AACA,oBAAQ,MAAM,6BAA6B,OAAO,cAAc;AAChE,oBAAQ,MAAM,gCAAgC,OAAO,aAAa,YAAY,CAAC;AAC/E,mBAAO,QAAQ,MAAM,gCAAgC,OAAO,aAAa,YAAY,CAAC;AAAA,UACxF;AAEA,UAAAP,OAAM,4BAA4B,SAASO,IAAG;AAC5C,gBAAI,MAAM,wBAAwB,MAAM,WAAW,QAAQ;AAC3D,mBAAO;AACP,sBAAU,KAAK,aAAa,aAAa,KAAK,OAAO,YAAY;AACjE,mBAAO,KAAK,aAAa,aAAa;AACtC,wBAAYA,GAAE,WAAWA,GAAE;AAC3B,qCAAyB,aAAa,WAAW,SAAS,CAAC;AAC3D,mCAAwBA,GAAE,UAAU,QAASA,GAAE,WAAW;AAC1D,gBAAI,wBAAwB,wBAAwB;AAClD,qBAAOA,GAAE,yBAAyB;AAAA,YACpC;AAAA,UACF;AAAA,QAEF,GAAG,KAAK,IAAI;AACZ,SAAC,WAAW;AACV,cAAIJ,IAAG,gBAAgB,UAAU,gBAAgB,eAAe,MAAM,uBAAuBQ,UAAS,eAAe,uBAAuB,cAAc,cAAc,cAAc,2BAA2B;AAEjN,iBAAOX,OAAM,MAAM,WAAWA,OAAM,UAAUW,WAAUX,OAAM,SAASG,KAAIH,OAAM,GAAG,oBAAoBA,OAAM,mBAAmB,iBAAiBA,OAAM,gBAAgB,eAAeA,OAAM,cAAc,gBAAgBA,OAAM,eAAe,iBAAiBA,OAAM,gBAAgB,wBAAwBA,OAAM,uBAAuB,gBAAgBA,OAAM,eAAe,4BAA4BA,OAAM,2BAA2B,eAAeA,OAAM,cAAc,wBAAwBA,OAAM,uBAAuB,eAAeA,OAAM;AAE3hB,cAAK,OAAO,WAAW,eAAe,WAAW,QAAU,OAAO,QAAQ,MAAO;AAC/E,gBAAI,OAAO,OAAO;AAChB,oBAAM,IAAI,MAAM,gEAAgE;AAAA,YAClF;AACA,mBAAO,QAAQA;AACf,mBAAO,cAAc,SAAS,SAAS,iBAAiB,KAAK;AAC3D,kBAAI,CAAC,QAAQ,aAAa;AACxB,uBAAO,eAAe,GAAG;AAAA,cAC3B;AAAA,YACF,CAAC;AAAA,UACH;AAEA,UAAAA,OAAM,QAAQ,WAAW;AACvB,gBAAI,OAAO,eAAe;AACxB,oBAAM,IAAI,MAAM,oCAAoC;AAAA,YACtD;AACA,mBAAO,iBAAiB,YAAY,WAAW;AAC7C,cAAAG,GAAEH,OAAM,kBAAkB,EAAE,QAAQ,SAAS,IAAI;AAC/C,oBAAIW,SAAQ,IAAI,cAAc,GAAG;AAC/B,yBAAO,cAAc,EAAE;AAAA,gBACzB;AAAA,cACF,CAAC;AACD,qBAAOR,GAAEH,OAAM,mBAAmB,EAAE,QAAQ,SAAS,IAAI;AACvD,oBAAIW,SAAQ,IAAI,cAAc,GAAG;AAC/B,yBAAO,cAAc,EAAE;AAAA,gBACzB;AAAA,cACF,CAAC;AAAA,YACH,CAAC;AACD,qBAAS,UAAUX,OAAM,qBAAqB,iBAAiB,aAAa;AAC5E,qBAAS,UAAUA,OAAM,qBAAqB,gBAAgB,aAAa;AAC3E,qBAAS,UAAUA,OAAM,uBAAuB,iBAAiB,aAAa;AAC9E,qBAAS,UAAUA,OAAM,uBAAuB,gBAAgB,aAAa;AAC7E,qBAAS,UAAUA,OAAM,mBAAmB,SAAS,yBAAyB;AAC9E,qBAAS,UAAUA,OAAM,mBAAmB,SAAS,qBAAqB;AAC1E,qBAAS,UAAUA,OAAM,mBAAmB,SAAS,aAAa;AAClE,qBAAS,UAAUA,OAAM,mBAAmB,SAAS,cAAc;AACnE,qBAAS,UAAUA,OAAM,mBAAmB,SAAS,YAAY;AACjE,qBAAS,UAAUA,OAAM,mBAAmB,SAAS,YAAY;AACjE,qBAAS,UAAUA,OAAM,qBAAqB,SAAS,yBAAyB;AAChF,qBAAS,UAAUA,OAAM,qBAAqB,SAAS,qBAAqB;AAC5E,qBAAS,UAAUA,OAAM,qBAAqB,SAAS,aAAa;AACpE,qBAAS,UAAUA,OAAM,qBAAqB,SAAS,cAAc;AACrE,qBAAS,UAAUA,OAAM,qBAAqB,SAAS,YAAY;AACnE,qBAAS,UAAUA,OAAM,qBAAqB,UAAU,qBAAqB;AAC7E,qBAAS,UAAUA,OAAM,qBAAqB,UAAU,aAAa;AACrE,qBAAS,UAAUA,OAAM,qBAAqB,UAAU,YAAY;AACpE,qBAAS,UAAUA,OAAM,oBAAoB,UAAU,qBAAqB;AAC5E,qBAAS,UAAUA,OAAM,oBAAoB,UAAU,aAAa;AACpE,qBAAS,UAAUA,OAAM,oBAAoB,UAAU,YAAY;AACnE,qBAAS,UAAUA,OAAM,oBAAoB,UAAU,SAASO,IAAG;AACjE,qBAAO,WAAY,WAAW;AAC5B,uBAAO,eAAeA,EAAC;AAAA,cACzB,GAAI,EAAE;AAAA,YACR,CAAC;AACD,qBAAS,UAAUP,OAAM,oBAAoB,aAAa,cAAc;AACxE,qBAAS,UAAUA,OAAM,oBAAoB,iBAAiB,aAAa;AAC3E,qBAAS,UAAUA,OAAM,wBAAwB,SAAS,yBAAyB;AACnF,qBAAS,UAAUA,OAAM,wBAAwB,SAAS,qBAAqB;AAC/E,qBAAS,UAAUA,OAAM,wBAAwB,SAAS,aAAa;AACvE,qBAAS,UAAUA,OAAM,wBAAwB,SAAS,qBAAqB;AAC/E,qBAAS,iBAAiB,oBAAoB,iBAAiB;AAC/D,qBAAS,iBAAiB,oBAAoB,YAAY;AAC1D,mBAAO,OAAO,gBAAgB;AAAA,UAChC;AAEA,cAAI,OAAO,UAAUA,UAAS,KAAK,UAAU,sBAAsB,GAAG;AACpE,YAAAA,OAAM,MAAM;AAAA,UACd;AAAA,QAEF,GAAG,KAAK,IAAI;AAAA,MACd,GAAG,KAAK,IAAI;AAEZ,UAAI,OAAO,WAAW,YAAY,OAAO,SAAS;AAChD,eAAO,UAAUA;AAAA,MACnB,WAAW,OAAO,WAAW,cAAc,OAAO,KAAK;AACrD,eAAOA,MAAK;AAAA,MACd;AAAA,IACF,GAAG,KAAK,OAAI;AAAA;AAAA;;;ACxwBZ;AAAA;AAAA;AAYA,KAAC,SAAUY,UAAS;AAChB;AACA,UAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAE5C,eAAO,CAAC,QAAQ,GAAGA,QAAO;AAAA,MAC9B,WAAW,OAAO,YAAY,YAAY,OAAO,cAAY,YAAY;AAErE,QAAAA,SAAQ,gBAAiB;AAAA,MAC7B,OAAO;AAEH,QAAAA,SAAQ,MAAM;AAAA,MAClB;AAAA,IACJ,GAAE,SAAUC,IAAG;AACX;AAEA,UACI,QAAS,2BAAY;AACjB,eAAO;AAAA,UACH,kBAAkB,SAAU,OAAO;AAC/B,mBAAO,MAAM,QAAQ,uBAAuB,MAAM;AAAA,UACtD;AAAA,UACA,YAAY,SAAU,gBAAgB;AAClC,gBAAIC,OAAM,SAAS,cAAc,KAAK;AACtC,YAAAA,KAAI,YAAY;AAChB,YAAAA,KAAI,MAAM,WAAW;AACrB,YAAAA,KAAI,MAAM,UAAU;AACpB,mBAAOA;AAAA,UACX;AAAA,QACJ;AAAA,MACJ,EAAE,GAEF,OAAO;AAAA,QACH,KAAK;AAAA,QACL,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,MAAM;AAAA,MACV,GAEAC,QAAOF,GAAE;AAEb,eAAS,aAAa,IAAI,SAAS;AAC/B,YAAI,OAAO;AAGX,aAAK,UAAU;AACf,aAAK,KAAKA,GAAE,EAAE;AACd,aAAK,cAAc,CAAC;AACpB,aAAK,aAAa,CAAC;AACnB,aAAK,gBAAgB;AACrB,aAAK,eAAe,KAAK,QAAQ;AACjC,aAAK,YAAY;AACjB,aAAK,iBAAiB,CAAC;AACvB,aAAK,kBAAkB;AACvB,aAAK,WAAW;AAChB,aAAK,UAAU;AACf,aAAK,uBAAuB;AAC5B,aAAK,yBAAyB;AAC9B,aAAK,UAAUA,GAAE,OAAO,MAAM,CAAC,GAAG,aAAa,UAAU,OAAO;AAChE,aAAK,UAAU;AAAA,UACX,UAAU;AAAA,UACV,YAAY;AAAA,QAChB;AACA,aAAK,OAAO;AACZ,aAAK,YAAY;AACjB,aAAK,YAAY;AAGjB,aAAK,WAAW;AAChB,aAAK,WAAW,OAAO;AAAA,MAC3B;AAEA,mBAAa,QAAQ;AAErB,MAAAA,GAAE,eAAe;AAEjB,mBAAa,WAAW;AAAA,QAChB,cAAc,CAAC;AAAA,QACf,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,QAAQ,CAAC;AAAA,QACT,cAAc;AAAA,QACd,aAAa;AAAA,QACb,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,SAAS;AAAA,QACT,eAAeE;AAAA,QACf,kBAAkBA;AAAA,QAClB,eAAeA;AAAA,QACf,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,2BAA2B;AAAA,QAC3B,mBAAmB;AAAA,QACnB,cAAc;AAAA,QACd,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,wBAAwB;AAAA,QACxB,oBAAoB;AAAA,QACpB,aAAa;AAAA,QACb,kBAAkB;AAAA,MAC1B;AAEA,eAAS,cAAc,YAAY,eAAe,gBAAgB;AAC9D,eAAO,WAAW,MAAM,YAAY,EAAE,QAAQ,cAAc,MAAM;AAAA,MACtE;AAAC;AAED,eAAS,iBAAiB,UAAU;AAChC,eAAO,OAAO,aAAa,WAAWF,GAAE,UAAU,QAAQ,IAAI;AAAA,MAClE;AAAC;AAED,eAAS,cAAc,YAAY,cAAc;AAE7C,YAAI,CAAC,cAAc;AACf,iBAAO,WAAW;AAAA,QACtB;AAEA,YAAI,UAAU,MAAM,MAAM,iBAAiB,YAAY,IAAI;AAE3D,eAAO,WAAW,MACb,QAAQ,IAAI,OAAO,SAAS,IAAI,GAAG,qBAAsB,EACzD,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ,EACtB,QAAQ,wBAAwB,MAAM;AAAA,MAC/C;AAAC;AAED,eAAS,aAAa,YAAY,UAAU;AACxC,eAAO,qCAAqC,WAAW;AAAA,MAC3D;AAAC;AAED,mBAAa,YAAY;AAAA,QAErB,YAAY,WAAY;AACpB,cAAI,OAAO,MACP,qBAAqB,MAAM,KAAK,QAAQ,YACxC,WAAW,KAAK,QAAQ,UACxB,UAAU,KAAK,SACf;AAEJ,eAAK,QAAQ,aAAa,gBAAgB,KAAK;AAG/C,eAAK,yBAAyBA,GAAE,gDAAgD,EACjD,KAAK,KAAK,QAAQ,kBAAkB,EAAE,IAAI,CAAC;AAE1E,eAAK,uBAAuB,aAAa,MAAM,WAAW,QAAQ,cAAc;AAEhF,sBAAYA,GAAE,KAAK,oBAAoB;AAEvC,oBAAU,SAAS,QAAQ,YAAY,MAAM;AAG7C,cAAI,QAAQ,UAAU,QAAQ;AAC1B,sBAAU,IAAI,SAAS,QAAQ,KAAK;AAAA,UACxC;AAGA,oBAAU,GAAG,0BAA0B,oBAAoB,WAAY;AACnE,iBAAK,SAASA,GAAE,IAAI,EAAE,KAAK,OAAO,CAAC;AAAA,UACvC,CAAC;AAGD,oBAAU,GAAG,yBAAyB,WAAY;AAC9C,iBAAK,gBAAgB;AACrB,sBAAU,SAAS,MAAM,QAAQ,EAAE,YAAY,QAAQ;AAAA,UAC3D,CAAC;AAGD,oBAAU,GAAG,sBAAsB,oBAAoB,WAAY;AAC/D,iBAAK,OAAOA,GAAE,IAAI,EAAE,KAAK,OAAO,CAAC;AAAA,UACrC,CAAC;AAED,oBAAU,GAAG,sBAAsB,WAAY;AAC3C,yBAAa,KAAK,aAAa;AAAA,UACnC,CAAC;AAED,eAAK,qBAAqB,WAAY;AAClC,gBAAI,KAAK,SAAS;AACd,mBAAK,YAAY;AAAA,YACrB;AAAA,UACJ;AAEA,UAAAA,GAAE,MAAM,EAAE,GAAG,uBAAuB,KAAK,kBAAkB;AAE3D,eAAK,GAAG,GAAG,wBAAwB,SAAUG,IAAG;AAAE,iBAAK,WAAWA,EAAC;AAAA,UAAG,CAAC;AACvE,eAAK,GAAG,GAAG,sBAAsB,SAAUA,IAAG;AAAE,iBAAK,QAAQA,EAAC;AAAA,UAAG,CAAC;AAClE,eAAK,GAAG,GAAG,qBAAqB,WAAY;AAAE,iBAAK,OAAO;AAAA,UAAG,CAAC;AAC9D,eAAK,GAAG,GAAG,sBAAsB,WAAY;AAAE,iBAAK,QAAQ;AAAA,UAAG,CAAC;AAChE,eAAK,GAAG,GAAG,uBAAuB,SAAUA,IAAG;AAAE,iBAAK,QAAQA,EAAC;AAAA,UAAG,CAAC;AACnE,eAAK,GAAG,GAAG,sBAAsB,SAAUA,IAAG;AAAE,iBAAK,QAAQA,EAAC;AAAA,UAAG,CAAC;AAAA,QACtE;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,OAAO;AAEX,cAAI,KAAK,UAAU;AACf;AAAA,UACJ;AAEA,eAAK,YAAY;AAEjB,cAAI,KAAK,GAAG,IAAI,EAAE,UAAU,KAAK,QAAQ,UAAU;AAC/C,iBAAK,cAAc;AAAA,UACvB;AAAA,QACJ;AAAA,QAEA,QAAQ,WAAY;AAChB,cAAI,OAAO,MACP,UAAU,KAAK,SACf,QAAQ,KAAK,GAAG,IAAI,GACpBC,SAAQ,KAAK,SAAS,KAAK;AAI/B,eAAK,gBAAgB,WAAW,WAAY;AACxC,iBAAK,KAAK;AAEV,gBAAI,KAAK,aAAa,KAAK,iBAAiBA,QAAO;AAC/C,eAAC,QAAQ,yBAAyBJ,GAAE,MAAM,KAAK,KAAK,OAAO;AAAA,YAC/D;AAAA,UACJ,GAAG,GAAG;AAAA,QACV;AAAA,QAEA,WAAW,WAAY;AACnB,cAAI,OAAO;AACX,cAAI,KAAK,gBAAgB;AACrB,iBAAK,eAAe,MAAM;AAC1B,iBAAK,iBAAiB;AAAA,UAC1B;AAAA,QACJ;AAAA,QAEA,YAAY,SAAU,iBAAiB;AACnC,cAAI,OAAO,MACP,UAAUA,GAAE,OAAO,CAAC,GAAG,KAAK,SAAS,eAAe;AAExD,eAAK,UAAU,MAAM,QAAQ,QAAQ,MAAM;AAE3C,cAAI,KAAK,SAAS;AACd,oBAAQ,SAAS,KAAK,wBAAwB,QAAQ,MAAM;AAAA,UAChE;AAEA,kBAAQ,cAAc,KAAK,oBAAoB,QAAQ,aAAa,QAAQ;AAG5E,UAAAA,GAAE,KAAK,oBAAoB,EAAE,IAAI;AAAA,YAC7B,cAAc,QAAQ,YAAY;AAAA,YAClC,SAAS,QAAQ,QAAQ;AAAA,YACzB,WAAW,QAAQ;AAAA,UACvB,CAAC;AAED,eAAK,UAAU;AAAA,QACnB;AAAA,QAGA,YAAY,WAAY;AACpB,eAAK,iBAAiB,CAAC;AACvB,eAAK,aAAa,CAAC;AAAA,QACvB;AAAA,QAEA,OAAO,WAAY;AACf,eAAK,WAAW;AAChB,eAAK,eAAe;AACpB,eAAK,cAAc,CAAC;AAAA,QACxB;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,OAAO;AACX,eAAK,WAAW;AAChB,uBAAa,KAAK,eAAe;AACjC,eAAK,UAAU;AAAA,QACnB;AAAA,QAEA,QAAQ,WAAY;AAChB,eAAK,WAAW;AAAA,QACpB;AAAA,QAEA,aAAa,WAAY;AAGrB,cAAI,OAAO,MACP,aAAaA,GAAE,KAAK,oBAAoB,GACxC,kBAAkB,WAAW,OAAO,EAAE,IAAI,CAAC;AAG/C,cAAI,oBAAoB,SAAS,QAAQ,CAAC,KAAK,QAAQ,kBAAkB;AACrE;AAAA,UACJ;AAGA,cAAI,cAAc,KAAK,QAAQ,aAC3B,kBAAkB,WAAW,YAAY,GACzC,SAAS,KAAK,GAAG,YAAY,GAC7B,SAAS,KAAK,GAAG,OAAO,GACxB,SAAS,EAAE,OAAO,OAAO,KAAK,QAAQ,OAAO,KAAK;AAEtD,cAAI,gBAAgB,QAAQ;AACxB,gBAAI,iBAAiBA,GAAE,MAAM,EAAE,OAAO,GAClC,YAAYA,GAAE,MAAM,EAAE,UAAU,GAChC,cAAc,CAAC,YAAY,OAAO,MAAM,iBACxC,iBAAiB,YAAY,kBAAkB,OAAO,MAAM,SAAS;AAEzE,0BAAe,KAAK,IAAI,aAAa,cAAc,MAAM,cAAe,QAAQ;AAAA,UACpF;AAEA,cAAI,gBAAgB,OAAO;AACvB,mBAAO,OAAO,CAAC;AAAA,UACnB,OAAO;AACH,mBAAO,OAAO;AAAA,UAClB;AAIA,cAAG,oBAAoB,SAAS,MAAM;AAClC,gBAAI,UAAU,WAAW,IAAI,SAAS,GAClC;AAEA,gBAAI,CAAC,KAAK,SAAQ;AACd,yBAAW,IAAI,WAAW,CAAC,EAAE,KAAK;AAAA,YACtC;AAEJ,+BAAmB,WAAW,aAAa,EAAE,OAAO;AACpD,mBAAO,OAAO,iBAAiB;AAC/B,mBAAO,OAAO,gBAAgB;AAC9B,mBAAO,QAAQ,iBAAiB;AAEhC,gBAAI,CAAC,KAAK,SAAQ;AACd,yBAAW,IAAI,WAAW,OAAO,EAAE,KAAK;AAAA,YAC5C;AAAA,UACJ;AAEA,cAAI,KAAK,QAAQ,UAAU,QAAQ;AAC/B,mBAAO,QAAQ,KAAK,GAAG,WAAW,IAAI;AAAA,UAC1C;AAEA,qBAAW,IAAI,MAAM;AAAA,QACzB;AAAA,QAEA,eAAe,WAAY;AACvB,cAAI,OAAO,MACP,YAAY,KAAK,GAAG,IAAI,EAAE,QAC1B,iBAAiB,KAAK,QAAQ,gBAC9BK;AAEJ,cAAI,OAAO,mBAAmB,UAAU;AACpC,mBAAO,mBAAmB;AAAA,UAC9B;AACA,cAAI,SAAS,WAAW;AACpB,YAAAA,SAAQ,SAAS,UAAU,YAAY;AACvC,YAAAA,OAAM,UAAU,aAAa,CAAC,SAAS;AACvC,mBAAO,cAAcA,OAAM,KAAK;AAAA,UACpC;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,YAAY,SAAUF,IAAG;AACrB,cAAI,OAAO;AAGX,cAAI,CAAC,KAAK,YAAY,CAAC,KAAK,WAAWA,GAAE,UAAU,KAAK,QAAQ,KAAK,cAAc;AAC/E,iBAAK,QAAQ;AACb;AAAA,UACJ;AAEA,cAAI,KAAK,YAAY,CAAC,KAAK,SAAS;AAChC;AAAA,UACJ;AAEA,kBAAQA,GAAE,OAAO;AAAA,YACb,KAAK,KAAK;AACN,mBAAK,GAAG,IAAI,KAAK,YAAY;AAC7B,mBAAK,KAAK;AACV;AAAA,YACJ,KAAK,KAAK;AACN,kBAAI,KAAK,QAAQ,KAAK,QAAQ,UAAU,KAAK,cAAc,GAAG;AAC1D,qBAAK,WAAW;AAChB;AAAA,cACJ;AACA;AAAA,YACJ,KAAK,KAAK;AACN,kBAAI,KAAK,QAAQ,KAAK,QAAQ,QAAQ;AAClC,qBAAK,WAAW;AAChB;AAAA,cACJ;AACA,kBAAI,KAAK,kBAAkB,IAAI;AAC3B,qBAAK,KAAK;AACV;AAAA,cACJ;AACA,mBAAK,OAAO,KAAK,aAAa;AAC9B,kBAAI,KAAK,QAAQ,gBAAgB,OAAO;AACpC;AAAA,cACJ;AACA;AAAA,YACJ,KAAK,KAAK;AACN,kBAAI,KAAK,kBAAkB,IAAI;AAC3B,qBAAK,KAAK;AACV;AAAA,cACJ;AACA,mBAAK,OAAO,KAAK,aAAa;AAC9B;AAAA,YACJ,KAAK,KAAK;AACN,mBAAK,OAAO;AACZ;AAAA,YACJ,KAAK,KAAK;AACN,mBAAK,SAAS;AACd;AAAA,YACJ;AACI;AAAA,UACR;AAGA,UAAAA,GAAE,yBAAyB;AAC3B,UAAAA,GAAE,eAAe;AAAA,QACrB;AAAA,QAEA,SAAS,SAAUA,IAAG;AAClB,cAAI,OAAO;AAEX,cAAI,KAAK,UAAU;AACf;AAAA,UACJ;AAEA,kBAAQA,GAAE,OAAO;AAAA,YACb,KAAK,KAAK;AAAA,YACV,KAAK,KAAK;AACN;AAAA,UACR;AAEA,uBAAa,KAAK,eAAe;AAEjC,cAAI,KAAK,iBAAiB,KAAK,GAAG,IAAI,GAAG;AACrC,iBAAK,aAAa;AAClB,gBAAI,KAAK,QAAQ,iBAAiB,GAAG;AAEjC,mBAAK,kBAAkB,WAAW,WAAY;AAC1C,qBAAK,cAAc;AAAA,cACvB,GAAG,KAAK,QAAQ,cAAc;AAAA,YAClC,OAAO;AACH,mBAAK,cAAc;AAAA,YACvB;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,eAAe,WAAY;AACvB,cAAI,KAAK,mBAAmB;AACxB,iBAAK,oBAAoB;AACzB;AAAA,UACJ;AAEA,cAAI,OAAO,MACP,UAAU,KAAK,SACf,QAAQ,KAAK,GAAG,IAAI,GACpBC,SAAQ,KAAK,SAAS,KAAK;AAE/B,cAAI,KAAK,aAAa,KAAK,iBAAiBA,QAAO;AAC/C,iBAAK,YAAY;AACjB,aAAC,QAAQ,yBAAyBJ,GAAE,MAAM,KAAK,KAAK,OAAO;AAAA,UAC/D;AAEA,uBAAa,KAAK,eAAe;AACjC,eAAK,eAAe;AACpB,eAAK,gBAAgB;AAGrB,cAAI,QAAQ,6BAA6B,KAAK,aAAaI,MAAK,GAAG;AAC/D,iBAAK,OAAO,CAAC;AACb;AAAA,UACJ;AAEA,cAAIA,OAAM,SAAS,QAAQ,UAAU;AACjC,iBAAK,KAAK;AAAA,UACd,OAAO;AACH,iBAAK,eAAeA,MAAK;AAAA,UAC7B;AAAA,QACJ;AAAA,QAEA,cAAc,SAAUA,QAAO;AAC3B,cAAI,cAAc,KAAK;AAEvB,iBAAQ,YAAY,WAAW,KAAK,YAAY,CAAC,EAAE,MAAM,YAAY,MAAMA,OAAM,YAAY;AAAA,QACjG;AAAA,QAEA,UAAU,SAAU,OAAO;AACvB,cAAI,YAAY,KAAK,QAAQ,WACzB;AAEJ,cAAI,CAAC,WAAW;AACZ,mBAAO;AAAA,UACX;AACA,kBAAQ,MAAM,MAAM,SAAS;AAC7B,iBAAOJ,GAAE,KAAK,MAAM,MAAM,SAAS,CAAC,CAAC;AAAA,QACzC;AAAA,QAEA,qBAAqB,SAAUI,QAAO;AAClC,cAAI,OAAO,MACP,UAAU,KAAK,SACf,iBAAiBA,OAAM,YAAY,GACnCE,UAAS,QAAQ,cACjB,QAAQ,SAAS,QAAQ,aAAa,EAAE,GACxC;AAEJ,iBAAO;AAAA,YACH,aAAaN,GAAE,KAAK,QAAQ,QAAQ,SAAU,YAAY;AACtD,qBAAOM,QAAO,YAAYF,QAAO,cAAc;AAAA,YACnD,CAAC;AAAA,UACL;AAEA,cAAI,SAAS,KAAK,YAAY,SAAS,OAAO;AAC1C,iBAAK,cAAc,KAAK,YAAY,MAAM,GAAG,KAAK;AAAA,UACtD;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,gBAAgB,SAAUG,IAAG;AACzB,cAAI,UACA,OAAO,MACP,UAAU,KAAK,SACf,aAAa,QAAQ,YACrB,QACA,UACA;AAEJ,kBAAQ,OAAO,QAAQ,SAAS,IAAIA;AAEpC,cAAI,QAAQ,cAAc,KAAK,KAAK,SAAS,QAAQ,MAAM,MAAM,OAAO;AACpE;AAAA,UACJ;AAEA,mBAAS,QAAQ,eAAe,OAAO,QAAQ;AAE/C,cAAIP,GAAE,WAAW,QAAQ,MAAM,GAAE;AAC7B,oBAAQ,OAAOO,IAAG,SAAU,MAAM;AAC9B,mBAAK,cAAc,KAAK;AACxB,mBAAK,QAAQ;AACb,sBAAQ,iBAAiB,KAAK,KAAK,SAASA,IAAG,KAAK,WAAW;AAAA,YACnE,CAAC;AACD;AAAA,UACJ;AAEA,cAAI,KAAK,SAAS;AACd,uBAAW,KAAK,oBAAoBA,EAAC;AAAA,UACzC,OAAO;AACH,gBAAIP,GAAE,WAAW,UAAU,GAAG;AAC1B,2BAAa,WAAW,KAAK,KAAK,SAASO,EAAC;AAAA,YAChD;AACA,uBAAW,aAAa,MAAMP,GAAE,MAAM,UAAU,CAAC,CAAC;AAClD,uBAAW,KAAK,eAAe,QAAQ;AAAA,UAC3C;AAEA,cAAI,YAAY,MAAM,QAAQ,SAAS,WAAW,GAAG;AACjD,iBAAK,cAAc,SAAS;AAC5B,iBAAK,QAAQ;AACb,oBAAQ,iBAAiB,KAAK,KAAK,SAASO,IAAG,SAAS,WAAW;AAAA,UACvE,WAAW,CAAC,KAAK,WAAWA,EAAC,GAAG;AAC5B,iBAAK,UAAU;AAEf,2BAAe;AAAA,cACX,KAAK;AAAA,cACL,MAAM;AAAA,cACN,MAAM,QAAQ;AAAA,cACd,UAAU,QAAQ;AAAA,YACtB;AAEA,YAAAP,GAAE,OAAO,cAAc,QAAQ,YAAY;AAE3C,iBAAK,iBAAiBA,GAAE,KAAK,YAAY,EAAE,KAAK,SAAU,MAAM;AAC5D,kBAAI;AACJ,mBAAK,iBAAiB;AACtB,uBAAS,QAAQ,gBAAgB,MAAMO,EAAC;AACxC,mBAAK,gBAAgB,QAAQA,IAAG,QAAQ;AACxC,sBAAQ,iBAAiB,KAAK,KAAK,SAASA,IAAG,OAAO,WAAW;AAAA,YACrE,CAAC,EAAE,KAAK,SAAU,OAAO,YAAY,aAAa;AAC9C,sBAAQ,cAAc,KAAK,KAAK,SAASA,IAAG,OAAO,YAAY,WAAW;AAAA,YAC9E,CAAC;AAAA,UACL,OAAO;AACH,oBAAQ,iBAAiB,KAAK,KAAK,SAASA,IAAG,CAAC,CAAC;AAAA,UACrD;AAAA,QACJ;AAAA,QAEA,YAAY,SAAUA,IAAG;AACrB,cAAI,CAAC,KAAK,QAAQ,mBAAkB;AAChC,mBAAO;AAAA,UACX;AAEA,cAAI,aAAa,KAAK,YAClBC,KAAI,WAAW;AAEnB,iBAAOA,MAAK;AACR,gBAAID,GAAE,QAAQ,WAAWC,EAAC,CAAC,MAAM,GAAG;AAChC,qBAAO;AAAA,YACX;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,MAAM,WAAY;AACd,cAAI,OAAO,MACP,YAAYR,GAAE,KAAK,oBAAoB;AAE3C,cAAIA,GAAE,WAAW,KAAK,QAAQ,MAAM,KAAK,KAAK,SAAS;AACnD,iBAAK,QAAQ,OAAO,KAAK,KAAK,SAAS,SAAS;AAAA,UACpD;AAEA,eAAK,UAAU;AACf,eAAK,gBAAgB;AACrB,uBAAa,KAAK,eAAe;AACjC,UAAAA,GAAE,KAAK,oBAAoB,EAAE,KAAK;AAClC,eAAK,WAAW,IAAI;AAAA,QACxB;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,CAAC,KAAK,YAAY,QAAQ;AAC1B,gBAAI,KAAK,QAAQ,wBAAwB;AACrC,mBAAK,cAAc;AAAA,YACvB,OAAO;AACH,mBAAK,KAAK;AAAA,YACd;AACA;AAAA,UACJ;AAEA,cAAI,OAAO,MACP,UAAU,KAAK,SACfS,WAAU,QAAQ,SAClB,eAAe,QAAQ,cACvB,QAAQ,KAAK,SAAS,KAAK,YAAY,GACvC,YAAY,KAAK,QAAQ,YACzB,gBAAgB,KAAK,QAAQ,UAC7B,YAAYT,GAAE,KAAK,oBAAoB,GACvC,yBAAyBA,GAAE,KAAK,sBAAsB,GACtD,eAAe,QAAQ,cACvBU,QAAO,IACP,UACA,cAAc,SAAU,YAAYC,QAAO;AACnC,gBAAI,kBAAkB,WAAW,KAAKF,QAAO;AAE7C,gBAAI,aAAa,iBAAgB;AAC7B,qBAAO;AAAA,YACX;AAEA,uBAAW;AAEX,mBAAO,QAAQ,YAAY,YAAY,QAAQ;AAAA,UACnD;AAER,cAAI,QAAQ,6BAA6B,KAAK,aAAa,KAAK,GAAG;AAC/D,iBAAK,OAAO,CAAC;AACb;AAAA,UACJ;AAGA,UAAAT,GAAE,KAAK,KAAK,aAAa,SAAUQ,IAAG,YAAY;AAC9C,gBAAIC,UAAQ;AACR,cAAAC,SAAQ,YAAY,YAAY,OAAOF,EAAC;AAAA,YAC5C;AAEA,YAAAE,SAAQ,iBAAiB,YAAY,mBAAmBF,KAAI,OAAO,aAAa,YAAY,OAAOA,EAAC,IAAI;AAAA,UAC5G,CAAC;AAED,eAAK,qBAAqB;AAE1B,iCAAuB,OAAO;AAC9B,oBAAU,KAAKE,KAAI;AAEnB,cAAIV,GAAE,WAAW,YAAY,GAAG;AAC5B,yBAAa,KAAK,KAAK,SAAS,WAAW,KAAK,WAAW;AAAA,UAC/D;AAEA,eAAK,YAAY;AACjB,oBAAU,KAAK;AAGf,cAAI,QAAQ,iBAAiB;AACzB,iBAAK,gBAAgB;AACrB,sBAAU,UAAU,CAAC;AACrB,sBAAU,SAAS,MAAM,SAAS,EAAE,MAAM,EAAE,SAAS,aAAa;AAAA,UACtE;AAEA,eAAK,UAAU;AACf,eAAK,aAAa;AAAA,QACtB;AAAA,QAEA,eAAe,WAAW;AACrB,cAAI,OAAO,MACP,eAAe,KAAK,QAAQ,cAC5B,YAAYA,GAAE,KAAK,oBAAoB,GACvC,yBAAyBA,GAAE,KAAK,sBAAsB;AAE3D,eAAK,qBAAqB;AAI1B,iCAAuB,OAAO;AAG9B,oBAAU,MAAM;AAChB,oBAAU,OAAO,sBAAsB;AAEvC,cAAIA,GAAE,WAAW,YAAY,GAAG;AAC5B,yBAAa,KAAK,KAAK,SAAS,WAAW,KAAK,WAAW;AAAA,UAC/D;AAEA,eAAK,YAAY;AAEjB,oBAAU,KAAK;AACf,eAAK,UAAU;AAAA,QACnB;AAAA,QAEA,sBAAsB,WAAW;AAC7B,cAAI,OAAO,MACP,UAAU,KAAK,SACf,OACA,YAAYA,GAAE,KAAK,oBAAoB;AAK3C,cAAI,QAAQ,UAAU,QAAQ;AAC1B,oBAAQ,KAAK,GAAG,WAAW;AAC3B,sBAAU,IAAI,SAAS,QAAQ,IAAI,QAAQ,GAAG;AAAA,UAClD,WAAU,QAAQ,UAAU,QAAQ;AAGhC,sBAAU,IAAI,SAAS,EAAE;AAAA,UAC7B;AAAA,QACJ;AAAA,QAEA,cAAc,WAAY;AACtB,cAAI,OAAO,MACP,QAAQ,KAAK,GAAG,IAAI,EAAE,YAAY,GAClC,YAAY;AAEhB,cAAI,CAAC,OAAO;AACR;AAAA,UACJ;AAEA,UAAAA,GAAE,KAAK,KAAK,aAAa,SAAUQ,IAAG,YAAY;AAC9C,gBAAI,aAAa,WAAW,MAAM,YAAY,EAAE,QAAQ,KAAK,MAAM;AACnE,gBAAI,YAAY;AACZ,0BAAY;AAAA,YAChB;AACA,mBAAO,CAAC;AAAA,UACZ,CAAC;AAED,eAAK,WAAW,SAAS;AAAA,QAC7B;AAAA,QAEA,YAAY,SAAU,YAAY;AAC9B,cAAI,YAAY,IACZ,OAAO;AACX,cAAI,YAAY;AACZ,wBAAY,KAAK,eAAe,WAAW,MAAM,OAAO,KAAK,aAAa,MAAM;AAAA,UACpF;AACA,cAAI,KAAK,cAAc,WAAW;AAC9B,iBAAK,YAAY;AACjB,iBAAK,OAAO;AACZ,aAAC,KAAK,QAAQ,UAAUR,GAAE,MAAM,SAAS;AAAA,UAC7C;AAAA,QACJ;AAAA,QAEA,yBAAyB,SAAU,aAAa;AAE5C,cAAI,YAAY,UAAU,OAAO,YAAY,CAAC,MAAM,UAAU;AAC1D,mBAAOA,GAAE,IAAI,aAAa,SAAU,OAAO;AACvC,qBAAO,EAAE,OAAc,MAAM,KAAK;AAAA,YACtC,CAAC;AAAA,UACL;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,qBAAqB,SAAS,aAAa,UAAU;AACjD,wBAAcA,GAAE,KAAK,eAAe,EAAE,EAAE,YAAY;AAEpD,cAAGA,GAAE,QAAQ,aAAa,CAAC,QAAQ,UAAU,KAAK,CAAC,MAAM,IAAG;AACxD,0BAAc;AAAA,UAClB;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,iBAAiB,SAAU,QAAQ,eAAe,UAAU;AACxD,cAAI,OAAO,MACP,UAAU,KAAK;AAEnB,iBAAO,cAAc,KAAK,wBAAwB,OAAO,WAAW;AAGpE,cAAI,CAAC,QAAQ,SAAS;AAClB,iBAAK,eAAe,QAAQ,IAAI;AAChC,gBAAI,QAAQ,qBAAqB,CAAC,OAAO,YAAY,QAAQ;AACzD,mBAAK,WAAW,KAAK,aAAa;AAAA,YACtC;AAAA,UACJ;AAGA,cAAI,kBAAkB,KAAK,SAAS,KAAK,YAAY,GAAG;AACpD;AAAA,UACJ;AAEA,eAAK,cAAc,OAAO;AAC1B,eAAK,QAAQ;AAAA,QACjB;AAAA,QAEA,UAAU,SAAUW,QAAO;AACvB,cAAI,OAAO,MACP,YACA,WAAW,KAAK,QAAQ,UACxB,YAAYX,GAAE,KAAK,oBAAoB,GACvCY,YAAW,UAAU,KAAK,MAAM,KAAK,QAAQ,UAAU;AAE3D,oBAAU,KAAK,MAAM,QAAQ,EAAE,YAAY,QAAQ;AAEnD,eAAK,gBAAgBD;AAErB,cAAI,KAAK,kBAAkB,MAAMC,UAAS,SAAS,KAAK,eAAe;AACnE,yBAAaA,UAAS,IAAI,KAAK,aAAa;AAC5C,YAAAZ,GAAE,UAAU,EAAE,SAAS,QAAQ;AAC/B,mBAAO;AAAA,UACX;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,YAAY,WAAY;AACpB,cAAI,OAAO,MACPQ,KAAIR,GAAE,QAAQ,KAAK,MAAM,KAAK,WAAW;AAE7C,eAAK,OAAOQ,EAAC;AAAA,QACjB;AAAA,QAEA,QAAQ,SAAUA,IAAG;AACjB,cAAI,OAAO;AACX,eAAK,KAAK;AACV,eAAK,SAASA,EAAC;AAAA,QACnB;AAAA,QAEA,QAAQ,WAAY;AAChB,cAAI,OAAO;AAEX,cAAI,KAAK,kBAAkB,IAAI;AAC3B;AAAA,UACJ;AAEA,cAAI,KAAK,kBAAkB,GAAG;AAC1B,YAAAR,GAAE,KAAK,oBAAoB,EAAE,SAAS,MAAM,KAAK,QAAQ,UAAU,EAAE,MAAM,EAAE,YAAY,KAAK,QAAQ,QAAQ;AAC9G,iBAAK,gBAAgB;AACrB,iBAAK,oBAAoB;AACzB,iBAAK,GAAG,IAAI,KAAK,YAAY;AAC7B,iBAAK,aAAa;AAClB;AAAA,UACJ;AAEA,eAAK,aAAa,KAAK,gBAAgB,CAAC;AAAA,QAC5C;AAAA,QAEA,UAAU,WAAY;AAClB,cAAI,OAAO;AAEX,cAAI,KAAK,kBAAmB,KAAK,YAAY,SAAS,GAAI;AACtD;AAAA,UACJ;AAEA,eAAK,aAAa,KAAK,gBAAgB,CAAC;AAAA,QAC5C;AAAA,QAEA,cAAc,SAAUW,QAAO;AAC3B,cAAI,OAAO,MACP,aAAa,KAAK,SAASA,MAAK;AAEpC,cAAI,CAAC,YAAY;AACb;AAAA,UACJ;AAEA,cAAI,WACA,YACA,YACA,cAAcX,GAAE,UAAU,EAAE,YAAY;AAE5C,sBAAY,WAAW;AACvB,uBAAaA,GAAE,KAAK,oBAAoB,EAAE,UAAU;AACpD,uBAAa,aAAa,KAAK,QAAQ,YAAY;AAEnD,cAAI,YAAY,YAAY;AACxB,YAAAA,GAAE,KAAK,oBAAoB,EAAE,UAAU,SAAS;AAAA,UACpD,WAAW,YAAY,YAAY;AAC/B,YAAAA,GAAE,KAAK,oBAAoB,EAAE,UAAU,YAAY,KAAK,QAAQ,YAAY,WAAW;AAAA,UAC3F;AAEA,cAAI,CAAC,KAAK,QAAQ,eAAe;AAK7B,iBAAK,oBAAoB;AACzB,iBAAK,GAAG,IAAI,KAAK,SAAS,KAAK,YAAYW,MAAK,EAAE,KAAK,CAAC;AAAA,UAC5D;AAEA,eAAK,WAAW,IAAI;AAAA,QACxB;AAAA,QAEA,UAAU,SAAUA,QAAO;AACvB,cAAI,OAAO,MACP,mBAAmB,KAAK,QAAQ,UAChC,aAAa,KAAK,YAAYA,MAAK;AAEvC,eAAK,eAAe,KAAK,SAAS,WAAW,KAAK;AAElD,cAAI,KAAK,iBAAiB,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,QAAQ,eAAe;AACpE,iBAAK,GAAG,IAAI,KAAK,YAAY;AAAA,UACjC;AAEA,eAAK,WAAW,IAAI;AACpB,eAAK,cAAc,CAAC;AACpB,eAAK,YAAY;AAEjB,cAAIX,GAAE,WAAW,gBAAgB,GAAG;AAChC,6BAAiB,KAAK,KAAK,SAAS,UAAU;AAAA,UAClD;AAAA,QACJ;AAAA,QAEA,UAAU,SAAU,OAAO;AACvB,cAAI,OAAO,MACP,YAAY,KAAK,QAAQ,WACzB,cACA;AAEJ,cAAI,CAAC,WAAW;AACZ,mBAAO;AAAA,UACX;AAEA,yBAAe,KAAK;AACpB,kBAAQ,aAAa,MAAM,SAAS;AAEpC,cAAI,MAAM,WAAW,GAAG;AACpB,mBAAO;AAAA,UACX;AAEA,iBAAO,aAAa,OAAO,GAAG,aAAa,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM,IAAI;AAAA,QAC1F;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,OAAO;AACX,eAAK,GAAG,IAAI,eAAe,EAAE,WAAW,cAAc;AACtD,UAAAA,GAAE,MAAM,EAAE,IAAI,uBAAuB,KAAK,kBAAkB;AAC5D,UAAAA,GAAE,KAAK,oBAAoB,EAAE,OAAO;AAAA,QACxC;AAAA,MACJ;AAGA,MAAAA,GAAE,GAAG,wBAAwB,SAAU,SAAS,MAAM;AAClD,YAAI,UAAU;AAGd,YAAI,CAAC,UAAU,QAAQ;AACnB,iBAAO,KAAK,MAAM,EAAE,KAAK,OAAO;AAAA,QACpC;AAEA,eAAO,KAAK,KAAK,WAAY;AACzB,cAAI,eAAeA,GAAE,IAAI,GACrB,WAAW,aAAa,KAAK,OAAO;AAExC,cAAI,OAAO,YAAY,UAAU;AAC7B,gBAAI,YAAY,OAAO,SAAS,OAAO,MAAM,YAAY;AACrD,uBAAS,OAAO,EAAE,IAAI;AAAA,YAC1B;AAAA,UACJ,OAAO;AAEH,gBAAI,YAAY,SAAS,SAAS;AAC9B,uBAAS,QAAQ;AAAA,YACrB;AACA,uBAAW,IAAI,aAAa,MAAM,OAAO;AACzC,yBAAa,KAAK,SAAS,QAAQ;AAAA,UACvC;AAAA,QACJ,CAAC;AAAA,MACL;AAGA,UAAI,CAACA,GAAE,GAAG,cAAc;AACpB,QAAAA,GAAE,GAAG,eAAeA,GAAE,GAAG;AAAA,MAC7B;AAAA,IACJ,CAAC;AAAA;AAAA;;;AC/+BD;AAAA;AAAA;AAWA,KAAC,SAASa,OAAMC,YAAW;AAK1B,UAAI,MAAM,CAAC;AAGX,UAAI,UAAU;AAOd,UAAI,WAAW;AAAA,QACd,UAAU;AAAA,UACT,QAAS;AAAA;AAAA,UACT,QAAS;AAAA;AAAA,UACT,SAAU;AAAA;AAAA,UACV,UAAW;AAAA;AAAA,UACX,WAAY;AAAA;AAAA,UACZ,UAAW;AAAA;AAAA,QACZ;AAAA,QACA,QAAQ;AAAA,UACP,WAAY;AAAA;AAAA,UACZ,UAAW;AAAA;AAAA,UACX,UAAW;AAAA,UACX,SAAU;AAAA,QACX;AAAA,MACD;AAMA,UAAI,YAAY,MAAM,UAAU,KAC/B,gBAAgB,MAAM,SACtBC,YAAW,OAAO,UAAU;AAM7B,eAASC,UAAS,KAAK;AACtB,eAAO,CAAC,EAAE,QAAQ,MAAO,OAAO,IAAI,cAAc,IAAI;AAAA,MACvD;AAMA,eAASC,SAAQ,KAAK;AACrB,eAAO,gBAAgB,cAAc,GAAG,IAAIF,UAAS,KAAK,GAAG,MAAM;AAAA,MACpE;AAKA,eAASG,UAAS,KAAK;AACtB,eAAO,OAAOH,UAAS,KAAK,GAAG,MAAM;AAAA,MACtC;AAOA,eAASI,UAAS,QAAQ,MAAM;AAC/B,YAAI;AACJ,iBAAS,UAAU,CAAC;AACpB,eAAO,QAAQ,CAAC;AAEhB,aAAK,OAAO,MAAM;AACjB,cAAI,KAAK,eAAe,GAAG,GAAG;AAE7B,gBAAI,OAAO,GAAG,KAAK,KAAM,QAAO,GAAG,IAAI,KAAK,GAAG;AAAA,UAChD;AAAA,QACD;AACA,eAAO;AAAA,MACR;AAQA,eAASC,KAAI,KAAKC,WAAU,SAAS;AACpC,YAAI,UAAU,CAAC,GAAGC,IAAGC;AAErB,YAAI,CAAC,IAAK,QAAO;AAGjB,YAAI,aAAa,IAAI,QAAQ,UAAW,QAAO,IAAI,IAAIF,WAAU,OAAO;AAGxE,aAAKC,KAAI,GAAGC,KAAI,IAAI,QAAQD,KAAIC,IAAGD,MAAM;AACxC,kBAAQA,EAAC,IAAID,UAAS,KAAK,SAAS,IAAIC,EAAC,GAAGA,IAAG,GAAG;AAAA,QACnD;AACA,eAAO;AAAA,MACR;AAKA,eAAS,eAAe,KAAK,MAAM;AAClC,cAAM,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC;AAC9B,eAAO,MAAM,GAAG,IAAG,OAAO;AAAA,MAC3B;AAYA,eAAS,oBAAoBE,SAAQ;AACpC,YAAIL,YAAW,IAAI,SAAS,SAAS;AAGrC,YAAK,OAAOK,YAAW,WAAa,CAAAA,UAASA,QAAO;AAGpD,YAAKR,UAAUQ,OAAO,KAAKA,QAAO,MAAM,IAAI,GAAI;AAG/C,iBAAO;AAAA,YACN,KAAMA;AAAA,YACN,KAAMA,QAAO,QAAQ,KAAK,EAAE,EAAE,QAAQ,MAAM,KAAK;AAAA,YACjD,MAAOA;AAAA,UACR;AAAA,QAGD,WAAY,CAACA,WAAU,CAACA,QAAO,OAAO,CAACA,QAAO,IAAI,MAAM,IAAI,GAAI;AAG/D,iBAAS,CAACR,UAAUG,SAAS,IAAMA,YAAW,IAAI,SAAS,SAAS,SAAS;AAAA,YAC5E,KAAMA;AAAA,YACN,KAAMA,UAAS,QAAQ,MAAM,KAAK;AAAA,YAClC,MAAOA;AAAA,UACR;AAAA,QAED;AAEA,eAAOK;AAAA,MACR;AAiBA,UAAI,WAAW,IAAI,WAAW,IAAI,QAAQ,SAAS,OAAO,SAAS;AAElE,YAAIP,SAAQ,KAAK,GAAG;AACnB,iBAAOG,KAAI,OAAO,SAAS,KAAK;AAC/B,mBAAO,SAAS,KAAK,OAAO;AAAA,UAC7B,CAAC;AAAA,QACF;AAGA,gBAAQ,SAAS;AAGjB,YAAI,OAAO,UAAU,SAAU,QAAO;AAGtC,kBAAU,WAAW,IAAI,SAAS,OAAO;AAGzC,YAAI,QAAQ,IAAI,OAAO,WAAW,UAAU,KAAK,CAAC,GAAG,CAAC,GACrD,cAAc;AAAA,WACZ,KAAK,OACL,QAAQ,YAAY,KAAK,EACzB,QAAQ,OAAO,EAAE,EACjB,QAAQ,SAAS,GAAG;AAAA;AAAA,QACtB;AAGD,eAAO,CAAC,MAAM,WAAW,IAAI,cAAc;AAAA,MAC5C;AASA,UAAI,UAAU,IAAI,UAAU,SAAS,OAAO,WAAW;AACtD,oBAAY,eAAe,WAAW,IAAI,SAAS,OAAO,SAAS;AACnE,YAAI,QAAQ,KAAK,IAAI,IAAI,SAAS;AAGlC,gBAAQ,KAAK,MAAM,IAAI,SAAS,KAAK,IAAI,KAAK,IAAI,OAAO,QAAQ,SAAS;AAAA,MAC3E;AAUA,UAAI,eAAe,IAAI,eAAe,IAAI,SAAS,SAASK,SAAQ,WAAW,UAAU,SAAS;AAEjG,YAAIR,SAAQQ,OAAM,GAAG;AACpB,iBAAOL,KAAIK,SAAQ,SAAS,KAAK;AAChC,mBAAO,aAAa,KAAK,WAAW,UAAU,OAAO;AAAA,UACtD,CAAC;AAAA,QACF;AAGA,QAAAA,UAAS,SAASA,OAAM;AAGxB,YAAI,OAAON;AAAA,UACRD,UAAS,SAAS,IAAI,YAAY;AAAA,YAClC;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,UACA,IAAI,SAAS;AAAA,QACd,GAGA,eAAe,eAAe,KAAK,SAAS,GAG5C,WAAWO,UAAS,IAAI,MAAM,IAC9B,OAAO,SAAS,QAAQ,KAAK,IAAIA,WAAU,CAAC,GAAG,YAAY,GAAG,EAAE,IAAI,IACpE,MAAM,KAAK,SAAS,IAAI,KAAK,SAAS,IAAI;AAG3C,eAAO,YAAY,MAAM,KAAK,OAAO,GAAG,GAAG,IAAI,KAAK,WAAW,MAAM,KAAK,OAAO,GAAG,EAAE,QAAQ,kBAAkB,OAAO,KAAK,QAAQ,KAAK,eAAe,KAAK,UAAU,QAAQ,KAAK,IAAIA,OAAM,GAAG,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,IAAI;AAAA,MAChO;AAcA,UAAI,cAAc,IAAI,cAAc,SAASA,SAAQ,QAAQ,WAAW,UAAU,SAASD,SAAQ;AAElG,YAAIP,SAAQQ,OAAM,GAAG;AACpB,iBAAOL,KAAIK,SAAQ,SAAS,KAAI;AAC/B,mBAAO,YAAY,KAAK,QAAQ,WAAW,UAAU,SAASD,OAAM;AAAA,UACrE,CAAC;AAAA,QACF;AAGA,QAAAC,UAAS,SAASA,OAAM;AAGxB,YAAI,OAAON;AAAA,UACRD,UAAS,MAAM,IAAI,SAAS;AAAA,YAC5B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAASM;AAAA,UACV;AAAA,UACA,IAAI,SAAS;AAAA,QACd,GAGA,UAAU,oBAAoB,KAAK,MAAM,GAGzC,YAAYC,UAAS,IAAI,QAAQ,MAAMA,UAAS,IAAI,QAAQ,MAAM,QAAQ;AAG3E,eAAO,UAAU,QAAQ,MAAM,KAAK,MAAM,EAAE,QAAQ,MAAM,aAAa,KAAK,IAAIA,OAAM,GAAG,eAAe,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,MACtJ;AAeA,UAAI,eAAe,SAAS,MAAM,QAAQ,WAAW,UAAU,SAASD,SAAQ;AAC/E,YAAI,CAAC,KAAM,QAAO,CAAC;AAGnB,YAAI,OAAOL;AAAA,UACRD,UAAS,MAAM,IAAI,SAAS;AAAA,YAC5B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAASM;AAAA,UACV;AAAA,UACA,IAAI,SAAS;AAAA,QACd,GAGA,UAAU,oBAAoB,KAAK,MAAM,GAGzC,iBAAiB,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,OAAO,OAGhF,YAAY,GAGZ,YAAYJ,KAAI,MAAM,SAAS,KAAKE,IAAG;AACtC,cAAIL,SAAQ,GAAG,GAAG;AAEjB,mBAAO,IAAI,aAAa,KAAK,IAAI;AAAA,UAClC,OAAO;AAEN,kBAAM,SAAS,GAAG;AAGlB,gBAAI,YAAY,MAAM,IAAI,QAAQ,MAAM,MAAM,IAAI,QAAQ,MAAM,QAAQ,MAGvE,OAAO,UAAU,QAAQ,MAAM,KAAK,MAAM,EAAE,QAAQ,MAAM,aAAa,KAAK,IAAI,GAAG,GAAG,eAAe,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,OAAO,CAAC;AAEnJ,gBAAI,KAAK,SAAS,UAAW,aAAY,KAAK;AAC9C,mBAAO;AAAA,UACR;AAAA,QACD,CAAC;AAGF,eAAOG,KAAI,WAAW,SAAS,KAAKE,IAAG;AAEtC,cAAIN,UAAS,GAAG,KAAK,IAAI,SAAS,WAAW;AAE5C,mBAAO,iBAAiB,IAAI,QAAQ,KAAK,QAAQ,KAAK,SAAQ,IAAI,MAAM,YAAY,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAE,IAAK,IAAI,MAAM,YAAY,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,IAAK;AAAA,UACvK;AACA,iBAAO;AAAA,QACR,CAAC;AAAA,MACF;AAOA,UAAI,OAAO,YAAY,aAAa;AACnC,YAAI,OAAO,WAAW,eAAe,OAAO,SAAS;AACpD,oBAAU,OAAO,UAAU;AAAA,QAC5B;AACA,gBAAQ,aAAa;AAAA,MACtB,WAAW,OAAO,WAAW,cAAc,OAAO,KAAK;AAEtD,eAAO,CAAC,GAAG,WAAW;AACrB,iBAAO;AAAA,QACR,CAAC;AAAA,MACF,OAAO;AAIN,YAAI,aAAc,yBAAS,eAAe;AACzC,iBAAO,WAAW;AAEjB,YAAAH,MAAK,aAAa;AAElB,gBAAI,aAAaC;AAEjB,mBAAO;AAAA,UACR;AAAA,QACD,EAAGD,MAAK,UAAU;AAGlB,QAAAA,MAAK,YAAY,IAAI;AAAA,MACtB;AAAA,IAGD,GAAE,OAAI;AAAA;AAAA;;;AC5ZN;AAAA;AAAA;AAAC,KAAC,WAAY;AACV,UAAIa,WAAU,SACV,aAAa,cACb,mBAAmB,oBACnB,OAAO,uBACP,iBAAiB,OACjB,eAAe,+IAMfC,YAAW;AAAA,QACP,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,WAAW,oBAAI,KAAK;AAAA,QACpB,UAAU;AAAA,QACV,UAAU,CAAC,GAAG,CAAC;AAAA,QACf,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB,aAAa;AAAA,QAEb,UAAU;AAAA,QACV,QAAQ;AAAA,QAER,MAAM;AAAA,QACN,SAAS;AAAA,QAET,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB,2BAA2B;AAAA,QAE3B,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,0BAA0B;AAAA,QAE1B,SAAS;AAAA,QACT,SAAS;AAAA,QACT,0BAA0B;AAAA,QAE1B,eAAe;AAAA;AAAA,QACf,wBAAwB;AAAA,QACxB,OAAO;AAAA,QAEP,aAAa;AAAA,QACb,aAAa;AAAA,QAEb,WAAW;AAAA,QACX,WAAW;AAAA;AAAA,QAGX,aAAa;AAAA,QACb,UAAU;AAAA,QACV,UAAU;AAAA,QACV,WAAW;AAAA,UACP,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,QACX;AAAA;AAAA,QAGA,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,QACnB,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,aAAa;AAAA;AAAA,QAGb,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,cAAc;AAAA,MAClB,GACA,UAAU;AAAA,QACN,aAAa,CAAC,IAAI,EAAE;AAAA,QACpB,UAAU,CAAC,IAAI,EAAE;AAAA,QACjB,YAAY,CAAC,IAAI,EAAE;AAAA,QACnB,YAAY,CAAC,IAAI,EAAE;AAAA,QACnB,cAAc,CAAC,IAAI,EAAE;AAAA,QACrB,WAAW,CAAC,IAAI,EAAE;AAAA,QAClB,aAAa,CAAC,IAAI,EAAE;AAAA,QACpB,aAAa,CAAC,IAAI,EAAE;AAAA,QACpB,SAAS,CAAC,IAAI,EAAE;AAAA,QAChB,YAAY,CAAC,IAAI,EAAE;AAAA,QACnB,WAAW,CAAC,IAAI,EAAE;AAAA,QAClB,WAAW,CAAC,IAAI,EAAE;AAAA,QAClB,eAAe,CAAC,IAAI,IAAI,EAAE;AAAA,MAC9B,GACA;AAEJ,UAAIC,cAAc,SAAU,IAAI,SAAS;AACrC,aAAK,KAAK;AACV,aAAK,MAAM,EAAE,EAAE;AAEf,aAAK,OAAO,EAAE,OAAO,MAAM,CAAC,GAAGD,WAAU,SAAS,KAAK,IAAI,KAAK,CAAC;AAEjE,YAAI,SAAS,QAAW;AACpB,kBAAQ,EAAE,MAAM;AAAA,QACpB;AAEA,YAAI,CAAC,KAAK,KAAK,WAAW;AACtB,eAAK,KAAK,YAAY,oBAAI,KAAK;AAAA,QACnC;AAEA,YAAI,KAAK,GAAG,YAAY,SAAS;AAC7B,eAAK,YAAY;AAAA,QACrB;AAEA,YAAI,KAAK,KAAK,UAAU;AACpB,eAAK,YAAY,OAAO,KAAK,KAAK,YAAY,WAAW,EAAE,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK;AAAA,QAC/F;AAEA,aAAK,SAAS;AACd,aAAK,UAAU;AACf,aAAK,SAAS;AAEd,aAAK,cAAc,KAAK,KAAK;AAC7B,aAAK,cAAc,KAAK,KAAK;AAC7B,aAAK,iBAAiB;AACtB,aAAK,gBAAgB,CAAC;AACtB,aAAK,QAAQ,CAAC;AACd,aAAK,OAAO,CAAC;AACb,aAAK,WAAW;AAChB,aAAK,WAAW;AAChB,aAAK,qBAAqB;AAE1B,aAAK,KAAK;AAAA,MACd;AAEA,mBAAaC;AAEb,iBAAW,YAAY;AAAA,QACnB,SAASF;AAAA,QACT,aAAa,CAAC,QAAQ,UAAU,OAAO;AAAA,QAEvC,MAAM,WAAY;AACd,cAAI,CAAC,kBAAkB,CAAC,KAAK,KAAK,UAAU,KAAK,WAAW;AACxD,iBAAK,2BAA2B;AAAA,UACpC;AACA,eAAK,eAAe;AACpB,eAAK,cAAc,KAAK,KAAK,QAAQ;AACrC,eAAK,qBAAqB;AAE1B,cAAI,KAAK,WAAW;AAChB,gBAAI,CAAC,KAAK,KAAK,QAAQ;AAEnB,mBAAK,oBAAoB,KAAK,KAAK,QAAQ;AAC3C,mBAAK,YAAY;AAAA,YACrB;AACA,gBAAI,KAAK,KAAK,eAAe,CAAC,KAAK,KAAK,gBAAgB;AACpD,mBAAK,oBAAoB;AAAA,YAC7B;AACA,iBAAK,YAAY,GAAG,aAAa,KAAK,uBAAuB,KAAK,IAAI,CAAC;AACvE,iBAAK,YAAY,GAAG,WAAW,KAAK,qBAAqB,KAAK,IAAI,CAAC;AAAA,UACvE;AAEA,cAAI,KAAK,KAAK,SAAS;AACnB,iBAAK,YAAY,SAAS,KAAK,KAAK,OAAO;AAAA,UAC/C;AAEA,cAAI,KAAK,KAAK,YAAY;AACtB,iBAAK,aAAa,IAAI,EAAE,GAAG,WAAW,WAAW,MAAM,KAAK,IAAI;AAChE,iBAAK,sBAAsB;AAAA,UAC/B;AAEA,cAAI,KAAK,KAAK,gBAAgB;AAC1B,iBAAK,YAAY,SAAS,mBAAmB;AAAA,UACjD;AAEA,eAAK,MAAM,KAAK,WAAW,IAAI,IAAI,EAAE,GAAG,WAAW,KAAK,MAAM,KAAK,aAAa,KAAK,IAAI;AACzF,eAAK,MAAM,KAAK,WAAW,EAAE,KAAK;AAClC,eAAK,MAAM,IAAI,EAAE,GAAG,WAAW,WAAW,MAAM,KAAK,IAAI;AACzD,eAAK,OAAO,KAAK;AAEjB,eAAK,IAAI,GAAG,iBAAiB,KAAK,aAAa,KAAK,IAAI,CAAC;AACzD,eAAK,YAAY,GAAG,cAAc,qBAAqB,KAAK,kBAAkB,KAAK,IAAI,CAAC;AACxF,eAAK,YAAY,GAAG,cAAc,qBAAqB,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAExF,eAAK,SAAS;AAAA,QAClB;AAAA,QAEA,kBAAkB,WAAY;AAC1B,eAAK,UAAU,KAAK,KAAK,UAAU,KAAK,KAAK,UAAU,oBAAI,KAAK,cAAiB;AACjF,eAAK,UAAU,KAAK,KAAK,UAAU,KAAK,KAAK,UAAU,oBAAI,KAAK,aAAgB;AAAA,QACpF;AAAA,QAEA,aAAc,WAAY;AACtB,eAAK,IAAI,GAAG,KAAK,KAAK,YAAY,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC;AACtE,eAAK,IAAI,GAAG,eAAe,KAAK,aAAa,KAAK,IAAI,CAAC;AACvD,eAAK,IAAI,GAAG,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC;AAC/C,eAAK,IAAI,GAAG,aAAa,KAAK,gBAAgB,KAAK,IAAI,CAAC;AACxD,YAAE,MAAM,EAAE,GAAG,cAAc,KAAK,UAAU,KAAK,IAAI,CAAC;AACpD,YAAE,MAAM,EAAE,GAAG,eAAe,KAAK,eAAe,KAAK,IAAI,CAAC;AAAA,QAC9D;AAAA,QAEA,qBAAqB,WAAY;AAC7B,eAAK,IAAI,GAAG,eAAe,KAAK,WAAW,KAAK,IAAI,CAAC;AACrD,eAAK,IAAI,GAAG,aAAa,KAAK,SAAS,KAAK,IAAI,CAAC;AACjD,eAAK,IAAI,GAAG,cAAc,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,QACvD;AAAA,QAEA,uBAAuB,WAAY;AAC/B,eAAK,IAAI,GAAG,kBAAkB,KAAK,cAAc,KAAK,IAAI,CAAC;AAAA,QAC/D;AAAA,QAEA,WAAW,SAAU,KAAK;AACtB,iBAAO,KAAK,KAAK,SAAS,QAAQ,GAAG,MAAM;AAAA,QAC/C;AAAA,QAEA,eAAe,SAAU,MAAM;AAC3B,cAAI,OAAO,QAAQ,UAAU;AACzB,iBAAK,MAAM,EAAE,GAAG,WAAW,SAAS,IAAI;AACxC,gBAAI,CAAC,KAAK,KAAK;AACX,sBAAQ,KAAK,0BAA2B,OAAO,iDAAiD;AAChG,mBAAK,MAAM,EAAE,OAAO,MAAM,CAAC,GAAG,EAAE,GAAG,WAAW,SAAS,EAAE;AAAA,YAC7D;AAEA,iBAAK,MAAM,EAAE,OAAO,MAAM,CAAC,GAAG,EAAE,GAAG,WAAW,SAAS,IAAI,EAAE,GAAG,WAAW,SAAS,IAAI,CAAC;AAAA,UAC7F,OAAO;AACH,iBAAK,MAAM,EAAE,OAAO,MAAM,CAAC,GAAG,EAAE,GAAG,WAAW,SAAS,IAAI,IAAI;AAAA,UACnE;AAEA,cAAI,KAAK,KAAK,YAAY;AACtB,iBAAK,IAAI,aAAa,KAAK,KAAK;AAAA,UACpC;AAEA,cAAI,KAAK,KAAK,YAAY;AACtB,iBAAK,IAAI,aAAa,KAAK,KAAK;AAAA,UACpC;AAEA,cAAI,KAAK,KAAK,aAAa,IAAI;AAC3B,iBAAK,IAAI,WAAW,KAAK,KAAK;AAAA,UAClC;AAEA,cAAI,KAAK,KAAK,YAAY;AACtB,iBAAK,IAAI,aAAa,CAAC,KAAK,IAAI,YAAY,KAAK,IAAI,UAAU,EAAE,KAAK,KAAK,KAAK,iBAAiB;AAAA,UACrG;AAEA,cAAI,KAAK,KAAK,gBAAgB;AAC1B,iBAAK,IAAI,aAAa,KAAK,IAAI;AAAA,UACnC;AAEA,cAAI,WAAW,KAAK;AACpB,cAAI,KAAK,IAAI,WAAW,MAAM,SAAS,IAAI,CAAC,KACxC,KAAK,IAAI,WAAW,MAAM,SAAS,IAAI,CAAC,GAC1C;AACC,iBAAK,OAAO;AAAA,UACf;AAAA,QACJ;AAAA,QAEA,4BAA4B,WAAY;AACpC,2BAAiB;AACjB,gBAAM,OAAO,sEAAsE;AACnF,kCAAwB,EAAE,wBAAwB;AAAA,QACtD;AAAA,QAEA,gBAAgB,WAAY;AACxB,cAAI,eACA,UAAU,EAAE,iCAAiC;AAEjD,cAAG,KAAK,GAAG,YAAY,SAAS;AAC5B,gBAAI,CAAC,KAAK,KAAK,QAAQ;AACnB,8BAAgB;AAAA,YACpB,OAAO;AACH,8BAAgB,QAAQ,YAAY,KAAK,GAAG;AAAA,YAChD;AAAA,UACJ,OAAO;AACH,4BAAgB,QAAQ,SAAS,KAAK,GAAG;AAAA,UAC7C;AAEA,eAAK,cAAc,EAAE,YAAY,EAAE,SAAS,aAAa;AACzD,eAAK,WAAW,EAAE,wBAAwB,KAAK,WAAW;AAC1D,eAAK,OAAO,EAAE,oBAAoB,KAAK,WAAW;AAAA,QACtD;AAAA,QAEA,kBAAkB,WAAY;AAC1B,cAAI,CAAC,KAAK,cAAc,QAAQ;AAE5B,gBAAI,KAAK,uBAAuB,GAAI;AACpC,iBAAK,qBAAqB;AAC1B,mBAAO,KAAK,KAAK,SAAS,IAAI,IAAI,IAAI;AAAA,UAC1C;AAEA,cAAI,gBAAgB,KAAK,eACrB,iBAAiB,WAAW,cAAc,cAAc,CAAC,CAAC,GAC1D,gBACA,QAAQ,MACR,QAAQ,IAAI;AAAA,YACR,eAAe;AAAA,YACf,eAAe;AAAA,YACf,eAAe;AAAA,YACf,eAAe;AAAA,YACf,eAAe;AAAA,UACnB;AAEA,2BAAiB,cAAc,IAAI,SAAUG,OAAM;AAC/C,mBAAO,MAAM,WAAW,MAAM,IAAI,YAAYA,KAAI;AAAA,UACtD,CAAC,EAAE,KAAK,KAAK,KAAK,sBAAsB;AAG5C,cAAI,KAAK,KAAK,iBAAiB,KAAK,KAAK,OAAO;AAC5C,oBAAQ,cAAc,IAAI,SAASA,OAAM;AACrC,kBAAI,aAAa,WAAW,cAAcA,KAAI;AAC9C,qBAAO,IAAI;AAAA,gBACP,WAAW;AAAA,gBACX,WAAW;AAAA,gBACX,WAAW;AAAA,gBACX,WAAW;AAAA,gBACX,WAAW;AAAA,cACf;AAAA,YACJ,CAAC;AAAA,UACL;AAEA,eAAK,qBAAqB;AAC1B,eAAK,KAAK,SAAS,gBAAgB,OAAO,IAAI;AAAA,QAClD;AAAA,QAEA,MAAM,WAAY;AACd,cAAIC,KAAI,KAAK,YACTC,KAAI,KAAK;AACb,kBAAQ,KAAK,MAAM;AAAA,YACf,KAAK;AACD,mBAAK,OAAO,IAAI,KAAKD,GAAE,MAAMA,GAAE,QAAQ,GAAG,CAAC;AAC3C,kBAAIC,GAAE,cAAe,CAAAA,GAAE,cAAc,KAAK,WAAW,OAAO,KAAK,WAAW,IAAI;AAChF;AAAA,YACJ,KAAK;AACD,mBAAK,OAAO,IAAI,KAAKD,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC;AAC3C,kBAAIC,GAAE,aAAc,CAAAA,GAAE,aAAa,KAAK,WAAW,IAAI;AACvD;AAAA,YACJ,KAAK;AACD,mBAAK,OAAO,IAAI,KAAKD,GAAE,OAAO,IAAI,GAAG,CAAC;AACtC,kBAAIC,GAAE,eAAgB,CAAAA,GAAE,eAAe,KAAK,SAAS;AACrD;AAAA,UACR;AAAA,QACJ;AAAA,QAEA,MAAM,WAAY;AACd,cAAID,KAAI,KAAK,YACTC,KAAI,KAAK;AACb,kBAAQ,KAAK,MAAM;AAAA,YACf,KAAK;AACD,mBAAK,OAAO,IAAI,KAAKD,GAAE,MAAMA,GAAE,QAAQ,GAAG,CAAC;AAC3C,kBAAIC,GAAE,cAAe,CAAAA,GAAE,cAAc,KAAK,WAAW,OAAO,KAAK,WAAW,IAAI;AAChF;AAAA,YACJ,KAAK;AACD,mBAAK,OAAO,IAAI,KAAKD,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC;AAC3C,kBAAIC,GAAE,aAAc,CAAAA,GAAE,aAAa,KAAK,WAAW,IAAI;AACvD;AAAA,YACJ,KAAK;AACD,mBAAK,OAAO,IAAI,KAAKD,GAAE,OAAO,IAAI,GAAG,CAAC;AACtC,kBAAIC,GAAE,eAAgB,CAAAA,GAAE,eAAe,KAAK,SAAS;AACrD;AAAA,UACR;AAAA,QACJ;AAAA,QAEA,YAAY,SAAU,QAAQF,OAAM;AAChC,UAAAA,QAAOA,SAAQ,KAAK;AACpB,cAAI,SAAS,QACT,WAAW,KAAK,wBAChBG,UAAS,KAAK,KACd,cAAc,WAAW,mBACzB,SAAS,WAAW,UAAUH,KAAI,GAClCC,KAAI,WAAW,cAAcD,KAAI,GACjC,YAAYC,GAAE,WACd,QAAQA,GAAE,OACV,OAAO,OAAO,MAAM,SAAS,IAAI,CAAC,KAAK,OAAO,MAAM,SAAS,IAAI,CAAC,GAClE,YAAY,MACZG,YAAW,KAAK,WAChB;AAEJ,cAAI,KAAK,KAAK,cAAc,KAAK,cAAc,MAAM;AACjD,yBAAa,KAAK,WAAW,uBAAuBJ,OAAM,IAAI;AAC9D,wBAAY,YAAY,WAAW,KAAK;AACxC,oBAAQ,WAAW;AACnB,wBAAY,WAAW;AAAA,UAC3B;AAEA,kBAAQ,MAAM;AAAA,YACV,KAAK,IAAI,KAAK,MAAM;AAChB,uBAAS,OAAO,QAAQ,KAAKA,MAAK,QAAQ,CAAC;AAAA,YAC/C,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASI,UAAS,QAAQ,SAAS,IAAI,GAAG,SAAS;AAAA,YACvD,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASA,UAAS,QAAQ,SAAS,IAAI,GAAG,UAAU,YAAY,CAAC;AAAA,YACrE,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASA,UAAS,QAAQ,SAAS,IAAI,GAAGH,GAAE,QAAQ;AAAA,YACxD,KAAK,IAAI,KAAK,MAAM;AAChB,uBAASG,UAAS,QAAQ,SAAS,GAAG,GAAGH,GAAE,IAAI;AAAA,YACnD,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASG,UAAS,QAAQ,SAAS,IAAI,GAAGD,QAAO,KAAKF,GAAE,GAAG,CAAC;AAAA,YAChE,KAAK,IAAI,KAAK,MAAM;AAChB,uBAASG,UAAS,QAAQ,SAAS,GAAG,GAAGD,QAAO,UAAUF,GAAE,GAAG,CAAC;AAAA,YACpE,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASG,UAAS,QAAQ,SAAS,IAAI,GAAGH,GAAE,SAAS;AAAA,YACzD,KAAK,IAAI,KAAK,MAAM;AAChB,uBAASG,UAAS,QAAQ,SAAS,GAAG,GAAGH,GAAE,QAAQ,CAAC;AAAA,YACxD,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASG,UAAS,QAAQ,SAAS,IAAI,GAAG,KAAK,IAAI,OAAOH,GAAE,KAAK,CAAC;AAAA,YACtE,KAAK,IAAI,KAAK,MAAM;AAChB,uBAASG,UAAS,QAAQ,SAAS,GAAG,GAAGD,QAAO,YAAYF,GAAE,KAAK,CAAC;AAAA,YACxE,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASG,UAAS,QAAQ,SAAS,IAAI,GAAGH,GAAE,WAAW;AAAA,YAC3D,KAAK,IAAI,KAAK,MAAM;AAChB,uBAASG,UAAS,QAAQ,SAAS,GAAG,GAAGH,GAAE,OAAO;AAAA,YACtD,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASG,UAAS,QAAQ,SAAS,IAAI,GAAG,SAAS;AAAA,YACvD,KAAK,IAAI,KAAK,MAAM;AAChB,uBAASA,UAAS,QAAQ,SAAS,GAAG,GAAG,KAAK;AAAA,YAClD,KAAK,OAAO,KAAK,MAAM;AACnB,uBAASA,UAAS,QAAQ,SAAS,MAAM,GAAGH,GAAE,IAAI;AAAA,YACtD,KAAK,QAAQ,KAAK,MAAM;AACpB,uBAASG,UAAS,QAAQ,SAAS,OAAO,GAAG,OAAO,CAAC,CAAC;AAAA,YAC1D,KAAK,QAAQ,KAAK,MAAM;AACpB,uBAASA,UAAS,QAAQ,SAAS,OAAO,GAAG,OAAO,CAAC,CAAC;AAAA,YAC1D,KAAK,KAAK,KAAK,MAAM;AACjB,uBAASA,UAAS,QAAQ,SAAS,IAAI,GAAGH,GAAE,KAAK,SAAS,EAAE,MAAM,EAAE,CAAC;AAAA,UAC7E;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,WAAW,SAAUI,MAAK,KAAK,MAAM;AACjC,iBAAOA,KAAI,QAAQ,KAAK,SAAU,OAAO,IAAG,IAAG,IAAI;AAC/C,mBAAO,KAAK,OAAO;AAAA,UACvB,CAAC;AAAA,QACL;AAAA,QAEA,wBAAwB,SAAU,MAAM;AACpC,cAAI,UAAU;AAEd,iBAAO,IAAI,OAAO,UAAU,UAAU,OAAO,OAAO,WAAW,UAAU,KAAK,GAAG;AAAA,QACrF;AAAA,QAGA,YAAY,SAAUL,OAAM;AACxB,cAAI,QAAQ,MACR,OAAO,MAAM,MACbC,KAAI,MAAM,YACV,gBAAgB,MAAM,eACtBK,OAAM,cAAc,QACpB,UAAU;AAEd,cAAI,MAAM,QAAQN,KAAI,GAAG;AACrB,YAAAA,MAAK,QAAQ,SAAUC,IAAG;AACtB,oBAAM,WAAWA,EAAC;AAAA,YACtB,CAAC;AACD;AAAA,UACJ;AAEA,cAAI,EAAED,iBAAgB,MAAO;AAE7B,eAAK,mBAAmBA;AAGxB,cAAI,KAAK,YAAY;AACjB,iBAAK,WAAW,SAASA,KAAI;AAAA,UACjC;AAGA,gBAAM,SAAS,cAAcA,KAAI;AAKjC,cAAI,KAAK,YAAY;AACjB,YAAAA,MAAK,SAAS,KAAK,WAAW,KAAK;AACnC,YAAAA,MAAK,WAAW,KAAK,WAAW,OAAO;AAAA,UAC3C;AAEA,cAAI,MAAM,QAAQ,QAAQ;AACtB,gBAAIA,MAAK,SAAS,KAAKC,GAAE,SAAS,KAAK,2BAA2B;AAC9D,wBAAU,IAAI,KAAKD,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAG,CAAC;AAAA,YAC7D;AAAA,UACJ;AAEA,cAAI,MAAM,QAAQ,SAAS;AACvB,gBAAIA,MAAK,YAAY,KAAKC,GAAE,QAAQ,KAAK,0BAA0B;AAC/D,wBAAU,IAAI,KAAKD,MAAK,YAAY,GAAG,GAAG,CAAC;AAAA,YAC/C;AAAA,UACJ;AAEA,cAAI,SAAS;AACT,kBAAM,SAAS;AACf,kBAAM,OAAO;AACb,kBAAM,SAAS;AACf,kBAAM,IAAI,QAAQ;AAAA,UACtB;AAEA,cAAI,KAAK,iBAAiB,CAAC,KAAK,OAAO;AACnC,gBAAIM,SAAQ,KAAK,cAAe;AAChC,gBAAI,CAAC,MAAM,YAAYN,KAAI,GAAG;AAC1B,oBAAM,cAAc,KAAKA,KAAI;AAAA,YACjC;AAAA,UACJ,WAAW,KAAK,OAAO;AACnB,gBAAIM,QAAO,GAAG;AACV,oBAAM,gBAAgB,CAACN,KAAI;AAC3B,oBAAM,WAAWA;AACjB,oBAAM,WAAW;AAAA,YACrB,WAAWM,QAAO,GAAG;AACjB,oBAAM,cAAc,KAAKN,KAAI;AAC7B,kBAAI,CAAC,MAAM,UAAS;AAChB,sBAAM,WAAWA;AAAA,cACrB,OAAO;AACH,sBAAM,WAAWA;AAAA,cACrB;AAEA,kBAAI,WAAW,OAAO,MAAM,UAAU,MAAM,QAAQ,GAAG;AACnD,sBAAM,WAAW,MAAM;AACvB,sBAAM,WAAWA;AAAA,cACrB;AACA,oBAAM,gBAAgB,CAAC,MAAM,UAAU,MAAM,QAAQ;AAAA,YAEzD,OAAO;AACH,oBAAM,gBAAgB,CAACA,KAAI;AAC3B,oBAAM,WAAWA;AAAA,YACrB;AAAA,UACJ,OAAO;AACH,kBAAM,gBAAgB,CAACA,KAAI;AAAA,UAC/B;AAEA,gBAAM,eAAe;AAErB,cAAI,KAAK,UAAU;AACf,kBAAM,iBAAiB;AAAA,UAC3B;AAEA,cAAI,KAAK,aAAa,CAAC,KAAK,oBAAoB;AAC5C,gBAAI,CAAC,KAAK,iBAAiB,CAAC,KAAK,OAAO;AACpC,oBAAM,KAAK;AAAA,YACf,WAAW,KAAK,SAAS,MAAM,cAAc,UAAU,GAAG;AACtD,oBAAM,KAAK;AAAA,YACf;AAAA,UACJ;AAEA,gBAAM,MAAM,KAAK,WAAW,EAAE,QAAQ;AAAA,QAC1C;AAAA,QAEA,YAAY,SAAUA,OAAM;AACxB,cAAI,WAAW,KAAK,eAChB,QAAQ;AAEZ,cAAI,EAAEA,iBAAgB,MAAO;AAE7B,iBAAO,SAAS,KAAK,SAAU,SAASO,IAAG;AACvC,gBAAI,WAAW,OAAO,SAASP,KAAI,GAAG;AAClC,uBAAS,OAAOO,IAAG,CAAC;AAEpB,kBAAI,CAAC,MAAM,cAAc,QAAQ;AAC7B,sBAAM,WAAW;AACjB,sBAAM,WAAW;AACjB,sBAAM,mBAAmB;AAAA,cAC7B,OAAO;AACH,sBAAM,mBAAmB,MAAM,cAAc,MAAM,cAAc,SAAS,CAAC;AAAA,cAC/E;AAEA,oBAAM,MAAM,MAAM,WAAW,EAAE,QAAQ;AACvC,oBAAM,eAAe;AAErB,kBAAI,MAAM,KAAK,UAAU;AACrB,sBAAM,iBAAiB;AAAA,cAC3B;AAEA,qBAAO;AAAA,YACX;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,QAEA,OAAO,WAAY;AACf,eAAK,SAAS;AACd,eAAK,OAAO,KAAK,KAAK;AACtB,eAAK,SAAS;AACd,eAAK,OAAO,oBAAI,KAAK;AAErB,cAAI,KAAK,KAAK,uBAAuB,MAAM;AACvC,iBAAK,WAAW,KAAK,KAAK,WAAW;AAAA,UACzC;AAAA,QACJ;AAAA,QAEA,OAAO,WAAY;AACf,eAAK,gBAAgB,CAAC;AACtB,eAAK,WAAW;AAChB,eAAK,WAAW;AAChB,eAAK,MAAM,KAAK,WAAW,EAAE,QAAQ;AACrC,eAAK,eAAe;AACpB,cAAI,KAAK,KAAK,UAAU;AACpB,iBAAK,iBAAiB;AAAA,UAC1B;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,QAAQ,SAAU,OAAO,OAAO;AAC5B,cAAID,OAAM,UAAU,QAChB,mBAAmB,KAAK;AAE5B,cAAIA,QAAO,GAAG;AACV,iBAAK,KAAK,KAAK,IAAI;AAAA,UACvB,WAAWA,QAAO,KAAK,OAAO,SAAS,UAAU;AAC7C,iBAAK,OAAO,EAAE,OAAO,MAAM,KAAK,MAAM,KAAK;AAAA,UAC/C;AAEA,eAAK,iBAAiB;AACtB,eAAK,qBAAqB;AAC1B,eAAK,cAAc,KAAK,KAAK,QAAQ;AACrC,eAAK,IAAI,kBAAkB;AAC3B,cAAI,CAAC,KAAK,KAAK,eAAgB,MAAK,IAAI,QAAQ;AAChD,eAAK,MAAM,KAAK,WAAW,EAAE,QAAQ;AAErC,cAAI,KAAK,aAAa,CAAC,KAAK,KAAK,QAAQ;AACrC,iBAAK,oBAAoB,KAAK,KAAK,QAAQ;AAC3C,gBAAI,KAAK,SAAS;AACd,mBAAK,YAAY,KAAK,KAAK,QAAQ;AAAA,YACvC;AAAA,UACJ;AAEA,cAAI,KAAK,KAAK,SAAS;AACnB,iBAAK,YAAY,SAAS,KAAK,KAAK,OAAO;AAAA,UAC/C;AAEA,cAAI,KAAK,KAAK,gBAAgB;AAC1B,iBAAK,YAAY,SAAS,mBAAmB;AAAA,UACjD;AAEA,cAAI,KAAK,KAAK,YAAY;AACtB,gBAAI,iBAAkB,MAAK,WAAW,YAAY,gBAAgB;AAClE,iBAAK,WAAW,cAAc;AAC9B,iBAAK,WAAW,mBAAmB;AAEnC,gBAAI,kBAAkB;AAClB,+BAAiB,SAAS,KAAK,WAAW,KAAK;AAC/C,+BAAiB,WAAW,KAAK,WAAW,OAAO;AAAA,YACvD;AAAA,UACJ;AAEA,eAAK,eAAe;AAEpB,iBAAO;AAAA,QACX;AAAA,QAEA,sBAAsB,WAAY;AAC9B,cAAI,UAAU,KAAK,KAAK,QAAQ;AAChC,eAAK,SAAS;AACd,cAAI,KAAK,UAAU,SAAS;AACxB,iBAAK,OAAO,KAAK;AAAA,UACrB;AAEA,cAAI,KAAK,UAAU,SAAS;AACxB,iBAAK,OAAO,KAAK;AAAA,UACrB;AACA,eAAK,SAAS;AAAA,QAClB;AAAA,QAEA,aAAa,SAAU,WAAW,UAAU;AACxC,cAAI,MAAM;AACV,eAAK,cAAc,KAAK,SAAUN,OAAM;AACpC,gBAAI,WAAW,OAAOA,OAAM,WAAW,QAAQ,GAAG;AAC9C,oBAAMA;AACN,qBAAO;AAAA,YACX;AAAA,UACJ,CAAC;AACD,iBAAO;AAAA,QACX;AAAA,QAEA,gBAAgB,WAAY;AACxB,cAAI,QAAQ,MACR,OAAO,MAAM,MACbQ,UAAS,MAAM,IAAI,YACnB,YAAY,KAAK,oBACjB,QAAQ,MAAM,cAAc,IAAI,SAAUR,OAAM;AAC5C,mBAAO,MAAM,WAAWQ,SAAQR,KAAI;AAAA,UACxC,CAAC,GACD;AAEJ,cAAI,KAAK,YAAY,MAAM,UAAU,QAAQ;AACzC,wBAAY,KAAK,cAAc,IAAI,SAAUA,OAAM;AAC/C,qBAAO,MAAM,WAAW,WAAWA,KAAI;AAAA,YAC3C,CAAC;AACD,wBAAY,UAAU,KAAK,KAAK,KAAK,sBAAsB;AAC3D,iBAAK,UAAU,IAAI,SAAS;AAAA,UAChC;AAEA,kBAAQ,MAAM,KAAK,KAAK,KAAK,sBAAsB;AAEnD,eAAK,IAAI,IAAI,KAAK;AAAA,QACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,YAAY,SAAUA,OAAMS,OAAM;AAC9B,cAAIC,QAAOV,MAAK,QAAQ,GACpBC,KAAI,WAAW,cAAcD,KAAI,GACjCW,OAAM,WAAW,cAAc,KAAK,OAAO,GAC3CC,OAAM,WAAW,cAAc,KAAK,OAAO,GAC3C,WAAW,IAAI,KAAKX,GAAE,MAAMA,GAAE,OAAOU,KAAI,IAAI,EAAE,QAAQ,GACvD,WAAW,IAAI,KAAKV,GAAE,MAAMA,GAAE,OAAOW,KAAI,IAAI,EAAE,QAAQ,GACvD,QAAQ;AAAA,YACJ,KAAKF,SAAQ,KAAK,WAAWA,SAAQ,KAAK;AAAA,YAC1C,OAAO,YAAY,KAAK,WAAW,YAAY,KAAK;AAAA,YACpD,MAAMT,GAAE,QAAQU,KAAI,QAAQV,GAAE,QAAQW,KAAI;AAAA,UAC9C;AACJ,iBAAOH,QAAO,MAAMA,KAAI,IAAI,MAAM;AAAA,QACtC;AAAA,QAEA,gBAAgB,SAAU,KAAK;AAC3B,cAAI,SAAS,IAAI,OAAO;AAExB,iBAAO;AAAA,YACH,OAAO,IAAI,WAAW;AAAA,YACtB,QAAQ,IAAI,YAAY;AAAA,YACxB,MAAM,OAAO;AAAA,YACb,KAAK,OAAO;AAAA,UAChB;AAAA,QACJ;AAAA,QAEA,kBAAkB,SAAU,MAAM;AAC9B,cAAI,UAAU,KAAK,YACf,OAAO,KAAK,KAAK,MAAM,KAAK,QAAQ,MACpC,QAAQ,KAAK,KAAK,OAAO,KAAK,SAAY,QAAQ,QAAQ,KAAK,KAAK,OAAO,GAC3ET,QAAO,KAAK,KAAK,MAAM,KAAK;AAEhC,iBAAO,IAAI,KAAK,MAAM,OAAOA,KAAI;AAAA,QACrC;AAAA,QAEA,qBAAqB,SAAU,KAAK;AAChC,gBAAM,IAAI,MAAM,GAAG;AACnB,cAAI,OAAO,IAAI,CAAC,GACZ,MAAM,IAAI,CAAC,GACX,UAAU,iBAAiB,OAAO,MAAM,MAAM,aAAa,OAAO;AAEtE,cAAI,KAAK,QAAS,YAAW;AAE7B,eAAK,YACA,WAAW,OAAO,EAClB,SAAS,OAAO;AAAA,QACzB;AAAA,QAEA,aAAa,SAAU,UAAU;AAC7B,qBAAW,YAAY,KAAK,KAAK;AAEjC,cAAI,OAAO,KAAK,eAAe,KAAK,GAAG,GACnC,WAAW,KAAK,eAAe,KAAK,WAAW,GAC/C,MAAM,SAAS,MAAM,GAAG,GACxBa,MAAKC,OACL,SAAS,KAAK,KAAK,QACnB,OAAO,IAAI,CAAC,GACZ,YAAY,IAAI,CAAC;AAErB,kBAAQ,MAAM;AAAA,YACV,KAAK;AACD,cAAAD,OAAM,KAAK,MAAM,SAAS,SAAS;AACnC;AAAA,YACJ,KAAK;AACD,cAAAC,QAAO,KAAK,OAAO,KAAK,QAAQ;AAChC;AAAA,YACJ,KAAK;AACD,cAAAD,OAAM,KAAK,MAAM,KAAK,SAAS;AAC/B;AAAA,YACJ,KAAK;AACD,cAAAC,QAAO,KAAK,OAAO,SAAS,QAAQ;AACpC;AAAA,UACR;AAEA,kBAAO,WAAW;AAAA,YACd,KAAK;AACD,cAAAD,OAAM,KAAK;AACX;AAAA,YACJ,KAAK;AACD,cAAAC,QAAO,KAAK,OAAO,KAAK,QAAQ,SAAS;AACzC;AAAA,YACJ,KAAK;AACD,cAAAD,OAAM,KAAK,MAAM,KAAK,SAAS,SAAS;AACxC;AAAA,YACJ,KAAK;AACD,cAAAC,QAAO,KAAK;AACZ;AAAA,YACJ,KAAK;AACD,kBAAI,aAAa,KAAK,IAAI,GAAG;AACzB,gBAAAD,OAAM,KAAK,MAAM,KAAK,SAAO,IAAI,SAAS,SAAO;AAAA,cACrD,OAAO;AACH,gBAAAC,QAAO,KAAK,OAAO,KAAK,QAAM,IAAI,SAAS,QAAM;AAAA,cACrD;AAAA,UACR;AAEA,eAAK,YACA,IAAI;AAAA,YACD,MAAMA;AAAA,YACN,KAAKD;AAAA,UACT,CAAC;AAAA,QACT;AAAA,QAEA,MAAM,WAAY;AACd,cAAI,SAAS,KAAK,KAAK;AAEvB,eAAK,YAAY,KAAK,KAAK,QAAQ;AACnC,eAAK,YAAY,SAAS,QAAQ;AAClC,eAAK,UAAU;AAEf,cAAI,QAAQ;AACR,iBAAK,kBAAkB,MAAM;AAAA,UACjC;AAAA,QACJ;AAAA,QAEA,MAAM,WAAY;AACd,cAAI,SAAS,KAAK,KAAK;AAEvB,eAAK,YACA,YAAY,QAAQ,EACpB,IAAI;AAAA,YACD,MAAM;AAAA,UACV,CAAC;AAEL,eAAK,UAAU;AACf,eAAK,OAAO,CAAC;AAEb,eAAK,UAAU;AACf,eAAK,UAAU;AACf,eAAK,IAAI,KAAK;AAEd,cAAI,QAAQ;AACR,iBAAK,kBAAkB,MAAM;AAAA,UACjC;AAAA,QACJ;AAAA,QAEA,MAAM,SAAUb,OAAM;AAClB,eAAK,YAAYA,OAAM,MAAM;AAAA,QACjC;AAAA,QAEA,IAAI,SAAUA,OAAM;AAChB,eAAK,YAAYA,OAAM,IAAI;AAAA,QAC/B;AAAA,QAEA,mBAAmB,SAAUe,QAAO;AAChC,eAAK,YAAY,IAAI,kBAAkB;AACvC,UAAAA,OAAM,MAAM,KAAK;AACjB,eAAK,YAAY,IAAI,oBAAoBA,OAAM,KAAK,MAAM,MAAM,IAAI,CAAC;AAAA,QACzE;AAAA,QAEA,aAAa,SAAUf,OAAM,KAAK;AAC9B,UAAAA,QAAOA,SAAQ,KAAK,WAAW,KAAK;AAEpC,cAAI,WAAW,OAAO,OAAO,KAAK,YAAY,IAAI,KAAK,YAAY;AACnE,cAAI,WAAW,EAAG,YAAW;AAC7B,cAAI,WAAW,EAAG,YAAW;AAE7B,eAAK,SAAS;AACd,eAAK,OAAO,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAG,CAAC;AAC3D,eAAK,SAAS;AACd,eAAK,OAAO,KAAK,YAAY,QAAQ;AAAA,QAEzC;AAAA,QAEA,eAAe,SAAU,KAAK;AAC1B,cAAIA,QAAO,WAAW,cAAc,KAAK,gBAAgB,CAAC,GACtD,eACAE,KAAI,KAAK,MACT,SACA,sBACA,eAAe,OACf,cAAc,OACd,gBAAgB,OAChBc,KAAIhB,MAAK,MACTiB,KAAIjB,MAAK,OACTC,KAAID,MAAK;AAEb,kBAAQ,KAAK;AAAA,YACT,KAAK;AAAA,YACL,KAAK;AACD,cAAAiB,MAAK;AACL,6BAAe;AACf;AAAA,YACJ,KAAK;AAAA,YACL,KAAK;AACD,cAAAA,MAAK;AACL,6BAAe;AACf;AAAA,YACJ,KAAK;AAAA,YACL,KAAK;AACD,4BAAc;AACd,cAAAD,MAAK;AACL;AAAA,YACJ,KAAK;AAAA,YACL,KAAK;AACD,4BAAc;AACd,cAAAA,MAAK;AACL;AAAA,YACJ,KAAK;AAAA,YACL,KAAK;AACD,8BAAgB;AAChB,cAAAA,MAAK;AACL;AAAA,YACJ,KAAK;AAAA,YACL,KAAK;AACD,8BAAgB;AAChB,cAAAA,MAAK;AACL;AAAA,YACJ,KAAK;AACD,mBAAK,GAAG;AACR;AAAA,UACR;AAEA,iCAAuB,WAAW,aAAa,IAAI,KAAKA,IAAEC,EAAC,CAAC;AAC5D,oBAAU,IAAI,KAAKD,IAAEC,IAAEhB,EAAC;AAGxB,cAAI,uBAAuBA,GAAG,CAAAA,KAAI;AAGlC,cAAI,QAAQ,QAAQ,IAAI,KAAK,SAAS;AAClC,sBAAU,KAAK;AAAA,UACnB,WAAW,QAAQ,QAAQ,IAAI,KAAK,SAAS;AACzC,sBAAU,KAAK;AAAA,UACnB;AAEA,eAAK,UAAU;AAEf,0BAAgB,WAAW,cAAc,OAAO;AAChD,cAAI,gBAAgBC,GAAE,eAAe;AACjC,YAAAA,GAAE,cAAc,cAAc,OAAO,cAAc,IAAI;AAAA,UAC3D;AACA,cAAI,eAAeA,GAAE,cAAc;AAC/B,YAAAA,GAAE,aAAa,cAAc,IAAI;AAAA,UACrC;AACA,cAAI,iBAAiBA,GAAE,gBAAgB;AACnC,YAAAA,GAAE,eAAe,KAAK,SAAS;AAAA,UACnC;AAAA,QACJ;AAAA,QAEA,cAAc,SAAU,KAAK;AACzB,cAAI,SAAS,KAAK,KAAK,KAAK,SAAU,QAAQ;AAC1C,mBAAO,UAAU;AAAA,UACrB,CAAC;AAED,cAAI,CAAC,QAAQ;AACT,iBAAK,KAAK,KAAK,GAAG;AAAA,UACtB;AAAA,QACJ;AAAA,QAEA,gBAAgB,SAAU,KAAK;AAC3B,cAAIgB,SAAQ,KAAK,KAAK,QAAQ,GAAG;AAEjC,eAAK,KAAK,OAAOA,QAAO,CAAC;AAAA,QAC7B;AAAA,QAEA,kBAAkB,WAAY;AAC1B,cAAI,eACA,QAAQ,OACR,QAAQ,MACR,cAAc,KAAK,KAAK,KAAK;AAEjC,mBAAS,UAAU,SAAS;AACxB,4BAAgB,QAAQ,MAAM;AAC9B,gBAAI,YAAY,UAAU,cAAc,OAAQ;AAEhD,gBAAI,cAAc,MAAM,SAAU,KAAKX,IAAG;AAAE,qBAAO,OAAO,YAAYA,EAAC;AAAA,YAAC,CAAC,GAAG;AACxE,oBAAM,SAAS,UAAU,MAAM;AAC/B,sBAAQ;AAAA,YACZ;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,UAAU,SAAUQ,QAAO,MAAM;AAC7B,eAAK,IAAI,QAAQA,QAAO,IAAI;AAAA,QAChC;AAAA,QAEA,gBAAgB,SAAUI,UAASV,OAAM;AACrC,UAAAA,QAAOA,SAAQ,KAAK;AAEpB,cAAIT,QAAO,WAAW,cAAc,KAAK,gBAAgB,CAAC,GACtDgB,KAAIhB,MAAK,MACTiB,KAAIjB,MAAK,OACTC,KAAID,MAAK;AAEb,cAAI,KAAK,iBAAiB,GAAE;AACxB;AAAA,UACJ;AAEA,kBAAOmB,UAAS;AAAA,YACZ,KAAK;AACD,cAAAV,SAAQ,QAASR,MAAK,IAAK;AAC3B,cAAAQ,SAAQ,UAAWQ,MAAK,IAAK;AAC7B,cAAAR,SAAQ,SAAUO,MAAK,IAAK;AAC5B;AAAA,YACJ,KAAK;AACD,cAAAP,SAAQ,QAASR,MAAK,IAAK;AAC3B,cAAAQ,SAAQ,UAAWQ,MAAK,IAAK;AAC7B,cAAAR,SAAQ,SAAUO,MAAK,IAAK;AAC5B;AAAA,YACJ,KAAK;AACD,cAAAP,SAAQ,QAASR,MAAK,IAAK;AAC3B,cAAAQ,SAAQ,UAAWQ,MAAK,IAAK;AAC7B,cAAAR,SAAQ,SAAUO,MAAK,IAAK;AAC5B;AAAA,YACJ,KAAK;AACD,cAAAP,SAAQ,QAASR,MAAK,IAAK;AAC3B,cAAAQ,SAAQ,UAAWQ,MAAK,IAAK;AAC7B,cAAAR,SAAQ,SAAUO,MAAK,IAAK;AAC5B;AAAA,UACR;AAEA,cAAI,KAAK,IAAI,KAAKA,IAAEC,IAAEhB,EAAC;AACvB,cAAI,GAAG,QAAQ,IAAI,KAAK,SAAS;AAC7B,iBAAK,KAAK;AAAA,UACd,WAAW,GAAG,QAAQ,IAAI,KAAK,SAAS;AACpC,iBAAK,KAAK;AAAA,UACd;AAEA,eAAK,UAAU;AAAA,QAEnB;AAAA,QAEA,iBAAiB,WAAY;AACzB,cAAI,UAAW,KAAK,WAAW,KAAK,cAAc,KAAK,cAAc,SAAS,CAAC,GAC3EA,KAAI,KAAK;AAEb,cAAI,CAAC,SAAS;AACV,oBAAQ,KAAK,MAAM;AAAA,cACf,KAAK;AACD,0BAAU,IAAI,KAAKA,GAAE,MAAMA,GAAE,QAAO,oBAAI,KAAK,GAAE,QAAQ,CAAC;AACxD;AAAA,cACJ,KAAK;AACD,0BAAU,IAAI,KAAKA,GAAE,MAAMA,GAAE,OAAO,CAAC;AACrC;AAAA,cACJ,KAAK;AACD,0BAAU,IAAI,KAAKA,GAAE,MAAM,GAAG,CAAC;AAC/B;AAAA,YACR;AAAA,UACJ;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,UAAU,SAAUD,OAAMS,OAAM;AAC5B,UAAAA,QAAOA,SAAQ,KAAK;AAEpB,cAAIR,KAAI,WAAW,cAAcD,KAAI,GACjC,WAAW,kCAAkCC,GAAE,OAAO,MACtD;AAEJ,kBAAQQ,OAAM;AAAA,YACV,KAAK;AACD,yBAAW,kBAAkBR,GAAE,QAAQ;AACvC;AAAA,YACJ,KAAK;AACD,0BAAY,kBAAkBA,GAAE,QAAQ,mBAAmBA,GAAE,OAAO;AACpE;AAAA,UACR;AACA,kBAAQ,KAAK,MAAM,KAAK,WAAW,EAAE,IAAI,KAAK,QAAQ;AAEtD,iBAAO,MAAM,SAAS,QAAQ,EAAE,EAAE;AAAA,QACtC;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,QAAQ;AACZ,gBAAM,IACD,IAAI,MAAM,EACV,KAAK,cAAc,EAAE;AAE1B,gBAAM,gBAAgB,CAAC;AACvB,gBAAM,UAAU;AAChB,gBAAM,QAAQ,CAAC;AACf,gBAAM,OAAO,CAAC;AACd,gBAAM,WAAW;AACjB,gBAAM,WAAW;AAEjB,cAAI,MAAM,KAAK,UAAU,CAAC,MAAM,WAAW;AACvC,kBAAM,YAAY,QAAQ,oBAAoB,EAAE,OAAO;AAAA,UAC3D,OAAO;AACH,kBAAM,YAAY,OAAO;AAAA,UAC7B;AAAA,QACJ;AAAA,QAEA,6BAA6B,SAAU,iBAAiB,cAAc;AAClE,cAAI,KAAK,KAAK,OAAO;AACjB,gBAAI,CAAC,KAAK,KAAK,gBAAgB;AAE3B,kBAAI,KAAK,cAAc,UAAU,GAAG;AAChC,qBAAK,SAAS,aAAa,YAAY;AAAA,cAC3C;AAAA,YACJ,OAAO;AACH,mBAAK,WAAW,YAAY;AAAA,YAChC;AAAA,UACJ,WAAW,KAAK,KAAK,gBAAe;AAChC,iBAAK,WAAW,YAAY;AAAA,UAChC;AAGA,cAAI,CAAC,KAAK,KAAK,gBAAgB;AAC3B,iBAAK,mBAAmB;AACxB,gBAAI,KAAK,KAAK,YAAY;AACtB,mBAAK,WAAW,SAAS,eAAe;AACxC,mBAAK,WAAW,OAAO;AAAA,YAC3B;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,cAAc,SAAUmB,IAAG;AACvB,cAAI,CAAC,KAAK,SAAS;AACf,iBAAK,KAAK;AAAA,UACd;AAAA,QACJ;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,CAAC,KAAK,WAAW,KAAK,SAAS;AAC/B,iBAAK,KAAK;AAAA,UACd;AAAA,QACJ;AAAA,QAEA,wBAAwB,SAAUA,IAAG;AACjC,eAAK,UAAU;AAAA,QACnB;AAAA,QAEA,sBAAsB,SAAUA,IAAG;AAC/B,eAAK,UAAU;AACf,UAAAA,GAAE,cAAc,UAAU;AAC1B,cAAI,CAACA,GAAE,cAAc,gBAAiB,MAAK,IAAI,MAAM;AAAA,QACzD;AAAA,QAEA,iBAAiB,SAAUA,IAAG;AAC1B,cAAI,MAAM,KAAK,IAAI,IAAI;AAEvB,cAAI,CAAC,KAAK;AACN,iBAAK,MAAM;AAAA,UACf;AAAA,QACJ;AAAA,QAEA,WAAW,WAAY;AACnB,cAAI,KAAK,SAAS;AACd,iBAAK,YAAY;AAAA,UACrB;AAAA,QACJ;AAAA,QAEA,gBAAgB,SAAUA,IAAG;AACzB,cAAIA,GAAE,cAAc,QAAS;AAE7B,cAAI,KAAK,WAAW,CAAC,KAAK,SAAS;AAC/B,iBAAK,KAAK;AAAA,UACd;AAAA,QACJ;AAAA,QAEA,cAAc,SAAUA,IAAG;AACvB,UAAAA,GAAE,cAAc,UAAU;AAC1B,qBAAW,KAAK,gBAAgB,KAAK,IAAI,GAAE,CAAC;AAAA,QAChD;AAAA,QAEA,YAAY,SAAUA,IAAG;AACrB,cAAI,OAAOA,GAAE;AACb,eAAK,aAAa,IAAI;AAGtB,cAAI,QAAQ,MAAM,QAAQ,IAAI;AAC1B,YAAAA,GAAE,eAAe;AACjB,iBAAK,eAAe,IAAI;AAAA,UAC5B;AAGA,cAAI,QAAQ,IAAI;AACZ,gBAAI,KAAK,SAAS;AACd,kBAAI,KAAK,SAAS,KAAK,OAAO,EAAE,SAAS,YAAY,EAAG;AACxD,kBAAI,KAAK,QAAQ,KAAK,KAAK,SAAS;AAChC,qBAAK,KAAK;AAAA,cACd,OAAO;AACH,oBAAI,kBAAkB,KAAK,YAAY,KAAK,SAAS,KAAK,QAAQ;AAElE,oBAAI,CAAC,iBAAiB;AAClB,sBAAI,KAAK,YAAY;AACjB,yBAAK,QAAQ,SAAS,KAAK,WAAW,KAAK;AAC3C,yBAAK,QAAQ,WAAW,KAAK,WAAW,OAAO;AAAA,kBACnD;AACA,uBAAK,WAAW,KAAK,OAAO;AAC5B;AAAA,gBACJ;AACA,qBAAK,4BAA4B,iBAAiB,KAAK,OAAO;AAAA,cAClE;AAAA,YACJ;AAAA,UACJ;AAGA,cAAI,QAAQ,IAAI;AACZ,iBAAK,KAAK;AAAA,UACd;AAAA,QACJ;AAAA,QAEA,UAAU,SAAUA,IAAG;AACnB,cAAI,OAAOA,GAAE;AACb,eAAK,eAAe,IAAI;AAAA,QAC5B;AAAA,QAEA,WAAW,SAAUA,IAAG,QAAQ;AAC5B,eAAK,cAAc,MAAM;AAAA,QAC7B;AAAA,QAEA,mBAAmB,SAAUA,IAAG;AAC5B,cAAI,QAAQ,EAAEA,GAAE,MAAM,EAAE,QAAQ,mBAAmB,GAC/CpB,QAAO,KAAK,iBAAiB,KAAK;AAGtC,eAAK,SAAS;AAEd,cAAI,KAAK,SAAS;AACd,iBAAK,UAAU;AAAA,UACnB;AAEA,gBAAM,SAAS,SAAS;AAExB,eAAK,UAAUA;AACf,eAAK,SAAS;AAEd,cAAI,KAAK,KAAK,SAAS,KAAK,cAAc,UAAU,GAAG;AACnD,iBAAK,WAAW,KAAK,cAAc,CAAC;AACpC,iBAAK,WAAW;AAChB,gBAAI,WAAW,KAAK,KAAK,UAAU,KAAK,OAAO,GAAG;AAC9C,mBAAK,WAAW,KAAK;AACrB,mBAAK,WAAW;AAAA,YACpB;AACA,iBAAK,MAAM,KAAK,WAAW,EAAE,QAAQ;AAAA,UACzC;AAAA,QACJ;AAAA,QAEA,mBAAmB,SAAUoB,IAAG;AAC5B,cAAI,QAAQ,EAAEA,GAAE,MAAM,EAAE,QAAQ,mBAAmB;AAEnD,gBAAM,YAAY,SAAS;AAE3B,eAAK,SAAS;AACd,eAAK,UAAU;AACf,eAAK,SAAS;AAAA,QAClB;AAAA,QAEA,eAAe,SAAUA,IAAGC,IAAGJ,IAAG;AAC9B,cAAIjB,QAAO,oBAAI,KAAK,GAChB,gBAAgB,KAAK,eACrB,WAAW;AAEf,cAAI,cAAc,QAAQ;AACtB,uBAAW;AACX,YAAAA,QAAO,KAAK;AAAA,UAChB;AAEA,UAAAA,MAAK,SAASqB,EAAC;AACf,UAAArB,MAAK,WAAWiB,EAAC;AAEjB,cAAI,CAAC,YAAY,CAAC,KAAK,SAASjB,KAAI,EAAE,SAAS,YAAY,GAAG;AAC1D,iBAAK,WAAWA,KAAI;AAAA,UACxB,OAAO;AACH,iBAAK,eAAe;AACpB,gBAAI,KAAK,KAAK,UAAU;AACpB,mBAAK,iBAAiB;AAAA,YAC1B;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,cAAc,SAAUoB,IAAGpB,OAAM;AAC7B,cAAI,KAAK,YAAY;AACjB,YAAAA,MAAK,SAAS,KAAK,WAAW,KAAK;AACnC,YAAAA,MAAK,WAAW,KAAK,WAAW,OAAO;AAAA,UAC3C;AACA,eAAK,WAAWA,KAAI;AAAA,QACxB;AAAA,QAEA,IAAI,QAAQ,KAAK;AACb,cAAI,CAAC,OAAO,KAAK,SAAS;AACtB,gBAAI,QAAQ,KAAK,SAAS,KAAK,OAAO;AAEtC,gBAAI,MAAM,QAAQ;AACd,oBAAM,YAAY,SAAS;AAAA,YAC/B;AAAA,UACJ;AACA,eAAK,WAAW;AAChB,cAAI,KAAK,KAAK,SAAS,KAAK,cAAc,UAAU,GAAG;AACnD,iBAAK,WAAW,KAAK,cAAc,CAAC;AACpC,iBAAK,WAAW;AAChB,gBAAI,WAAW,KAAK,KAAK,UAAU,KAAK,QAAQ,GAAG;AAC/C,mBAAK,WAAW,KAAK;AACrB,mBAAK,WAAW;AAAA,YACpB;AAAA,UACJ;AACA,cAAI,KAAK,OAAQ;AACjB,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,IAAI,UAAU;AACV,iBAAO,KAAK;AAAA,QAChB;AAAA,QAEA,IAAI,aAAa;AACb,iBAAO,WAAW,cAAc,KAAK,IAAI;AAAA,QAC7C;AAAA,QAEA,IAAI,KAAM,KAAK;AACX,cAAI,EAAE,eAAe,MAAO;AAE5B,eAAK,cAAc;AAEnB,cAAI,KAAK,UAAU,CAAC,KAAK,QAAQ;AAC7B,iBAAK,MAAM,KAAK,IAAI,EAAE,QAAQ;AAC9B,iBAAK,IAAI,QAAQ;AACjB,gBAAI,KAAK,WAAW,KAAK,WAAW;AAChC,mBAAK,YAAY;AAAA,YACrB;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAAA,QAEA,IAAI,OAAQ;AACR,iBAAO,KAAK;AAAA,QAChB;AAAA,QAEA,IAAI,KAAM,KAAK;AACX,eAAK,YAAY,KAAK,YAAY,QAAQ,GAAG;AAE7C,cAAI,KAAK,YAAY,GAAG;AACpB;AAAA,UACJ;AAEA,eAAK,WAAW,KAAK;AACrB,eAAK,cAAc;AAEnB,cAAI,KAAK,QAAQ;AACb,gBAAI,CAAC,KAAK,MAAM,GAAG,GAAG;AAClB,mBAAK,MAAM,GAAG,IAAI,IAAK,EAAE,GAAG,WAAW,KAAK,MAAM,KAAK,KAAK,IAAI;AAAA,YACpE,OAAO;AACH,mBAAK,MAAM,GAAG,EAAE,QAAQ;AAAA,YAC5B;AAEA,iBAAK,MAAM,KAAK,QAAQ,EAAE,KAAK;AAC/B,iBAAK,MAAM,GAAG,EAAE,KAAK;AACrB,iBAAK,IAAI,QAAQ;AAEjB,gBAAI,KAAK,KAAK,cAAc;AACxB,mBAAK,KAAK,aAAa,GAAG;AAAA,YAC9B;AACA,gBAAI,KAAK,aAAa,KAAK,QAAS,MAAK,YAAY;AAAA,UACzD;AAEA,iBAAO;AAAA,QACX;AAAA,QAEA,IAAI,OAAO;AACP,iBAAO,KAAK;AAAA,QAChB;AAAA,QAEA,IAAI,WAAW;AACX,iBAAO,KAAK,KAAK,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC;AAAA,QACtD;AAAA,QAEA,IAAI,UAAU;AACV,cAAIW,OAAM,WAAW,cAAc,KAAK,OAAO;AAC/C,iBAAO,IAAI,KAAKA,KAAI,MAAMA,KAAI,OAAOA,KAAI,IAAI,EAAE,QAAQ;AAAA,QAC3D;AAAA,QAEA,IAAI,UAAU;AACV,cAAIC,OAAM,WAAW,cAAc,KAAK,OAAO;AAC/C,iBAAO,IAAI,KAAKA,KAAI,MAAMA,KAAI,OAAOA,KAAI,IAAI,EAAE,QAAQ;AAAA,QAC3D;AAAA,QAEA,IAAI,YAAY;AACZ,iBAAO,WAAW,UAAU,KAAK,IAAI;AAAA,QACzC;AAAA,MACJ;AAKA,iBAAW,eAAe,SAAUZ,OAAM;AACtC,eAAO,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,IAAI,GAAG,CAAC,EAAE,QAAQ;AAAA,MACxE;AAEA,iBAAW,gBAAgB,SAAUA,OAAM;AACvC,eAAO;AAAA,UACH,MAAMA,MAAK,YAAY;AAAA,UACvB,OAAOA,MAAK,SAAS;AAAA,UACrB,WAAYA,MAAK,SAAS,IAAI,IAAK,KAAK,OAAOA,MAAK,SAAS,IAAI,KAAKA,MAAK,SAAS,IAAI;AAAA;AAAA,UACxF,MAAMA,MAAK,QAAQ;AAAA,UACnB,UAAUA,MAAK,QAAQ,IAAI,KAAK,MAAMA,MAAK,QAAQ,IAAIA,MAAK,QAAQ;AAAA,UACpE,KAAKA,MAAK,OAAO;AAAA,UACjB,OAAOA,MAAK,SAAS;AAAA,UACrB,WAAYA,MAAK,SAAS,IAAI,KAAK,MAAMA,MAAK,SAAS,IAAKA,MAAK,SAAS;AAAA,UAC1E,SAASA,MAAK,WAAW;AAAA,UACzB,aAAcA,MAAK,WAAW,IAAI,KAAK,MAAMA,MAAK,WAAW,IAAKA,MAAK,WAAW;AAAA,QACtF;AAAA,MACJ;AAEA,iBAAW,YAAY,SAAUA,OAAM;AACnC,YAAI,YAAY,KAAK,MAAMA,MAAK,YAAY,IAAI,EAAE,IAAI;AAEtD,eAAO,CAAC,WAAW,YAAY,CAAC;AAAA,MACpC;AAEA,iBAAW,WAAW,SAAUK,MAAK,MAAM;AACvC,eAAOA,KAAI,QAAQ,iBAAiB,SAAU,QAAQ,OAAO;AACzD,cAAI,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,GAAG;AAClC,mBAAO,KAAK,KAAK;AAAA,UACrB;AAAA,QACJ,CAAC;AAAA,MACL;AAEA,iBAAW,SAAS,SAAU,OAAO,OAAOI,OAAM;AAC9C,YAAI,CAAC,SAAS,CAAC,MAAO,QAAO;AAC7B,YAAI,KAAK,WAAW,cAAc,KAAK,GACnC,KAAK,WAAW,cAAc,KAAK,GACnC,QAAQA,QAAOA,QAAO,OAEtB,aAAa;AAAA,UACT,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG;AAAA,UACjE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG;AAAA,UAC7C,MAAM,GAAG,QAAQ,GAAG;AAAA,QACxB;AAEJ,eAAO,WAAW,KAAK;AAAA,MAC3B;AAEA,iBAAW,OAAO,SAAU,eAAeT,OAAMS,OAAM;AACnD,YAAI,CAAC,iBAAiB,CAACT,MAAM,QAAO;AACpC,eAAOA,MAAK,QAAQ,IAAI,cAAc,QAAQ;AAAA,MAClD;AAEA,iBAAW,SAAS,SAAU,eAAeA,OAAMS,OAAM;AACrD,YAAI,CAAC,iBAAiB,CAACT,MAAM,QAAO;AACpC,eAAOA,MAAK,QAAQ,IAAI,cAAc,QAAQ;AAAA,MAClD;AAEA,iBAAW,oBAAoB,SAAU,KAAK;AAC1C,eAAO,SAAS,GAAG,IAAI,KAAK,MAAM,MAAM;AAAA,MAC5C;AAMA,iBAAW,YAAY,SAAUA,OAAM;AACnC,YAAI,OAAOA,SAAQ,SAAU;AAC7B,QAAAA,QAAO,WAAW,cAAcA,KAAI;AACpC,eAAO,IAAI,KAAKA,MAAK,MAAMA,MAAK,OAAOA,MAAK,IAAI;AAAA,MACpD;AAEA,QAAE,GAAG,aAAa,SAAW,SAAU;AACnC,eAAO,KAAK,KAAK,WAAY;AACzB,cAAI,CAAC,EAAE,KAAK,MAAM,UAAU,GAAG;AAC3B,cAAE;AAAA,cAAK;AAAA,cAAO;AAAA,cACV,IAAID,YAAY,MAAM,OAAQ;AAAA,YAAC;AAAA,UACvC,OAAO;AACH,gBAAI,QAAQ,EAAE,KAAK,MAAM,UAAU;AAEnC,kBAAM,OAAO,EAAE,OAAO,MAAM,MAAM,MAAM,OAAO;AAC/C,kBAAM,OAAO;AAAA,UACjB;AAAA,QACJ,CAAC;AAAA,MACL;AAEA,QAAE,GAAG,WAAW,cAAcA;AAE9B,QAAE,GAAG,WAAW,WAAW;AAAA,QACvB,IAAI;AAAA,UACA,MAAM,CAAC,sEAAe,sEAAe,8CAAW,kCAAS,8CAAW,8CAAW,4CAAS;AAAA,UACxF,WAAW,CAAC,sBAAM,sBAAM,sBAAM,sBAAM,sBAAM,sBAAM,oBAAK;AAAA,UACrD,SAAS,CAAC,gBAAK,gBAAK,gBAAK,gBAAK,gBAAK,gBAAK,cAAI;AAAA,UAC5C,QAAQ,CAAC,wCAAU,8CAAW,4BAAQ,wCAAU,sBAAO,4BAAQ,4BAAQ,wCAAU,oDAAY,8CAAW,wCAAU,4CAAS;AAAA,UAC3H,aAAa,CAAC,sBAAO,sBAAO,sBAAO,sBAAO,sBAAO,sBAAO,sBAAO,sBAAO,sBAAO,sBAAO,sBAAO,oBAAK;AAAA,UAChG,OAAO;AAAA,UACP,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,UAAU;AAAA,QACd;AAAA,MACJ;AAEA,QAAE,WAAY;AACV,UAAE,gBAAgB,EAAE,WAAW;AAAA,MACnC,CAAC;AAAA,IAEL,GAAG;AAAA;AAAA;;;ACp9CH;AAAA;AAAA;AAAC,KAAC,WAAY;AACV,UAAI,YAAY;AAAA,QACZ,MAAK;AAAA,QAKL,QAAQ;AAAA,QAIR,OAAO;AAAA,MAIP,GACA,aAAa,EAAE,GAAG,YAClB,KAAK,WAAW;AAEpB,iBAAW,OAAO,SAAUuB,IAAGC,OAAM,MAAM;AACvC,aAAK,IAAID;AACT,aAAK,OAAOC;AACZ,aAAK,OAAO;AACZ,aAAK,MAAM,EAAE,EAAE;AAEf,YAAI,KAAK,KAAK,eAAgB;AAC9B,aAAK,KAAK;AAAA,MACd;AAEA,iBAAW,KAAK,YAAY;AAAA,QACxB,MAAM,WAAY;AACd,eAAK,eAAe;AACpB,eAAK,QAAQ;AAEb,eAAK,YAAY;AAAA,QACrB;AAAA,QAEA,aAAa,WAAY;AACrB,eAAK,IAAI,GAAG,SAAS,qBAAqB,EAAE,MAAM,KAAK,cAAc,IAAI,CAAC;AAAA,QAC9E;AAAA,QAEA,gBAAgB,WAAY;AACxB,eAAK,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC,EAAE,SAAS,KAAK,EAAE,QAAQ;AAC3D,eAAK,SAAS,EAAE,2BAA2B,KAAK,GAAG;AACnD,eAAK,SAAS,EAAE,sBAAsB,KAAK,GAAG;AAAA,QAClD;AAAA,QAEA,kBAAkB,SAAU,UAAU,QAAQC,OAAMC,IAAG;AACnD,mBAAS,UAAU,SAAY,SAAS;AACxC,UAAAD,QAAOA,QAAOA,QAAO;AACrB,UAAAC,KAAIA,MAAK,SAAYA,KAAI;AAEzB,cAAIA,KAAI,EAAG,QAAOD;AAClB,cAAI,UAAU,EAAG,QAAO,KAAK,iBAAiB,UAAU,GAAGA,OAAM,EAAEC,EAAC;AAEpE,UAAAD,SAAQ,sCAAsC,KAAK,EAAE,UAAU,MAAM,IAAI,eAAe,MAAM,OAAO,KAAK,EAAE,IAAI,QAAQ,MAAM,IAAI;AAElI,iBAAO,KAAK,iBAAiB,UAAU,EAAE,QAAQA,OAAM,EAAEC,EAAC;AAAA,QAC9D;AAAA,QAEA,kBAAkB,SAAUC,OAAMH,OAAM;AACpC,cAAI,UAAU,uCAAuCA,OACjD,cAAc,oBAAI,KAAK,GACvB,SAAS,KAAK,GACd,WAAW,GAAG,UAAU,OAAO,QAAQ,GACvC,WAAW,GAAG,UAAU,OAAO,QAAQ,GACvC,OAAO,OAAO,MACdD,KAAI,GAAG,cAAcI,KAAI,GACzB,SAAS,CAAC,GACVF,QAAOF,GAAE;AAEb,kBAAQC,OAAM;AAAA,YACV,KAAK;AACD,kBAAI,OAAO,UAAUD,GAAE,GAAG,EAAG,YAAW;AACxC,kBAAIA,GAAE,SAAS,KAAK,EAAE,WAAW,OAAO;AACpC,2BAAW;AACX,oBAAI,CAAC,KAAK,mBAAmB;AACzB,6BAAW;AAAA,gBACf;AACA,oBAAI,CAAC,KAAK,gBAAiB,CAAAE,QAAO;AAAA,cACtC;AACA;AAAA,YACJ,KAAK;AACD,cAAAA,QAAO,OAAO,IAAI,OAAO,KAAK,WAAW,EAAEF,GAAE,KAAK;AAClD;AAAA,YACJ,KAAK;AACD,kBAAI,SAAS,OAAO;AACpB,cAAAE,QAAOF,GAAE;AACT,kBAAIA,GAAE,OAAO,OAAO,CAAC,KAAKA,GAAE,OAAO,OAAO,CAAC,GAAG;AAC1C,2BAAW;AACX,oBAAI,CAAC,KAAK,kBAAkB;AACxB,6BAAW;AAAA,gBACf;AACA,oBAAI,CAAC,KAAK,eAAgB,CAAAE,QAAO;AAAA,cACrC;AACA;AAAA,UACR;AAEA,cAAI,KAAK,cAAc;AACnB,qBAAS,KAAK,aAAaE,OAAMH,KAAI,KAAK,CAAC;AAC3C,YAAAC,QAAO,OAAO,OAAO,OAAO,OAAOA;AACnC,uBAAW,OAAO,UAAU,MAAM,OAAO,UAAU;AAAA,UACvD;AAEA,cAAI,KAAK,OAAO;AACZ,gBAAI,GAAG,OAAO,UAAUE,OAAMH,KAAI,EAAG,YAAW;AAChD,gBAAI,GAAG,OAAO,UAAUG,OAAMH,KAAI,EAAG,YAAW;AAEhD,gBAAI,OAAO,cAAc,UAAU,KAAK,OAAO,SAAS;AACpD,kBACK,GAAG,OAAO,UAAUG,KAAI,KAAK,GAAG,KAAK,OAAO,SAASA,KAAI,KACzD,GAAG,KAAK,UAAUA,KAAI,KAAK,GAAG,OAAO,OAAO,SAASA,KAAI,GAC9D;AACI,2BAAW;AAAA,cACf;AAEA,kBAAI,GAAG,KAAK,UAAUA,KAAI,KAAK,GAAG,OAAO,OAAO,SAASA,KAAI,GAAG;AAC5D,2BAAW;AAAA,cACf;AACA,kBAAI,GAAG,OAAO,UAAUA,KAAI,KAAK,GAAG,OAAO,OAAO,SAASA,KAAI,GAAG;AAC9D,2BAAW;AAAA,cACf;AAAA,YAEJ,WAAW,OAAO,cAAc,UAAU,GAAG;AACzC,kBAAI,GAAG,OAAO,UAAUA,KAAI,KAAK,GAAG,KAAK,UAAUA,KAAI,GAAG;AACtD,2BAAW;AAAA,cACf;AAAA,YACJ;AAAA,UACJ;AAGA,cAAI,GAAG,OAAO,aAAaA,OAAMH,KAAI,EAAG,YAAW;AACnD,cAAI,OAAO,WAAW,GAAG,OAAOG,OAAM,OAAO,SAASH,KAAI,EAAG,YAAW;AACxE,cAAI,OAAO,YAAYG,OAAMH,KAAI,EAAG,YAAW;AAC/C,cAAI,CAAC,OAAO,WAAWG,OAAMH,KAAI,KAAK,OAAO,SAAU,YAAW;AAElE,iBAAO;AAAA,YACH,MAAMC;AAAA,YACN;AAAA,UACJ;AAAA,QACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,cAAc,SAAUE,OAAM;AAC1B,cAAI,iBAAiB,GAAG,aAAaA,KAAI,GACrC,gBAAgB,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAG,CAAC,EAAE,OAAO,GACxE,eAAe,IAAI,KAAKA,MAAK,YAAY,GAAGA,MAAK,SAAS,GAAG,cAAc,EAAE,OAAO,GACpF,mBAAmB,gBAAgB,KAAK,EAAE,IAAI,UAC9C,oBAAoB,IAAI,eAAe,KAAK,EAAE,IAAI;AAEtD,6BAAmB,mBAAmB,IAAI,mBAAmB,IAAI;AACjE,8BAAoB,oBAAoB,IAAI,oBAAoB,IAAI;AAEpE,cAAI,gBAAgB,CAAC,mBAAmB,GACpCC,IAAGC,IACHJ,QAAO;AAEX,mBAASC,KAAI,eAAeI,OAAM,iBAAiB,mBAAmBJ,MAAKI,MAAKJ,MAAK;AACjF,YAAAG,KAAIF,MAAK,YAAY;AACrB,YAAAC,KAAID,MAAK,SAAS;AAElB,YAAAF,SAAQ,KAAK,YAAY,IAAI,KAAKI,IAAGD,IAAGF,EAAC,CAAC;AAAA,UAC9C;AAEA,iBAAOD;AAAA,QACX;AAAA,QAEA,aAAa,SAAUE,OAAM;AAC1B,cAAI,UAAU,KAAK,iBAAiBA,OAAM,KAAK;AAE9C,iBAAO,iBAAiB,QAAQ,UAAU,kBACtBA,MAAK,QAAQ,IAAI,mBAChBA,MAAK,SAAS,IAAI,kBACnBA,MAAK,YAAY,IAAI,OAAO,QAAQ,OAAO;AAAA,QACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,gBAAgB,SAAUA,OAAM;AAC5B,cAAIF,QAAO,IACPF,KAAI,GAAG,cAAcI,KAAI,GACzBD,KAAI;AAER,iBAAMA,KAAI,IAAI;AACV,YAAAD,SAAQ,KAAK,cAAc,IAAI,KAAKF,GAAE,MAAMG,EAAC,CAAC;AAC9C,YAAAA;AAAA,UACJ;AAEA,iBAAOD;AAAA,QACX;AAAA,QAEA,eAAe,SAAUE,OAAM;AAC3B,cAAI,UAAU,KAAK,iBAAiBA,OAAM,OAAO;AAEjD,iBAAO,iBAAiB,QAAQ,UAAU,mBAAmBA,MAAK,SAAS,IAAI,OAAO,QAAQ,OAAO;AAAA,QACzG;AAAA,QAEA,eAAe,SAAUA,OAAM;AAC3B,cAAIJ,KAAI,GAAG,cAAcI,KAAI,GACzB,SAAS,GAAG,UAAUA,KAAI,GAC1B,YAAY,OAAO,CAAC,IAAI,GACxBF,QAAO,IACPC,KAAI;AAER,eAAKA,IAAGA,MAAK,OAAO,CAAC,IAAI,GAAGA,MAAK;AAC7B,YAAAD,SAAQ,KAAK,aAAa,IAAI,KAAKC,IAAI,CAAC,CAAC;AAAA,UAC7C;AAEA,iBAAOD;AAAA,QACX;AAAA,QAEA,cAAc,SAAUE,OAAM;AAC1B,cAAI,UAAU,KAAK,iBAAiBA,OAAM,MAAM;AAEhD,iBAAO,iBAAiB,QAAQ,UAAU,kBAAkBA,MAAK,YAAY,IAAI,OAAO,QAAQ,OAAO;AAAA,QAC3G;AAAA,QAEA,cAAc;AAAA,UACV,MAAM,WAAY;AACd,gBAAI,WAAW,KAAK,iBAAiB,KAAK,EAAE,IAAI,QAAQ,GACpD,OAAO,KAAK,aAAa,KAAK,EAAE,WAAW;AAE/C,iBAAK,OAAO,KAAK,IAAI;AACrB,iBAAK,OAAO,KAAK,QAAQ;AAAA,UAC7B;AAAA,UACA,QAAQ,WAAY;AAChB,gBAAIF,QAAO,KAAK,eAAe,KAAK,EAAE,WAAW;AAEjD,iBAAK,OAAO,KAAKA,KAAI;AAAA,UACzB;AAAA,UACA,OAAO,WAAY;AACf,gBAAIA,QAAO,KAAK,cAAc,KAAK,EAAE,WAAW;AAEhD,iBAAK,OAAO,KAAKA,KAAI;AAAA,UACzB;AAAA,QACJ;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,KAAK,KAAK,eAAgB;AAC9B,eAAK,aAAa,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;AAAA,QAC5C;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,SAAS,EAAE,qBAAqB,KAAK,MAAM,GAC3C,QAAQ,MACR,SACA,OACAE;AACJ,iBAAO,KAAK,SAAU,MAAMD,IAAG;AAC3B,oBAAQ,EAAE,IAAI;AACd,YAAAC,QAAO,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC;AACvC,sBAAU,MAAM,iBAAiBA,OAAM,MAAM,EAAE,QAAQ;AACvD,kBAAM,KAAK,SAAQ,QAAQ,OAAO;AAAA,UACtC,CAAC;AAAA,QACL;AAAA,QAEA,MAAM,WAAY;AACd,cAAI,KAAK,KAAK,eAAgB;AAC9B,eAAK,IAAI,SAAS,QAAQ;AAC1B,eAAK,SAAS;AAAA,QAClB;AAAA,QAEA,MAAM,WAAY;AACd,eAAK,IAAI,YAAY,QAAQ;AAC7B,eAAK,SAAS;AAAA,QAClB;AAAA;AAAA;AAAA,QAKA,cAAc,SAAU,IAAI;AACxB,cAAIA,QAAO,GAAG,KAAK,MAAM,KAAK,GAC1B,QAAQ,GAAG,KAAK,OAAO,KAAK,GAC5B,OAAO,GAAG,KAAK,MAAM,KAAK,KAAK,EAAE,WAAW,MAC5CI,MAAK,KAAK;AAEd,cAAIA,IAAG,QAAQ,KAAK,KAAK,SAAS;AAC9B,YAAAA,IAAG,KAAK,IAAI,KAAK,MAAM,OAAOJ,KAAI,CAAC;AACnC;AAAA,UACJ;AAEA,cAAI,eAAe,IAAI,KAAK,MAAM,OAAOA,KAAI,GACzC,kBAAkB,KAAK,EAAE,YAAY,cAAc,KAAK,EAAE,QAAQ;AAEtE,cAAI,CAAC,iBAAiB;AAClB,YAAAI,IAAG,SAAS,aAAa,YAAY;AACrC;AAAA,UACJ;AAEA,UAAAA,IAAG,4BAA4B,KAAKA,KAAI,iBAAiB,YAAY,EAAE;AAAA,QAE3E;AAAA,QAEA,cAAc,SAAUC,IAAG;AACvB,cAAI,MAAM,EAAEA,GAAE,MAAM,EAAE,QAAQ,mBAAmB;AAEjD,cAAI,IAAI,SAAS,YAAY,EAAG;AAEhC,eAAK,aAAa,KAAK,IAAI,EAAE,GAAG;AAAA,QACpC;AAAA,MACJ;AAAA,IACJ,GAAG;AAAA;AAAA;;;ACtTH;AAAA;AAAA;AAAC,KAAC,WAAY;AACV,UAAI,WAAW,qMAIX,2BAA2B,2CAC3B,SAAS,4EACT,aAAa,EAAE,GAAG,YAClB,KAAK,WAAW;AAEpB,iBAAW,aAAa,SAAUC,IAAG,MAAM;AACvC,aAAK,IAAIA;AACT,aAAK,OAAO;AAEZ,aAAK,oBAAoB;AAEzB,aAAK,KAAK;AAAA,MACd;AAEA,iBAAW,WAAW,YAAY;AAAA,QAC9B,MAAM,WAAY;AACd,eAAK,eAAe;AACpB,eAAK,YAAY;AAAA,QACrB;AAAA,QAEA,aAAa,WAAY;AACrB,eAAK,EAAE,KAAK,GAAG,SAAS,2BAA2B,EAAE,MAAM,KAAK,mBAAmB,IAAI,CAAC;AACxF,eAAK,EAAE,KAAK,GAAG,SAAS,0BAA0B,EAAE,MAAM,KAAK,kBAAkB,IAAI,CAAC;AACtF,eAAK,EAAE,YAAY,GAAG,SAAS,uBAAuB,EAAE,MAAM,KAAK,mBAAmB,IAAI,CAAC;AAAA,QAC/F;AAAA,QAEA,gBAAgB,WAAY;AACxB,cAAI,CAAC,KAAK,KAAK,gBAAgB;AAC3B,iBAAK,QAAQ;AAAA,UACjB;AACA,eAAK,kBAAkB;AAAA,QAC3B;AAAA,QAEA,mBAAmB,WAAY;AAC3B,cAAI,KAAK,KAAK,aAAa;AACvB,iBAAK,WAAW,OAAO;AAAA,UAC3B;AACA,cAAI,KAAK,KAAK,aAAa;AACvB,iBAAK,WAAW,OAAO;AAAA,UAC3B;AAAA,QACJ;AAAA,QAEA,SAAS,WAAY;AACjB,cAAI,QAAQ,KAAK,UAAU,KAAK,EAAE,WAAW,GACzCC,QAAO,GAAG,SAAS,UAAU,EAAE,OAAO,EAAC,MAAY,GAAG,KAAK,IAAI,CAAC;AACpE,eAAK,EAAE,KAAK,KAAKA,KAAI;AACrB,cAAI,KAAK,EAAE,QAAQ,SAAS;AACxB,cAAE,0BAA0B,KAAK,EAAE,IAAI,EAAE,SAAS,YAAY;AAAA,UAClE;AACA,eAAK,aAAa;AAAA,QACtB;AAAA,QAEA,WAAW,SAAUC,OAAM;AACvB,iBAAO,KAAK,EAAE,WAAW,KAAK,KAAK,UAAU,KAAK,EAAE,IAAI,GAAGA,KAAI;AAAA,QACnE;AAAA,QAEA,YAAY,SAAUC,OAAM;AACxB,cAAI,CAAC,KAAK,kBAAkB,QAAQ;AAChC,iBAAK,qBAAqB;AAAA,UAC9B;AAEA,cAAI,OAAO;AAAA,YACH,QAAQA;AAAA,YACR,OAAO,KAAK,EAAE,IAAIA,KAAI;AAAA,UAC1B,GACAF,QAAO,GAAG,SAAS,QAAQ,IAAI;AAEnC,cAAI,EAAE,kBAAkBE,QAAO,KAAK,KAAK,iBAAiB,EAAE,OAAQ;AACpE,eAAK,kBAAkB,OAAOF,KAAI;AAAA,QACtC;AAAA,QAEA,sBAAsB,WAAY;AAC9B,eAAK,EAAE,YAAY,OAAO,wBAAwB;AAClD,eAAK,oBAAoB,EAAE,wBAAwB,KAAK,EAAE,WAAW;AAAA,QACzE;AAAA,QAEA,cAAc,WAAY;AACtB,cAAI,EAAE,KAAK,KAAK,WAAW,KAAK,KAAK,YAAY,CAAC,KAAK,KAAK,yBAA0B;AAEtF,cAAIC,QAAO,KAAK,EAAE,YACdE,KAAIF,MAAK,OACTG,KAAIH,MAAK,MACTF,KAAIE,MAAK;AAEb,kBAAQ,KAAK,EAAE,MAAM;AAAA,YACjB,KAAK;AACD,kBAAI,CAAC,KAAK,EAAE,WAAW,IAAI,KAAKG,IAAGD,KAAE,GAAG,CAAC,GAAG,OAAO,GAAG;AAClD,qBAAK,YAAY,MAAM;AAAA,cAC3B;AACA,kBAAI,CAAC,KAAK,EAAE,WAAW,IAAI,KAAKC,IAAGD,KAAE,GAAG,CAAC,GAAG,OAAO,GAAG;AAClD,qBAAK,YAAY,MAAM;AAAA,cAC3B;AACA;AAAA,YACJ,KAAK;AACD,kBAAI,CAAC,KAAK,EAAE,WAAW,IAAI,KAAKC,KAAE,GAAGD,IAAGJ,EAAC,GAAG,MAAM,GAAG;AACjD,qBAAK,YAAY,MAAM;AAAA,cAC3B;AACA,kBAAI,CAAC,KAAK,EAAE,WAAW,IAAI,KAAKK,KAAE,GAAGD,IAAGJ,EAAC,GAAG,MAAM,GAAG;AACjD,qBAAK,YAAY,MAAM;AAAA,cAC3B;AACA;AAAA,YACJ,KAAK;AACD,kBAAI,SAAS,GAAG,UAAU,KAAK,EAAE,IAAI;AACrC,kBAAI,CAAC,KAAK,EAAE,WAAW,IAAI,KAAK,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG;AAC3D,qBAAK,YAAY,MAAM;AAAA,cAC3B;AACA,kBAAI,CAAC,KAAK,EAAE,WAAW,IAAI,KAAK,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,MAAM,GAAG;AAC3D,qBAAK,YAAY,MAAM;AAAA,cAC3B;AACA;AAAA,UACR;AAAA,QACJ;AAAA,QAEA,aAAa,SAAU,KAAK;AACxB,YAAE,mBAAmB,MAAM,MAAM,KAAK,EAAE,IAAI,EAAE,SAAS,YAAY;AAAA,QACvE;AAAA,QAEA,cAAc,SAAU,KAAK;AACzB,YAAE,mBAAmB,MAAM,MAAM,KAAK,EAAE,IAAI,EAAE,YAAY,YAAY;AAAA,QAC1E;AAAA,QAEA,mBAAmB,SAAUM,IAAG;AAC5B,cAAI,MAAM,EAAEA,GAAE,MAAM,EAAE,QAAQ,eAAe,GACzC,SAAS,IAAI,KAAK,QAAQ;AAE9B,eAAK,EAAE,MAAM,EAAE;AAAA,QACnB;AAAA,QAEA,kBAAkB,SAAUA,IAAG;AAC3B,cAAI,EAAEA,GAAE,MAAM,EAAE,SAAS,YAAY,EAAG;AAExC,cAAI,KAAK,EAAE,QAAQ,QAAQ;AACvB,mBAAO,KAAK,EAAE,OAAO;AAAA,UACzB;AAEA,eAAK,EAAE,OAAO;AAAA,QAClB;AAAA,MACJ;AAAA,IAEJ,GAAG;AAAA;AAAA;;;AChJH;AAAA;AAAA;AAAC,KAAC,WAAY;AACV,UAAI,WAAW,+nBAeX,aAAa,EAAE,GAAG,YAClB,KAAK,WAAW;AAEpB,iBAAW,aAAa,SAAU,MAAM,MAAM;AAC1C,aAAK,IAAI;AACT,aAAK,OAAO;AAEZ,aAAK,KAAK;AAAA,MACd;AAEA,iBAAW,WAAW,YAAY;AAAA,QAC9B,MAAM,WAAY;AACd,cAAI,QAAQ;AACZ,eAAK,SAAS,KAAK,EAAE,IAAI;AACzB,eAAK,WAAW;AAEhB,cAAI,UAAU,UAAU,MAAM,WAAW,GAAG;AACxC,oBAAQ;AAAA,UACZ;AAEA,eAAK,EAAE,IAAI,GAAG,cAAc,KAAK,cAAc,KAAK,IAAI,CAAC;AACzD,eAAK,QAAQ,GAAG,OAAO,KAAK,eAAe,KAAK,IAAI,CAAC;AACrD,eAAK,QAAQ,GAAG,WAAW,KAAK,gBAAgB,KAAK,IAAI,CAAC;AAC1D,eAAK,QAAQ,GAAG,oBAAoB,KAAK,mBAAmB,KAAK,IAAI,CAAC;AACtE,eAAK,QAAQ,GAAG,iBAAiB,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,QACrE;AAAA,QAEA,UAAU,SAAUC,OAAM;AACtB,cAAI,QAAQ,GAAG,cAAcA,KAAI;AAEjC,eAAK,YAAYA,KAAI;AACrB,eAAK,QAAQ,MAAM,QAAQ,KAAK,WAAW,KAAK,WAAW,MAAM;AACjE,eAAK,UAAU,MAAM,UAAU,KAAK,aAAa,KAAK,aAAa,MAAM;AAAA,QAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,qBAAqB,SAAUA,OAAM;AACjC,eAAK,WAAWA,MAAK,SAAS;AAC9B,eAAK,aAAaA,MAAK,WAAW;AAIlC,cAAI,KAAK,EAAE,kBAAkB;AACzB,gBAAI,KAAK,EAAE,iBAAiB,SAAS,IAAIA,MAAK,SAAS,GAAG;AACtD,mBAAK,aAAa,KAAK,KAAK;AAAA,YAChC;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,qBAAqB,SAAUA,OAAM;AACjC,eAAK,WAAWA,MAAK,SAAS;AAC9B,eAAK,aAAaA,MAAK,WAAW;AAElC,cAAI,KAAK,EAAE,kBAAkB;AACzB,gBAAI,KAAK,EAAE,iBAAiB,SAAS,IAAIA,MAAK,SAAS,GAAG;AACtD,mBAAK,aAAa,KAAK,KAAK;AAAA,YAChC;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,uBAAuB,WAAY;AAC/B,cAAI,WAAW,IACX,aAAa,IACb,OAAO,KAAK;AAEhB,eAAK,WAAW,KAAK,WAAW,KAAK,KAAK,WAAW,WAAW,IAAI,KAAK;AACzE,eAAK,aAAa,KAAK,aAAa,KAAK,KAAK,aAAa,aAAa,IAAI,KAAK;AACjF,eAAK,WAAW,KAAK,WAAW,KAAK,KAAK,WAAW,WAAW,WAAW,KAAK;AAChF,eAAK,aAAa,KAAK,aAAa,KAAK,KAAK,aAAa,aAAa,aAAa,KAAK;AAAA,QAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA,uBAAuB,SAAUA,OAAM;AACnC,cAAI,KAAK,QAAQ,KAAK,UAAU;AAC5B,iBAAK,QAAQ,KAAK;AAAA,UACtB,WAAW,KAAK,QAAQ,KAAK,UAAU;AACnC,iBAAK,QAAQ,KAAK;AAAA,UACtB;AAEA,cAAI,KAAK,UAAU,KAAK,YAAY;AAChC,iBAAK,UAAU,KAAK;AAAA,UACxB,WAAW,KAAK,UAAU,KAAK,YAAY;AACvC,iBAAK,UAAU,KAAK;AAAA,UACxB;AAAA,QACJ;AAAA,QAEA,YAAY,WAAY;AACpB,cAAI,KAAK,GAAG,mBACR,OAAO;AAAA,YACH,SAAS,KAAK;AAAA,YACd,SAAS,GAAG,KAAK,QAAQ;AAAA,YACzB,UAAU,KAAK,KAAK;AAAA,YACpB,WAAW,KAAK;AAAA,YAChB,aAAa,GAAG,KAAK,YAAY;AAAA,YACjC,QAAQ,KAAK;AAAA,YACb,QAAQ,GAAG,KAAK,UAAU;AAAA,YAC1B,SAAS,KAAK,KAAK;AAAA,YACnB,UAAU,GAAG,KAAK,OAAO;AAAA,UAC7B,GACA,YAAY,GAAG,SAAS,UAAU,IAAI;AAE1C,eAAK,cAAc,EAAE,SAAS,EAAE,SAAS,KAAK,EAAE,WAAW;AAC3D,eAAK,UAAU,EAAE,kBAAkB,KAAK,WAAW;AACnD,eAAK,SAAS,EAAE,kBAAkB,KAAK,WAAW;AAClD,eAAK,WAAW,EAAE,oBAAoB,KAAK,WAAW;AACtD,eAAK,aAAa,EAAE,mCAAmC,KAAK,WAAW;AACvE,eAAK,eAAe,EAAE,qCAAqC,KAAK,WAAW;AAE3E,cAAI,KAAK,EAAE,MAAM;AACb,iBAAK,QAAQ,EAAE,8CAA8C,EACxD,SAAS,EAAE,6BAA6B,KAAK,WAAW,CAAC,EACzD,KAAK,KAAK,SAAS;AAExB,iBAAK,YAAY,SAAS,SAAS;AAAA,UACvC;AAAA,QACJ;AAAA,QAEA,oBAAoB,WAAY;AAC5B,cAAIC,KAAK,GAAG,kBAAkB,KAAK,YAAY,GAC3CC,KAAI,GAAG,kBAAkB,KAAK,OAAO;AAEzC,eAAK,WAAW,KAAKD,EAAC;AACtB,eAAK,aAAa,KAAKC,EAAC;AAExB,cAAI,KAAK,EAAE,MAAM;AACb,iBAAK,MAAM,KAAK,KAAK,SAAS;AAAA,UAClC;AAAA,QACJ;AAAA,QAEA,eAAe,WAAY;AACvB,eAAK,OAAO,KAAK;AAAA,YACb,KAAK,KAAK;AAAA,YACV,KAAK,KAAK;AAAA,UACd,CAAC,EAAE,IAAI,KAAK,KAAK;AAEjB,eAAK,SAAS,KAAK;AAAA,YACf,KAAK,KAAK;AAAA,YACV,KAAK,KAAK;AAAA,UACd,CAAC,EAAE,IAAI,KAAK,OAAO;AAAA,QACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,aAAa,SAAUF,OAAM;AACzB,eAAK,sBAAsB;AAC3B,cAAIA,OAAM;AACN,gBAAI,GAAG,OAAOA,OAAM,KAAK,EAAE,KAAK,OAAO,GAAG;AACtC,mBAAK,oBAAoB,KAAK,EAAE,KAAK,OAAO;AAAA,YAChD,WAAW,GAAG,OAAOA,OAAM,KAAK,EAAE,KAAK,OAAO,GAAG;AAC7C,mBAAK,oBAAoB,KAAK,EAAE,KAAK,OAAO;AAAA,YAChD;AAAA,UACJ;AAEA,eAAK,sBAAsBA,KAAI;AAAA,QACnC;AAAA,QAEA,QAAQ,WAAY;AAChB,eAAK,cAAc;AACnB,eAAK,mBAAmB;AAAA,QAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASA,wBAAwB,SAAUA,OAAM,MAAM;AAC1C,cAAIG,KAAIH,OACJ,QAAQA;AAEZ,cAAIA,iBAAgB,MAAM;AACtB,YAAAG,KAAI,GAAG,cAAcH,KAAI;AACzB,oBAAQG,GAAE;AAAA,UACd;AAEA,cAAI,QAAQ,QAAQ,KAAK,EAAE,MACvB,YAAY;AAEhB,cAAI,OAAO;AACP,oBAAO,MAAM;AAAA,cACT,KAAK,SAAS;AACV,wBAAQ;AACR;AAAA,cACJ,KAAK,SAAS;AACV,4BAAY;AACZ;AAAA,cACJ,KAAK,QAAQ;AACT,wBAAQ,QAAQ;AAChB,4BAAY;AACZ;AAAA,cACJ;AACI;AAAA,YACR;AAAA,UACJ;AAEA,iBAAO;AAAA,YACH;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AAAA,QAEA,IAAI,MAAO,KAAK;AACZ,eAAK,SAAS;AAEd,cAAI,eAAe,KAAK,uBAAuB,GAAG;AAElD,eAAK,eAAe,aAAa;AACjC,eAAK,YAAY,aAAa;AAAA,QAClC;AAAA,QAEA,IAAI,QAAQ;AACR,iBAAO,KAAK;AAAA,QAChB;AAAA;AAAA;AAAA,QAKA,gBAAgB,SAAUC,IAAG;AACzB,cAAI,UAAU,EAAEA,GAAE,MAAM,GACpB,OAAO,QAAQ,KAAK,MAAM;AAE9B,eAAK,EAAE,qBAAqB;AAE5B,eAAK,IAAI,IAAI,QAAQ,IAAI;AACzB,eAAK,mBAAmB;AACxB,eAAK,EAAE,SAAS,cAAc,CAAC,KAAK,OAAO,KAAK,OAAO,CAAC;AAExD,eAAK,YAAY,KAAK,EAAE,gBAAgB;AACxC,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,eAAe,SAAUA,IAAG,MAAM;AAC9B,eAAK,YAAY,IAAI;AACrB,eAAK,OAAO;AAAA,QAChB;AAAA,QAEA,oBAAoB,SAAUA,IAAG;AAC7B,cAAI,OAAO,EAAEA,GAAE,MAAM,EAAE,KAAK,MAAM;AAClC,YAAE,+BAA+B,MAAM,KAAK,WAAW,EAAE,SAAS,SAAS;AAAA,QAC/E;AAAA,QAEA,kBAAkB,SAAUA,IAAG;AAC3B,cAAI,OAAO,EAAEA,GAAE,MAAM,EAAE,KAAK,MAAM;AAClC,cAAI,KAAK,EAAE,QAAS;AACpB,YAAE,+BAA+B,MAAM,KAAK,WAAW,EAAE,YAAY,SAAS;AAAA,QAClF;AAAA,QAEA,iBAAiB,SAAUA,IAAG;AAC1B,eAAK,EAAE,qBAAqB;AAAA,QAChC;AAAA,MACJ;AAAA,IACJ,GAAG;AAAA;AAAA;;;AC1RH;AAAA;AAAA;AAWA,KAAC,SAAS,YAAYC,SAAQ;AAC5B,UAAIC,UAASD;AACb,UAAIE,YAAWF,QAAO;AACtB;AACA,eAAS,QAAQ,KAAK;AACpB;AACA,YAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AACvE,oBAAU,SAASG,SAAQC,MAAK;AAC9B,mBAAO,OAAOA;AAAA,UAChB;AAAA,QACF,OAAO;AACL,oBAAU,SAASD,SAAQC,MAAK;AAC9B,mBAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,UAC3H;AAAA,QACF;AACA,eAAO,QAAQ,GAAG;AAAA,MACpB;AACA,UAAI,MAAM,OAAO,CAAC;AAClB,UAAI,UAAU;AACd,UAAI,OAAO,WAAW,cAAc,OAAO,KAAK;AAC9C,eAAO,YAAY,CAAC,GAAG,WAAW;AAChC,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,WAAK,OAAO,WAAW,cAAc,cAAc,QAAQ,MAAM,OAAO,YAAY,OAAO,WAAW,OAAO,YAAY,aAAa,YAAY;AAChJ,YAAI,SAAS,MAAM,YAAY,SAAS,IAAI;AAC5C,eAAO,UAAU;AAAA,MACnB;AACA,UAAI,OAAOJ,QAAO,qBAAqB,YAAY;AACjD,QAAAA,QAAO,MAAM;AAAA,MACf;AACA,UAAI;AACJ,eAAS,aAAa,OAAO;AAC3B,aAAK,OAAO;AACZ,aAAK,QAAQ,MAAM;AACnB,aAAK,UAAU,IAAI,OAAO,MAAM,OAAO,8CAA8C;AACrF,YAAI,MAAM,QAAQ;AAChB,eAAK,SAAS,MAAM;AACpB,eAAK,WAAW,aAAa,OAAO,KAAK,QAAQ,QAAQ;AAAA,QAC3D;AACA,aAAK,QAAQ,IAAI,MAAM,EAAE;AAAA,MAC3B;AACA,mBAAa,YAAY,OAAO,OAAO,MAAM,SAAS;AACtD,mBAAa,UAAU,cAAc;AACrC;AACA,eAAS,yBAAyB,QAAQ,UAAU;AAClD,YAAI,UAAU,MAAM;AAClB,iBAAO,CAAC;AAAA,QACV;AACA,YAAIK,UAAS,8BAA8B,QAAQ,QAAQ;AAC3D,YAAI,KAAKC;AACT,YAAI,OAAO,uBAAuB;AAChC,cAAI,mBAAmB,OAAO,sBAAsB,MAAM;AAC1D,eAAKA,KAAI,GAAGA,KAAI,iBAAiB,QAAQA,MAAK;AAC5C,kBAAM,iBAAiBA,EAAC;AACxB,gBAAI,SAAS,QAAQ,GAAG,KAAK,GAAG;AAC9B;AAAA,YACF;AACA,gBAAI,CAAC,OAAO,UAAU,qBAAqB,KAAK,QAAQ,GAAG,GAAG;AAC5D;AAAA,YACF;AACA,YAAAD,QAAO,GAAG,IAAI,OAAO,GAAG;AAAA,UAC1B;AAAA,QACF;AACA,eAAOA;AAAA,MACT;AACA,eAAS,8BAA8B,QAAQ,UAAU;AACvD,YAAI,UAAU,MAAM;AAClB,iBAAO,CAAC;AAAA,QACV;AACA,YAAIA,UAAS,CAAC;AACd,YAAI,aAAa,OAAO,KAAK,MAAM;AACnC,YAAI,KAAKC;AACT,aAAKA,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAK;AACtC,gBAAM,WAAWA,EAAC;AAClB,cAAI,SAAS,QAAQ,GAAG,KAAK,GAAG;AAC9B;AAAA,UACF;AACA,UAAAD,QAAO,GAAG,IAAI,OAAO,GAAG;AAAA,QAC1B;AACA,eAAOA;AAAA,MACT;AACA,eAAS,gBAAgB,KAAK,KAAK,OAAO;AACxC,YAAI,OAAO,KAAK;AACd,iBAAO,eAAe,KAAK,KAAK;AAAA,YAC9B;AAAA,YACA,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,UAAU;AAAA,UACZ,CAAC;AAAA,QACH,OAAO;AACL,cAAI,GAAG,IAAI;AAAA,QACb;AACA,eAAO;AAAA,MACT;AACA,eAAS,UAAU,UAAU,YAAY;AACvC,YAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAC3D,gBAAM,IAAI,UAAU,oDAAoD;AAAA,QAC1E;AACA,iBAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW;AAAA,UACrE,aAAa;AAAA,YACX,OAAO;AAAA,YACP,UAAU;AAAA,YACV,cAAc;AAAA,UAChB;AAAA,QACF,CAAC;AACD,YAAI,YAAY;AACd,0BAAgB,UAAU,UAAU;AAAA,QACtC;AAAA,MACF;AACA,eAAS,gBAAgBE,IAAGC,IAAG;AAC7B,0BAAkB,OAAO,kBAAkB,SAASC,iBAAgBF,IAAGC,IAAG;AACxE,UAAAD,GAAE,YAAYC;AACd,iBAAOD;AAAA,QACT;AACA,eAAO,gBAAgBA,IAAGC,EAAC;AAAA,MAC7B;AACA,eAAS,aAAa,SAAS;AAC7B,YAAI,4BAA4B,0BAA0B;AAC1D,eAAO,SAAS,uBAAuB;AACrC,cAAI,QAAQ,gBAAgB,OAAO,GAAG;AACtC,cAAI,2BAA2B;AAC7B,gBAAI,YAAY,gBAAgB,IAAI,EAAE;AACtC,qBAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;AAAA,UACxD,OAAO;AACL,qBAAS,MAAM,MAAM,MAAM,SAAS;AAAA,UACtC;AACA,iBAAO,2BAA2B,MAAM,MAAM;AAAA,QAChD;AAAA,MACF;AACA,eAAS,2BAA2BE,OAAM,MAAM;AAC9C,YAAI,SAAS,QAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AACtE,iBAAO;AAAA,QACT;AACA,eAAO,uBAAuBA,KAAI;AAAA,MACpC;AACA,eAAS,uBAAuBA,OAAM;AACpC,YAAIA,UAAS,QAAQ;AACnB,gBAAM,IAAI,eAAe,2DAA6D;AAAA,QACxF;AACA,eAAOA;AAAA,MACT;AACA,eAAS,4BAA4B;AACnC,YAAI,OAAO,YAAY,eAAe,CAAC,QAAQ,WAAW;AACxD,iBAAO;AAAA,QACT;AACA,YAAI,QAAQ,UAAU,MAAM;AAC1B,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,UAAU,YAAY;AAC/B,iBAAO;AAAA,QACT;AACA,YAAI;AACF,eAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,MAAM,CAAC,GAAG,WAAW;AAAA,UAAC,CAAC,CAAC;AACvE,iBAAO;AAAA,QACT,SAASC,IAAG;AACV,iBAAO;AAAA,QACT;AAAA,MACF;AACA,eAAS,gBAAgBJ,IAAG;AAC1B,0BAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASK,iBAAgBL,IAAG;AAC5F,iBAAOA,GAAE,aAAa,OAAO,eAAeA,EAAC;AAAA,QAC/C;AACA,eAAO,gBAAgBA,EAAC;AAAA,MAC1B;AACA,eAAS,mBAAmB,KAAK;AAC/B,eAAO,mBAAmB,GAAG,KAAK,iBAAiB,GAAG,KAAK,4BAA4B,GAAG,KAAK,mBAAmB;AAAA,MACpH;AACA,eAAS,qBAAqB;AAC5B,cAAM,IAAI,UAAU,sIAAsI;AAAA,MAC5J;AACA,eAAS,iBAAiB,MAAM;AAC9B,YAAI,OAAO,WAAW,eAAe,OAAO,YAAY,OAAO,IAAI,GAAG;AACpE,iBAAO,MAAM,KAAK,IAAI;AAAA,QACxB;AAAA,MACF;AACA,eAAS,mBAAmB,KAAK;AAC/B,YAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,iBAAO,kBAAkB,GAAG;AAAA,QAC9B;AAAA,MACF;AACA,eAAS,eAAe,KAAKD,IAAG;AAC9B,eAAO,gBAAgB,GAAG,KAAK,sBAAsB,KAAKA,EAAC,KAAK,4BAA4B,KAAKA,EAAC,KAAK,iBAAiB;AAAA,MAC1H;AACA,eAAS,mBAAmB;AAC1B,cAAM,IAAI,UAAU,2IAA2I;AAAA,MACjK;AACA,eAAS,sBAAsB,KAAKA,IAAG;AACrC,YAAI,OAAO,WAAW,eAAe,EAAE,OAAO,YAAY,OAAO,GAAG,IAAI;AACtE;AAAA,QACF;AACA,YAAI,OAAO,CAAC;AACZ,YAAI,KAAK;AACT,YAAI,KAAK;AACT,YAAI,KAAK;AACT,YAAI;AACF,mBAAS,KAAK,IAAI,OAAO,QAAQ,EAAE,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,KAAK,GAAG,OAAO,KAAK,MAAM;AAClF,iBAAK,KAAK,GAAG,KAAK;AAClB,gBAAIA,MAAK,KAAK,WAAWA,IAAG;AAC1B;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,KAAK;AACZ,eAAK;AACL,eAAK;AAAA,QACP,UAAE;AACA,cAAI;AACF,gBAAI,CAAC,MAAM,GAAG,QAAQ,KAAK,MAAM;AAC/B,iBAAG,QAAQ,EAAE;AAAA,YACf;AAAA,UACF,UAAE;AACA,gBAAI,IAAI;AACN,oBAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,eAAS,gBAAgB,KAAK;AAC5B,YAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,eAAS,WAAW;AAClB,mBAAW,OAAO,UAAU,SAASD,SAAQ;AAC3C,mBAASC,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,gBAAI,SAAS,UAAUA,EAAC;AACxB,qBAAS,OAAO,QAAQ;AACtB,kBAAI,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG,GAAG;AACrD,gBAAAD,QAAO,GAAG,IAAI,OAAO,GAAG;AAAA,cAC1B;AAAA,YACF;AAAA,UACF;AACA,iBAAOA;AAAA,QACT;AACA,eAAO,SAAS,MAAM,MAAM,SAAS;AAAA,MACvC;AACA,eAAS,gBAAgB,UAAU,aAAa;AAC9C,YAAI,EAAE,oBAAoB,cAAc;AACtC,gBAAM,IAAI,UAAU,mCAAmC;AAAA,QACzD;AAAA,MACF;AACA,eAAS,kBAAkBA,SAAQQ,QAAO;AACxC,iBAASP,KAAI,GAAGA,KAAIO,OAAM,QAAQP,MAAK;AACrC,cAAI,aAAaO,OAAMP,EAAC;AACxB,qBAAW,aAAa,WAAW,cAAc;AACjD,qBAAW,eAAe;AAC1B,cAAI,WAAW,YAAY;AACzB,uBAAW,WAAW;AAAA,UACxB;AACA,iBAAO,eAAeD,SAAQ,WAAW,KAAK,UAAU;AAAA,QAC1D;AAAA,MACF;AACA,eAAS,aAAa,aAAa,YAAY,aAAa;AAC1D,YAAI,YAAY;AACd,4BAAkB,YAAY,WAAW,UAAU;AAAA,QACrD;AACA,YAAI,aAAa;AACf,4BAAkB,aAAa,WAAW;AAAA,QAC5C;AACA,eAAO;AAAA,MACT;AACA,eAAS,2BAA2BE,IAAG,gBAAgB;AACrD,YAAIO;AACJ,YAAI,OAAO,WAAW,eAAeP,GAAE,OAAO,QAAQ,KAAK,MAAM;AAC/D,cAAI,MAAM,QAAQA,EAAC,MAAMO,MAAK,4BAA4BP,EAAC,MAAM,kBAAkBA,MAAK,OAAOA,GAAE,WAAW,UAAU;AACpH,gBAAIO,KAAI;AACN,cAAAP,KAAIO;AAAA,YACN;AACA,gBAAIR,KAAI;AACR,gBAAIS,KAAI,SAASA,KAAI;AAAA,YAAC;AACtB,mBAAO;AAAA,cACL,GAAGA;AAAA,cACH,GAAG,SAASC,KAAI;AACd,oBAAIV,MAAKC,GAAE,QAAQ;AACjB,yBAAO;AAAA,oBACL,MAAM;AAAA,kBACR;AAAA,gBACF;AACA,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,OAAOA,GAAED,IAAG;AAAA,gBACd;AAAA,cACF;AAAA,cACA,GAAG,SAASK,GAAE,KAAK;AACjB,sBAAM;AAAA,cACR;AAAA,cACA,GAAGI;AAAA,YACL;AAAA,UACF;AACA,gBAAM,IAAI,UAAU,uIAAuI;AAAA,QAC7J;AACA,YAAI,mBAAmB,MAAM,SAAS,OAAO;AAC7C,eAAO;AAAA,UACL,GAAG,SAASE,KAAI;AACd,YAAAH,MAAKP,GAAE,OAAO,QAAQ,EAAE;AAAA,UAC1B;AAAA,UACA,GAAG,SAASS,KAAI;AACd,gBAAI,OAAOF,IAAG,KAAK;AACnB,+BAAmB,KAAK;AACxB,mBAAO;AAAA,UACT;AAAA,UACA,GAAG,SAASH,GAAE,KAAK;AACjB,qBAAS;AACT,kBAAM;AAAA,UACR;AAAA,UACA,GAAG,SAASO,KAAI;AACd,gBAAI;AACF,kBAAI,CAAC,oBAAoBJ,IAAG,QAAQ,KAAK,MAAM;AAC7C,gBAAAA,IAAG,QAAQ,EAAE;AAAA,cACf;AAAA,YACF,UAAE;AACA,kBAAI,QAAQ;AACV,sBAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,eAAS,4BAA4BP,IAAG,QAAQ;AAC9C,YAAI,CAACA,IAAG;AACN;AAAA,QACF;AACA,YAAI,OAAOA,OAAM,UAAU;AACzB,iBAAO,kBAAkBA,IAAG,MAAM;AAAA,QACpC;AACA,YAAIS,KAAI,OAAO,UAAU,SAAS,KAAKT,EAAC,EAAE,MAAM,GAAG,EAAE;AACrD,YAAIS,OAAM,YAAYT,GAAE,aAAa;AACnC,UAAAS,KAAIT,GAAE,YAAY;AAAA,QACpB;AACA,YAAIS,OAAM,SAASA,OAAM,OAAO;AAC9B,iBAAO,MAAM,KAAKT,EAAC;AAAA,QACrB;AACA,YAAIS,OAAM,eAAe,2CAA2C,KAAKA,EAAC,GAAG;AAC3E,iBAAO,kBAAkBT,IAAG,MAAM;AAAA,QACpC;AAAA,MACF;AACA,eAAS,kBAAkB,KAAKY,MAAK;AACnC,YAAIA,QAAO,QAAQA,OAAM,IAAI,QAAQ;AACnC,UAAAA,OAAM,IAAI;AAAA,QACZ;AACA,iBAASb,KAAI,GAAG,OAAO,IAAI,MAAMa,IAAG,GAAGb,KAAIa,MAAKb,MAAK;AACnD,eAAKA,EAAC,IAAI,IAAIA,EAAC;AAAA,QACjB;AACA,eAAO;AAAA,MACT;AACA,eAAS,QAAQ,KAAK;AACpB;AACA,YAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AACvE,oBAAU,SAASH,SAAQC,MAAK;AAC9B,mBAAO,OAAOA;AAAA,UAChB;AAAA,QACF,OAAO;AACL,oBAAU,SAASD,SAAQC,MAAK;AAC9B,mBAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,UAC3H;AAAA,QACF;AACA,eAAO,QAAQ,GAAG;AAAA,MACpB;AACA,OAAC,WAAW;AACV,YAAIgB,YAAW,OAAO;AACtB,YAAIC,aAAY,OAAO;AACvB,YAAIC,gBAAe,OAAO;AAC1B,YAAIC,gBAAe,OAAO,UAAU;AACpC,YAAIC,qBAAoB,OAAO;AAC/B,YAAIC,oBAAmB,OAAO;AAC9B,YAAI,iBAAiB,SAASC,gBAAerB,SAAQ;AACnD,iBAAOgB,WAAUhB,SAAQ,cAAc;AAAA,YACrC,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AACA,YAAIsB,cAAa,SAASA,YAAW,UAAUC,SAAQ;AACrD,iBAAO,WAAW;AAChB,gBAAI,CAACA,SAAQ;AACX,cAAAA,UAAS;AAAA,gBACP,SAAS,CAAC;AAAA,cACZ;AACA,uBAASA,QAAO,SAASA,OAAM;AAAA,YACjC;AACA,mBAAOA,QAAO;AAAA,UAChB;AAAA,QACF;AACA,YAAIC,YAAW,SAASA,UAASxB,SAAQyB,MAAK;AAC5C,yBAAezB,OAAM;AACrB,mBAAS,QAAQyB,MAAK;AACpB,YAAAT,WAAUhB,SAAQ,MAAM;AAAA,cACtB,KAAKyB,KAAI,IAAI;AAAA,cACb,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,eAAe,SAASC,cAAa1B,SAAQuB,SAAQ;AACvD,yBAAevB,OAAM;AACrB,cAAI,QAAQuB,OAAM,MAAM,YAAY,OAAOA,YAAW,YAAY;AAChE,gBAAI,YAAY,2BAA2BJ,mBAAkBI,OAAM,CAAC,GAAG;AACvE,gBAAI;AACF,kBAAI,QAAQ,SAASI,SAAQ;AAC3B,oBAAI,MAAM,MAAM;AAChB,oBAAI,CAACT,cAAa,KAAKlB,SAAQ,GAAG,KAAK,QAAQ,WAAW;AACxD,kBAAAgB,WAAUhB,SAAQ,KAAK;AAAA,oBACrB,KAAK,SAAS4B,OAAM;AAClB,6BAAOL,QAAO,GAAG;AAAA,oBACnB;AAAA,oBACA,YAAYH,kBAAiBG,SAAQ,GAAG,EAAE;AAAA,kBAC5C,CAAC;AAAA,gBACH;AAAA,cACF;AACA,mBAAK,UAAU,EAAE,GAAG,EAAE,QAAQ,UAAU,EAAE,GAAG,QAAQ;AACnD,sBAAM;AAAA,cACR;AAAA,YACF,SAASM,MAAK;AACZ,wBAAU,EAAEA,IAAG;AAAA,YACjB,UAAE;AACA,wBAAU,EAAE;AAAA,YACd;AAAA,UACF;AACA,iBAAO7B;AAAA,QACT;AACA,YAAI,aAAa,SAAS8B,YAAWP,SAAQ;AAC3C,cAAIA,WAAUA,QAAO,YAAY;AAC/B,mBAAOA;AAAA,UACT;AACA,iBAAO,aAAaP,WAAUD,UAASE,cAAaM,OAAM,CAAC,GAAG,WAAW;AAAA,YACvE,OAAOA;AAAA,YACP,YAAY;AAAA,UACd,CAAC,GAAGA,OAAM;AAAA,QACZ;AACA,YAAI,gBAAgBD,YAAW,SAASS,UAAS;AAC/C;AACA,iBAAO,eAAeA,UAAS,cAAc;AAAA,YAC3C,OAAO;AAAA,UACT,CAAC;AACD,mBAAS,aAAaC,IAAG;AACvB,mBAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,OAAM,OAAOA,OAAM;AAAA,UAC5E;AACA,UAAAD,SAAQ,eAAe;AACvB,mBAAS,QAAQC,IAAG;AAClB,mBAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,OAAM,OAAOA,OAAM;AAAA,UACpG;AACA,UAAAD,SAAQ,UAAU;AAClB,mBAAS,MAAMC,IAAG;AAChB,mBAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK,OAAOA,MAAK;AAAA,UAC1E;AACA,UAAAD,SAAQ,QAAQ;AAChB,mBAAS,iBAAiBnB,IAAG;AAC3B,gBAAIE,OAAMF,GAAE;AACZ,gBAAI,SAAS;AACb,gBAAIX,KAAI;AACR,mBAAOA,KAAIa,MAAK;AACd,kBAAImB,OAAMrB,GAAE,OAAOX,EAAC;AACpB,kBAAI8B,SAAQ,kBAAkBE,IAAG,GAAG;AAClC,0BAAU,OAAOA;AAAA,cACnB,OAAO;AACL,oBAAI,EAAEA,SAAQ,OAAOA,SAAQ,OAAOA,QAAO,OAAOA,QAAO,OAAOA,QAAO,OAAOA,QAAO,OAAOhC,OAAM,KAAKgC,QAAO,OAAOA,QAAO,MAAM;AAChI,sBAAI,WAAWA,KAAI,WAAW,CAAC;AAC/B,uBAAK,WAAW,WAAW,OAAO;AAChC,wBAAI,gBAAgBrB,GAAE,WAAWX,IAAG;AACpC,yBAAK,WAAW,WAAW,UAAU,gBAAgB,WAAW,OAAO;AACrE,4BAAM,MAAM,iCAAiC;AAAA,oBAC/C;AACA,iCAAa,WAAW,SAAS,OAAO,gBAAgB,QAAQ;AAAA,kBAClE;AACA,4BAAU,OAAO,SAAS,SAAS,EAAE,IAAI;AAAA,gBAC3C,OAAO;AACL,4BAAUgC;AAAA,gBACZ;AAAA,cACF;AACA,cAAAhC;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AACA,UAAA8B,SAAQ,mBAAmB;AAC3B,mBAAS,UAAUnB,IAAG;AACpB,gBAAIE,OAAMF,GAAE;AACZ,gBAAI,SAAS;AACb,gBAAIX,KAAI;AACR,gBAAI;AACJ,mBAAOA,KAAIa,MAAK;AACd,kBAAImB,OAAMrB,GAAE,OAAOX,EAAC;AACpB,kBAAIgC,SAAQ,KAAK;AACf,gBAAAA,OAAM;AAAA,cACR,WAAWA,SAAQ,MAAM;AACvB,gBAAAA,OAAM;AAAA,cACR,YAAY,cAAcF,SAAQ,mBAAmBE,IAAG,OAAO,QAAQ;AACrE,gBAAAA,OAAM;AAAA,cACR;AACA,wBAAUA;AACV,cAAAhC;AAAA,YACF;AACA,mBAAO,MAAM,SAAS;AAAA,UACxB;AACA,UAAA8B,SAAQ,YAAY;AACpB,UAAAA,SAAQ,oBAAoB;AAAA,YAC1B,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,GAAG;AAAA,YACH,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAM;AAAA,YACN,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,MAAM;AAAA,YACN,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AACA,UAAAA,SAAQ,qBAAqB;AAAA,YAC3B,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AACA,UAAAA,SAAQ,yBAAyB;AAAA,YAC/B,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,MAAM;AAAA,YACN,KAAM;AAAA,UACR;AACA,UAAAA,SAAQ,0BAA0B;AAAA,YAChC,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,GAAG;AAAA,YACH,MAAM;AAAA,YACN,KAAK;AAAA,UACP;AAAA,QACF,CAAC;AACD,YAAI,yBAAyBT,YAAW,SAASS,UAAS;AACxD;AACA,iBAAO,eAAeA,UAAS,cAAc;AAAA,YAC3C,OAAO;AAAA,UACT,CAAC;AACD,cAAI,UAAU,cAAc;AAC5B,mBAAS,iBAAiBG,MAAK,KAAK,SAAS,kBAAkB,sBAAsB,oBAAoB;AACvG,gBAAIC,KAAID,KAAI;AACZ,gBAAID,OAAM;AACV,qBAAS,OAAO,OAAO,aAAa;AAClC,kBAAI,SAAS;AACb;AACA,cAAAA,OAAMC,KAAI,OAAO,GAAG;AACpB,qBAAO,MAAMC,IAAG;AACd,oBAAIF,SAAQ,OAAO;AACjB;AACA,yBAAO;AAAA,gBACT,WAAWA,SAAQ,MAAM;AACvB;AACA,kBAAAA,OAAMC,KAAI,OAAO,GAAG;AACpB,sBAAI,MAAM;AACV,sBAAID,SAAQ,OAAO;AACjB,8BAAU;AAAA,kBACZ,YAAY,MAAM,YAAYA,IAAG,OAAO,QAAQ;AAC9C,8BAAU;AAAA,kBACZ,WAAW,QAAQ,MAAMA,IAAG,GAAG;AAC7B,wBAAIG,OAAMH;AACV;AACA,oBAAAA,OAAMC,KAAI,OAAO,GAAG;AACpB,2BAAO,QAAQ,MAAMD,IAAG,GAAG;AACzB,sBAAAG,QAAOH;AACP;AACA,sBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,oBACtB;AACA,wBAAID,SAAQ,KAAK;AACf;AACA,sBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,oBACtB;AACA,8BAAU,OAAO,aAAa,SAASE,MAAK,EAAE,CAAC;AAC/C;AAAA,kBACF,OAAO;AACL,8BAAUH;AAAA,kBACZ;AAAA,gBACF,OAAO;AACL,4BAAUA;AAAA,gBACZ;AACA;AACA,gBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,cACtB;AACA,qBAAO;AAAA,YACT;AACA,qBAAS,WAAW;AAClB,kBAAI,SAAS;AACb,cAAAD,OAAMC,KAAI,OAAO,GAAG;AACpB,qBAAO,MAAMC,IAAG;AACd,oBAAI,QAAQ,QAAQF,IAAG,GAAG;AACxB,4BAAUA;AAAA,gBACZ,WAAWA,SAAQ,MAAM;AACvB;AACA,sBAAI,OAAOE,IAAG;AACZ,0BAAM,MAAM,0CAA0C;AAAA,kBACxD;AACA,kBAAAF,OAAMC,KAAI,OAAO,GAAG;AACpB,sBAAI,QAAQ,kBAAkBD,IAAG,GAAG;AAClC,8BAAUA;AAAA,kBACZ,WAAW,QAAQ,MAAMA,IAAG,GAAG;AAC7B,wBAAIG,OAAMH;AACV;AACA,oBAAAA,OAAMC,KAAI,OAAO,GAAG;AACpB,2BAAO,QAAQ,MAAMD,IAAG,GAAG;AACzB,sBAAAG,QAAOH;AACP;AACA,sBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,oBACtB;AACA,wBAAID,SAAQ,KAAK;AACf;AACA,sBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,oBACtB;AACA,8BAAU,OAAO,aAAa,SAASE,MAAK,EAAE,CAAC;AAC/C;AAAA,kBACF,OAAO;AACL,8BAAUH;AAAA,kBACZ;AAAA,gBACF,OAAO;AACL,yBAAO;AAAA,gBACT;AACA;AACA,gBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,cACtB;AACA,qBAAO;AAAA,YACT;AACA,qBAAS,iBAAiB;AACxB,cAAAD,OAAMC,KAAI,OAAO,GAAG;AACpB,kBAAI,SAAS;AACb,qBAAOD,SAAQ,OAAOA,SAAQ,OAAQA,SAAQ,QAAQA,SAAQ,QAAQA,SAAQ,MAAM;AAClF,yBAAS;AACT;AACA,gBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,cACtB;AACA,qBAAO;AAAA,YACT;AACA,qBAASG,UAAS;AAChB,kBAAI,MAAM,cAAc;AACxB,kBAAI,MAAMF,IAAG;AACX,sBAAM,MAAM,wBAAwBD,KAAI,OAAO,GAAG,IAAI,UAAU;AAAA,cAClE;AACA,qBAAO;AAAA,YACT;AACA,qBAAS,gBAAgB;AACvB,kBAAI,WAAW,oBAAoB;AACnC,kBAAI,CAAC,UAAU;AACb,uBAAO;AAAA,cACT;AACA,kBAAI,MAAM;AACV,cAAAD,OAAMC,KAAI,OAAO,GAAG;AACpB,qBAAOD,SAAQ,KAAK;AAClB;AACA,+BAAe;AACf,oBAAI,IAAI,SAAS,aAAa;AAC5B,wBAAM;AAAA,oBACJ,MAAM;AAAA,oBACN,WAAW,CAAE,QAAS;AAAA,kBACxB;AAAA,gBACF;AACA,2BAAW,oBAAoB;AAC/B,oBAAI,CAAC,UAAU;AACb,wBAAM,MAAM,0BAA0B;AAAA,gBACxC;AACA,oBAAI,UAAU,KAAK,QAAQ;AAAA,cAC7B;AACA,qBAAO;AAAA,YACT;AACA,qBAAS,sBAAsB;AAC7B,6BAAe;AACf,kBAAI,WAAW;AAAA,gBACb,MAAM;AAAA,cACR;AACA,kBAAI,QAAQ,UAAU;AACtB,kBAAI,CAAC,OAAO;AACV,uBAAO;AAAA,cACT;AACA,kBAAI,cAAc;AAClB,qBAAO,OAAO;AACZ,sBAAM,OAAO;AACb,4BAAY,OAAO;AACnB,8BAAc;AACd,+BAAe;AACf,gBAAAA,OAAMC,KAAI,OAAO,GAAG;AACpB,oBAAI,OAAOC,MAAKF,SAAQ,OAAOA,SAAQ,KAAK;AAC1C;AAAA,gBACF;AACA,oBAAI,qBAAqBA,IAAG,GAAG;AAC7B,sBAAI,KAAKA;AACT;AACA,iCAAe;AACf,0BAAQ,UAAU;AAClB,sBAAI,CAAC,OAAO;AACV,0BAAM,MAAM,0BAA0B,KAAK,IAAI;AAAA,kBACjD;AACA,wBAAM,kBAAkB;AAAA,gBAC1B,OAAO;AACL,0BAAQ,UAAU;AAClB,sBAAI,OAAO;AACT,0BAAM,kBAAkB;AAAA,kBAC1B;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AACA,qBAAS,YAAY;AACnB,kBAAI,QAAQ;AACZ,qBAAO,MAAME,IAAG;AACd,gBAAAF,OAAMC,KAAI,OAAO,GAAG;AACpB,oBAAID,SAAQ,KAAK;AACf;AACA,mBAAC,QAAQ,SAAS,CAAC,GAAG,UAAU;AAAA,gBAClC,WAAW,QAAQ,aAAaA,IAAG,KAAKA,SAAQ,MAAM;AACpD,mBAAC,QAAQ,SAAS,CAAC,GAAG,UAAU,SAAS;AAAA,gBAC3C,WAAWA,SAAQ,KAAK;AACtB;AACA,0BAAQ,SAAS,CAAC;AAClB,mBAAC,MAAM,aAAa,MAAM,cAAc,CAAC,GAAG,KAAK,SAAS,CAAC;AAAA,gBAC7D,WAAWA,SAAQ,KAAK;AACtB;AACA,mBAAC,QAAQ,SAAS,CAAC,GAAG,KAAK,SAAS;AAAA,gBACtC,WAAWA,SAAQ,KAAK;AACtB;AACA,iCAAe;AACf,sBAAI,OAAO;AAAA,oBACT,MAAM,SAAS;AAAA,kBACjB;AACA,iCAAe;AACf,sBAAIA,SAAQ,KAAK;AACf;AAAA,kBACF,OAAO;AACL,wBAAI,WAAW;AACf,wBAAI,iBAAiBA,IAAG,GAAG;AACzB,iCAAWA;AACX;AACA,sBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,oBACtB;AACA,wBAAI,OAAOC,IAAG;AACZ,4BAAM,MAAM,uCAAuC;AAAA,oBACrD;AACA,wBAAIF,SAAQ,KAAK;AACf,4BAAM,MAAM,uBAAuBA,OAAM,UAAU;AAAA,oBACrD;AACA,yBAAK,WAAW,WAAW;AAC3B;AACA,mCAAe;AACf,wBAAI,YAAY;AAChB,yBAAK,YAAY;AACjB,wBAAIA,SAAQ,KAAK;AACf,kCAAY,OAAO,KAAK,QAAQ,uBAAuB;AAAA,oBACzD,WAAWA,SAAQ,KAAM;AACvB,kCAAY,OAAO,KAAM,QAAQ,sBAAsB;AAAA,oBACzD,WAAW,sBAAsBA,SAAQ,KAAK;AAC5C;AACA,kCAAY,SAAS;AACrB,2BAAK,YAAY;AAAA,oBACnB,OAAO;AACL,6BAAO,MAAME,IAAG;AACd,4BAAIF,SAAQ,KAAK;AACf;AAAA,wBACF;AACA,qCAAaA;AACb;AACA,wBAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,sBACtB;AACA,kCAAY,UAAU,KAAK;AAAA,oBAC7B;AACA,mCAAe;AACf,wBAAI,OAAOC,IAAG;AACZ,4BAAM,MAAM,uCAAuC;AAAA,oBACrD;AACA,wBAAIF,SAAQ,KAAK;AACf,4BAAM,MAAM,uBAAuBA,OAAM,UAAU;AAAA,oBACrD;AACA;AACA,yBAAK,QAAQ;AAAA,kBACf;AACA,0BAAQ,SAAS,CAAC;AAClB,mBAAC,MAAM,QAAQ,MAAM,SAAS,CAAC,GAAG,KAAK,IAAI;AAAA,gBAC7C,WAAWA,SAAQ,KAAK;AACtB;AACA,sBAAI,aAAa,SAAS;AAC1B,sBAAI,SAAS;AAAA,oBACX,MAAM;AAAA,kBACR;AACA,sBAAIA,SAAQ,KAAK;AACf;AACA,wBAAI,QAAQ;AACZ,mCAAe;AACf,wBAAI,QAAQ,UAAU,MAAM,YAAY;AACtC,6BAAO,YAAY;AACnB,8BAAQ,cAAc;AAAA,oBACxB,OAAO;AACL,6BAAO,YAAY,QAAQ,UAAU,KAAK;AAC1C,0BAAIA,SAAQ,KAAK;AACf,gCAAQ,OAAO,KAAK,QAAQ,uBAAuB;AAAA,sBACrD,WAAWA,SAAQ,KAAM;AACvB,gCAAQ,OAAO,KAAM,QAAQ,sBAAsB;AAAA,sBACrD,WAAW,sBAAsBA,SAAQ,KAAK;AAC5C;AACA,gCAAQ,SAAS;AACjB,+BAAO,YAAY;AAAA,sBACrB,OAAO;AACL,+BAAO,MAAME,IAAG;AACd,8BAAIF,SAAQ,KAAK;AACf;AAAA,0BACF;AACA,mCAASA;AACT;AACA,0BAAAA,OAAMC,KAAI,OAAO,GAAG;AAAA,wBACtB;AACA,gCAAQ,MAAM,KAAK;AAAA,sBACrB;AACA,qCAAe;AAAA,oBACjB;AACA,wBAAI,OAAOC,IAAG;AACZ,4BAAM,MAAM,uCAAuC;AAAA,oBACrD;AACA,wBAAIF,SAAQ,KAAK;AACf,4BAAM,MAAM,uBAAuBA,OAAM,UAAU;AAAA,oBACrD;AACA;AACA,2BAAO,QAAQ;AAAA,kBACjB;AACA,0BAAQ,SAAS,CAAC;AAClB,mBAAC,MAAM,UAAU,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM;AAAA,gBACnD,OAAO;AACL;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AACA,mBAAOI,QAAO;AAAA,UAChB;AACA,UAAAN,SAAQ,mBAAmB;AAAA,QAC7B,CAAC;AACD,YAAI,iBAAiBT,YAAW,SAASS,UAAS;AAChD;AACA,iBAAO,eAAeA,UAAS,cAAc;AAAA,YAC3C,OAAO;AAAA,UACT,CAAC;AACD,cAAI,UAAU,cAAc;AAC5B,mBAAS,aAAa,QAAQ;AAC5B,gBAAI,MAAM;AACV,oBAAQ,OAAO,MAAM;AAAA,cACpB,KAAK;AACJ,oBAAI,gBAAgB,OAAO;AAC3B,oBAAI,QAAQ,CAAC;AACb,uBAAO,eAAe;AACpB,sBAAI,cAAc,iBAAiB;AACjC,0BAAM,KAAK,cAAc,eAAe;AAAA,kBAC1C;AACA,wBAAM,KAAK,aAAa,aAAa,CAAC;AACtC,kCAAgB,cAAc;AAAA,gBAChC;AACA,sBAAM,MAAM,KAAK,GAAG;AACpB;AAAA,cAED,KAAK;AACJ,sBAAM,OAAO,UAAU,IAAI,YAAY,EAAE,KAAK,IAAI;AAClD;AAAA,cAED,KAAK;AACJ,oBAAI,OAAO,SAAS;AAClB,sBAAI,OAAO,YAAY,KAAK;AAC1B,0BAAM;AAAA,kBACR,OAAO;AACL,0BAAM,QAAQ,iBAAiB,OAAO,OAAO;AAAA,kBAC/C;AAAA,gBACF;AACA,oBAAI,OAAO,IAAI;AACb,yBAAO,MAAM,QAAQ,iBAAiB,OAAO,EAAE;AAAA,gBACjD;AACA,oBAAI,OAAO,YAAY;AACrB,yBAAO,OAAO,WAAW,IAAI,SAAS,IAAI;AACxC,2BAAO,MAAM,QAAQ,iBAAiB,EAAE;AAAA,kBAC1C,CAAC,EAAE,KAAK,EAAE;AAAA,gBACZ;AACA,oBAAI,OAAO,OAAO;AAChB,yBAAO,OAAO,MAAM,IAAI,SAAS,MAAM;AACrC,wBAAI,cAAc,MAAM;AACtB,0BAAI,KAAK,cAAc,cAAc;AACnC,+BAAO,MAAM,QAAQ,iBAAiB,KAAK,IAAI,IAAI,KAAK,WAAW,MAAM,KAAK,QAAQ;AAAA,sBACxF,OAAO;AACL,+BAAO,MAAM,QAAQ,iBAAiB,KAAK,IAAI,IAAI,KAAK,WAAW,QAAQ,UAAU,KAAK,KAAK,IAAI;AAAA,sBACrG;AAAA,oBACF,OAAO;AACL,6BAAO,MAAM,QAAQ,iBAAiB,KAAK,IAAI,IAAI;AAAA,oBACrD;AAAA,kBACF,CAAC,EAAE,KAAK,EAAE;AAAA,gBACZ;AACA,oBAAI,OAAO,SAAS;AAClB,yBAAO,OAAO,QAAQ,IAAI,SAAS,QAAQ;AACzC,wBAAI,OAAO,WAAW;AACpB,0BAAI,OAAO,cAAc,YAAY;AACnC,+BAAO,MAAM,QAAQ,iBAAiB,OAAO,IAAI,IAAI,MAAM,aAAa,OAAO,KAAK,IAAI;AAAA,sBAC1F,WAAW,OAAO,cAAc,cAAc;AAC5C,+BAAO,MAAM,QAAQ,iBAAiB,OAAO,IAAI,IAAI,OAAO,OAAO,QAAQ;AAAA,sBAC7E,WAAW,OAAO,cAAc,WAAW;AACzC,+BAAO,MAAM,QAAQ,iBAAiB,OAAO,IAAI,IAAI,MAAM,OAAO,QAAQ;AAAA,sBAC5E,OAAO;AACL,+BAAO,MAAM,QAAQ,iBAAiB,OAAO,IAAI,IAAI,MAAM,QAAQ,iBAAiB,OAAO,KAAK,IAAI;AAAA,sBACtG;AAAA,oBACF,OAAO;AACL,6BAAO,MAAM,QAAQ,iBAAiB,OAAO,IAAI;AAAA,oBACnD;AAAA,kBACF,CAAC,EAAE,KAAK,EAAE;AAAA,gBACZ;AACA;AAAA,cAED;AACC,sBAAM,MAAM,2BAA2B,OAAO,OAAO,IAAI;AAAA,YAC3D;AACA,mBAAO;AAAA,UACT;AACA,UAAAA,SAAQ,eAAe;AAAA,QACzB,CAAC;AACD,YAAI,cAAcT,YAAW,SAASS,UAAS;AAC7C;AACA,iBAAO,eAAeA,UAAS,cAAc;AAAA,YAC3C,OAAO;AAAA,UACT,CAAC;AACD,cAAI,mBAAmB,uBAAuB;AAC9C,cAAI,WAAW,eAAe;AAC9B,cAAI,qBAAqB,WAAW;AAClC,qBAAS,qBAAqB;AAC5B,mBAAK,UAAU,CAAC;AAChB,mBAAK,mBAAmB,CAAC;AACzB,mBAAK,uBAAuB,CAAC;AAC7B,mBAAK,qBAAqB;AAAA,YAC5B;AACA,+BAAmB,UAAU,0BAA0B,WAAW;AAChE,kBAAI,UAAU,CAAC;AACf,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,wBAAQ,EAAE,IAAI,UAAU,EAAE;AAAA,cAC5B;AACA,uBAASO,MAAK,GAAG,YAAY,SAASA,MAAK,UAAU,QAAQA,OAAM;AACjE,oBAAI,SAAS,UAAUA,GAAE;AACzB,qBAAK,QAAQ,MAAM,IAAI;AAAA,cACzB;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,4BAA4B,WAAW;AAClE,kBAAI,UAAU,CAAC;AACf,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,wBAAQ,EAAE,IAAI,UAAU,EAAE;AAAA,cAC5B;AACA,uBAASA,MAAK,GAAG,YAAY,SAASA,MAAK,UAAU,QAAQA,OAAM;AACjE,oBAAI,SAAS,UAAUA,GAAE;AACzB,uBAAO,KAAK,QAAQ,MAAM;AAAA,cAC5B;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,yBAAyB,WAAW;AAC/D,kBAAI,UAAU,CAAC;AACf,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,wBAAQ,EAAE,IAAI,UAAU,EAAE;AAAA,cAC5B;AACA,uBAASA,MAAK,GAAG,YAAY,SAASA,MAAK,UAAU,QAAQA,OAAM;AACjE,oBAAI,SAAS,UAAUA,GAAE;AACzB,qBAAK,QAAQ,MAAM,IAAI;AAAA,cACzB;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,2BAA2B,WAAW;AACjE,kBAAI,UAAU,CAAC;AACf,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,wBAAQ,EAAE,IAAI,UAAU,EAAE;AAAA,cAC5B;AACA,uBAASA,MAAK,GAAG,YAAY,SAASA,MAAK,UAAU,QAAQA,OAAM;AACjE,oBAAI,SAAS,UAAUA,GAAE;AACzB,uBAAO,KAAK,QAAQ,MAAM;AAAA,cAC5B;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,2BAA2B,WAAW;AACjE,kBAAI,YAAY,CAAC;AACjB,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,0BAAU,EAAE,IAAI,UAAU,EAAE;AAAA,cAC9B;AACA,uBAASA,MAAK,GAAG,cAAc,WAAWA,MAAK,YAAY,QAAQA,OAAM;AACvE,oBAAI,WAAW,YAAYA,GAAE;AAC7B,qBAAK,qBAAqB,QAAQ,IAAI;AAAA,cACxC;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,6BAA6B,WAAW;AACnE,kBAAI,YAAY,CAAC;AACjB,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,0BAAU,EAAE,IAAI,UAAU,EAAE;AAAA,cAC9B;AACA,uBAASA,MAAK,GAAG,cAAc,WAAWA,MAAK,YAAY,QAAQA,OAAM;AACvE,oBAAI,WAAW,YAAYA,GAAE;AAC7B,uBAAO,KAAK,qBAAqB,QAAQ;AAAA,cAC3C;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,2BAA2B,WAAW;AACjE,kBAAI,OAAO,CAAC;AACZ,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,qBAAK,EAAE,IAAI,UAAU,EAAE;AAAA,cACzB;AACA,uBAASA,MAAK,GAAG,SAAS,MAAMA,MAAK,OAAO,QAAQA,OAAM;AACxD,oBAAI,MAAM,OAAOA,GAAE;AACnB,qBAAK,iBAAiB,GAAG,IAAI;AAAA,cAC/B;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,6BAA6B,WAAW;AACnE,kBAAI,OAAO,CAAC;AACZ,uBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC5C,qBAAK,EAAE,IAAI,UAAU,EAAE;AAAA,cACzB;AACA,uBAASA,MAAK,GAAG,SAAS,MAAMA,MAAK,OAAO,QAAQA,OAAM;AACxD,oBAAI,MAAM,OAAOA,GAAE;AACnB,uBAAO,KAAK,iBAAiB,GAAG;AAAA,cAClC;AACA,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,oBAAoB,WAAW;AAC1D,mBAAK,qBAAqB;AAC1B,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,qBAAqB,WAAW;AAC3D,mBAAK,qBAAqB;AAC1B,qBAAO;AAAA,YACT;AACA,+BAAmB,UAAU,QAAQ,SAASJ,MAAK;AACjD,qBAAO,iBAAiB,iBAAiBA,MAAK,GAAG,KAAK,SAAS,KAAK,kBAAkB,KAAK,sBAAsB,KAAK,kBAAkB;AAAA,YAC1I;AACA,+BAAmB,UAAU,SAAS,SAASK,OAAM;AACnD,qBAAO,SAAS,aAAaA,KAAI,EAAE,KAAK;AAAA,YAC1C;AACA,mBAAO;AAAA,UACT,EAAE;AACF,UAAAR,SAAQ,oBAAoB;AAAA,QAC9B,CAAC;AACD,YAAI,eAAeT,YAAW,SAASS,UAASR,SAAQ;AACtD;AACA,UAAAA,QAAO,UAAU,WAAW;AAAA,UAAC;AAAA,QAC/B,CAAC;AACD,YAAI,mBAAmBD,YAAW,SAASS,UAASR,SAAQ;AAC1D;AACA,cAAI,aAAa,aAAa,EAAE;AAChC,UAAAA,QAAO,UAAU,SAAS,KAAK;AAC7B,mBAAO,QAAQ,cAAc,QAAQ;AAAA,UACvC;AAAA,QACF,CAAC;AACD,YAAI,4BAA4BD,YAAW,SAASS,UAASR,SAAQ;AACnE;AACA,cAAI,UAAU,iBAAiB;AAC/B,cAAIiB,WAAU,MAAM,UAAU;AAC9B,cAAIC,UAAS,OAAO;AACpB,cAAI,WAAW,SAASC,UAAS,KAAK,KAAK;AACzC,gBAAI;AACJ,iBAAK,OAAO,KAAK;AACf,kBAAI,GAAG,IAAI,IAAI,GAAG;AAAA,YACpB;AAAA,UACF;AACA,UAAAnB,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,SAASkB,QAAO,IAAI;AACxB,YAAAD,SAAQ,KAAK,WAAW,SAAS,SAAS;AACxC,kBAAI,CAAC,QAAQ,OAAO,GAAG;AACrB;AAAA,cACF;AACA,uBAAS,OAAO,OAAO,GAAG,MAAM;AAAA,YAClC,CAAC;AACD,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,yBAAyBlB,YAAW,SAASS,UAASR,SAAQ;AAChE;AACA,UAAAA,QAAO,UAAU,WAAW;AAC1B,gBAAI,OAAO,KAAK;AAChB,gBAAI,OAAO,SAAS,YAAY;AAC9B,qBAAO;AAAA,YACT;AACA,mBAAO,KAAK,EAAE,MAAM,KAAK,KAAK,GAAG,MAAM;AAAA,UACzC;AAAA,QACF,CAAC;AACD,YAAI,eAAeD,YAAW,SAASS,UAASR,SAAQ;AACtD;AACA,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,oBAAQ,OAAO,KAAK;AACpB,gBAAI,MAAM,KAAK,KAAK,UAAU,GAAG;AAC/B,qBAAO;AAAA,YACT;AACA,mBAAO,QAAQ,IAAI,IAAI;AAAA,UACzB;AAAA,QACF,CAAC;AACD,YAAI,eAAeD,YAAW,SAASS,UAASR,SAAQ;AACtD;AACA,UAAAA,QAAO,UAAU,uBAAuB,EAAE,IAAI,KAAK,OAAO,aAAa;AAAA,QACzE,CAAC;AACD,YAAI,qBAAqBD,YAAW,SAASS,UAASR,SAAQ;AAC5D;AACA,cAAI,OAAO,aAAa;AACxB,cAAIoB,OAAM,KAAK;AACf,cAAI,QAAQ,KAAK;AACjB,UAAApB,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,MAAM,KAAK,GAAG;AAChB,qBAAO;AAAA,YACT;AACA,oBAAQ,OAAO,KAAK;AACpB,gBAAI,UAAU,KAAK,CAAC,SAAS,KAAK,GAAG;AACnC,qBAAO;AAAA,YACT;AACA,mBAAO,KAAK,KAAK,IAAI,MAAMoB,KAAI,KAAK,CAAC;AAAA,UACvC;AAAA,QACF,CAAC;AACD,YAAI,yBAAyBrB,YAAW,SAASS,UAASR,SAAQ;AAChE;AACA,cAAI,YAAY,mBAAmB;AACnC,cAAIqB,OAAM,KAAK;AACf,UAAArB,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAOqB,KAAI,GAAG,UAAU,KAAK,CAAC;AAAA,UAChC;AAAA,QACF,CAAC;AACD,YAAI,yBAAyBtB,YAAW,SAASS,UAASR,SAAQ;AAChE;AACA,cAAI,WAAW,uBAAuB;AACtC,UAAAA,QAAO,UAAU,SAAS,YAAY,UAAU,SAAS;AACvD,gBAAI;AACJ,gBAAI,MAAM,UAAU,GAAG;AACrB,uBAAS;AACT,kBAAI,EAAE,UAAU,IAAI;AAClB,uBAAO;AAAA,cACT;AACA,kBAAI,WAAW,QAAQ;AACrB,uBAAO,SAAS;AAAA,cAClB;AACA,qBAAO;AAAA,YACT;AACA,gBAAI,eAAe,OAAO;AACxB,qBAAO;AAAA,YACT;AACA,mBAAO,SAAS,UAAU;AAAA,UAC5B;AAAA,QACF,CAAC;AACD,YAAI,yBAAyBD,YAAW,SAASS,UAASR,SAAQ;AAChE;AACA,UAAAA,QAAO,UAAU,SAAS,IAAI;AAC5B,gBAAI,OAAO,OAAO,YAAY;AAC5B,oBAAM,IAAI,UAAU,KAAK,oBAAoB;AAAA,YAC/C;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,sBAAsBD,YAAW,SAASS,UAASR,SAAQ;AAC7D;AACA,cAAI,UAAU,iBAAiB;AAC/B,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,oBAAM,IAAI,UAAU,8BAA8B;AAAA,YACpD;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,kBAAkBD,YAAW,SAASS,UAASR,SAAQ;AACzD;AACA,cAAI,WAAW,uBAAuB;AACtC,cAAI,QAAQ,oBAAoB;AAChC,cAAIsB,QAAO,SAAS,UAAU;AAC9B,cAAI,OAAO,SAAS,UAAU;AAC9B,cAAI,OAAO,OAAO;AAClB,cAAI,0BAA0B,OAAO,UAAU;AAC/C,UAAAtB,QAAO,UAAU,SAAS,QAAQ,QAAQ;AACxC,mBAAO,SAAS,KAAK,IAAI;AACvB,kBAAI,MAAM,UAAU,UAAU,CAAC,GAAG,YAAY,UAAU,CAAC;AACzD,oBAAM,OAAO,MAAM,GAAG,CAAC;AACvB,uBAAS,EAAE;AACX,qBAAO,KAAK,GAAG;AACf,kBAAI,WAAW;AACb,qBAAK,KAAK,OAAO,cAAc,aAAasB,MAAK,KAAK,WAAW,GAAG,IAAI,MAAM;AAAA,cAChF;AACA,kBAAI,OAAO,WAAW,YAAY;AAChC,yBAAS,KAAK,MAAM;AAAA,cACtB;AACA,qBAAO,KAAK,KAAK,QAAQ,MAAM,SAAS,KAAKC,QAAO;AAClD,oBAAI,CAAC,wBAAwB,KAAK,KAAK,GAAG,GAAG;AAC3C,yBAAO;AAAA,gBACT;AACA,uBAAO,KAAK,KAAK,IAAI,SAAS,IAAI,GAAG,GAAG,KAAK,KAAKA,MAAK;AAAA,cACzD,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,mBAAmBxB,YAAW,SAASS,UAASR,SAAQ;AAC1D;AACA,UAAAA,QAAO,UAAU,gBAAgB,EAAE,SAAS;AAAA,QAC9C,CAAC;AACD,YAAI,gCAAgCD,YAAW,WAAW;AACxD;AAAA,QACF,CAAC;AACD,YAAI,0BAA0BA,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,UAAAA,QAAO,UAAU,WAAW;AAC1B,gBAAI,SAAS,OAAO,QAAQ;AAC5B,gBAAI,OAAO,WAAW,YAAY;AAChC,qBAAO;AAAA,YACT;AACA,kBAAM;AAAA,cACJ,KAAK;AAAA,YACP;AACA,mBAAO,KAAK;AAAA,cACV,KAAK;AAAA,YACP,GAAG;AAAA,cACD,MAAM;AAAA,YACR,CAAC;AACD,mBAAO,IAAI,MAAM,IAAI,MAAM,IAAI,SAAS;AAAA,UAC1C;AAAA,QACF,CAAC;AACD,YAAI,0BAA0BD,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,UAAAA,QAAO,UAAU,WAAW;AAC1B,gBAAI;AACF,qBAAO,KAAK,WAAW;AACvB,qBAAO;AAAA,YACT,SAASjB,IAAG;AACV,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,gBAAgBgB,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,cAAI,UAAU,iBAAiB;AAC/B,cAAI,OAAO,OAAO;AAClB,UAAAA,QAAO,UAAU,SAAS,QAAQ;AAChC,mBAAO,KAAK,QAAQ,MAAM,IAAI,OAAO,MAAM,IAAI,MAAM;AAAA,UACvD;AAAA,QACF,CAAC;AACD,YAAI,eAAeD,YAAW,SAASS,UAASR,SAAQ;AACtD;AACA,UAAAA,QAAO,UAAU,wBAAwB,EAAE,IAAI,OAAO,OAAO,cAAc;AAAA,QAC7E,CAAC;AACD,YAAI,gBAAgBD,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,cAAI,OAAO,aAAa;AACxB,cAAI,QAAQ,oBAAoB;AAChC,cAAIqB,OAAM,KAAK;AACf,UAAArB,QAAO,UAAU,SAAS,MAAM,KAAK;AACnC,gBAAI,OAAOtB,IAAG,SAAS2C,KAAI,UAAU,QAAQ,CAAC,GAAG;AACjD,mBAAO,OAAO,MAAM,IAAI,CAAC;AACzB,qBAAS,SAASG,QAAO,KAAK;AAC5B,kBAAI;AACF,qBAAK,GAAG,IAAI,IAAI,GAAG;AAAA,cACrB,SAASzC,IAAG;AACV,oBAAI,CAAC,OAAO;AACV,0BAAQA;AAAA,gBACV;AAAA,cACF;AAAA,YACF;AACA,iBAAKL,KAAI,GAAGA,KAAI,QAAQ,EAAEA,IAAG;AAC3B,oBAAM,UAAUA,EAAC;AACjB,mBAAK,GAAG,EAAE,QAAQ,MAAM;AAAA,YAC1B;AACA,gBAAI,UAAU,QAAQ;AACpB,oBAAM;AAAA,YACR;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,iBAAiBqB,YAAW,SAASS,UAASR,SAAQ;AACxD;AACA,UAAAA,QAAO,UAAU,wBAAwB,EAAE,IAAI,OAAO,SAAS,cAAc;AAAA,QAC/E,CAAC;AACD,YAAI,oBAAoBD,YAAW,SAASS,UAASR,SAAQ;AAC3D;AACA,cAAI,UAAU,iBAAiB;AAC/B,cAAIyB,OAAM;AAAA,YACR,UAAU;AAAA,YACV,QAAQ;AAAA,UACV;AACA,UAAAzB,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAO,QAAQ,KAAK,KAAKyB,KAAI,QAAQ,KAAK,CAAC,KAAK;AAAA,UAClD;AAAA,QACF,CAAC;AACD,YAAI,iBAAiB1B,YAAW,SAASS,UAASR,SAAQ;AACxD;AACA,cAAI,SAAS,eAAe;AAC5B,cAAI0B,YAAW,kBAAkB;AACjC,cAAI,UAAU,iBAAiB;AAC/B,cAAI,oBAAoB,MAAM;AAC9B,UAAA1B,QAAO,UAAU,SAAS,SAAS;AACjC,gBAAI,OAAO,IAAI,MAAM,OAAO,GAAG,OAAO,UAAU,CAAC,GAAG,MAAM,UAAU,CAAC;AACrE,gBAAI,CAAC,QAAQ,GAAG,GAAG;AACjB,kBAAI0B,UAAS,IAAI,GAAG;AAClB,sBAAM;AACN,uBAAO;AAAA,cACT;AAAA,YACF;AACA,gBAAI,QAAQ,GAAG,GAAG;AAChB,qBAAO,MAAM,GAAG;AAAA,YAClB;AACA,gBAAI,QAAQ,IAAI,GAAG;AACjB,mBAAK,OAAO;AAAA,YACd;AACA,gBAAI,mBAAmB;AACrB,gCAAkB,MAAM1B,QAAO,OAAO;AAAA,YACxC;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,gBAAgBD,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,cAAI,QAAQ,oBAAoB;AAChC,cAAI,iBAAiB,OAAO;AAC5B,cAAI,2BAA2B,OAAO;AACtC,cAAI,sBAAsB,OAAO;AACjC,cAAI,wBAAwB,OAAO;AACnC,UAAAA,QAAO,UAAU,SAASvB,SAAQ,QAAQ;AACxC,gBAAI,OAAO,eAAe,OAAO,MAAM,MAAM,CAAC;AAC9C,YAAAA,UAAS,OAAO,MAAMA,OAAM,CAAC;AAC7B,gCAAoB,YAAY,EAAE,QAAQ,SAAS,MAAM;AACvD,kBAAI;AACF,+BAAeA,SAAQ,MAAM,yBAAyB,QAAQ,IAAI,CAAC;AAAA,cACrE,SAASM,IAAG;AACV,wBAAQA;AAAA,cACV;AAAA,YACF,CAAC;AACD,gBAAI,OAAO,0BAA0B,YAAY;AAC/C,oCAAsB,YAAY,EAAE,QAAQ,SAAS,QAAQ;AAC3D,oBAAI;AACF,iCAAeN,SAAQ,QAAQ,yBAAyB,QAAQ,MAAM,CAAC;AAAA,gBACzE,SAASM,IAAG;AACV,0BAAQA;AAAA,gBACV;AAAA,cACF,CAAC;AAAA,YACH;AACA,gBAAI,UAAU,QAAQ;AACpB,oBAAM;AAAA,YACR;AACA,mBAAON;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,wBAAwBsB,YAAW,SAASS,UAASR,SAAQ;AAC/D;AACA,cAAI,WAAW,uBAAuB;AACtC,cAAI2B,QAAO,SAASA,MAAK,MAAM,MAAM;AACnC,mBAAO;AAAA,UACT;AACA,cAAI;AACJ,cAAI;AACJ,cAAIC;AACJ,cAAI;AACJ,cAAI;AACF,mBAAO,eAAeD,OAAM,UAAU;AAAA,cACpC,cAAc;AAAA,cACd,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,OAAO;AAAA,YACT,CAAC;AAAA,UACH,SAAS,QAAQ;AAAA,UAAC;AAClB,cAAIA,MAAK,WAAW,GAAG;AACrB,mBAAO;AAAA,cACL,cAAc;AAAA,cACd,UAAU;AAAA,cACV,YAAY;AAAA,YACd;AACA,6BAAiB,OAAO;AACxB,YAAA3B,QAAO,UAAU,SAAS,IAAI,QAAQ;AACpC,uBAAS,SAAS,MAAM;AACxB,kBAAI,GAAG,WAAW,QAAQ;AACxB,uBAAO;AAAA,cACT;AACA,mBAAK,QAAQ;AACb,qBAAO,eAAe,IAAI,UAAU,IAAI;AAAA,YAC1C;AAAA,UACF,OAAO;AACL,oBAAQ,cAAc;AACtB,YAAA4B,YAAW,2BAAW;AACpB,kBAAI,UAAU,CAAC;AACf,qBAAO,SAAS,QAAQ;AACtB,oBAAI,MAAMlD,KAAI;AACd,oBAAI,QAAQ,MAAM,GAAG;AACnB,yBAAO,QAAQ,MAAM;AAAA,gBACvB;AACA,uBAAO,CAAC;AACR,uBAAO,UAAU;AACf,uBAAK,KAAK,OAAO,EAAEA,IAAG,SAAS,EAAE,CAAC;AAAA,gBACpC;AACA,uBAAO,IAAI,SAAS,MAAM,sBAAsB,KAAK,KAAK,IAAI,IAAI,0CAA0C;AAAA,cAC9G;AAAA,YACF,EAAE;AACF,YAAAsB,QAAO,UAAU,SAAS,KAAK,QAAQ;AACrC,kBAAIvB;AACJ,uBAAS,SAAS,MAAM;AACxB,kBAAI,IAAI,WAAW,QAAQ;AACzB,uBAAO;AAAA,cACT;AACA,cAAAA,UAASmD,UAAS,MAAM,EAAE,GAAG;AAC7B,kBAAI;AACF,sBAAMnD,SAAQ,GAAG;AAAA,cACnB,SAAS,QAAQ;AAAA,cAAC;AAClB,qBAAOA;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,aAAasB,YAAW,SAASS,UAASR,SAAQ;AACpD;AACA,cAAI,aAAa;AACjB,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAO,UAAU,cAAc,UAAU;AAAA,UAC3C;AAAA,QACF,CAAC;AACD,YAAI,cAAcD,YAAW,SAASS,UAASR,SAAQ;AACrD;AACA,cAAI,UAAU,WAAW;AACzB,cAAI,gBAAgB;AAAA,YAClB,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,WAAW;AAAA,UACb;AACA,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,qBAAO;AAAA,YACT;AACA,mBAAO,eAAe,KAAK,eAAe,QAAQ,KAAK,CAAC;AAAA,UAC1D;AAAA,QACF,CAAC;AACD,YAAI,cAAcD,YAAW,SAASS,UAASR,SAAQ;AACrD;AACA,cAAI0B,YAAW,YAAY;AAC3B,UAAA1B,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,CAAC0B,UAAS,KAAK,GAAG;AACpB,qBAAO;AAAA,YACT;AACA,gBAAI;AACF,kBAAI,CAAC,MAAM,aAAa;AACtB,uBAAO;AAAA,cACT;AACA,qBAAO,MAAM,YAAY,cAAc;AAAA,YACzC,SAAS,OAAO;AACd,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,cAAc3B,YAAW,SAASS,UAASR,SAAQ;AACrD;AACA,cAAI,cAAc,YAAY;AAC9B,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,OAAO,UAAU,YAAY;AAC/B,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,eAAe,KAAK,OAAO,QAAQ,GAAG;AACzC,qBAAO;AAAA,YACT;AACA,gBAAI;AACF,kBAAI,OAAO,MAAM,WAAW,UAAU;AACpC,uBAAO;AAAA,cACT;AACA,kBAAI,OAAO,MAAM,SAAS,YAAY;AACpC,uBAAO;AAAA,cACT;AACA,kBAAI,OAAO,MAAM,UAAU,YAAY;AACrC,uBAAO;AAAA,cACT;AAAA,YACF,SAAS,OAAO;AACd,qBAAO;AAAA,YACT;AACA,mBAAO,CAAC,YAAY,KAAK;AAAA,UAC3B;AAAA,QACF,CAAC;AACD,YAAI,cAAcD,YAAW,SAASS,UAASR,SAAQ;AACrD;AACA,cAAI6B,cAAa,YAAY;AAC7B,cAAI,UAAU;AACd,cAAI,mBAAmB,SAAS,UAAU;AAC1C,UAAA7B,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,CAAC6B,YAAW,KAAK,GAAG;AACtB,qBAAO;AAAA,YACT;AACA,gBAAI,QAAQ,KAAK,iBAAiB,KAAK,KAAK,CAAC,GAAG;AAC9C,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,0BAA0B9B,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,cAAIW,OAAM;AACV,UAAAX,QAAO,UAAU,WAAW;AAC1B,gBAAI,OAAOW,KAAI,aAAa,YAAY;AACtC,qBAAO;AAAA,YACT;AACA,mBAAOA,KAAI,SAAS,KAAK,MAAM,QAAQA,KAAI,SAAS,KAAK,MAAM;AAAA,UACjE;AAAA,QACF,CAAC;AACD,YAAI,gBAAgBZ,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,cAAI,UAAU,OAAO,UAAU;AAC/B,UAAAA,QAAO,UAAU,SAAS,cAAc;AACtC,mBAAO,QAAQ,KAAK,MAAM,cAAc,UAAU,CAAC,CAAC,IAAI;AAAA,UAC1D;AAAA,QACF,CAAC;AACD,YAAI,mBAAmBD,YAAW,SAASS,UAASR,SAAQ;AAC1D;AACA,UAAAA,QAAO,UAAU,wBAAwB,EAAE,IAAI,OAAO,UAAU,WAAW,cAAc;AAAA,QAC3F,CAAC;AACD,YAAI,YAAYD,YAAW,SAASS,UAASR,SAAQ;AACnD;AACA,cAAI,UAAU,WAAW;AACzB,cAAI,kBAAkB,YAAY;AAClC,cAAI,SAAS,eAAe;AAC5B,cAAI,gBAAgB,0BAA0B;AAC9C,cAAI,YAAY,iBAAiB;AACjC,cAAI8B,KAAI9B,QAAO,UAAU,SAAS,MAAM,OAAO;AAC7C,gBAAIS,IAAG1B,IAAGgD,IAAG,SAAS;AACtB,gBAAI,UAAU,SAAS,KAAK,OAAO,SAAS,UAAU;AACpD,wBAAU;AACV,sBAAQ;AACR,qBAAO;AAAA,YACT,OAAO;AACL,wBAAU,UAAU,CAAC;AAAA,YACvB;AACA,gBAAI,QAAQ,IAAI,GAAG;AACjB,cAAAtB,KAAI,UAAU,KAAK,MAAM,GAAG;AAC5B,cAAA1B,KAAI,UAAU,KAAK,MAAM,GAAG;AAC5B,cAAAgD,KAAI,UAAU,KAAK,MAAM,GAAG;AAAA,YAC9B,OAAO;AACL,cAAAtB,KAAIsB,KAAI;AACR,cAAAhD,KAAI;AAAA,YACN;AACA,mBAAO;AAAA,cACL;AAAA,cACA,cAAc0B;AAAA,cACd,YAAY1B;AAAA,cACZ,UAAUgD;AAAA,YACZ;AACA,mBAAO,CAAC,UAAU,OAAO,OAAO,cAAc,OAAO,GAAG,IAAI;AAAA,UAC9D;AACA,UAAAD,GAAE,KAAK,SAAS,MAAMzB,MAAK2B,MAAK;AAC9B,gBAAIvB,IAAG1B,IAAG,SAAS;AACnB,gBAAI,OAAO,SAAS,UAAU;AAC5B,wBAAUiD;AACV,cAAAA,OAAM3B;AACN,cAAAA,OAAM;AACN,qBAAO;AAAA,YACT,OAAO;AACL,wBAAU,UAAU,CAAC;AAAA,YACvB;AACA,gBAAI,CAAC,QAAQA,IAAG,GAAG;AACjB,cAAAA,OAAM;AAAA,YACR,WAAW,CAAC,gBAAgBA,IAAG,GAAG;AAChC,wBAAUA;AACV,cAAAA,OAAM2B,OAAM;AAAA,YACd,WAAW,CAAC,QAAQA,IAAG,GAAG;AACxB,cAAAA,OAAM;AAAA,YACR,WAAW,CAAC,gBAAgBA,IAAG,GAAG;AAChC,wBAAUA;AACV,cAAAA,OAAM;AAAA,YACR;AACA,gBAAI,QAAQ,IAAI,GAAG;AACjB,cAAAvB,KAAI,UAAU,KAAK,MAAM,GAAG;AAC5B,cAAA1B,KAAI,UAAU,KAAK,MAAM,GAAG;AAAA,YAC9B,OAAO;AACL,cAAA0B,KAAI;AACJ,cAAA1B,KAAI;AAAA,YACN;AACA,mBAAO;AAAA,cACL,KAAKsB;AAAA,cACL,KAAK2B;AAAA,cACL,cAAcvB;AAAA,cACd,YAAY1B;AAAA,YACd;AACA,mBAAO,CAAC,UAAU,OAAO,OAAO,cAAc,OAAO,GAAG,IAAI;AAAA,UAC9D;AAAA,QACF,CAAC;AACD,YAAI,wBAAwBgB,YAAW,SAASS,UAASR,SAAQ;AAC/D;AACA,cAAI8B,KAAI,UAAU;AAClB,cAAI,WAAW,uBAAuB;AACtC,cAAI,QAAQ,SAAS,UAAU;AAC/B,cAAI,OAAO,SAAS,UAAU;AAC9B,cAAIZ,UAAS,OAAO;AACpB,cAAI,iBAAiB,OAAO;AAC5B,cAAI,mBAAmB,OAAO;AAC9B,cAAIe,mBAAkB,OAAO,UAAU;AACvC,cAAI,aAAa;AAAA,YACf,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,UACZ;AACA,cAAIC;AACJ,cAAIC;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,UAAAD,MAAK,SAASA,IAAGE,OAAM,UAAU;AAC/B,gBAAI;AACJ,qBAAS,QAAQ;AACjB,gBAAI,CAACH,iBAAgB,KAAK,MAAM,QAAQ,GAAG;AACzC,sBAAQ,WAAW,QAAQf,QAAO,IAAI;AACtC,6BAAe,MAAM,UAAU,UAAU;AACzC,yBAAW,QAAQ;AAAA,YACrB,OAAO;AACL,sBAAQ,KAAK;AAAA,YACf;AACA,gBAAI,CAAC,MAAMkB,KAAI,GAAG;AAChB,oBAAMA,KAAI,IAAI;AAAA,YAChB,WAAW,QAAQ,MAAMA,KAAI,CAAC,MAAM,UAAU;AAC5C,oBAAMA,KAAI,EAAE,KAAK,QAAQ;AAAA,YAC3B,OAAO;AACL,oBAAMA,KAAI,IAAI,CAAE,MAAMA,KAAI,GAAG,QAAS;AAAA,YACxC;AACA,mBAAO;AAAA,UACT;AACA,UAAAD,QAAO,SAASA,MAAKC,OAAM,UAAU;AACnC,gBAAI,OAAO;AACX,qBAAS,QAAQ;AACjB,oBAAQ;AACR,YAAAF,IAAG,KAAK,MAAME,OAAM,QAAQ,SAASC,SAAQ;AAC3C,kBAAI,KAAK,OAAOD,OAAM,KAAK;AAC3B,oBAAM,KAAK,UAAU,MAAM,SAAS;AAAA,YACtC,CAAC;AACD,kBAAM,qBAAqB;AAC3B,mBAAO;AAAA,UACT;AACA,gBAAM,SAASE,KAAIF,OAAM,UAAU;AACjC,gBAAI,OAAO,WAAW,WAAW1D;AACjC,qBAAS,QAAQ;AACjB,gBAAI,CAACuD,iBAAgB,KAAK,MAAM,QAAQ,GAAG;AACzC,qBAAO;AAAA,YACT;AACA,oBAAQ,KAAK;AACb,gBAAI,CAAC,MAAMG,KAAI,GAAG;AAChB,qBAAO;AAAA,YACT;AACA,wBAAY,MAAMA,KAAI;AACtB,gBAAI,QAAQ,SAAS,MAAM,UAAU;AACnC,mBAAK1D,KAAI,GAAG,YAAY,UAAUA,EAAC,GAAG,EAAEA,IAAG;AACzC,oBAAI,cAAc,YAAY,UAAU,uBAAuB,UAAU;AACvE,sBAAI,UAAU,WAAW,GAAG;AAC1B,0BAAM0D,KAAI,IAAI,UAAU1D,KAAI,IAAI,CAAC;AAAA,kBACnC,OAAO;AACL,8BAAU,OAAOA,IAAG,CAAC;AAAA,kBACvB;AAAA,gBACF;AAAA,cACF;AAAA,YACF,OAAO;AACL,kBAAI,cAAc,YAAY,UAAU,uBAAuB,UAAU;AACvE,uBAAO,MAAM0D,KAAI;AAAA,cACnB;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AACA,iBAAO,SAASG,MAAKH,OAAM;AACzB,gBAAI1D,IAAGkC,IAAG,UAAU,WAAW;AAC/B,gBAAI,CAACqB,iBAAgB,KAAK,MAAM,QAAQ,GAAG;AACzC;AAAA,YACF;AACA,wBAAY,KAAK,OAAOG,KAAI;AAC5B,gBAAI,CAAC,WAAW;AACd;AAAA,YACF;AACA,gBAAI,QAAQ,SAAS,MAAM,UAAU;AACnC,cAAAxB,KAAI,UAAU;AACd,qBAAO,IAAI,MAAMA,KAAI,CAAC;AACtB,mBAAKlC,KAAI,GAAGA,KAAIkC,IAAG,EAAElC,IAAG;AACtB,qBAAKA,KAAI,CAAC,IAAI,UAAUA,EAAC;AAAA,cAC3B;AACA,0BAAY,UAAU,MAAM;AAC5B,mBAAKA,KAAI,GAAG,WAAW,UAAUA,EAAC,GAAG,EAAEA,IAAG;AACxC,sBAAM,KAAK,UAAU,MAAM,IAAI;AAAA,cACjC;AAAA,YACF,OAAO;AACL,sBAAQ,UAAU,QAAQ;AAAA,gBACzB,KAAK;AACJ,uBAAK,KAAK,WAAW,IAAI;AACzB;AAAA,gBAED,KAAK;AACJ,uBAAK,KAAK,WAAW,MAAM,UAAU,CAAC,CAAC;AACvC;AAAA,gBAED,KAAK;AACJ,uBAAK,KAAK,WAAW,MAAM,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACrD;AAAA,gBAED;AACC,kBAAAkC,KAAI,UAAU;AACd,yBAAO,IAAI,MAAMA,KAAI,CAAC;AACtB,uBAAKlC,KAAI,GAAGA,KAAIkC,IAAG,EAAElC,IAAG;AACtB,yBAAKA,KAAI,CAAC,IAAI,UAAUA,EAAC;AAAA,kBAC3B;AACA,wBAAM,KAAK,WAAW,MAAM,IAAI;AAAA,cAClC;AAAA,YACF;AAAA,UACF;AACA,oBAAU;AAAA,YACR,IAAIwD;AAAA,YACJ,MAAMC;AAAA,YACN;AAAA,YACA;AAAA,UACF;AACA,wBAAc;AAAA,YACZ,IAAIL,GAAEI,GAAE;AAAA,YACR,MAAMJ,GAAEK,KAAI;AAAA,YACZ,KAAKL,GAAE,GAAG;AAAA,YACV,MAAMA,GAAE,IAAI;AAAA,UACd;AACA,iBAAO,iBAAiB,CAAC,GAAG,WAAW;AACvC,UAAA9B,QAAO,UAAUQ,WAAU,SAASA,SAAQ7B,IAAG;AAC7C,mBAAOA,MAAK,OAAOuC,QAAO,IAAI,IAAI,iBAAiB,OAAOvC,EAAC,GAAG,WAAW;AAAA,UAC3E;AACA,UAAA6B,SAAQ,UAAU;AAAA,QACpB,CAAC;AACD,YAAI,0BAA0BT,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,UAAAA,QAAO,UAAU,WAAW;AAC1B,gBAAI,OAAO,MAAM,MAAM,KAAK;AAC5B,gBAAI,OAAO,SAAS,YAAY;AAC9B,qBAAO;AAAA,YACT;AACA,kBAAM,CAAE,OAAO,KAAM;AACrB,qBAAS,KAAK,GAAG;AACjB,mBAAO,QAAQ,UAAU,WAAW,OAAO,OAAO,CAAC,MAAM,KAAK;AAAA,UAChE;AAAA,QACF,CAAC;AACD,YAAI,0BAA0BD,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,UAAAA,QAAO,UAAU,WAAW;AAC1B,iBAAK,OAAO,eAAe,cAAc,cAAc,QAAQ,UAAU,OAAO,UAAU;AACxF,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,YAAY;AACf,qBAAO;AAAA,YACT;AACA,mBAAO,WAAW,UAAU;AAAA,UAC9B;AAAA,QACF,CAAC;AACD,YAAI,yBAAyBD,YAAW,SAASS,UAASR,SAAQ;AAChE,cAAI,gBAAgB,SAASwC,iBAAgB;AAC3C,iBAAK,OAAO,SAAS,cAAc,cAAc,QAAQ,IAAI,OAAO,YAAY,MAAM;AACpF,qBAAO;AAAA,YACT;AACA,iBAAK,OAAOpE,YAAW,cAAc,cAAc,QAAQA,OAAM,OAAO,YAAYA,SAAQ;AAC1F,qBAAOA;AAAA,YACT;AACA,kBAAM,IAAI,MAAM,iCAAiC;AAAA,UACnD;AACA,UAAA4B,QAAO,UAAU,WAAW;AAC1B,gBAAI,MAAM;AACR,qBAAO;AAAA,YACT;AACA,gBAAI;AACF,qBAAO,eAAe,OAAO,WAAW,cAAc;AAAA,gBACpD,KAAK,SAASK,OAAM;AAClB,yBAAO;AAAA,gBACT;AAAA,gBACA,cAAc;AAAA,cAChB,CAAC;AAAA,YACH,SAAS,OAAO;AACd,qBAAO,cAAc;AAAA,YACvB;AACA,gBAAI;AACF,kBAAI,CAAC,YAAY;AACf,uBAAO,cAAc;AAAA,cACvB;AACA,qBAAO;AAAA,YACT,UAAE;AACA,qBAAO,OAAO,UAAU;AAAA,YAC1B;AAAA,UACF,EAAE;AAAA,QACJ,CAAC;AACD,YAAI,sBAAsBN,YAAW,SAASS,UAASR,SAAQ;AAC7D;AACA,UAAAA,QAAO,UAAU,wBAAwB,EAAE,IAAI,aAAa,uBAAuB;AAAA,QACrF,CAAC;AACD,YAAI,0BAA0BD,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,cAAIyC,WAAU,oBAAoB;AAClC,cAAI,aAAa;AAAA,YACf,QAAQ;AAAA,YACR,QAAQ;AAAA,UACV;AACA,UAAAzC,QAAO,UAAU,WAAW;AAC1B,gBAAI,UAAUyC,SAAQ;AACtB,gBAAI;AACJ,gBAAI,OAAO,YAAY,YAAY;AACjC,qBAAO;AAAA,YACT;AACA,qBAAS,QAAQ,aAAa;AAC9B,gBAAI;AACF,qBAAO,MAAM;AAAA,YACf,SAAS1D,IAAG;AACV,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,WAAW,QAAQ,QAAQ,QAAQ,CAAC,GAAG;AAC1C,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,WAAW,QAAQ,QAAQ,WAAW,CAAC,GAAG;AAC7C,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,WAAW,QAAQ,QAAQ,WAAW,CAAC,GAAG;AAC7C,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,oBAAoBgB,YAAW,SAASS,UAASR,SAAQ;AAC3D;AACA,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,CAAC,OAAO;AACV,qBAAO;AAAA,YACT;AACA,gBAAI,QAAQ,KAAK,MAAM,UAAU;AAC/B,qBAAO;AAAA,YACT;AACA,gBAAI,CAAC,MAAM,aAAa;AACtB,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM,YAAY,SAAS,UAAU;AACvC,qBAAO;AAAA,YACT;AACA,mBAAO,MAAM,MAAM,YAAY,WAAW,MAAM;AAAA,UAClD;AAAA,QACF,CAAC;AACD,YAAI,0BAA0BD,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,cAAI,WAAW,kBAAkB;AACjC,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,CAAC,SAAS,KAAK,GAAG;AACpB,oBAAM,IAAI,UAAU,QAAQ,kBAAkB;AAAA,YAChD;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,wBAAwBD,YAAW,SAASS,UAASR,SAAQ;AAC/D;AACA,cAAI8B,KAAI,UAAU;AAClB,cAAIZ,UAAS,OAAO;AACpB,cAAI,iBAAiB,OAAO;AAC5B,cAAI,eAAe,OAAO;AAC1B,cAAI,UAAUA,QAAO,IAAI;AACzB,UAAAlB,QAAO,UAAU,SAAS,MAAM;AAC9B,gBAAI,UAAU,GAAG,MAAM;AACvB,mBAAO,QAAQ,QAAQ,WAAW,GAAG,GAAG;AACtC,gBAAE;AAAA,YACJ;AACA,oBAAQ,WAAW;AACnB,oBAAQ,IAAI,IAAI;AAChB,mBAAO,OAAO;AACd,2BAAe,cAAc,MAAM8B,GAAE,GAAG,MAAM,SAAS,OAAO;AAC5D,kBAAI,mBAAmB;AACrB;AAAA,cACF;AACA,kCAAoB;AACpB,6BAAe,MAAM,MAAMA,GAAE,KAAK,CAAC;AACnC,kCAAoB;AAAA,YACtB,CAAC,CAAC;AACF,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,2BAA2B/B,YAAW,SAASS,UAASR,SAAQ;AAClE;AACA,cAAI8B,KAAI,UAAU;AAClB,cAAI,eAAe,oBAAoB,EAAE;AACzC,UAAA9B,QAAO,UAAU,SAAS,gBAAgB;AACxC,mBAAO,OAAO,iBAAiB,gBAAgB;AAAA,cAC7C,aAAa8B,GAAE,IAAI,gBAAgB,aAAa,eAAe,eAAe,aAAa,CAAC;AAAA,cAC5F,oBAAoBA,GAAE,IAAI,gBAAgB,aAAa,sBAAsB,eAAe,oBAAoB,CAAC;AAAA,cACjH,UAAUA,GAAE,IAAI,gBAAgB,aAAa,YAAY,eAAe,UAAU,CAAC;AAAA,cACnF,OAAOA,GAAE,IAAI,gBAAgB,aAAa,SAAS,eAAe,OAAO,CAAC;AAAA,cAC1E,SAASA,GAAE,IAAI,gBAAgB,aAAa,WAAW,eAAe,SAAS,CAAC;AAAA,cAChF,QAAQA,GAAE,IAAI,gBAAgB,aAAa,UAAU,eAAe,QAAQ,CAAC;AAAA,cAC7E,SAASA,GAAE,IAAI,gBAAgB,aAAa,WAAW,eAAe,SAAS,CAAC;AAAA,cAChF,OAAOA,GAAE,IAAI,gBAAgB,aAAa,SAAS,eAAe,OAAO,CAAC;AAAA,cAC1E,aAAaA,GAAE,IAAI,gBAAgB,aAAa,eAAe,eAAe,aAAa,CAAC;AAAA,cAC5F,aAAaA,GAAE,IAAI,gBAAgB,aAAa,eAAe,eAAe,aAAa,CAAC;AAAA,cAC5F,aAAaA,GAAE,IAAI,gBAAgB,aAAa,eAAe,eAAe,aAAa,CAAC;AAAA,YAC9F,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,YAAI,0BAA0B/B,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,cAAI8B,KAAI,UAAU;AAClB,cAAI,iBAAiB,wBAAwB;AAC7C,cAAI,WAAW,uBAAO,OAAO,IAAI;AACjC,UAAA9B,QAAO,UAAU,SAAS,gBAAgB;AACxC,mBAAO,OAAO,iBAAiB,gBAAgB;AAAA,cAC7C,KAAK8B,GAAE,SAAS,KAAK;AACnB,oBAAI,SAAS,GAAG,GAAG;AACjB,yBAAO,SAAS,GAAG;AAAA,gBACrB;AACA,uBAAO,SAAS,GAAG,IAAI,eAAe,OAAO,GAAG,CAAC;AAAA,cACnD,CAAC;AAAA,cACD,QAAQA,GAAE,SAAS,QAAQ;AACzB,oBAAI;AACJ,+BAAe,MAAM;AACrB,qBAAK,OAAO,UAAU;AACpB,sBAAI,SAAS,GAAG,MAAM,QAAQ;AAC5B,2BAAO;AAAA,kBACT;AAAA,gBACF;AACA,uBAAO;AAAA,cACT,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,YAAI,mBAAmB/B,YAAW,SAASS,UAASR,SAAQ;AAC1D;AACA,cAAI8B,KAAI,UAAU;AAClB,cAAI,iBAAiB,wBAAwB;AAC7C,cAAI,eAAe,oBAAoB,EAAE;AACzC,cAAI,eAAe,sBAAsB;AACzC,cAAI,uBAAuB,yBAAyB;AACpD,cAAI,sBAAsB,wBAAwB;AAClD,cAAIZ,UAAS,OAAO;AACpB,cAAI,mBAAmB,OAAO;AAC9B,cAAI,iBAAiB,OAAO;AAC5B,cAAI;AACJ,cAAI;AACJ,cAAI;AACJ,cAAI,OAAO,iBAAiB,YAAY;AACtC,gBAAI;AACF,qBAAO,aAAa,CAAC;AACrB,6BAAe;AAAA,YACjB,SAAS,QAAQ;AAAA,YAAC;AAAA,UACpB,OAAO;AACL,2BAAe;AAAA,UACjB;AACA,yBAAe,SAAS,SAAS,aAAa;AAC5C,gBAAI,gBAAgB,cAAc;AAChC,oBAAM,IAAI,UAAU,6BAA6B;AAAA,YACnD;AACA,mBAAO,eAAe,WAAW;AAAA,UACnC;AACA,UAAAlB,QAAO,UAAU,iBAAiB,SAAS,SAAS,aAAa;AAC/D,gBAAI;AACJ,gBAAI,gBAAgB,UAAU;AAC5B,oBAAM,IAAI,UAAU,6BAA6B;AAAA,YACnD;AACA,gBAAI,cAAc;AAChB,qBAAO,aAAa,WAAW;AAAA,YACjC;AACA,qBAASkB,QAAO,aAAa,SAAS;AACtC,0BAAc,gBAAgB,SAAS,KAAK,OAAO,WAAW;AAC9D,mBAAO,iBAAiB,QAAQ;AAAA,cAC9B,iBAAiBY,GAAE,IAAI,WAAW;AAAA,cAClC,UAAUA,GAAE,IAAI,aAAa,WAAW,CAAC;AAAA,YAC3C,CAAC;AAAA,UACH;AACA,+BAAqB,cAAc;AACnC,8BAAoB,cAAc;AAClC,2BAAiB,aAAa,WAAW;AAAA,YACvC,aAAaA,GAAE,cAAc;AAAA,YAC7B,UAAUA,GAAE,IAAI,WAAW;AACzB,qBAAO,KAAK;AAAA,YACd,CAAC;AAAA,UACH,CAAC;AACD,2BAAiB,eAAe,WAAW;AAAA,YACzC,UAAUA,GAAE,WAAW;AACrB,qBAAO,aAAa,eAAe,IAAI,EAAE,kBAAkB;AAAA,YAC7D,CAAC;AAAA,YACD,SAASA,GAAE,WAAW;AACpB,qBAAO,eAAe,IAAI;AAAA,YAC5B,CAAC;AAAA,UACH,CAAC;AACD,yBAAe,eAAe,WAAW,eAAe,aAAaA,GAAE,IAAI,WAAW;AACpF,gBAAI,SAAS,eAAe,IAAI;AAChC,gBAAI,QAAQ,MAAM,MAAM,UAAU;AAChC,qBAAO;AAAA,YACT;AACA,mBAAO,OAAO,SAAS;AAAA,UACzB,CAAC,CAAC;AACF,yBAAe,eAAe,WAAW,eAAe,aAAaA,GAAE,KAAK,QAAQ,CAAC;AACrF,yBAAe,aAAa,WAAW,eAAe,aAAaA,GAAE,KAAK,eAAe,UAAU,eAAe,WAAW,CAAC,CAAC;AAC/H,yBAAe,aAAa,WAAW,eAAe,aAAaA,GAAE,KAAK,eAAe,UAAU,eAAe,WAAW,CAAC,CAAC;AAAA,QACjI,CAAC;AACD,YAAI,qBAAqB/B,YAAW,SAASS,UAASR,SAAQ;AAC5D;AACA,UAAAA,QAAO,UAAU,wBAAwB,EAAE,IAAI,oBAAoB,EAAE,SAAS,iBAAiB;AAAA,QACjG,CAAC;AACD,YAAI,uBAAuBD,YAAW,SAASS,UAASR,SAAQ;AAC9D;AACA,cAAI,cAAc,OAAO,UAAU;AACnC,cAAI0C,MAAK,YAAY,KAAK,2BAAW;AACnC,mBAAO;AAAA,UACT,EAAE,CAAC;AACH,UAAA1C,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAO,YAAY,KAAK,KAAK,MAAM0C;AAAA,UACrC;AAAA,QACF,CAAC;AACD,YAAI,sBAAsB3C,YAAW,SAASS,UAASR,SAAQ;AAC7D;AACA,cAAI,cAAc,OAAO,UAAU;AACnC,cAAI,sBAAsB,OAAO,UAAU,KAAK,KAAK,iCAAiC;AACtF,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAO,OAAO,UAAU,cAAc,oBAAoB,YAAY,KAAK,KAAK,CAAC;AAAA,UACnF;AAAA,QACF,CAAC;AACD,YAAI,oBAAoBD,YAAW,SAASS,UAASR,SAAQ;AAC3D;AACA,cAAI,cAAc,OAAO,UAAU;AACnC,cAAI0C,MAAK,YAAY,KAAK,EAAE;AAC5B,UAAA1C,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAO,OAAO,UAAU,YAAY,SAAS,QAAQ,KAAK,MAAM,aAAa,iBAAiB,UAAU,YAAY,KAAK,KAAK,MAAM0C,QAAO;AAAA,UAC7I;AAAA,QACF,CAAC;AACD,YAAI,gBAAgB3C,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,cAAI,iBAAiB,mBAAmB,EAAE;AAC1C,cAAI,cAAc,qBAAqB;AACvC,cAAI6B,cAAa,oBAAoB;AACrC,cAAI,WAAW,uBAAuB;AACtC,cAAI,WAAW,uBAAuB;AACtC,cAAI,aAAa,oBAAoB;AACrC,cAAI,UAAU,iBAAiB;AAC/B,cAAIc,YAAW,kBAAkB;AACjC,cAAIC,WAAU,MAAM;AACpB,cAAI,OAAO,SAAS,UAAU;AAC9B,cAAI,OAAO;AAAA,YACT,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,OAAO;AAAA,UACT;AACA,cAAI,iBAAiB,OAAO;AAC5B,UAAA5C,QAAO,UAAU,SAAS,WAAW;AACnC,gBAAI,QAAQ,UAAU,CAAC,GAAG,UAAU,UAAU,CAAC,GAAG,UAAUtB,IAAGmE,IAAG,KAAK,QAAQ,MAAMC,WAAU,QAAQ,aAAa;AACpH,wBAAY,OAAO,WAAW,SAAS,CAAC;AACxC,gBAAI,QAAQ,KAAK,GAAG;AAClB,uBAAS,KAAK;AAAA,YAChB;AACA,gBAAI,CAAC,QAAQ,SAAS,SAAS,CAACjB,YAAW,IAAI,GAAG;AAChD,kBAAI,CAAC,OAAO;AACV,oBAAI,YAAY,SAAS,GAAG;AAC1B,2BAAS,UAAU;AACnB,sBAAI,WAAW,GAAG;AAChB,2BAAO,MAAM,MAAM,MAAM,SAAS;AAAA,kBACpC;AACA,wBAAM,IAAI,MAAM,CAAC;AACjB,sBAAI,CAAC,IAAI,UAAU,CAAC;AACpB,yBAAO;AAAA,gBACT;AACA,oBAAIe,SAAQ,SAAS,GAAG;AACtB,wBAAM,IAAI,MAAM,SAAS,UAAU,MAAM;AACzC,uBAAKlE,KAAI,GAAGA,KAAI,QAAQ,EAAEA,IAAG;AAC3B,wBAAIA,EAAC,IAAI,UAAUA,EAAC;AAAA,kBACtB;AACA,yBAAO;AAAA,gBACT;AAAA,cACF;AACA,oBAAM,CAAC;AAAA,YACT,OAAO;AACL,yBAAW;AAAA,YACb;AACA,gBAAI,CAACkE,SAAQ,SAAS,GAAG;AACvB,mBAAK,cAAc,UAAU,cAAc,OAAO,QAAQ;AACxD,gBAAAE,YAAW,SAAS,WAAW,EAAE,KAAK,SAAS;AAC/C,oBAAI,UAAU;AACZ,wBAAM,IAAI,SAAS;AAAA,gBACrB;AACA,yBAASA,UAAS,KAAK;AACvB,gBAAApE,KAAI;AACJ,uBAAO,CAAC,OAAO,MAAM;AACnB,0BAAQ,QAAQ,KAAK,KAAK,OAAO,SAAS,OAAO,OAAOA,EAAC,IAAI,OAAO;AACpE,sBAAI,UAAU;AACZ,yBAAK,QAAQ;AACb,mCAAe,KAAKA,IAAG,IAAI;AAAA,kBAC7B,OAAO;AACL,wBAAIA,EAAC,IAAI;AAAA,kBACX;AACA,2BAASoE,UAAS,KAAK;AACvB,oBAAEpE;AAAA,gBACJ;AACA,yBAASA;AAAA,cACX,WAAWiE,UAAS,SAAS,GAAG;AAC9B,yBAAS,UAAU;AACnB,oBAAI,UAAU;AACZ,wBAAM,IAAI,SAAS;AAAA,gBACrB;AACA,qBAAKjE,KAAI,GAAGmE,KAAI,GAAGnE,KAAI,QAAQ,EAAEA,IAAG;AAClC,0BAAQ,UAAUA,EAAC;AACnB,sBAAIA,KAAI,IAAI,QAAQ;AAClB,2BAAO,MAAM,WAAW,CAAC;AACzB,wBAAI,QAAQ,SAAS,QAAQ,OAAO;AAClC,+BAAS,UAAU,EAAEA,EAAC;AAAA,oBACxB;AAAA,kBACF;AACA,0BAAQ,QAAQ,KAAK,KAAK,OAAO,SAAS,OAAOmE,EAAC,IAAI;AACtD,sBAAI,UAAU;AACZ,yBAAK,QAAQ;AACb,mCAAe,KAAKA,IAAG,IAAI;AAAA,kBAC7B,OAAO;AACL,wBAAIA,EAAC,IAAI;AAAA,kBACX;AACA,oBAAEA;AAAA,gBACJ;AACA,yBAASA;AAAA,cACX;AAAA,YACF;AACA,gBAAI,WAAW,QAAQ;AACrB,uBAAS,SAAS,UAAU,MAAM;AAClC,kBAAI,UAAU;AACZ,sBAAM,IAAI,SAAS,MAAM;AAAA,cAC3B;AACA,mBAAKnE,KAAI,GAAGA,KAAI,QAAQ,EAAEA,IAAG;AAC3B,wBAAQ,QAAQ,KAAK,KAAK,OAAO,SAAS,UAAUA,EAAC,GAAGA,EAAC,IAAI,UAAUA,EAAC;AACxE,oBAAI,UAAU;AACZ,uBAAK,QAAQ;AACb,iCAAe,KAAKA,IAAG,IAAI;AAAA,gBAC7B,OAAO;AACL,sBAAIA,EAAC,IAAI;AAAA,gBACX;AAAA,cACF;AAAA,YACF;AACA,gBAAI,UAAU;AACZ,mBAAK,QAAQ;AACb,kBAAI,SAAS;AAAA,YACf;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,eAAeqB,YAAW,SAASS,UAASR,SAAQ;AACtD;AACA,UAAAA,QAAO,UAAU,wBAAwB,EAAE,IAAI,MAAM,OAAO,cAAc;AAAA,QAC5E,CAAC;AACD,YAAI,mBAAmBD,YAAW,SAASS,UAASR,SAAQ;AAC1D;AACA,cAAI,OAAO,aAAa;AACxB,cAAI4C,WAAU,MAAM;AACpB,UAAA5C,QAAO,UAAU,SAAS,WAAW;AACnC,mBAAO4C,SAAQ,SAAS,IAAI,YAAY,KAAK,SAAS;AAAA,UACxD;AAAA,QACF,CAAC;AACD,YAAI,0BAA0B7C,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,cAAI+C,YAAW,iBAAiB;AAChC,cAAI,UAAU,iBAAiB;AAC/B,cAAI,WAAW,uBAAuB;AACtC,cAAI,QAAQ,MAAM,UAAU;AAC5B,cAAI;AACJ,wBAAc,SAASC,aAAY,MAAM;AACvC,mBAAO,KAAK,IAAI,SAAS,SAAStE,IAAG;AACnC,qBAAO,UAAU,QAAQ,KAAKA,EAAC,CAAC,IAAI,KAAKA,EAAC;AAAA,YAC5C,CAAC,EAAE,OAAO,MAAM,KAAK,MAAM,KAAK,MAAM,CAAC;AAAA,UACzC;AACA,UAAAsB,QAAO,UAAU,SAAS,WAAW;AACnC,wBAAY+C,UAAS,SAAS;AAC9B,sBAAU,QAAQ,SAAS,SAAS;AAClC,kBAAI,QAAQ,OAAO,GAAG;AACpB,yBAAS,OAAO;AAAA,cAClB;AAAA,YACF,CAAC;AACD,mBAAO,YAAY,KAAK,SAAS;AAAA,UACnC;AAAA,QACF,CAAC;AACD,YAAI,4BAA4BhD,YAAW,SAASS,UAASR,SAAQ;AACnE;AACA,cAAI,WAAW,uBAAuB;AACtC,UAAAA,QAAO,UAAU,SAAS,gBAAgB;AACxC,gBAAI;AACJ,gBAAI,OAAO,mBAAmB,YAAY;AACxC,qBAAO;AAAA,gBACL,KAAK;AAAA,gBACL,KAAK;AAAA,cACP;AAAA,YACF;AACA,yBAAa;AAAA,cACX,KAAK,SAAS,eAAe,GAAG;AAAA,YAClC;AACA,gBAAI,eAAe,QAAQ,QAAQ;AACjC,yBAAW,MAAM,SAAS,eAAe,GAAG;AAC5C,kBAAI,eAAe,QAAQ,GAAG;AAC5B,2BAAW,QAAQ,IAAI,SAAS,eAAe,QAAQ,CAAC;AAAA,cAC1D;AACA,kBAAI,eAAe,OAAO;AACxB,2BAAW,QAAQ,SAAS,eAAe,KAAK;AAAA,cAClD;AACA,qBAAO;AAAA,YACT;AACA,uBAAW,MAAM,WAAW;AAC5B,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,wBAAwBD,YAAW,SAASS,UAASR,SAAQ;AAC/D;AACA,cAAI,cAAc,eAAe;AACjC,cAAI,eAAe,sBAAsB;AACzC,cAAI8B,KAAI,UAAU;AAClB,cAAImB,MAAK,sBAAsB,EAAE;AACjC,cAAI,iBAAiB,wBAAwB;AAC7C,cAAI,mBAAmB,0BAA0B;AACjD,cAAI,QAAQ,SAAS,UAAU;AAC/B,cAAI,OAAO,SAAS,UAAU;AAC9B,cAAI/B,UAAS,OAAO;AACpB,cAAI,mBAAmB,OAAO;AAC9B,cAAI,MAAM+B,IAAG;AACb,cAAI,OAAOA,IAAG;AACd,UAAAjD,QAAO,UAAU,SAAS,UAAU,QAAQ,SAAS;AACnD,gBAAI,UAAUkB,QAAO,IAAI,GAAG,MAAM,WAAW,MAAMc,MAAKkB,MAAK,QAAQ,QAAQ,QAAQ,QAAQ,YAAY,cAAc,cAAc,iBAAiB,UAAU;AAChK,gBAAI,WAAW,OAAO;AACpB,0BAAY;AAAA,YACd,WAAW,MAAM,SAAS,MAAM,GAAG;AACjC,0BAAY;AAAA,YACd,OAAO;AACL,0BAAY,SAAS;AAAA,YACvB;AACA,gBAAI,QAAQ,YAAY;AACtB,2BAAa,iBAAiB,QAAQ,UAAU;AAChD,qBAAO,WAAW;AAClB,cAAAlB,OAAM,WAAW;AACjB,cAAAkB,OAAM,WAAW,QAAQ;AACzB,uBAAS,WAAW;AAAA,YACtB;AACA,gBAAI,QAAQ,aAAa,MAAM;AAC7B,wBAAU,eAAe,QAAQ,SAAS;AAAA,YAC5C;AACA,gBAAI,MAAM;AACR,yBAAW,aAAa,SAAS,KAAK;AACpC,oBAAIR,KAAI,QAAQ,OAAO;AACvB,oBAAI,SAAS;AACX,yBAAO,QAAQ,IAAI;AAAA,gBACrB;AACA,gBAAAA,MAAK,KAAK,IAAI;AACd,oBAAIA,QAAO,MAAM;AACf,sBAAI,eAAe,KAAK,SAASA,GAAE,GAAG;AACpC,wBAAI,cAAc;AAChB,2BAAK,KAAK,OAAOA,KAAI,MAAM,IAAI;AAAA,oBACjC;AACA,2BAAO,QAAQA,GAAE;AAAA,kBACnB;AAAA,gBACF;AACA,oBAAI,KAAK,WAAW,GAAG;AACrB,2BAAS,KAAK,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC;AAAA,gBAC5C,OAAO;AACL,2BAAS,MAAM,KAAK,UAAU,MAAM,IAAI;AAAA,gBAC1C;AACA,oBAAIA,QAAO,MAAM;AACf,kBAAAA,MAAK,KAAK,IAAI;AACd,sBAAIA,QAAO,MAAM;AACf,0BAAM,YAAY,uBAAuB,qBAAqB;AAAA,kBAChE;AACA,kBAAAA,MAAKV,KAAI,IAAI;AAAA,gBACf,WAAW,eAAe,KAAK,SAASU,GAAE,GAAG;AAC3C,wBAAM,YAAY,uBAAuB,qBAAqB;AAAA,gBAChE;AACA,wBAAQA,GAAE,IAAI;AACd,oBAAI,cAAc;AAChB,uBAAK,KAAK,OAAOA,KAAI,MAAM,MAAM;AAAA,gBACnC;AACA,uBAAO;AAAA,cACT,GAAG,SAAS;AAAA,YACd,WAAW,WAAW,GAAG;AACvB,yBAAW,SAASS,YAAW;AAC7B,oBAAI;AACJ,oBAAI,eAAe,KAAK,SAAS,MAAM,GAAG;AACxC,sBAAI,cAAc;AAChB,yBAAK,KAAK,OAAO,QAAQ,WAAW,IAAI;AAAA,kBAC1C;AACA,yBAAO,QAAQ;AAAA,gBACjB;AACA,oBAAI,UAAU,QAAQ;AACpB,2BAAS,MAAM,KAAK,UAAU,MAAM,SAAS;AAAA,gBAC/C,OAAO;AACL,2BAAS,KAAK,KAAK,UAAU,IAAI;AAAA,gBACnC;AACA,oBAAI,eAAe,KAAK,SAAS,MAAM,GAAG;AACxC,wBAAM,YAAY,uBAAuB,qBAAqB;AAAA,gBAChE;AACA,wBAAQ,OAAO;AACf,oBAAI,cAAc;AAChB,uBAAK,KAAK,OAAO,QAAQ,MAAM,MAAM;AAAA,gBACvC;AACA,uBAAO;AAAA,cACT;AAAA,YACF,OAAO;AACL,yBAAW,SAASA,UAAS,KAAK;AAChC,oBAAI,QAAQ,OAAO,WAAWT;AAC9B,oBAAI,SAAS;AACX,yBAAO,QAAQ,SAAS;AAAA,gBAC1B;AACA,gBAAAA,MAAK,OAAO,KAAK,CAAC,CAAC;AACnB,oBAAI,eAAe,KAAK,SAASA,GAAE,GAAG;AACpC,sBAAI,cAAc;AAChB,yBAAK,KAAK,OAAOA,KAAI,MAAM,IAAI;AAAA,kBACjC;AACA,yBAAO,QAAQA,GAAE;AAAA,gBACnB;AACA,oBAAI,KAAK,WAAW,GAAG;AACrB,2BAAS,KAAK,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC;AAAA,gBAC5C,OAAO;AACL,2BAAS,MAAM,KAAK,UAAU,MAAM,IAAI;AAAA,gBAC1C;AACA,oBAAI,eAAe,KAAK,SAASA,GAAE,GAAG;AACpC,wBAAM,YAAY,uBAAuB,qBAAqB;AAAA,gBAChE;AACA,wBAAQA,GAAE,IAAI;AACd,oBAAI,cAAc;AAChB,uBAAK,KAAK,OAAOA,KAAI,MAAM,MAAM;AAAA,gBACnC;AACA,uBAAO;AAAA,cACT;AAAA,YACF;AACA,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA,aAAa,QAAQ;AAAA,cACrB,KAAK,SAASrC,KAAI,MAAM;AACtB,oBAAI,SAAS;AACX,yBAAO,QAAQ,IAAI;AAAA,gBACrB;AACA,oBAAI,MAAM;AACR,yBAAO,KAAK,IAAI;AAAA,gBAClB;AACA,uBAAO,OAAO,KAAK,CAAC,CAAC;AAAA,cACvB;AAAA,cACA,KAAK,SAAS+C,KAAIV,KAAI;AACpB,uBAAO,eAAe,KAAK,SAASA,GAAE;AAAA,cACxC;AAAA,cACA,QAAQ,SAAS,QAAQA,KAAI;AAC3B,oBAAI;AACJ,oBAAI,CAAC,eAAe,KAAK,SAASA,GAAE,GAAG;AACrC;AAAA,gBACF;AACA,oBAAIQ,MAAK;AACP,kBAAAA,KAAIR,GAAE;AAAA,gBACR;AACA,yBAAS,QAAQA,GAAE;AACnB,uBAAO,QAAQA,GAAE;AACjB,oBAAI,iBAAiB;AACnB,uBAAK,KAAK,UAAUA,KAAI,MAAM;AAAA,gBAChC;AAAA,cACF;AAAA,cACA,OAAO,SAAS,QAAQ;AACtB,oBAAI,WAAW;AACf,oBAAI,QAAQ;AACV,yBAAO;AAAA,gBACT;AACA,0BAAUxB,QAAO,IAAI;AACrB,qBAAK,KAAK,SAAS,QAAQ;AAAA,cAC7B;AAAA,cACA,IAAI,SAASgB,IAAGE,OAAM,UAAU;AAC9B,oBAAIA,UAAS,OAAO;AAClB,iCAAe;AAAA,gBACjB,WAAWA,UAAS,OAAO;AACzB,iCAAe;AAAA,gBACjB,WAAWA,UAAS,UAAU;AAC5B,oCAAkB;AAAA,gBACpB;AACA,uBAAO,IAAI,KAAK,MAAMA,OAAM,QAAQ;AAAA,cACtC;AAAA,cACA;AAAA,cACA,WAAW,SAAS,YAAY;AAC9B,2BAAW,KAAK;AAAA,cAClB;AAAA,YACF;AACA,gBAAI,MAAM;AACR,uBAAS,aAAa,SAAS,KAAK;AAClC,oBAAIM,KAAI,OAAO;AACf,oBAAI,SAAS;AACX,yBAAO,QAAQ,IAAI;AAAA,gBACrB;AACA,gBAAAA,MAAK,KAAK,IAAI;AACd,oBAAIA,QAAO,MAAM;AACf;AAAA,gBACF;AACA,qBAAK,QAAQ,EAAEA,GAAE;AAAA,cACnB,GAAG,SAAS;AAAA,YACd,WAAW,WAAW,GAAG;AACvB,uBAAS,SAASW,UAAS;AACzB,uBAAO,KAAK,QAAQ,EAAE,MAAM;AAAA,cAC9B;AAAA,YACF,OAAO;AACL,uBAAS,SAASA,QAAO,KAAK;AAC5B,oBAAI,SAAS;AACX,wBAAM,QAAQ,SAAS,EAAE,CAAC;AAAA,gBAC5B;AACA,uBAAO,KAAK,QAAQ,EAAE,GAAG;AAAA,cAC3B;AAAA,YACF;AACA,qBAAS,aAAa,WAAW;AAC/B,kBAAIX,KAAI,OAAO;AACf,kBAAI,WAAW,GAAG;AAChB,uBAAO,QAAQ;AAAA,cACjB;AACA,kBAAI,SAAS;AACX,uBAAO,QAAQ,IAAI;AAAA,cACrB;AACA,kBAAI,MAAM;AACR,gBAAAA,MAAK,KAAK,IAAI;AAAA,cAChB,OAAO;AACL,gBAAAA,MAAK,OAAO,KAAK,CAAC,CAAC;AAAA,cACrB;AACA,qBAAO,QAAQA,GAAE;AAAA,YACnB,CAAC;AACD,qBAAS,aAAa,WAAW;AAC/B,kBAAIA,KAAI,OAAO;AACf,kBAAI,WAAW,GAAG;AAChB,uBAAO,KAAK,IAAI,MAAM;AAAA,cACxB;AACA,kBAAI,SAAS;AACX,uBAAO,QAAQ,IAAI;AAAA,cACrB;AACA,kBAAI,MAAM;AACR,gBAAAA,MAAK,KAAK,IAAI;AAAA,cAChB,OAAO;AACL,gBAAAA,MAAK,OAAO,KAAK,CAAC,CAAC;AAAA,cACrB;AACA,kBAAIA,QAAO,MAAM;AACf,uBAAO;AAAA,cACT;AACA,qBAAO,KAAK,IAAIA,GAAE;AAAA,YACpB,CAAC;AACD,6BAAiB,UAAU;AAAA,cACzB,cAAcZ,GAAE,IAAI;AAAA,cACpB,QAAQA,GAAE,MAAM;AAAA,cAChB,OAAOA,GAAE,KAAK,KAAK;AAAA,cACnB,MAAMA,GAAE,MAAM;AAAA,cACd,MAAMA,GAAE,MAAM;AAAA,YAChB,CAAC;AACD,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,gBAAgB/B,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,cAAI,WAAW,uBAAuB;AACtC,cAAIiB,WAAU,iBAAiB;AAC/B,cAAI,aAAa,8BAA8B;AAC/C,cAAI,aAAa,sBAAsB;AACvC,cAAI,gBAAgB,uBAAuB;AAC3C,UAAAjB,QAAO,UAAU,SAAS,MAAM,IAAI;AAClC,gBAAI,SAAS,QAAQ;AACrB,qBAAS,EAAE;AACX,sBAAU,OAAO,UAAU,CAAC,CAAC;AAC7B,gBAAI,QAAQ,SAAS,QAAQ,SAAS;AACpC,oBAAM,IAAI,MAAM,uDAA2D;AAAA,YAC7E;AACA,gBAAI,eAAe,KAAK,IAAI,cAAc,KAAK,CAAC,QAAQ,OAAO;AAC7D,qBAAO;AAAA,YACT;AACA,qBAAS,cAAc,QAAQ,QAAQ,GAAG,QAAQ,QAAQ,SAAS,WAAW,KAAK;AACnF,mBAAO,WAAW,IAAI,QAAQ,OAAO;AACrC,YAAAiB,SAAQ,YAAY,SAAS,OAAO,MAAM;AACxC,kBAAI,QAAQ,IAAI,GAAG;AACjB,sBAAM,QAAQ,IAAI,GAAG,MAAM,OAAO;AAAA,cACpC;AAAA,YACF,CAAC;AACD,gBAAI,MAAM,cAAc;AACtB,oBAAM,aAAa,IAAI;AAAA,YACzB;AACA,iBAAK,UAAU;AACf,mBAAO,KAAK;AAAA,UACd;AAAA,QACF,CAAC;AACD,YAAI,oBAAoBlB,YAAW,SAASS,UAASR,SAAQ;AAC3D;AACA,UAAAA,QAAO,UAAU,SAAS,MAAM;AAC9B,gBAAI0C,KAAIhE,IAAG,SAAS,KAAK;AACzB,gBAAI,CAAC,QAAQ;AACX,qBAAO;AAAA,YACT;AACA,YAAAgE,MAAK,OAAO,KAAKhE,KAAI,CAAC,CAAC;AACvB,mBAAO,EAAE,QAAQ;AACf,cAAAgE,OAAM,MAAS,KAAK,EAAEhE,EAAC;AAAA,YACzB;AACA,mBAAOgE;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,8BAA8B3C,YAAW,SAASS,UAASR,SAAQ;AACrE;AACA,UAAAA,QAAO,UAAU,SAAS,QAAQ;AAChC,gBAAI,CAAC,QAAQ;AACX,qBAAO,WAAW;AAChB,uBAAO;AAAA,cACT;AAAA,YACF;AACA,mBAAO,SAAS,MAAM;AACpB,kBAAI0C,MAAK,OAAO,KAAK,CAAC,CAAC,GAAGhE,KAAI,GAAG,gBAAgB;AACjD,qBAAO,EAAE,eAAe;AACtB,gBAAAgE,OAAM,MAAS,KAAK,EAAEhE,EAAC;AAAA,cACzB;AACA,qBAAOgE;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,0BAA0B3C,YAAW,SAASS,UAASR,SAAQ;AACjE;AACA,UAAAA,QAAO,UAAU,WAAW;AAC1B,gBAAI,cAAc,OAAO;AACzB,gBAAI,OAAO,gBAAgB,YAAY;AACrC,qBAAO;AAAA,YACT;AACA,mBAAO,CAAC,YAAY,CAAC,CAAC,KAAK,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE;AAAA,UAChE;AAAA,QACF,CAAC;AACD,YAAI,gBAAgBD,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAO,UAAU;AAAA,UACnB;AAAA,QACF,CAAC;AACD,YAAI,iBAAiBD,YAAW,SAASS,UAASR,SAAQ;AACxD;AACA,UAAAA,QAAO,UAAU,wBAAwB,EAAE,IAAI,OAAO,QAAQ,cAAc;AAAA,QAC9E,CAAC;AACD,YAAI,qBAAqBD,YAAW,SAASS,UAASR,SAAQ;AAC5D;AACA,cAAI,cAAc,eAAe;AACjC,cAAI,WAAW,uBAAuB;AACtC,cAAI,QAAQ,oBAAoB;AAChC,cAAI,UAAU,MAAM,UAAU;AAC9B,cAAI,oBAAoB,OAAO,UAAU;AACzC,cAAIoB,OAAM,KAAK;AACf,cAAI,QAAQ,KAAK;AACjB,UAAApB,QAAO,UAAU,SAAS,eAAe;AACvC,gBAAItB,IAAG,QAAQ,WAAW;AAC1B,gBAAI,CAAC,YAAY,aAAa,GAAG;AAC/B,qBAAO,QAAQ,MAAM,MAAM,SAAS;AAAA,YACtC;AACA,qBAAS,SAAS,MAAM,IAAI,EAAE,MAAM;AACpC,wBAAY,UAAU,CAAC;AACvB,gBAAI,MAAM,SAAS,GAAG;AACpB,0BAAY;AAAA,YACd,WAAW,aAAa,GAAG;AACzB,0BAAY,MAAM,SAAS;AAAA,YAC7B,OAAO;AACL,0BAAY,SAAS,KAAK,MAAM,IAAI,MAAM0C,KAAI,SAAS,CAAC;AAAA,YAC1D;AACA,iBAAK1C,KAAI,WAAWA,KAAI,QAAQ,EAAEA,IAAG;AACnC,kBAAI,kBAAkB,KAAK,MAAMA,EAAC,GAAG;AACnC,sBAAM,KAAKA,EAAC;AACZ,oBAAI,YAAY,GAAG,GAAG;AACpB,yBAAOA;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,cAAcqB,YAAW,SAASS,UAASR,SAAQ;AACrD;AACA,cAAI,UAAU,mBAAmB;AACjC,cAAIkB,UAAS,OAAO;AACpB,UAAAlB,QAAO,UAAU,WAAW;AAC1B,gBAAI,SAAS,GAAGyB,OAAM,CAAC,GAAG,UAAUP,QAAO,IAAI;AAC/C,mBAAO;AAAA,cACL,KAAK,SAASb,KAAI,MAAM;AACtB,oBAAIkB,SAAQ,GAAGS,OAAMP,MAAK/C,IAAG,SAAS,KAAK;AAC3C,oBAAI,WAAW,GAAG;AAChB,yBAAOsD,KAAI,MAAM,KAAK;AAAA,gBACxB;AACA,oBAAIA,OAAMA,KAAI,MAAM,GAAG;AACrB,yBAAOT,SAAQ,SAAS,GAAG;AACzB,oBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,wBAAI7C,OAAM,IAAI;AACZ,6BAAO;AAAA,oBACT;AACA,oBAAAsD,OAAMA,KAAI,CAAC,EAAEtD,EAAC;AACd,sBAAE6C;AAAA,kBACJ;AACA,kBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,sBAAI7C,OAAM,IAAI;AACZ,2BAAO;AAAA,kBACT;AACA,yBAAOsD,KAAI,CAAC,EAAEtD,EAAC,KAAK;AAAA,gBACtB;AACA,uBAAO;AAAA,cACT;AAAA,cACA,KAAK,SAASsD,KAAI,MAAM;AACtB,oBAAIT,SAAQ,GAAGS,OAAMP,MAAK/C,IAAG,SAAS,KAAK;AAC3C,oBAAI,WAAW,GAAG;AAChB,kBAAAsD,KAAI,MAAM,IAAI,EAAE;AAAA,gBAClB,OAAO;AACL,sBAAI,CAACA,KAAI,MAAM,GAAG;AAChB,oBAAAA,KAAI,MAAM,IAAI,CAAE,CAAC,GAAG,CAAC,CAAE;AAAA,kBACzB;AACA,kBAAAA,OAAMA,KAAI,MAAM;AAChB,yBAAOT,SAAQ,SAAS,GAAG;AACzB,oBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,wBAAI7C,OAAM,IAAI;AACZ,sBAAAA,KAAIsD,KAAI,CAAC,EAAE,KAAK,KAAKT,MAAK,CAAC,IAAI;AAC/B,sBAAAS,KAAI,CAAC,EAAE,KAAK,CAAE,CAAC,GAAG,CAAC,CAAE,CAAC;AAAA,oBACxB;AACA,oBAAAA,OAAMA,KAAI,CAAC,EAAEtD,EAAC;AACd,sBAAE6C;AAAA,kBACJ;AACA,kBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,sBAAI7C,OAAM,IAAI;AACZ,oBAAAA,KAAIsD,KAAI,CAAC,EAAE,KAAK,KAAKT,MAAK,CAAC,IAAI;AAAA,kBACjC;AACA,kBAAAS,KAAI,CAAC,EAAEtD,EAAC,IAAI,EAAE;AAAA,gBAChB;AACA,wBAAQ,MAAM,IAAI;AAClB,uBAAO;AAAA,cACT;AAAA,cACA,QAAQ,SAAS,QAAQgE,KAAI;AAC3B,oBAAInB,SAAQ,GAAGS,OAAMP,MAAK/C,IAAG,OAAO,QAAQgE,GAAE,GAAG,SAAS,KAAK,QAAQ1B,QAAO,CAAC;AAC/E,oBAAI,WAAW,GAAG;AAChB,yBAAOgB,KAAI,MAAM;AAAA,gBACnB,WAAWA,OAAMA,KAAI,MAAM,GAAG;AAC5B,yBAAOT,SAAQ,SAAS,GAAG;AACzB,oBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,wBAAI7C,OAAM,IAAI;AACZ;AAAA,oBACF;AACA,oBAAAsC,MAAK,KAAKgB,MAAKtD,EAAC;AAChB,oBAAAsD,OAAMA,KAAI,CAAC,EAAEtD,EAAC;AACd,sBAAE6C;AAAA,kBACJ;AACA,kBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,sBAAI7C,OAAM,IAAI;AACZ;AAAA,kBACF;AACA,kBAAAgE,MAAKV,KAAI,CAAC,EAAEtD,EAAC;AACb,kBAAAsD,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAClB,kBAAAsD,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAClB,yBAAO,CAACsD,KAAI,CAAC,EAAE,UAAUhB,MAAK,QAAQ;AACpC,oBAAAtC,KAAIsC,MAAK,IAAI;AACb,oBAAAgB,OAAMhB,MAAK,IAAI;AACf,oBAAAgB,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAClB,oBAAAsD,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAAA,kBACpB;AAAA,gBACF;AACA,uBAAO,QAAQgE,GAAE;AAAA,cACnB;AAAA,cACA,OAAO,SAAS,QAAQ;AACtB,gBAAAjB,OAAM,CAAC;AACP,0BAAUP,QAAO,IAAI;AAAA,cACvB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,gBAAgBnB,YAAW,SAASS,UAASR,SAAQ;AACvD;AACA,cAAI,UAAU,mBAAmB;AACjC,UAAAA,QAAO,UAAU,WAAW;AAC1B,gBAAI,SAAS,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;AACzC,mBAAO;AAAA,cACL,KAAK,SAASK,KAAI,MAAM;AACtB,oBAAIkB,SAAQ,QAAQ,KAAK,SAAS,KAAK,CAAC,CAAC;AACzC,uBAAOA,WAAU,KAAK,OAAO,QAAQA,MAAK;AAAA,cAC5C;AAAA,cACA,KAAK,SAASS,KAAI,MAAM;AACtB,wBAAQ,KAAK,KAAK,CAAC,CAAC;AACpB,wBAAQ,KAAK,EAAE,MAAM;AACrB,uBAAO;AAAA,cACT;AAAA,cACA,QAAQ,SAAS,QAAQU,KAAI;AAC3B,oBAAInB,SAAQ,QAAQ,KAAK,SAASmB,GAAE;AACpC,oBAAInB,WAAU,IAAI;AAChB,0BAAQ,OAAOA,QAAO,CAAC;AACvB,0BAAQ,OAAOA,QAAO,CAAC;AAAA,gBACzB;AAAA,cACF;AAAA,cACA,OAAO,SAAS,QAAQ;AACtB,0BAAU,CAAC;AACX,0BAAU,CAAC;AAAA,cACb;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,oBAAoBxB,YAAW,SAASS,UAASR,SAAQ;AAC3D;AACA,cAAI,UAAU,mBAAmB;AACjC,cAAIkB,UAAS,OAAO;AACpB,UAAAlB,QAAO,UAAU,SAAS,QAAQ;AAChC,gBAAI,SAAS,GAAGyB,OAAM,CAAE,CAAC,GAAG,CAAC,CAAE,GAAG,UAAUP,QAAO,IAAI;AACvD,mBAAO;AAAA,cACL,KAAK,SAASb,KAAI,MAAM;AACtB,oBAAIkB,SAAQ,GAAGS,OAAMP,MAAK/C;AAC1B,uBAAO6C,SAAQ,SAAS,GAAG;AACzB,kBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,sBAAI7C,OAAM,IAAI;AACZ,2BAAO;AAAA,kBACT;AACA,kBAAAsD,OAAMA,KAAI,CAAC,EAAEtD,EAAC;AACd,oBAAE6C;AAAA,gBACJ;AACA,gBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,oBAAI7C,OAAM,IAAI;AACZ,yBAAO;AAAA,gBACT;AACA,uBAAOsD,KAAI,CAAC,EAAEtD,EAAC,KAAK;AAAA,cACtB;AAAA,cACA,KAAK,SAASsD,KAAI,MAAM;AACtB,oBAAIT,SAAQ,GAAGS,OAAMP,MAAK/C;AAC1B,uBAAO6C,SAAQ,SAAS,GAAG;AACzB,kBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,sBAAI7C,OAAM,IAAI;AACZ,oBAAAA,KAAIsD,KAAI,CAAC,EAAE,KAAK,KAAKT,MAAK,CAAC,IAAI;AAC/B,oBAAAS,KAAI,CAAC,EAAE,KAAK,CAAE,CAAC,GAAG,CAAC,CAAE,CAAC;AAAA,kBACxB;AACA,kBAAAA,OAAMA,KAAI,CAAC,EAAEtD,EAAC;AACd,oBAAE6C;AAAA,gBACJ;AACA,gBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,oBAAI7C,OAAM,IAAI;AACZ,kBAAAA,KAAIsD,KAAI,CAAC,EAAE,KAAK,KAAKT,MAAK,CAAC,IAAI;AAAA,gBACjC;AACA,gBAAAS,KAAI,CAAC,EAAEtD,EAAC,IAAI,EAAE;AACd,wBAAQ,MAAM,IAAI;AAClB,uBAAO;AAAA,cACT;AAAA,cACA,QAAQ,SAAS,QAAQgE,KAAI;AAC3B,oBAAInB,SAAQ,GAAGS,OAAMP,MAAK/C,IAAGsC,QAAO,CAAC,GAAG,OAAO,QAAQ0B,GAAE;AACzD,uBAAOnB,SAAQ,SAAS,GAAG;AACzB,kBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,sBAAI7C,OAAM,IAAI;AACZ;AAAA,kBACF;AACA,kBAAAsC,MAAK,KAAKgB,MAAKtD,EAAC;AAChB,kBAAAsD,OAAMA,KAAI,CAAC,EAAEtD,EAAC;AACd,oBAAE6C;AAAA,gBACJ;AACA,gBAAA7C,KAAI,QAAQ,KAAKsD,KAAI,CAAC,GAAG,KAAKT,MAAK,CAAC;AACpC,oBAAI7C,OAAM,IAAI;AACZ;AAAA,gBACF;AACA,gBAAAgE,MAAKV,KAAI,CAAC,EAAEtD,EAAC;AACb,gBAAAsD,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAClB,gBAAAsD,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAClB,uBAAO,CAACsD,KAAI,CAAC,EAAE,UAAUhB,MAAK,QAAQ;AACpC,kBAAAtC,KAAIsC,MAAK,IAAI;AACb,kBAAAgB,OAAMhB,MAAK,IAAI;AACf,kBAAAgB,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAClB,kBAAAsD,KAAI,CAAC,EAAE,OAAOtD,IAAG,CAAC;AAAA,gBACpB;AACA,uBAAO,QAAQgE,GAAE;AAAA,cACnB;AAAA,cACA,OAAO,SAAS,QAAQ;AACtB,gBAAAjB,OAAM,CAAE,CAAC,GAAG,CAAC,CAAE;AACf,0BAAUP,QAAO,IAAI;AAAA,cACvB;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,cAAcnB,YAAW,SAASS,UAASR,SAAQ;AACrD;AACA,cAAI,WAAW,uBAAuB;AACtC,cAAIiB,WAAU,iBAAiB;AAC/B,cAAI,OAAO,SAAS,UAAU;AAC9B,UAAAjB,QAAO,UAAU,SAAS,KAAK,IAAI;AACjC,gBAAI,SAAS,CAAC,GAAG,UAAU,UAAU,CAAC;AACtC,qBAAS,EAAE;AACX,YAAAiB,SAAQ,KAAK,SAAS,OAAO,KAAK,WAAWM,QAAO;AAClD,qBAAO,GAAG,IAAI,KAAK,KAAK,IAAI,SAAS,OAAO,KAAK,WAAWA,MAAK;AAAA,YACnE,CAAC;AACD,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,oBAAoBxB,YAAW,SAASS,UAASR,SAAQ;AAC3D;AACA,cAAI;AACJ,cAAI;AACJ,qBAAW,SAASsD,UAAS,IAAI;AAC/B,gBAAI,OAAO,OAAO,YAAY;AAC5B,oBAAM,IAAI,UAAU,KAAK,oBAAoB;AAAA,YAC/C;AACA,mBAAO;AAAA,UACT;AACA,uBAAa,SAASC,YAAWC,WAAU;AACzC,gBAAI,OAAOlF,UAAS,eAAe,EAAE,GAAG,QAAQ,cAAcI,KAAI;AAClE,gBAAI8E,UAAS,WAAW;AACtB,kBAAI;AACJ,kBAAI,CAAC,QAAQ;AACX,oBAAI,CAAC,cAAc;AACjB;AAAA,gBACF;AACA,yBAAS;AAAA,cACX,WAAW,cAAc;AACvB,yBAAS,aAAa,OAAO,MAAM;AAAA,cACrC;AACA,6BAAe;AACf,uBAAS;AACT,kBAAI,OAAO,iBAAiB,YAAY;AACtC,2BAAW;AACX,+BAAe;AACf,yBAAS;AACT;AAAA,cACF;AACA,mBAAK,OAAO9E,KAAI,EAAEA,KAAI;AACtB,qBAAO,cAAc;AACnB,2BAAW,aAAa,MAAM;AAC9B,oBAAI,CAAC,aAAa,QAAQ;AACxB,iCAAe;AAAA,gBACjB;AACA,yBAAS;AAAA,cACX;AAAA,YACF,CAAC,EAAE,QAAQ,MAAM;AAAA,cACf,eAAe;AAAA,YACjB,CAAC;AACD,mBAAO,SAAS,IAAI;AAClB,uBAAS,EAAE;AACX,kBAAI,QAAQ;AACV,oBAAI,OAAO,WAAW,YAAY;AAChC,2BAAS,CAAE,QAAQ,EAAG;AAAA,gBACxB,OAAO;AACL,yBAAO,KAAK,EAAE;AAAA,gBAChB;AACA;AAAA,cACF;AACA,uBAAS;AACT,mBAAK,OAAOA,KAAI,EAAEA,KAAI;AAAA,YACxB;AAAA,UACF;AACA,UAAAsB,QAAO,UAAU,WAAW;AAC1B,iBAAK,OAAO,YAAY,cAAc,cAAc,QAAQ,OAAO,OAAO,YAAY,WAAW,OAAO,QAAQ,aAAa,YAAY;AACvI,qBAAO,QAAQ;AAAA,YACjB;AACA,iBAAK,OAAO1B,cAAa,cAAc,cAAc,QAAQA,SAAQ,OAAO,YAAYA,WAAU;AAChG,kBAAI,OAAO,qBAAqB,YAAY;AAC1C,uBAAO,WAAW,gBAAgB;AAAA,cACpC;AACA,kBAAI,OAAO,2BAA2B,YAAY;AAChD,uBAAO,WAAW,sBAAsB;AAAA,cAC1C;AAAA,YACF;AACA,gBAAI,OAAO,iBAAiB,YAAY;AACtC,qBAAO,SAAS,IAAI;AAClB,6BAAa,SAAS,EAAE,CAAC;AAAA,cAC3B;AAAA,YACF;AACA,gBAAI,OAAO,eAAe,eAAe,OAAO,eAAe,cAAc,cAAc,QAAQ,UAAU,OAAO,UAAU;AAC5H,qBAAO,SAAS,IAAI;AAClB,2BAAW,SAAS,EAAE,GAAG,CAAC;AAAA,cAC5B;AAAA,YACF;AACA,mBAAO;AAAA,UACT,EAAE;AAAA,QACJ,CAAC;AACD,YAAI,gBAAgByB,YAAW,WAAW;AACxC;AACA,cAAI,QAAQ,aAAa;AACzB,cAAI,YAAY,YAAY;AAC5B,cAAI,QAAQ,cAAc;AAC1B,cAAI,eAAe,sBAAsB;AACzC,cAAI0D,YAAW,kBAAkB;AACjC,cAAI,QAAQ,MAAM,UAAU;AAC5B,cAAI,QAAQ,SAAS,UAAU;AAC/B,cAAIvC,UAAS,OAAO;AACpB,wCAA8B,EAAE,QAAQ,SAAS,KAAK,MAAM;AAC1D,gBAAIwC,WAAUxC,QAAO,IAAI,GAAG,UAAUA,QAAO,IAAI,GAAG,OAAO,KAAK,UAAU,WAAW,KAAK,UAAU,iBAAiB,gBAAgB;AACrI,iBAAK,WAAW,aAAa,SAAS,KAAK;AACzC,kBAAI,OAAO,WAAW,OAAO,KAAK,KAAK,SAAS,CAAC;AACjD,kBAAI,OAAO,SAAS,YAAY;AAC9B,kCAAkB;AAClB,uBAAO,MAAM,KAAK,MAAM,GAAG,EAAE;AAAA,cAC/B;AACA,qBAAO,KAAK,MAAM,iBAAiB,MAAM,cAAc,IAAI;AAAA,YAC7D,GAAG,IAAI;AACP,gBAAI;AACF,oBAAM,KAAK,UAAU,IAAI;AAAA,YAC3B,SAAS,QAAQ;AAAA,YAAC;AAClB,iBAAK,GAAG,OAAO,SAASwB,KAAI;AAC1B,kBAAI,IAAI,UAAU;AAClB,kBAAI,CAAC,iBAAiB;AACpB;AAAA,cACF;AACA,kBAAIgB,SAAQhB,GAAE,GAAG;AACf,oBAAI,OAAOgB,SAAQhB,GAAE,MAAM,YAAY;AACrC,kBAAAgB,SAAQhB,GAAE,IAAI,CAAEgB,SAAQhB,GAAE,GAAG,eAAgB;AAAA,gBAC/C,OAAO;AACL,kBAAAgB,SAAQhB,GAAE,EAAE,KAAK,eAAe;AAAA,gBAClC;AACA,kCAAkB;AAClB;AAAA,cACF;AACA,mBAAK;AACL,yBAAW;AACX,qBAAO;AACP,gCAAkB,iBAAiB,cAAc;AACjD,cAAAe,UAAS,WAAW;AAClB,oBAAI;AACJ,oBAAI,eAAe,KAAK,SAASf,GAAE,GAAG;AACpC,0BAAQ,QAAQA,GAAE;AAClB,uBAAK,KAAK,YAAYA,KAAI,MAAM,QAAQ;AACxC,wBAAM,KAAK,IAAI,MAAM,SAAS,MAAM,IAAI;AAAA,gBAC1C,OAAO;AACL,oCAAkB;AAClB,mCAAiB;AACjB,gCAAc;AACd,uBAAK,MAAM,UAAU,IAAI;AAAA,gBAC3B;AAAA,cACF,CAAC;AAAA,YACH,CAAC;AACD,iBAAK,WAAW,WAAW;AACzB,kBAAI,MAAM,IAAI,QAAQ;AACtB,kBAAI,CAAC,iBAAiB;AACpB,uBAAO,MAAM,KAAK,UAAU,MAAM,SAAS;AAAA,cAC7C;AACA,qBAAO,MAAM,SAAS;AACtB,mBAAK,SAAS,MAAM,MAAM;AACxB,oBAAI,KAAK,OAAOA,MAAK,MAAM;AAC3B,oBAAIA,OAAM,MAAM;AACd,kBAAAe,UAAS,MAAM,KAAK,OAAO,MAAM,SAAS,CAAC;AAC3C,yBAAO;AAAA,gBACT;AACA,uBAAO,MAAM;AACb,sBAAMC,SAAQhB,GAAE;AAChB,uBAAOgB,SAAQhB,GAAE;AACjB,oBAAI,CAAC,KAAK;AACR,yBAAO;AAAA,gBACT;AACA,wBAAQ,MAAM,SAAS;AACvB,oBAAI,KAAK,IAAIA,GAAE,GAAG;AAChB,sBAAI,MAAM;AACR,yBAAK,QAAQ,EAAEA,GAAE;AAAA,kBACnB,OAAO;AACL,4BAAQA,GAAE,IAAI;AAAA,sBACZ,SAAS;AAAA,sBACT,MAAM;AAAA,oBACR;AACA,yBAAK,KAAK,YAAYA,KAAI,OAAO,QAAQ,aAAa,IAAI,IAAI,MAAM;AAAA,kBACtE;AAAA,gBACF;AACA,oBAAI,OAAO,QAAQ,YAAY;AAC7B,2BAAS,MAAM,KAAK,KAAK,MAAM,KAAK;AAAA,gBACtC,OAAO;AACL,sBAAI,QAAQ,SAAS,KAAK;AACxB,6BAAS,MAAM,KAAK,KAAK,MAAM,KAAK;AAAA,kBACtC,GAAG,IAAI;AAAA,gBACT;AACA,uBAAO;AAAA,cACT;AACA,uBAAS;AACT,gCAAkB,iBAAiB,cAAc;AACjD,mBAAK,KAAK,EAAE;AACZ,uBAAS,MAAM,KAAK,UAAU,MAAM,IAAI;AACxC,iBAAG,KAAK;AACR,gCAAkB;AAClB,qBAAO;AAAA,YACT;AACA,iBAAK,GAAG,OAAO,SAASA,KAAI;AAC1B,kBAAI,CAAC,iBAAiB;AACpB,qBAAK,QAAQ,EAAEA,GAAE;AACjB;AAAA,cACF;AACA,kBAAIgB,SAAQhB,GAAE,GAAG;AACf,oBAAI,OAAOgB,SAAQhB,GAAE,MAAM,YAAY;AACrC,kBAAAgB,SAAQhB,GAAE,IAAI,CAAEgB,SAAQhB,GAAE,GAAG,gBAAgB,EAAG;AAAA,gBAClD,OAAO;AACL,kBAAAgB,SAAQhB,GAAE,EAAE,KAAK,gBAAgB,EAAE;AAAA,gBACrC;AAAA,cACF,OAAO;AACL,gBAAAgB,SAAQhB,GAAE,IAAI,gBAAgB;AAAA,cAChC;AACA,qBAAO,gBAAgB;AACvB,8BAAgB,KAAKA;AACrB,gCAAkB;AAAA,YACpB,CAAC;AACD,iBAAK,GAAG,UAAU,SAASA,KAAI;AAC7B,kBAAI;AACJ,kBAAI,eAAe,KAAKgB,UAAShB,GAAE,GAAG;AACpC;AAAA,cACF;AACA,kBAAI,CAAC,QAAQA,GAAE,GAAG;AAChB;AAAA,cACF;AACA,uBAAS,QAAQA,GAAE;AACnB,qBAAO,QAAQA,GAAE;AACjB,mBAAK,KAAK,eAAeA,KAAI,MAAM,KAAK,OAAO,MAAM,CAAC,CAAC;AAAA,YACzD,CAAC;AACD,iBAAK,GAAG,SAAS,WAAW;AAC1B,kBAAI,WAAW;AACf,wBAAUxB,QAAO,IAAI;AACrB,mBAAK,KAAK,cAAc,UAAU,UAAU,SAAS,OAAO;AAC1D,uBAAO,MAAM,KAAK,MAAM,MAAM,CAAC;AAAA,cACjC,CAAC,CAAC;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,YAAI,wBAAwBnB,YAAW,SAASS,UAASR,SAAQ;AAC/D;AACA,cAAIiB,WAAU,MAAM,UAAU;AAC9B,cAAIC,UAAS,OAAO;AACpB,UAAAlB,QAAO,UAAU,SAAS,KAAK;AAC7B,gBAAIgC,OAAMd,QAAO,IAAI;AACrB,YAAAD,SAAQ,KAAK,WAAW,SAAS,MAAM;AACrC,cAAAe,KAAI,IAAI,IAAI;AAAA,YACd,CAAC;AACD,mBAAOA;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,sBAAsBjC,YAAW,SAASS,UAASR,SAAQ;AAC7D;AACA,UAAAA,QAAO,UAAU,SAAS,KAAK;AAC7B,mBAAO,OAAO,QAAQ;AAAA,UACxB;AAAA,QACF,CAAC;AACD,YAAI,iCAAiCD,YAAW,SAASS,UAASR,SAAQ;AACxE;AACA,cAAI,aAAa,oBAAoB;AACrC,UAAAA,QAAO,UAAU,SAAS,eAAe;AACvC,gBAAI;AACF,kBAAI,iBAAiB,WAAW,cAAc,QAAQ,GAAG;AACvD,uBAAO,cAAc,SAAS;AAAA,cAChC;AACA,qBAAO,OAAO,aAAa;AAAA,YAC7B,SAASjB,IAAG;AACV,oBAAM,IAAI,UAAU,sCAAsC;AAAA,YAC5D;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,uCAAuCgB,YAAW,SAASS,UAASR,SAAQ;AAC9E;AACA,cAAI,cAAc,oBAAoB;AACtC,cAAI,gBAAgB,+BAA+B;AACnD,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,mBAAO,cAAc,YAAY,KAAK,CAAC;AAAA,UACzC;AAAA,QACF,CAAC;AACD,YAAI,yBAAyBD,YAAW,SAASS,UAASR,SAAQ;AAChE;AACA,cAAI,aAAa,oBAAoB;AACrC,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI;AACF,kBAAI,SAAS,WAAW,MAAM,QAAQ,GAAG;AACvC,uBAAO,MAAM,SAAS;AAAA,cACxB;AACA,qBAAO,OAAO,KAAK;AAAA,YACrB,SAASjB,IAAG;AACV,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,yCAAyCgB,YAAW,SAASS,UAASR,SAAQ;AAChF;AACA,cAAI,eAAe,uBAAuB;AAC1C,cAAI,YAAY;AAChB,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,SAAS,aAAa,KAAK;AAC/B,gBAAI,OAAO,SAAS,KAAK;AACvB,uBAAS,OAAO,MAAM,GAAG,EAAE,IAAI;AAAA,YACjC;AACA,qBAAS,OAAO,QAAQ,WAAW,SAAS,OAAO;AACjD,qBAAO,KAAK,UAAU,KAAK,EAAE,MAAM,GAAG,EAAE;AAAA,YAC1C,CAAC;AACD,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,qBAAqBD,YAAW,SAASS,UAASR,SAAQ;AAC5D,UAAAA,QAAO,UAAU2D;AACjB,UAAA3D,QAAO,QAAQ,SAAS,IAAI2D;AAC5B,mBAASA,WAAU,KAAK;AACtB,mBAAO,CAAC,CAAC,QAAQ,QAAQ,GAAG,MAAM,YAAY,OAAO,QAAQ,eAAe,OAAO,IAAI,SAAS;AAAA,UAClG;AAAA,QACF,CAAC;AACD,YAAI,kBAAkB5D,YAAW,WAAW;AAC1C;AACA,cAAI,YAAY,YAAY;AAC5B,cAAI,eAAe,sBAAsB;AACzC,cAAI,eAAe,qCAAqC;AACxD,cAAI,gBAAgB,uCAAuC;AAC3D,cAAI4D,aAAY,mBAAmB;AACnC,cAAIF,YAAW,kBAAkB;AACjC,cAAIvC,UAAS,OAAO;AACpB,cAAI,iBAAiB,aAAa,QAAQ,gBAAgB,QAAQ,cAAc;AAChF,wCAA8B,EAAE,UAAU,SAAS,MAAM,MAAM;AAC7D,gBAAIwC,WAAUxC,QAAO,IAAI,GAAG,UAAUA,QAAO,IAAI,GAAG,WAAWA,QAAO,IAAI;AAC1E,gBAAI,SAAS,MAAM;AACjB,qBAAO;AAAA,YACT,OAAO;AACL,qBAAO,aAAa,IAAI;AACxB,kBAAI,CAAC,eAAe,IAAI,GAAG;AACzB,sBAAM,IAAI,UAAU,MAAO,cAAc,IAAI,IAAI,6BAA8B;AAAA,cACjF;AAAA,YACF;AACA,iBAAK,GAAG,OAAO,SAASwB,KAAI,QAAQ,SAAS;AAC3C,kBAAI,WAAW;AACf,kBAAI,CAACiB,WAAU,OAAO,GAAG;AACvB,wBAAQjB,GAAE,IAAI;AACd,qBAAK,KAAK,YAAYA,KAAI,CAAC;AAC3B;AAAA,cACF;AACA,cAAAgB,SAAQhB,GAAE,IAAI;AACd,uBAASA,GAAE,IAAI;AACf,kBAAI,YAAY,SAASkB,WAAU,QAAQ;AACzC,oBAAI,QAAQF,SAAQhB,GAAE;AACtB,oBAAI,UAAU;AACZ,wBAAM,IAAI,MAAM,yNAA+N;AAAA,gBACjP;AACA,oBAAI,CAAC,OAAO;AACV;AAAA,gBACF;AACA,uBAAOgB,SAAQhB,GAAE;AACjB,wBAAQA,GAAE,IAAI;AACd,qBAAK,KAAK,YAAYA,KAAI,KAAK;AAAA,cACjC;AACA,kBAAI,YAAY,SAASmB,aAAY;AACnC,2BAAW;AACX,oBAAI,CAACH,SAAQhB,GAAE,GAAG;AAChB;AAAA,gBACF;AACA,uBAAOgB,SAAQhB,GAAE;AACjB,uBAAO,SAASA,GAAE;AAClB,qBAAK,QAAQ,EAAEA,GAAE;AAAA,cACnB;AACA,kBAAI,eAAe;AACnB,kBAAI,CAAC,cAAc;AACjB,+BAAe;AAAA,cACjB;AACA,kBAAI,iBAAiB,QAAQ;AAC3B,oBAAI,kBAAkB,SAASoB,mBAAkB;AAC/C,kBAAAL,UAAS,SAAS;AAAA,gBACpB;AACA,0BAAU,QAAQ,KAAK,SAAS,QAAQ;AACtC,kBAAAA,UAAS,UAAU,KAAK,MAAM,MAAM,CAAC;AAAA,gBACvC,GAAG,eAAe;AAClB,oBAAI,OAAO,QAAQ,SAAS,MAAM,YAAY;AAC5C,0BAAQ,SAAS,EAAE,eAAe;AAAA,gBACpC;AAAA,cACF,WAAW,iBAAiB,QAAQ;AAClC,oBAAI,OAAO,QAAQ,SAAS,YAAY;AACtC,wBAAM,IAAI,MAAM,4EAAgF;AAAA,gBAClG;AACA,wBAAQ,KAAK,WAAW,SAAS;AAAA,cACnC,WAAW,iBAAiB,gBAAgB;AAC1C,oBAAI,OAAO,QAAQ,SAAS,YAAY;AACtC,wBAAM,IAAI,MAAM,oFAAwF;AAAA,gBAC1G;AACA,oBAAI,OAAO,QAAQ,SAAS,MAAM,YAAY;AAC5C,wBAAM,IAAI,MAAM,uFAA2F;AAAA,gBAC7G;AACA,wBAAQ,KAAK,SAAS;AACtB,wBAAQ,SAAS,EAAE,SAAS;AAAA,cAC9B;AAAA,YACF,CAAC;AACD,iBAAK,GAAG,OAAO,SAASf,KAAI,MAAM,UAAU;AAC1C,kBAAI;AACJ,kBAAIgB,SAAQhB,GAAE,GAAG;AACf,kBAAEgB,SAAQhB,GAAE;AACZ;AAAA,cACF;AACA,wBAAU,SAASA,GAAE;AACrB,kBAAI,OAAO,SAASH,QAAO;AACzB,qBAAK,KAAK,YAAYG,KAAI,MAAM,QAAQ;AAAA,cAC1C;AACA,kBAAIiB,WAAU,OAAO,GAAG;AACtB,oBAAI,OAAO,QAAQ,SAAS,YAAY;AACtC,0BAAQ,KAAK,IAAI;AAAA,gBACnB,OAAO;AACL,0BAAQ,KAAK,WAAW;AACtB,oBAAAF,UAAS,IAAI;AAAA,kBACf,CAAC;AAAA,gBACH;AAAA,cACF,OAAO;AACL,qBAAK;AAAA,cACP;AAAA,YACF,CAAC;AACD,iBAAK,GAAG,UAAU,SAASf,KAAI;AAC7B,qBAAO,SAASA,GAAE;AAClB,kBAAIgB,SAAQhB,GAAE,GAAG;AACf,uBAAOgB,SAAQhB,GAAE;AACjB;AAAA,cACF;AACA,kBAAI,CAAC,eAAe,KAAK,SAASA,GAAE,GAAG;AACrC;AAAA,cACF;AACA,kBAAI,SAAS,QAAQA,GAAE;AACvB,qBAAO,QAAQA,GAAE;AACjB,mBAAK,KAAK,eAAeA,KAAI,CAAE,MAAO,CAAC;AAAA,YACzC,CAAC;AACD,iBAAK,GAAG,SAAS,WAAW;AAC1B,kBAAI,WAAW;AACf,wBAAUxB,QAAO,IAAI;AACrB,cAAAwC,WAAUxC,QAAO,IAAI;AACrB,yBAAWA,QAAO,IAAI;AACtB,mBAAK,KAAK,cAAc,UAAU,UAAU,SAAS,OAAO;AAC1D,uBAAO,CAAE,KAAM;AAAA,cACjB,CAAC,CAAC;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,YAAI,kBAAkBnB,YAAW,WAAW;AAC1C;AACA,cAAI,WAAW,uBAAuB;AACtC,cAAIkB,WAAU,iBAAiB;AAC/B,cAAI,aAAa,8BAA8B;AAC/C,cAAI,QAAQ,SAAS,UAAU;AAC/B,qBAAW,UAAU,SAAS,SAAS,MAAM,SAAS;AACpD,gBAAIiC;AACJ,qBAAS,OAAO;AAChB,gBAAI,QAAQ,SAAS,WAAW,SAAS,QAAQ,WAAW,WAAW,SAAS;AAC9E,mBAAK,GAAG,eAAeA,OAAM,SAASA,KAAIR,KAAI,aAAa;AACzD,sBAAM,KAAK,SAAS,MAAM,WAAW;AAAA,cACvC,CAAC;AACD,mBAAK,GAAG,cAAc,SAAS,SAAS;AACtC,gBAAAzB,SAAQ,SAAS,SAAS,QAAQyB,KAAI;AACpC,kBAAAQ,KAAIR,KAAI,MAAM;AAAA,gBAChB,CAAC;AAAA,cACH,CAAC;AACD;AAAA,YACF;AACA,iBAAK,GAAG,UAAUQ,OAAM,SAASA,KAAIR,KAAI,QAAQ;AAC/C,sBAAQ,MAAM;AAAA,YAChB,CAAC;AACD,iBAAK,GAAG,SAAS,SAAS,SAAS;AACjC,cAAAzB,SAAQ,SAAS,SAAS,QAAQyB,KAAI;AACpC,gBAAAQ,KAAIR,KAAI,MAAM;AAAA,cAChB,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,YAAI,sBAAsB3C,YAAW,SAASS,UAASR,SAAQ;AAC7D;AACA,UAAAA,QAAO,UAAU;AAAA,QACnB,CAAC;AACD,YAAI,wBAAwBD,YAAW,SAASS,UAASR,SAAQ;AAC/D;AACA,cAAI,WAAW,uBAAuB;AACtC,cAAI,aAAa,oBAAoB;AACrC,UAAAA,QAAO,UAAU,SAAS,OAAO;AAC/B,oBAAQ,SAAS,KAAK;AACtB,gBAAI,QAAQ,YAAY;AACtB,oBAAM,IAAI,UAAU,QAAQ,mCAAmC;AAAA,YACjE;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,kBAAkBD,YAAW,WAAW;AAC1C;AACA,cAAI,QAAQ,aAAa;AACzB,cAAIkB,WAAU,iBAAiB;AAC/B,cAAIwC,YAAW,kBAAkB;AACjC,cAAIE,aAAY,mBAAmB;AACnC,cAAII,WAAU,sBAAsB;AACpC,cAAI,aAAa,8BAA8B;AAC/C,cAAIC,SAAQ,SAAS;AACrB,cAAI3C,OAAM,KAAK;AACf,cAAI4C,OAAM,KAAK;AACf,cAAI/C,UAAS,OAAO;AACpB,qBAAW,SAAS,SAAS,QAAQ,MAAM,SAAS;AAClD,gBAAI,UAAU,SAAS,aAAa;AACpC,qBAAS6C,SAAQ,MAAM;AACvB,gBAAI,CAAC,QAAQ;AACX;AAAA,YACF;AACA,uBAAW7C,QAAO,IAAI;AACtB,sBAAU,QAAQ,SAAS,WAAW,SAAS,QAAQ,WAAW,WAAW,UAAU,UAAU;AACjG,iBAAK,GAAG,QAAQ,SAAS,SAASwB,KAAI;AACpC,uBAASA,GAAE,IAAI,WAAW,WAAW;AACnC,qBAAK,QAAQ,EAAEA,GAAE;AAAA,cACnB,GAAG,MAAM;AACT,kBAAI,OAAO,SAASA,GAAE,EAAE,UAAU,YAAY;AAC5C,yBAASA,GAAE,EAAE,MAAM;AAAA,cACrB;AACA,kBAAI,CAAC,kBAAkB;AACrB;AAAA,cACF;AACA,kBAAI,iBAAiBA,GAAE,GAAG;AACxB,oBAAI,iBAAiBA,GAAE,MAAM,YAAY;AACvC,+BAAa,iBAAiBA,GAAE,CAAC;AAAA,gBACnC;AAAA,cACF;AACA,+BAAiBA,GAAE,IAAI,WAAW,WAAW;AAC3C,uBAAO,iBAAiBA,GAAE;AAAA,cAC5B,GAAG,WAAW;AACd,kBAAI,OAAO,iBAAiBA,GAAE,EAAE,UAAU,YAAY;AACpD,iCAAiBA,GAAE,EAAE,MAAM;AAAA,cAC7B;AAAA,YACF,CAAC;AACD,iBAAK,GAAG,WAAW,SAAS,SAASA,KAAI;AACvC,2BAAa,SAASA,GAAE,CAAC;AACzB,qBAAO,SAASA,GAAE;AAClB,kBAAI,CAAC,kBAAkB;AACrB;AAAA,cACF;AACA,kBAAI,iBAAiBA,GAAE,MAAM,YAAY;AACvC,6BAAa,iBAAiBA,GAAE,CAAC;AAAA,cACnC;AACA,qBAAO,iBAAiBA,GAAE;AAAA,YAC5B,CAAC;AACD,gBAAI,QAAQ,UAAU;AACpB,kBAAI,QAAQ,aAAa,QAAQ,MAAM,QAAQ,QAAQ,GAAG;AACxD,8BAAc;AAAA,cAChB,OAAO;AACL,8BAAcrB,KAAI4C,KAAI,OAAO,QAAQ,QAAQ,GAAG,CAAC,GAAG,CAAC;AAAA,cACvD;AACA,kBAAI,aAAa;AACf,mCAAmB,CAAC;AACpB,+BAAe,IAAI,eAAe;AAClC,qBAAK,GAAG,QAAQ,SAAS,SAASvB,KAAI,MAAM,UAAU;AACpD,sBAAI,CAAC,iBAAiBA,GAAE,GAAG;AACzB,qCAAiBA,GAAE,IAAI;AACvB,oBAAAe,UAAS,WAAW;AAClB,0BAAI;AACJ,0BAAI,iBAAiBf,GAAE,MAAM,YAAY;AACvC;AAAA,sBACF;AACA,6BAAO,iBAAiBA,GAAE;AAC1B,2BAAK,QAAQ,EAAEA,GAAE;AACjB,0BAAI,QAAQ,OAAO;AACjB,+BAAO,MAAM,IAAI;AACjB,6BAAK,KAAKsB,MAAK;AAAA,sBACjB;AACA,+BAAS,KAAK,SAAS,MAAM,UAAU,IAAI;AAC3C,0BAAI,QAAQ,SAAS;AACnB,4BAAIL,WAAU,MAAM,GAAG;AACrB,8BAAI,OAAO,OAAO,SAAS,YAAY;AACrC,mCAAO,KAAKK,QAAOA,MAAK;AAAA,0BAC1B,OAAO;AACL,mCAAO,KAAKA,QAAOA,MAAK;AAAA,0BAC1B;AAAA,wBACF;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,kBACH;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AACA,iBAAK,GAAG,UAAU,SAAS,WAAW;AACpC,cAAA/C,SAAQ,UAAU,SAASyB,KAAI;AAC7B,6BAAaA,GAAE;AAAA,cACjB,CAAC;AACD,yBAAW,CAAC;AACZ,kBAAI,kBAAkB;AACpB,gBAAAzB,SAAQ,kBAAkB,SAASyB,KAAI;AACrC,sBAAIA,QAAO,YAAY;AACrB,iCAAaA,GAAE;AAAA,kBACjB;AAAA,gBACF,CAAC;AACD,mCAAmB,CAAC;AAAA,cACtB;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,YAAI,oBAAoB3C,YAAW,SAASS,UAASR,SAAQ;AAC3D;AACA,cAAI,WAAW,uBAAuB;AACtC,cAAIkB,UAAS,OAAO;AACpB,cAAIe,mBAAkB,OAAO,UAAU;AACvC,UAAAjC,QAAO,UAAU,SAAS,OAAO;AAC/B,gBAAI,OAAO,GAAG,OAAO,GAAG,SAASkB,QAAO,IAAI,GAAGO,OAAMP,QAAO,IAAI,GAAGK,SAAQ,GAAG2B;AAC9E,oBAAQ,SAAS,KAAK;AACtB,mBAAO;AAAA,cACL,KAAK,SAAS,IAAIR,KAAI;AACpB,oBAAI,WAAWjB,KAAIiB,GAAE,GAAG,UAAU,EAAEnB;AACpC,uBAAO,OAAO,IAAImB;AAClB,gBAAAjB,KAAIiB,GAAE,IAAI;AACV,oBAAI,CAAC,UAAU;AACb,oBAAE;AACF,sBAAI,QAAQ,OAAO;AACjB;AAAA,kBACF;AACA,kBAAAA,MAAK,OAAO,IAAI;AAChB,kBAAAQ,KAAIR,GAAE;AACN,yBAAOA;AAAA,gBACT;AACA,uBAAO,OAAO,QAAQ;AACtB,oBAAI,SAAS,UAAU;AACrB;AAAA,gBACF;AACA,uBAAO,CAACT,iBAAgB,KAAK,QAAQ,EAAE,IAAI,GAAG;AAC5C;AAAA,gBACF;AAAA,cACF;AAAA,cACA,QAAQiB,OAAM,SAASA,KAAIR,KAAI;AAC7B,oBAAI,WAAWjB,KAAIiB,GAAE;AACrB,oBAAI,CAAC,UAAU;AACb;AAAA,gBACF;AACA,uBAAO,OAAO,QAAQ;AACtB,uBAAOjB,KAAIiB,GAAE;AACb,kBAAE;AACF,oBAAI,SAAS,UAAU;AACrB;AAAA,gBACF;AACA,oBAAI,CAAC,MAAM;AACT,kBAAAnB,SAAQ;AACR,yBAAO;AACP;AAAA,gBACF;AACA,uBAAO,CAACU,iBAAgB,KAAK,QAAQ,EAAE,IAAI,GAAG;AAC5C;AAAA,gBACF;AAAA,cACF;AAAA,cACA,OAAO,SAAS,QAAQ;AACtB,uBAAO;AACP,uBAAO;AACP,yBAASf,QAAO,IAAI;AACpB,gBAAAO,OAAMP,QAAO,IAAI;AACjB,gBAAAK,SAAQ;AAAA,cACV;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,cAAcxB,YAAW,WAAW;AACtC;AACA,cAAI,eAAe,uBAAuB;AAC1C,cAAI,WAAW,kBAAkB;AACjC,cAAI,aAAa,8BAA8B;AAC/C,qBAAW,MAAM,SAASsB,MAAK,MAAM,SAAS;AAC5C,gBAAI,SAAS,QAAQ;AACrB,YAAAA,OAAM,aAAaA,IAAG;AACtB,gBAAI,CAACA,MAAK;AACR;AAAA,YACF;AACA,qBAAS,SAASA,IAAG;AACrB,sBAAU,QAAQ,SAAS,WAAW,SAAS,QAAQ,WAAW,WAAW,UAAU,UAAU;AACjG,iBAAK,GAAG,QAAQ,SAAS,MAAM,SAAS6C,KAAIxB,KAAI;AAC9C,cAAAA,MAAK,OAAO,IAAIA,GAAE;AAClB,kBAAIA,QAAO,QAAQ;AACjB;AAAA,cACF;AACA,mBAAK,QAAQ,EAAEA,GAAE;AAAA,YACnB,CAAC;AACD,iBAAK,GAAG,QAAQ,SAAS,GAAG;AAC5B,iBAAK,GAAG,WAAW,SAAS,OAAO,QAAQ,CAAC;AAC5C,iBAAK,GAAG,UAAU,SAAS,OAAO,KAAK;AAAA,UACzC;AAAA,QACF,CAAC;AACD,YAAI,sBAAsB3C,YAAW,WAAW;AAC9C;AACA,cAAI+B,KAAI,UAAU;AAClB,cAAI,aAAa,8BAA8B;AAC/C,cAAIZ,UAAS,OAAO;AACpB,cAAI,mBAAmB,OAAO;AAC9B,qBAAW,aAAa,SAAS,QAAQ,MAAM,SAAS;AACtD,gBAAI,SAAS;AACb,sBAAUA,QAAO,IAAI;AACrB,sBAAU,QAAQ,SAAS,WAAW,SAAS,QAAQ,WAAW,WAAW,UAAU,UAAU;AACjG,iBAAK,GAAG,QAAQ,SAAS,SAASwB,KAAI,QAAQ;AAC5C,sBAAQA,GAAE,IAAI,UAAU;AAAA,YAC1B,CAAC;AACD,iBAAK,GAAG,QAAQ,SAAS,SAASA,KAAI;AACpC,gBAAE,QAAQA,GAAE;AAAA,YACd,CAAC;AACD,iBAAK,GAAG,WAAW,SAAS,SAASA,KAAI;AACvC,qBAAO,QAAQA,GAAE;AAAA,YACnB,CAAC;AACD,iBAAK,GAAG,UAAU,SAAS,WAAW;AACpC,wBAAU,CAAC;AAAA,YACb,CAAC;AACD,6BAAiB,KAAK,UAAU;AAAA,cAC9B,WAAWZ,GAAE,WAAW;AACtB,oBAAIY,MAAK,KAAK,IAAI,SAAS;AAC3B,oBAAIA,QAAO,MAAM;AACf,yBAAO;AAAA,gBACT;AACA,oBAAI,CAAC,QAAQA,GAAE,GAAG;AAChB,yBAAO;AAAA,gBACT;AACA,oBAAI,CAAC,EAAE,QAAQA,GAAE,GAAG;AAClB,uBAAK,QAAQ,EAAEA,GAAE;AACjB,yBAAO;AAAA,gBACT;AACA,uBAAO;AAAA,cACT,CAAC;AAAA,cACD,aAAaZ,GAAE,WAAW;AACxB,oBAAIY,MAAK,KAAK,IAAI,SAAS;AAC3B,oBAAIA,QAAO,MAAM;AACf,yBAAO;AAAA,gBACT;AACA,oBAAI,CAAC,QAAQA,GAAE,GAAG;AAChB,yBAAO;AAAA,gBACT;AACA,uBAAO,QAAQA,GAAE;AAAA,cACnB,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AACD,YAAI,mBAAmB3C,YAAW,SAASS,UAASR,SAAQ;AAC1D;AACA,cAAI,gBAAgB,0BAA0B;AAC9C,cAAI,gBAAgB,uBAAuB;AAC3C,cAAI,QAAQ,cAAc;AAC1B,UAAAA,QAAO,UAAU,SAAS,IAAI;AAC5B,gBAAI,UAAU,cAAc,UAAU,CAAC,CAAC,GAAG;AAC3C,gBAAI,CAAC,QAAQ,YAAY;AACvB,uBAAS,QAAQ,SAAS,cAAc,QAAQ,QAAQ,GAAG,QAAQ,QAAQ,KAAK;AAChF,kBAAI,WAAW,GAAG;AAChB,oBAAI,QAAQ,WAAW;AACrB,sBAAI,WAAW,OAAO;AACpB,4BAAQ,aAAa,kBAAkB;AAAA,kBACzC,WAAW,SAAS,GAAG;AACrB,4BAAQ,aAAa,4BAA4B,EAAE,MAAM;AAAA,kBAC3D;AAAA,gBACF,WAAW,WAAW,OAAO;AAC3B,0BAAQ,aAAa,YAAY,EAAE;AAAA,gBACrC,WAAW,WAAW,GAAG;AACvB,0BAAQ,aAAa,cAAc,EAAE;AAAA,gBACvC,OAAO;AACL,0BAAQ,aAAa,kBAAkB,EAAE,MAAM;AAAA,gBACjD;AAAA,cACF;AAAA,YACF;AACA,gBAAI,QAAQ,OAAO;AACjB,4BAAc;AAAA,YAChB;AACA,gBAAI,QAAQ,SAAS;AACnB,8BAAgB;AAAA,YAClB;AACA,gBAAI,QAAQ,SAAS;AACnB,8BAAgB;AAAA,YAClB;AACA,gBAAI,QAAQ,QAAQ;AAClB,8BAAgB;AAAA,YAClB;AACA,gBAAI,QAAQ,KAAK;AACf,0BAAY;AAAA,YACd;AACA,gBAAI,QAAQ,YAAY;AACtB,kCAAoB;AAAA,YACtB;AACA,mBAAO,MAAM,IAAI,OAAO;AAAA,UAC1B;AAAA,QACF,CAAC;AACD,YAAI,sBAAsBD,YAAW,SAASS,UAASR,SAAQ;AAC7D;AACA,UAAAA,QAAO,UAAU,WAAW;AAC1B,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,cAAcD,YAAW,SAASS,UAASR,SAAQ;AACrD,WAAC,WAAW;AACV;AACA,gBAAI,OAAO;AAAA,cACT,MAAM;AAAA,cACN,SAAS;AAAA,cACT,kBAAkB;AAAA,gBAChB,UAAU;AAAA,gBACV,aAAa;AAAA,gBACb,QAAQ;AAAA,gBACR,KAAK;AAAA,gBACL,WAAW;AAAA,gBACX,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,aAAa;AAAA,gBACb,SAAS;AAAA,gBACT,SAAS;AAAA,gBACT,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,eAAe;AAAA,gBACf,kBAAkB;AAAA,cACpB;AAAA,cACA,UAAU;AAAA,cACV,SAAS;AAAA,cACT,KAAK;AAAA,YACP;AACA,aAAC,WAAW;AACV,mBAAK,OAAO,eAAe,cAAc,cAAc,QAAQ,UAAU,OAAO,UAAU;AACxF;AAAA,cACF;AACA,kBAAI;AACF,uBAAO,eAAe,OAAO,WAAW,aAAa;AAAA,kBACnD,KAAK,SAASK,OAAM;AAClB,2BAAO;AAAA,kBACT;AAAA,kBACA,cAAc;AAAA,gBAChB,CAAC;AACD,0BAAU,aAAa;AACvB,uBAAO,OAAO,UAAU;AAAA,cAC1B,SAAStB,IAAG;AACV,gBAAAX,QAAO,aAAa,WAAW;AAC7B,sBAAI,OAAO,SAAS,aAAa;AAC/B,2BAAO;AAAA,kBACT;AACA,sBAAI,OAAOA,YAAW,aAAa;AACjC,2BAAOA;AAAA,kBACT;AACA,sBAAI,OAAOC,YAAW,aAAa;AACjC,2BAAOA;AAAA,kBACT;AACA,sBAAI,OAAO,SAAS,aAAa;AAC/B,2BAAO;AAAA,kBACT;AACA,wBAAM,IAAI,MAAM,gCAAgC;AAAA,gBAClD,EAAE;AAAA,cACJ;AAAA,YACF,GAAG;AACH,iBAAK,mBAAmB,SAAS,kBAAkB;AACjD,kBAAI,kBAAkB;AAAA,gBACpB,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,KAAM;AAAA,gBACN,KAAK;AAAA,cACP,GAAG,YAAY,mBAAmB,eAAe;AACjD,qBAAO,SAAS,MAAM;AACpB,uBAAO,OAAO,KAAK,SAAS,EAAE,QAAQ,WAAW,SAAS8F,IAAG;AAC3D,yBAAO,gBAAgBA,EAAC,KAAKA;AAAA,gBAC/B,CAAC,IAAI;AAAA,cACP;AAAA,YACF;AACA,gBAAI,OAAOnE,YAAW,eAAeA,QAAO,SAAS;AACnD,cAAAA,QAAO,UAAU;AAAA,YACnB,WAAW,OAAO,WAAW,cAAc,OAAO,KAAK;AACrD,qBAAO,WAAW;AAChB,uBAAO;AAAA,cACT,CAAC;AAAA,YACH,OAAO;AACL,yBAAW,MAAM;AAAA,YACnB;AACA,gBAAI,WAAW;AAAA,cACb,QAAQ;AAAA,gBACN,OAAO;AAAA,gBACP,KAAK;AAAA,gBACL,aAAa;AAAA,cACf;AAAA,cACA,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,KAAK;AAAA,gBACL,aAAa;AAAA,cACf;AAAA,YACF,GAAG,OAAO;AACV,qBAAS,YAAYS,IAAG,OAAO2D,MAAK;AAClC,sBAAQ,OAAO,UAAU,WAAW,QAAQ,MAAM,SAAS,GAAG,QAAQ3D,GAAE,UAAU,MAAM,SAAS0D,IAAG,MAAM,QAAQ,OAAO;AACvH,oBAAI,KAAK,QAAQ,MAAM,MAAM,GAAG;AAC9B,yBAAO,KAAK,UAAU,CAAC;AAAA,gBACzB;AACA,oBAAI,EAAE,QAAQC,OAAM;AAClB,sBAAI,WAAW,KAAK;AAClB,wBAAI3D,GAAE,cAAc;AAClB,4BAAM,QAAQA,GAAE,cAAc,SAAS4D,KAAI,OAAOC,IAAG;AACnD,wBAAAF,KAAI,IAAI,IAAI;AAAA,0BACV,KAAK;AAAA,0BACL,MAAME;AAAA,wBACR;AAAA,sBACF,CAAC;AAAA,oBACH;AACA,wBAAI,EAAE,QAAQF,OAAM;AAClB,sBAAAA,KAAI,IAAI,IAAI;AAAA,oBACd;AAAA,kBACF,OAAO;AACL,wBAAI,SAAS,OAAO,UAAW,OAAO,QAAS,KAAK,EAAEA,IAAG;AAAA,kBAC3D;AAAA,gBACF;AACA,uBAAO;AAAA,cACT,CAAC,EAAE,QAAQ3D,GAAE,OAAO,MAAM,SAAS0D,IAAG,MAAM;AAC1C,oBAAI1D,GAAE,WAAW;AACf,yBAAO,KAAK,QAAQA,GAAE,WAAW,SAAS4D,KAAIhF,IAAGyC,IAAG,OAAO;AACzD,wBAAIsC,KAAItC,EAAC,KAAKsC,KAAItC,EAAC,EAAE,OAAO,OAAO;AACjC,0BAAI,MAAMA,KAAI,MAAM,OAAO,QAAQ,SAAS,GAAG;AAC/C,sBAAAsC,KAAI,QAAQA,KAAI,SAAS,CAAC;AAC1B,sBAAAA,KAAI,MAAM,EAAE,IAAIA,KAAItC,EAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,gBAAgBsC,KAAItC,EAAC,EAAE,MAAM,aAAa,GAAG,GAAG,OAAO,QAAQ,IAAI;AAClH,6BAAOzC,KAAI,gBAAiB,KAAK;AAAA,oBACnC;AAAA,kBACF,CAAC;AAAA,gBACH;AACA,oBAAIiF,KAAI,IAAI,SAAS,OAAO,YAAY,IAAI,EAAEF,IAAG;AACjD,uBAAOE,KAAI,YAAY7D,IAAG6D,IAAGF,IAAG,IAAIE;AAAA,cACtC,CAAC;AAAA,YACH;AACA,qBAASC,UAAS,MAAM;AACtB,qBAAO,KAAK,QAAQ,aAAa,IAAI,EAAE,QAAQ,aAAa,GAAG;AAAA,YACjE;AACA,iBAAK,WAAW,SAAS,MAAM9D,IAAG2D,MAAK;AACrC,cAAA3D,KAAIA,MAAK,KAAK;AACd,kBAAI,MAAMA,GAAE,SAAS,SAAS,SAAS,SAAS,OAAO,gBAAgB,MAAM,GAAG,MAAME,OAAMF,GAAE,OAAOA,GAAE,SAAS,YAAYA,IAAG,MAAM2D,QAAO,CAAC,CAAC,IAAI;AAClJ,cAAAzD,QAAO,eAAgBF,GAAE,QAAQE,KAAI,QAAQ,kCAAkC,GAAG,EAAE,QAAQ,8BAA8B,EAAE,IAAIA,MAAK,QAAQ,SAAS,MAAM,EAAE,QAAQF,GAAE,eAAe,MAAM,SAAS0D,IAAG,MAAM;AAC7M,uBAAO,IAAI,QAAQI,UAAS,IAAI,IAAI,IAAI;AAAA,cAC1C,CAAC,EAAE,QAAQ9D,GAAE,UAAU,MAAM,SAAS0D,IAAG,MAAM;AAC7C,iCAAiB;AACjB,uBAAO,IAAI,cAAcI,UAAS,IAAI,IAAI,IAAI;AAAA,cAChD,CAAC,EAAE,QAAQ9D,GAAE,eAAe,MAAM,SAAS0D,IAAG,UAAU,MAAM;AAC5D,uBAAO,WAAW,OAAO,gBAAiBI,UAAS,IAAI,IAAI,aAAc,mBAAqB,OAAO,UAAWA,UAAS,IAAI,IAAI,aAAc;AAAA,cACjJ,CAAC,EAAE,QAAQ9D,GAAE,WAAW,MAAM,SAAS0D,IAAG,SAAS,OAAO,OAAO;AAC/D,oBAAI,CAAC,SAAS;AACZ,yBAAO;AAAA,gBACT;AACA,uBAAO;AACP,uBAAO,SAAS,MAAM;AACtB,0BAAUI,UAAS,OAAO;AAC1B,uBAAO,cAAe,MAAM,MAAM,UAAU,YAAY,MAAM,WAAW,QAAQ,MAAM,OAAO,UAAU,MAAM,SAAS,MAAM,qBAAqB,OAAO,OAAO,MAAM,OAAO,QAAQ,SAAS,MAAM,MAAM,OAAO;AAAA,cACnN,CAAC,EAAE,QAAQ9D,GAAE,YAAY,MAAM,SAAS0D,IAAG,MAAM;AAC/C,uBAAO,OAAQI,UAAS,IAAI,IAAI;AAAA,cAClC,CAAC,IAAI,iBAAkB,QAAQ,OAAO,KAAK,EAAE,QAAQ,OAAO,KAAK,EAAE,QAAQ,OAAO,KAAK,EAAE,QAAQ,4BAA4B,IAAI,EAAE,QAAQ,SAAS,EAAE;AACtJ,kBAAI,gBAAgB;AAClB,oBAAI,CAAC9D,GAAE,iBAAiB,cAAc,CAAC,WAAW,aAAa;AAC7D,6BAAW,cAAc,KAAK,iBAAiBA,GAAE,gBAAgB;AAAA,gBACnE;AACA,gBAAAE,OAAM,0EAA4E,KAAK,iBAAiB,SAAS,IAAI,OAAOF,GAAE,oBAAoB,MAAM,QAAQE;AAAA,cAClK;AACA,kBAAI;AACF,uBAAO,IAAI,SAASF,GAAE,SAASE,IAAG;AAAA,cACpC,SAAS5B,IAAG;AACV,oBAAI,OAAO,YAAY,aAAa;AAClC,0BAAQ,IAAI,2CAA2C4B,IAAG;AAAA,gBAC5D;AACA,sBAAM5B;AAAA,cACR;AAAA,YACF;AACA,iBAAK,UAAU,SAAS,MAAMqF,MAAK;AACjC,qBAAO,KAAK,SAAS,MAAM,MAAMA,IAAG;AAAA,YACtC;AAAA,UACF,GAAG;AAAA,QACL,CAAC;AACD,YAAI,sBAAsBrE,YAAW,SAASS,UAASR,SAAQ;AAC7D,WAAC,SAASyC,UAAS+B,UAAS;AAC1B,oBAAQhE,QAAO,MAAM,YAAY,OAAOR,YAAW,cAAcA,QAAO,UAAUwE,SAAQ,IAAI,OAAO,WAAW,cAAc,OAAO,MAAM,OAAOA,QAAO,IAAI/B,SAAQ,aAAa+B,SAAQ;AAAA,UAC5L,GAAGhE,UAAS,WAAW;AACrB;AACA,qBAAS,iBAAiBiE,IAAG;AAC3B,kBAAIrC,QAAO,QAAQqC,EAAC;AACpB,qBAAOA,OAAM,SAASrC,UAAS,YAAYA,UAAS;AAAA,YACtD;AACA,qBAASP,YAAW4C,IAAG;AACrB,qBAAO,OAAOA,OAAM;AAAA,YACtB;AACA,gBAAI,WAAW;AACf,gBAAI,MAAM,SAAS;AACjB,yBAAW,MAAM;AAAA,YACnB,OAAO;AACL,yBAAW,SAASC,UAASD,IAAG;AAC9B,uBAAO,OAAO,UAAU,SAAS,KAAKA,EAAC,MAAM;AAAA,cAC/C;AAAA,YACF;AACA,gBAAI7B,WAAU;AACd,gBAAIrD,OAAM;AACV,gBAAI,YAAY;AAChB,gBAAI,oBAAoB;AACxB,gBAAIoF,QAAO,SAASC,OAAM,UAAU,KAAK;AACvC,qBAAOrF,IAAG,IAAI;AACd,qBAAOA,OAAM,CAAC,IAAI;AAClB,cAAAA,QAAO;AACP,kBAAIA,SAAQ,GAAG;AACb,oBAAI,mBAAmB;AACrB,oCAAkB,KAAK;AAAA,gBACzB,OAAO;AACL,gCAAc;AAAA,gBAChB;AAAA,cACF;AAAA,YACF;AACA,qBAAS,aAAa,YAAY;AAChC,kCAAoB;AAAA,YACtB;AACA,qBAAS,QAAQ,QAAQ;AACvB,cAAAoF,QAAO;AAAA,YACT;AACA,gBAAI,gBAAgB,OAAOvG,YAAW,cAAcA,UAAS;AAC7D,gBAAI,gBAAgB,iBAAiB,CAAC;AACtC,gBAAI,0BAA0B,cAAc,oBAAoB,cAAc;AAC9E,gBAAI,UAAU,OAAO,SAAS,eAAe,OAAO,YAAY,eAAe,CAAC,EAAE,SAAS,KAAK,OAAO,MAAM;AAC7G,gBAAI,WAAW,OAAO,sBAAsB,eAAe,OAAO,kBAAkB,eAAe,OAAO,mBAAmB;AAC7H,qBAAS,cAAc;AACrB,qBAAO,WAAW;AAChB,uBAAO,QAAQ,SAAS,KAAK;AAAA,cAC/B;AAAA,YACF;AACA,qBAAS,gBAAgB;AACvB,kBAAI,OAAO,cAAc,aAAa;AACpC,uBAAO,WAAW;AAChB,4BAAU,KAAK;AAAA,gBACjB;AAAA,cACF;AACA,qBAAO,cAAc;AAAA,YACvB;AACA,qBAAS,sBAAsB;AAC7B,kBAAI,aAAa;AACjB,kBAAI,WAAW,IAAI,wBAAwB,KAAK;AAChD,kBAAI,OAAOE,UAAS,eAAe,EAAE;AACrC,uBAAS,QAAQ,MAAM;AAAA,gBACrB,eAAe;AAAA,cACjB,CAAC;AACD,qBAAO,WAAW;AAChB,qBAAK,OAAO,aAAa,EAAE,aAAa;AAAA,cAC1C;AAAA,YACF;AACA,qBAAS,oBAAoB;AAC3B,kBAAI,UAAU,IAAI,eAAe;AACjC,sBAAQ,MAAM,YAAY;AAC1B,qBAAO,WAAW;AAChB,uBAAO,QAAQ,MAAM,YAAY,CAAC;AAAA,cACpC;AAAA,YACF;AACA,qBAAS,gBAAgB;AACvB,kBAAI,mBAAmB;AACvB,qBAAO,WAAW;AAChB,uBAAO,iBAAiB,OAAO,CAAC;AAAA,cAClC;AAAA,YACF;AACA,gBAAI,SAAS,IAAI,MAAM,GAAG;AAC1B,qBAAS,QAAQ;AACf,uBAASI,KAAI,GAAGA,KAAIa,MAAKb,MAAK,GAAG;AAC/B,oBAAI,WAAW,OAAOA,EAAC;AACvB,oBAAI,MAAM,OAAOA,KAAI,CAAC;AACtB,yBAAS,GAAG;AACZ,uBAAOA,EAAC,IAAI;AACZ,uBAAOA,KAAI,CAAC,IAAI;AAAA,cAClB;AACA,cAAAa,OAAM;AAAA,YACR;AACA,qBAAS,eAAe;AACtB,kBAAI;AACF,oBAAI,QAAQ,SAAS,aAAa,EAAE,EAAE,QAAQ,OAAO;AACrD,4BAAY,MAAM,aAAa,MAAM;AACrC,uBAAO,cAAc;AAAA,cACvB,SAASR,IAAG;AACV,uBAAO,cAAc;AAAA,cACvB;AAAA,YACF;AACA,gBAAI,gBAAgB;AACpB,gBAAI,SAAS;AACX,8BAAgB,YAAY;AAAA,YAC9B,WAAW,yBAAyB;AAClC,8BAAgB,oBAAoB;AAAA,YACtC,WAAW,UAAU;AACnB,8BAAgB,kBAAkB;AAAA,YACpC,WAAW,kBAAkB,UAAU,MAAM;AAC3C,8BAAgB,aAAa;AAAA,YAC/B,OAAO;AACL,8BAAgB,cAAc;AAAA,YAChC;AACA,qBAAS,KAAK,eAAe,aAAa;AACxC,kBAAI,SAAS;AACb,kBAAI,QAAQ,IAAI,KAAK,YAAYiF,MAAK;AACtC,kBAAI,MAAM,UAAU,MAAM,QAAQ;AAChC,4BAAY,KAAK;AAAA,cACnB;AACA,kBAAI,SAAS,OAAO;AACpB,kBAAI,QAAQ;AACV,oBAAI,WAAW,UAAU,SAAS,CAAC;AACnC,gBAAAW,MAAK,WAAW;AACd,yBAAO,eAAe,QAAQ,OAAO,UAAU,OAAO,OAAO;AAAA,gBAC/D,CAAC;AAAA,cACH,OAAO;AACL,2BAAW,QAAQ,OAAO,eAAe,WAAW;AAAA,cACtD;AACA,qBAAO;AAAA,YACT;AACA,qBAAS,UAAU,QAAQ;AACzB,kBAAI,cAAc;AAClB,kBAAI,UAAU,QAAQ,MAAM,MAAM,YAAY,OAAO,gBAAgB,aAAa;AAChF,uBAAO;AAAA,cACT;AACA,kBAAI,UAAU,IAAI,YAAYX,MAAK;AACnC,sBAAQ,SAAS,MAAM;AACvB,qBAAO;AAAA,YACT;AACA,gBAAI,aAAa,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC;AACvD,qBAASA,SAAQ;AAAA,YAAC;AAClB,gBAAI,UAAU;AACd,gBAAI,YAAY;AAChB,gBAAI,WAAW;AACf,qBAAS,kBAAkB;AACzB,qBAAO,IAAI,UAAU,0CAA0C;AAAA,YACjE;AACA,qBAAS,kBAAkB;AACzB,qBAAO,IAAI,UAAU,sDAAsD;AAAA,YAC7E;AACA,qBAAS,QAAQ,SAAS,OAAO,oBAAoB,kBAAkB;AACrE,kBAAI;AACF,wBAAQ,KAAK,OAAO,oBAAoB,gBAAgB;AAAA,cAC1D,SAASjF,IAAG;AACV,uBAAOA;AAAA,cACT;AAAA,YACF;AACA,qBAAS,sBAAsB,SAAS,UAAU,SAAS;AACzD,cAAA4F,MAAK,SAAS,UAAU;AACtB,oBAAI,SAAS;AACb,oBAAI,QAAQ,QAAQ,SAAS,UAAU,SAAS,OAAO;AACrD,sBAAI,QAAQ;AACV;AAAA,kBACF;AACA,2BAAS;AACT,sBAAI,aAAa,OAAO;AACtB,4BAAQ,UAAU,KAAK;AAAA,kBACzB,OAAO;AACL,4BAAQ,UAAU,KAAK;AAAA,kBACzB;AAAA,gBACF,GAAG,SAAS,QAAQ;AAClB,sBAAI,QAAQ;AACV;AAAA,kBACF;AACA,2BAAS;AACT,yBAAO,UAAU,MAAM;AAAA,gBACzB,GAAG,cAAc,SAAS,UAAU,mBAAmB;AACvD,oBAAI,CAAC,UAAU,OAAO;AACpB,2BAAS;AACT,yBAAO,UAAU,KAAK;AAAA,gBACxB;AAAA,cACF,GAAG,OAAO;AAAA,YACZ;AACA,qBAAS,kBAAkB,SAAS,UAAU;AAC5C,kBAAI,SAAS,WAAW,WAAW;AACjC,wBAAQ,SAAS,SAAS,OAAO;AAAA,cACnC,WAAW,SAAS,WAAW,UAAU;AACvC,uBAAO,SAAS,SAAS,OAAO;AAAA,cAClC,OAAO;AACL,2BAAW,UAAU,QAAQ,SAAS,OAAO;AAC3C,yBAAO,QAAQ,SAAS,KAAK;AAAA,gBAC/B,GAAG,SAAS,QAAQ;AAClB,yBAAO,OAAO,SAAS,MAAM;AAAA,gBAC/B,CAAC;AAAA,cACH;AAAA,YACF;AACA,qBAAS,oBAAoB,SAAS,eAAe,SAAS;AAC5D,kBAAI,cAAc,gBAAgB,QAAQ,eAAe,YAAY,QAAQ,cAAc,YAAY,YAAY,WAAW;AAC5H,kCAAkB,SAAS,aAAa;AAAA,cAC1C,OAAO;AACL,oBAAI,YAAY,QAAQ;AACtB,0BAAQ,SAAS,aAAa;AAAA,gBAChC,WAAW9C,YAAW,OAAO,GAAG;AAC9B,wCAAsB,SAAS,eAAe,OAAO;AAAA,gBACvD,OAAO;AACL,0BAAQ,SAAS,aAAa;AAAA,gBAChC;AAAA,cACF;AAAA,YACF;AACA,qBAAS,QAAQ,SAAS,OAAO;AAC/B,kBAAI,YAAY,OAAO;AACrB,uBAAO,SAAS,gBAAgB,CAAC;AAAA,cACnC,WAAW,iBAAiB,KAAK,GAAG;AAClC,oBAAI,UAAU;AACd,oBAAI;AACF,4BAAU,MAAM;AAAA,gBAClB,SAAS,OAAO;AACd,yBAAO,SAAS,KAAK;AACrB;AAAA,gBACF;AACA,oCAAoB,SAAS,OAAO,OAAO;AAAA,cAC7C,OAAO;AACL,wBAAQ,SAAS,KAAK;AAAA,cACxB;AAAA,YACF;AACA,qBAAS,iBAAiB,SAAS;AACjC,kBAAI,QAAQ,UAAU;AACpB,wBAAQ,SAAS,QAAQ,OAAO;AAAA,cAClC;AACA,sBAAQ,OAAO;AAAA,YACjB;AACA,qBAAS,QAAQ,SAAS,OAAO;AAC/B,kBAAI,QAAQ,WAAW,SAAS;AAC9B;AAAA,cACF;AACA,sBAAQ,UAAU;AAClB,sBAAQ,SAAS;AACjB,kBAAI,QAAQ,aAAa,WAAW,GAAG;AACrC,gBAAA8C,MAAK,SAAS,OAAO;AAAA,cACvB;AAAA,YACF;AACA,qBAAS,OAAO,SAAS,QAAQ;AAC/B,kBAAI,QAAQ,WAAW,SAAS;AAC9B;AAAA,cACF;AACA,sBAAQ,SAAS;AACjB,sBAAQ,UAAU;AAClB,cAAAA,MAAK,kBAAkB,OAAO;AAAA,YAChC;AACA,qBAAS,WAAW,QAAQ,OAAO,eAAe,aAAa;AAC7D,kBAAI,eAAe,OAAO;AAC1B,kBAAI,SAAS,aAAa;AAC1B,qBAAO,WAAW;AAClB,2BAAa,MAAM,IAAI;AACvB,2BAAa,SAAS,SAAS,IAAI;AACnC,2BAAa,SAAS,QAAQ,IAAI;AAClC,kBAAI,WAAW,KAAK,OAAO,QAAQ;AACjC,gBAAAA,MAAK,SAAS,MAAM;AAAA,cACtB;AAAA,YACF;AACA,qBAAS,QAAQ,SAAS;AACxB,kBAAI,cAAc,QAAQ;AAC1B,kBAAI,UAAU,QAAQ;AACtB,kBAAI,YAAY,WAAW,GAAG;AAC5B;AAAA,cACF;AACA,kBAAI,QAAQ,QAAQ,WAAW,QAAQ,SAAS,QAAQ;AACxD,uBAASjG,KAAI,GAAGA,KAAI,YAAY,QAAQA,MAAK,GAAG;AAC9C,wBAAQ,YAAYA,EAAC;AACrB,2BAAW,YAAYA,KAAI,OAAO;AAClC,oBAAI,OAAO;AACT,iCAAe,SAAS,OAAO,UAAU,MAAM;AAAA,gBACjD,OAAO;AACL,2BAAS,MAAM;AAAA,gBACjB;AAAA,cACF;AACA,sBAAQ,aAAa,SAAS;AAAA,YAChC;AACA,qBAAS,eAAe,SAAS,SAAS,UAAU,QAAQ;AAC1D,kBAAI,cAAcmD,YAAW,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,YAAY;AACpF,kBAAI,aAAa;AACf,oBAAI;AACF,0BAAQ,SAAS,MAAM;AAAA,gBACzB,SAAS9C,IAAG;AACV,8BAAY;AACZ,0BAAQA;AAAA,gBACV;AACA,oBAAI,YAAY,OAAO;AACrB,yBAAO,SAAS,gBAAgB,CAAC;AACjC;AAAA,gBACF;AAAA,cACF,OAAO;AACL,wBAAQ;AAAA,cACV;AACA,kBAAI,QAAQ,WAAW,SAAS;AAAA,cAAC,WAAW,eAAe,WAAW;AACpE,wBAAQ,SAAS,KAAK;AAAA,cACxB,WAAW,cAAc,OAAO;AAC9B,uBAAO,SAAS,KAAK;AAAA,cACvB,WAAW,YAAY,WAAW;AAChC,wBAAQ,SAAS,KAAK;AAAA,cACxB,WAAW,YAAY,UAAU;AAC/B,uBAAO,SAAS,KAAK;AAAA,cACvB;AAAA,YACF;AACA,qBAAS,kBAAkB,SAAS,UAAU;AAC5C,kBAAI;AACF,yBAAS,SAAS,eAAe,OAAO;AACtC,0BAAQ,SAAS,KAAK;AAAA,gBACxB,GAAG,SAAS,cAAc,QAAQ;AAChC,yBAAO,SAAS,MAAM;AAAA,gBACxB,CAAC;AAAA,cACH,SAASA,IAAG;AACV,uBAAO,SAASA,EAAC;AAAA,cACnB;AAAA,YACF;AACA,gBAAI2D,MAAK;AACT,qBAAS,SAAS;AAChB,qBAAOA;AAAA,YACT;AACA,qBAAS,YAAY,SAAS;AAC5B,sBAAQ,UAAU,IAAIA;AACtB,sBAAQ,SAAS;AACjB,sBAAQ,UAAU;AAClB,sBAAQ,eAAe,CAAC;AAAA,YAC1B;AACA,qBAAS,kBAAkB;AACzB,qBAAO,IAAI,MAAM,yCAAyC;AAAA,YAC5D;AACA,gBAAI,aAAa,WAAW;AAC1B,uBAAS,YAAY,aAAa,OAAO;AACvC,qBAAK,uBAAuB;AAC5B,qBAAK,UAAU,IAAI,YAAYsB,MAAK;AACpC,oBAAI,CAAC,KAAK,QAAQ,UAAU,GAAG;AAC7B,8BAAY,KAAK,OAAO;AAAA,gBAC1B;AACA,oBAAIpB,SAAQ,KAAK,GAAG;AAClB,uBAAK,SAAS,MAAM;AACpB,uBAAK,aAAa,MAAM;AACxB,uBAAK,UAAU,IAAI,MAAM,KAAK,MAAM;AACpC,sBAAI,KAAK,WAAW,GAAG;AACrB,4BAAQ,KAAK,SAAS,KAAK,OAAO;AAAA,kBACpC,OAAO;AACL,yBAAK,SAAS,KAAK,UAAU;AAC7B,yBAAK,WAAW,KAAK;AACrB,wBAAI,KAAK,eAAe,GAAG;AACzB,8BAAQ,KAAK,SAAS,KAAK,OAAO;AAAA,oBACpC;AAAA,kBACF;AAAA,gBACF,OAAO;AACL,yBAAO,KAAK,SAAS,gBAAgB,CAAC;AAAA,gBACxC;AAAA,cACF;AACA,0BAAY,UAAU,aAAa,SAAS,WAAW,OAAO;AAC5D,yBAASlE,KAAI,GAAG,KAAK,WAAW,WAAWA,KAAI,MAAM,QAAQA,MAAK;AAChE,uBAAK,WAAW,MAAMA,EAAC,GAAGA,EAAC;AAAA,gBAC7B;AAAA,cACF;AACA,0BAAY,UAAU,aAAa,SAAS,WAAW,OAAOA,IAAG;AAC/D,oBAAI+B,KAAI,KAAK;AACb,oBAAI,aAAaA,GAAE;AACnB,oBAAI,eAAe,WAAW;AAC5B,sBAAI,QAAQ;AACZ,sBAAI,QAAQ;AACZ,sBAAI,WAAW;AACf,sBAAI;AACF,4BAAQ,MAAM;AAAA,kBAChB,SAAS1B,IAAG;AACV,+BAAW;AACX,4BAAQA;AAAA,kBACV;AACA,sBAAI,UAAU,QAAQ,MAAM,WAAW,SAAS;AAC9C,yBAAK,WAAW,MAAM,QAAQL,IAAG,MAAM,OAAO;AAAA,kBAChD,WAAW,OAAO,UAAU,YAAY;AACtC,yBAAK;AACL,yBAAK,QAAQA,EAAC,IAAI;AAAA,kBACpB,WAAW+B,OAAM,WAAW;AAC1B,wBAAI,UAAU,IAAIA,GAAEuD,MAAK;AACzB,wBAAI,UAAU;AACZ,6BAAO,SAAS,KAAK;AAAA,oBACvB,OAAO;AACL,0CAAoB,SAAS,OAAO,KAAK;AAAA,oBAC3C;AACA,yBAAK,cAAc,SAAStF,EAAC;AAAA,kBAC/B,OAAO;AACL,yBAAK,cAAc,IAAI+B,GAAE,SAAS,aAAa;AAC7C,6BAAO,YAAY,KAAK;AAAA,oBAC1B,CAAC,GAAG/B,EAAC;AAAA,kBACP;AAAA,gBACF,OAAO;AACL,uBAAK,cAAc,WAAW,KAAK,GAAGA,EAAC;AAAA,gBACzC;AAAA,cACF;AACA,0BAAY,UAAU,aAAa,SAAS,WAAW,OAAOA,IAAG,OAAO;AACtE,oBAAI,UAAU,KAAK;AACnB,oBAAI,QAAQ,WAAW,SAAS;AAC9B,uBAAK;AACL,sBAAI,UAAU,UAAU;AACtB,2BAAO,SAAS,KAAK;AAAA,kBACvB,OAAO;AACL,yBAAK,QAAQA,EAAC,IAAI;AAAA,kBACpB;AAAA,gBACF;AACA,oBAAI,KAAK,eAAe,GAAG;AACzB,0BAAQ,SAAS,KAAK,OAAO;AAAA,gBAC/B;AAAA,cACF;AACA,0BAAY,UAAU,gBAAgB,SAAS,cAAc,SAASA,IAAG;AACvE,oBAAI,aAAa;AACjB,2BAAW,SAAS,QAAQ,SAAS,OAAO;AAC1C,yBAAO,WAAW,WAAW,WAAWA,IAAG,KAAK;AAAA,gBAClD,GAAG,SAAS,QAAQ;AAClB,yBAAO,WAAW,WAAW,UAAUA,IAAG,MAAM;AAAA,gBAClD,CAAC;AAAA,cACH;AACA,qBAAO;AAAA,YACT,EAAE;AACF,qBAASwB,KAAI,SAAS;AACpB,qBAAO,IAAI,WAAW,MAAM,OAAO,EAAE;AAAA,YACvC;AACA,qBAAS,KAAK,SAAS;AACrB,kBAAI,cAAc;AAClB,kBAAI,CAAC0C,SAAQ,OAAO,GAAG;AACrB,uBAAO,IAAI,YAAY,SAASiC,IAAG,SAAS;AAC1C,yBAAO,QAAQ,IAAI,UAAU,iCAAiC,CAAC;AAAA,gBACjE,CAAC;AAAA,cACH,OAAO;AACL,uBAAO,IAAI,YAAY,SAAS,UAAU,SAAS;AACjD,sBAAI,SAAS,QAAQ;AACrB,2BAASnG,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,gCAAY,QAAQ,QAAQA,EAAC,CAAC,EAAE,KAAK,UAAU,OAAO;AAAA,kBACxD;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AACA,qBAAS,SAAS,QAAQ;AACxB,kBAAI,cAAc;AAClB,kBAAI,UAAU,IAAI,YAAYsF,MAAK;AACnC,qBAAO,SAAS,MAAM;AACtB,qBAAO;AAAA,YACT;AACA,qBAAS,gBAAgB;AACvB,oBAAM,IAAI,UAAU,oFAAoF;AAAA,YAC1G;AACA,qBAAS,WAAW;AAClB,oBAAM,IAAI,UAAU,uHAA2H;AAAA,YACjJ;AACA,gBAAI,YAAY,WAAW;AACzB,uBAAS,SAAS,UAAU;AAC1B,qBAAK,UAAU,IAAI,OAAO;AAC1B,qBAAK,UAAU,KAAK,SAAS;AAC7B,qBAAK,eAAe,CAAC;AACrB,oBAAIA,WAAU,UAAU;AACtB,yBAAO,aAAa,cAAc,cAAc;AAChD,kCAAgB,WAAW,kBAAkB,MAAM,QAAQ,IAAI,SAAS;AAAA,gBAC1E;AAAA,cACF;AACA,uBAAS,UAAU,OAAO,IAAI,SAAS,OAAO,aAAa;AACzD,uBAAO,KAAK,KAAK,MAAM,WAAW;AAAA,cACpC;AACA,uBAAS,UAAU,SAAS,IAAI,SAAS,SAAS,UAAU;AAC1D,oBAAI,UAAU;AACd,oBAAI,cAAc,QAAQ;AAC1B,oBAAInC,YAAW,QAAQ,GAAG;AACxB,yBAAO,QAAQ,KAAK,SAAS,OAAO;AAClC,2BAAO,YAAY,QAAQ,SAAS,CAAC,EAAE,KAAK,WAAW;AACrD,6BAAO;AAAA,oBACT,CAAC;AAAA,kBACH,GAAG,SAAS,QAAQ;AAClB,2BAAO,YAAY,QAAQ,SAAS,CAAC,EAAE,KAAK,WAAW;AACrD,4BAAM;AAAA,oBACR,CAAC;AAAA,kBACH,CAAC;AAAA,gBACH;AACA,uBAAO,QAAQ,KAAK,UAAU,QAAQ;AAAA,cACxC;AACA,qBAAO;AAAA,YACT,EAAE;AACF,sBAAU,UAAU,OAAO;AAC3B,sBAAU,MAAM3B;AAChB,sBAAU,OAAO;AACjB,sBAAU,UAAU;AACpB,sBAAU,SAAS;AACnB,sBAAU,gBAAgB;AAC1B,sBAAU,WAAW;AACrB,sBAAU,QAAQyE;AAClB,qBAAS,WAAW;AAClB,kBAAI,QAAQ;AACZ,kBAAI,OAAOtG,YAAW,aAAa;AACjC,wBAAQA;AAAA,cACV,WAAW,OAAO,SAAS,aAAa;AACtC,wBAAQ;AAAA,cACV,OAAO;AACL,oBAAI;AACF,0BAAQ,SAAS,aAAa,EAAE;AAAA,gBAClC,SAASU,IAAG;AACV,wBAAM,IAAI,MAAM,0EAA0E;AAAA,gBAC5F;AAAA,cACF;AACA,kBAAI+F,KAAI,MAAM;AACd,kBAAIA,IAAG;AACL,oBAAI,kBAAkB;AACtB,oBAAI;AACF,oCAAkB,OAAO,UAAU,SAAS,KAAKA,GAAE,QAAQ,CAAC;AAAA,gBAC9D,SAAS/F,IAAG;AAAA,gBAAC;AACb,oBAAI,oBAAoB,sBAAsB,CAAC+F,GAAE,MAAM;AACrD;AAAA,gBACF;AAAA,cACF;AACA,oBAAM,UAAU;AAAA,YAClB;AACA,sBAAU,WAAW;AACrB,sBAAU,UAAU;AACpB,mBAAO;AAAA,UACT,CAAC;AAAA,QACH,CAAC;AACD,YAAI,qBAAqB/E,YAAW,SAASS,UAAS;AACpD,cAAI,aAAa;AACjB,cAAI,mBAAmB;AACvB,cAAI,aAAa,2BAAW;AAC1B,gBAAI,OAAO,OAAO,UAAU,UAAU,QAAQ,OAAO,UAAU;AAC/D,mBAAO;AAAA,cACL,OAAO,SAAS,MAAM8D,IAAG;AACvB,uBAAO,KAAK,KAAKA,EAAC,EAAE,QAAQ,oBAAoB,EAAE;AAAA,cACpD;AAAA,cACA,aAAa,SAAS,YAAY3F,IAAGC,IAAG;AACtC,uBAAOA,MAAKD;AAAA,cACd;AAAA,cACA,gBAAgB,SAAS,eAAeA,IAAGC,IAAG;AAC5C,uBAAO,MAAM,KAAKD,IAAGC,EAAC;AAAA,cACxB;AAAA,cACA,YAAY,SAAS,WAAWD,IAAG;AACjC,uBAAO,OAAOA,OAAM;AAAA,cACtB;AAAA,cACA,SAAS,SAAS,QAAQ2F,IAAG;AAC3B,uBAAOA,MAAK;AAAA,cACd;AAAA,cACA,UAAU,SAAS,SAASA,IAAG;AAC7B,uBAAOA,OAAM;AAAA,cACf;AAAA,YACF;AAAA,UACF,EAAE;AACF,cAAI,MAAM,KAAK;AACf,cAAIlD,OAAM,KAAK;AACf,cAAI,QAAQ,KAAK;AACjB,cAAI,QAAQ,KAAK;AACjB,cAAI6C,OAAM,KAAK;AACf,cAAI,MAAM,KAAK;AACf,cAAI,QAAQ,KAAK;AACjB,mBAAS,oBAAoB,KAAK;AAChC,gBAAI,mBAAmB,YAAY;AACjC,kBAAIhF,SAAQ,gBAAgB,GAAG,GAAGP;AAClC,mBAAKA,KAAI,GAAGA,KAAIO,OAAM,QAAQP,MAAK,GAAG;AACpC,2BAAW,KAAKO,OAAMP,EAAC,GAAG;AAAA,kBACxB,OAAO,IAAIO,OAAMP,EAAC,CAAC;AAAA,kBACnB,UAAU;AAAA,kBACV,YAAY;AAAA,kBACZ,cAAc;AAAA,gBAChB,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AACA,cAAI;AACJ,cAAI,OAAO,kBAAkB,WAAW;AACtC,gBAAI;AACF,qBAAO,eAAe,CAAC,GAAG,KAAK,CAAC,CAAC;AACjC,qBAAO;AAAA,YACT,SAASK,IAAG;AACV,qBAAO;AAAA,YACT;AAAA,UACF,EAAE,GAAG;AACH,yBAAa,OAAO;AAAA,UACtB,OAAO;AACL,yBAAa,SAASgG,YAAWpG,IAAGC,IAAG,MAAM;AAC3C,kBAAI,CAACD,OAAM,OAAOA,EAAC,GAAG;AACpB,sBAAM,IAAI,UAAU,4CAA4C;AAAA,cAClE;AACA,kBAAI,WAAW,YAAY,MAAM,KAAK,KAAK,OAAO,UAAU,kBAAkB;AAC5E,uBAAO,UAAU,iBAAiB,KAAKA,IAAGC,IAAG,KAAK,GAAG;AAAA,cACvD;AACA,kBAAI,WAAW,YAAY,MAAM,KAAK,KAAK,OAAO,UAAU,kBAAkB;AAC5E,uBAAO,UAAU,iBAAiB,KAAKD,IAAGC,IAAG,KAAK,GAAG;AAAA,cACvD;AACA,kBAAI,WAAW,YAAY,MAAM,OAAO,GAAG;AACzC,gBAAAD,GAAEC,EAAC,IAAI,KAAK;AAAA,cACd;AACA,qBAAOD;AAAA,YACT;AAAA,UACF;AACA,cAAI,kBAAkB,OAAO,uBAAuB,SAASA,IAAG;AAC9D,gBAAIA,OAAM,OAAOA,EAAC,GAAG;AACnB,oBAAM,IAAI,UAAU,iDAAiD;AAAA,YACvE;AACA,gBAAIM,SAAQ,CAAC,GAAGL;AAChB,iBAAKA,MAAKD,IAAG;AACX,kBAAI,WAAW,eAAeA,IAAGC,EAAC,GAAG;AACnC,gBAAAK,OAAM,KAAKL,EAAC;AAAA,cACd;AAAA,YACF;AACA,mBAAOK;AAAA,UACT;AACA,mBAAS,mBAAmB,KAAK;AAC/B,gBAAI,CAAC,YAAY;AACf;AAAA,YACF;AACA,gBAAI,IAAI,SAAS,kBAAkB;AACjC,oBAAM,IAAI,WAAW,8BAA8B;AAAA,YACrD;AACA,qBAAS,kBAAkBsC,QAAO;AAChC,yBAAW,KAAKA,QAAO;AAAA,gBACrB,KAAK,SAASlB,OAAM;AAClB,yBAAO,IAAI,QAAQkB,MAAK;AAAA,gBAC1B;AAAA,gBACA,KAAK,SAASS,KAAIsC,IAAG;AACnB,sBAAI,QAAQ/C,QAAO+C,EAAC;AAAA,gBACtB;AAAA,gBACA,YAAY;AAAA,gBACZ,cAAc;AAAA,cAChB,CAAC;AAAA,YACH;AACA,gBAAI5F;AACJ,iBAAKA,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK,GAAG;AAClC,gCAAkBA,EAAC;AAAA,YACrB;AAAA,UACF;AACA,mBAAS,UAAU,OAAO,MAAM;AAC9B,gBAAIW,KAAI,KAAK;AACb,mBAAO,SAASA,MAAKA;AAAA,UACvB;AACA,mBAAS,YAAY,OAAO,MAAM;AAChC,gBAAIA,KAAI,KAAK;AACb,mBAAO,SAASA,OAAMA;AAAA,UACxB;AACA,mBAAS,OAAOD,IAAG;AACjB,mBAAO,CAAEA,KAAI,GAAI;AAAA,UACnB;AACA,mBAAS,SAAS,OAAO;AACvB,mBAAO,UAAU,MAAM,CAAC,GAAG,CAAC;AAAA,UAC9B;AACA,mBAAS,OAAOA,IAAG;AACjB,mBAAO,CAAEA,KAAI,GAAI;AAAA,UACnB;AACA,mBAAS,SAAS,OAAO;AACvB,mBAAO,YAAY,MAAM,CAAC,GAAG,CAAC;AAAA,UAChC;AACA,mBAAS,cAAcA,IAAG;AACxB,YAAAA,KAAI,MAAM,OAAOA,EAAC,CAAC;AACnB,mBAAO,CAAEA,KAAI,IAAI,IAAIA,KAAI,MAAM,MAAMA,KAAI,GAAI;AAAA,UAC/C;AACA,mBAAS,QAAQA,IAAG;AAClB,mBAAO,CAAEA,MAAK,IAAI,KAAKA,KAAI,GAAI;AAAA,UACjC;AACA,mBAAS,UAAU,OAAO;AACxB,mBAAO,UAAU,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE;AAAA,UAC/C;AACA,mBAAS,QAAQA,IAAG;AAClB,mBAAO,CAAEA,MAAK,IAAI,KAAKA,KAAI,GAAI;AAAA,UACjC;AACA,mBAAS,UAAU,OAAO;AACxB,mBAAO,YAAY,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE;AAAA,UACjD;AACA,mBAAS,QAAQA,IAAG;AAClB,mBAAO,CAAEA,MAAK,KAAK,KAAKA,MAAK,KAAK,KAAKA,MAAK,IAAI,KAAKA,KAAI,GAAI;AAAA,UAC/D;AACA,mBAAS,UAAU,OAAO;AACxB,mBAAO,UAAU,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE;AAAA,UACjF;AACA,mBAAS,QAAQA,IAAG;AAClB,mBAAO,CAAEA,MAAK,KAAK,KAAKA,MAAK,KAAK,KAAKA,MAAK,IAAI,KAAKA,KAAI,GAAI;AAAA,UAC/D;AACA,mBAAS,UAAU,OAAO;AACxB,mBAAO,YAAY,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE;AAAA,UACnF;AACA,mBAAS,YAAYkF,IAAG,OAAO,OAAO;AACpC,gBAAI,QAAQ,KAAK,QAAQ,KAAK,GAAGjF,IAAGN,IAAGO,IAAG,IAAIZ,IAAG,MAAMiC,MAAK;AAC5D,qBAAS,YAAYvB,IAAG;AACtB,kBAAI2C,KAAI,MAAM3C,EAAC,GAAG4F,MAAK5F,KAAI2C;AAC3B,kBAAIiD,MAAK,KAAI;AACX,uBAAOjD;AAAA,cACT;AACA,kBAAIiD,MAAK,KAAI;AACX,uBAAOjD,KAAI;AAAA,cACb;AACA,qBAAOA,KAAI,IAAIA,KAAI,IAAIA;AAAA,YACzB;AACA,gBAAIuC,OAAMA,IAAG;AACX,cAAAvF,MAAK,KAAK,SAAS;AACnB,cAAAO,KAAI,IAAI,GAAG,QAAQ,CAAC;AACpB,cAAAD,KAAI;AAAA,YACN,WAAWiF,OAAM,YAAYA,OAAM,WAAW;AAC5C,cAAAvF,MAAK,KAAK,SAAS;AACnB,cAAAO,KAAI;AACJ,cAAAD,KAAIiF,KAAI,IAAI,IAAI;AAAA,YAClB,WAAWA,OAAM,GAAG;AAClB,cAAAvF,KAAI;AACJ,cAAAO,KAAI;AACJ,cAAAD,KAAI,IAAIiF,OAAM,YAAY,IAAI;AAAA,YAChC,OAAO;AACL,cAAAjF,KAAIiF,KAAI;AACR,cAAAA,KAAIlD,KAAIkD,EAAC;AACT,kBAAIA,MAAK,IAAI,GAAG,IAAI,IAAI,GAAG;AACzB,gBAAAvF,KAAIkF,KAAI,MAAM,MAAMK,EAAC,IAAI,GAAG,GAAG,IAAI;AACnC,gBAAAhF,KAAI,YAAYgF,KAAI,IAAI,GAAGvF,EAAC,IAAI,IAAI,GAAG,KAAK,CAAC;AAC7C,oBAAIO,KAAI,IAAI,GAAG,KAAK,KAAK,GAAG;AAC1B,kBAAAP,KAAIA,KAAI;AACR,kBAAAO,KAAI;AAAA,gBACN;AACA,oBAAIP,KAAI,MAAM;AACZ,kBAAAA,MAAK,KAAK,SAAS;AACnB,kBAAAO,KAAI;AAAA,gBACN,OAAO;AACL,kBAAAP,KAAIA,KAAI;AACR,kBAAAO,KAAIA,KAAI,IAAI,GAAG,KAAK;AAAA,gBACtB;AAAA,cACF,OAAO;AACL,gBAAAP,KAAI;AACJ,gBAAAO,KAAI,YAAYgF,KAAI,IAAI,GAAG,IAAI,OAAO,KAAK,CAAC;AAAA,cAC9C;AAAA,YACF;AACA,mBAAO,CAAC;AACR,iBAAK5F,KAAI,OAAOA,IAAGA,MAAK,GAAG;AACzB,mBAAK,KAAKY,KAAI,IAAI,IAAI,CAAC;AACvB,cAAAA,KAAI,MAAMA,KAAI,CAAC;AAAA,YACjB;AACA,iBAAKZ,KAAI,OAAOA,IAAGA,MAAK,GAAG;AACzB,mBAAK,KAAKK,KAAI,IAAI,IAAI,CAAC;AACvB,cAAAA,KAAI,MAAMA,KAAI,CAAC;AAAA,YACjB;AACA,iBAAK,KAAKM,KAAI,IAAI,CAAC;AACnB,iBAAK,QAAQ;AACb,YAAAsB,OAAM,KAAK,KAAK,EAAE;AAClB,oBAAQ,CAAC;AACT,mBAAOA,KAAI,QAAQ;AACjB,oBAAM,KAAK,SAASA,KAAI,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3C,cAAAA,OAAMA,KAAI,UAAU,CAAC;AAAA,YACvB;AACA,mBAAO;AAAA,UACT;AACA,mBAAS,cAAc,OAAO,OAAO,OAAO;AAC1C,gBAAI,OAAO,CAAC,GAAGjC,IAAGmE,IAAGoC,IAAGtE,MAAK,MAAMtB,IAAGN,IAAGO;AACzC,iBAAKZ,KAAI,MAAM,QAAQA,IAAGA,MAAK,GAAG;AAChC,cAAAuG,KAAI,MAAMvG,KAAI,CAAC;AACf,mBAAKmE,KAAI,GAAGA,IAAGA,MAAK,GAAG;AACrB,qBAAK,KAAKoC,KAAI,IAAI,IAAI,CAAC;AACvB,gBAAAA,KAAIA,MAAK;AAAA,cACX;AAAA,YACF;AACA,iBAAK,QAAQ;AACb,YAAAtE,OAAM,KAAK,KAAK,EAAE;AAClB,oBAAQ,KAAK,QAAQ,KAAK;AAC1B,YAAAtB,KAAI,SAASsB,KAAI,UAAU,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK;AAC5C,YAAA5B,KAAI,SAAS4B,KAAI,UAAU,GAAG,IAAI,KAAK,GAAG,CAAC;AAC3C,YAAArB,KAAI,SAASqB,KAAI,UAAU,IAAI,KAAK,GAAG,CAAC;AACxC,gBAAI5B,QAAO,KAAK,SAAS,GAAG;AAC1B,qBAAOO,OAAM,IAAI,MAAMD,KAAI;AAAA,YAC7B,WAAWN,KAAI,GAAG;AAChB,qBAAOM,KAAI,IAAI,GAAGN,KAAI,IAAI,KAAK,IAAIO,KAAI,IAAI,GAAG,KAAK;AAAA,YACrD,WAAWA,OAAM,GAAG;AAClB,qBAAOD,KAAI,IAAI,GAAG,EAAE,OAAO,EAAE,KAAKC,KAAI,IAAI,GAAG,KAAK;AAAA,YACpD,OAAO;AACL,qBAAOD,KAAI,IAAI,KAAK;AAAA,YACtB;AAAA,UACF;AACA,mBAAS,UAAU4F,IAAG;AACpB,mBAAO,cAAcA,IAAG,IAAI,EAAE;AAAA,UAChC;AACA,mBAAS,QAAQX,IAAG;AAClB,mBAAO,YAAYA,IAAG,IAAI,EAAE;AAAA,UAC9B;AACA,mBAAS,UAAUW,IAAG;AACpB,mBAAO,cAAcA,IAAG,GAAG,EAAE;AAAA,UAC/B;AACA,mBAAS,QAAQX,IAAG;AAClB,mBAAO,YAAYA,IAAG,GAAG,EAAE;AAAA,UAC7B;AACA,WAAC,WAAW;AACV,gBAAIY,eAAc,SAASC,cAAa,QAAQ;AAC9C,uBAAS,WAAW,QAAQ,MAAM;AAClC,kBAAI,SAAS,GAAG;AACd,sBAAM,IAAI,WAAW,yDAAyD;AAAA,cAChF;AACA,mBAAK,aAAa;AAClB,mBAAK,SAAS,CAAC;AACf,mBAAK,OAAO,SAAS;AACrB,kBAAIzG;AACJ,mBAAKA,KAAI,GAAGA,KAAI,KAAK,YAAYA,MAAK,GAAG;AACvC,qBAAK,OAAOA,EAAC,IAAI;AAAA,cACnB;AACA,kCAAoB,IAAI;AAAA,YAC1B;AACA,YAAA8B,SAAQ,cAAcA,SAAQ,eAAe0E;AAC7C,gBAAI,kBAAkB,SAAS,mBAAmB;AAAA,YAAC;AACnD,qBAAS,gBAAgB,iBAAiB,MAAM,QAAQ;AACtD,kBAAI;AACJ,sBAAQ,SAAS,KAAK,QAAQ,YAAY,QAAQ;AAChD,oBAAIE,QAAO,UAAU1G,IAAGW;AACxB,oBAAI,CAAC,UAAU,UAAU,OAAO,UAAU,CAAC,MAAM,UAAU;AACzD,uBAAK,SAAS,WAAW,QAAQ,UAAU,CAAC,CAAC;AAC7C,sBAAI,SAAS,GAAG;AACd,0BAAM,IAAI,WAAW,6DAA6D;AAAA,kBACpF;AACA,uBAAK,aAAa,KAAK,SAAS,KAAK;AACrC,uBAAK,SAAS,IAAI6F,aAAY,KAAK,UAAU;AAC7C,uBAAK,aAAa;AAAA,gBACpB,WAAW,QAAQ,UAAU,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC,EAAE,gBAAgB,OAAO;AACnF,kBAAAE,SAAQ,UAAU,CAAC;AACnB,uBAAK,SAASA,OAAM;AACpB,uBAAK,aAAa,KAAK,SAAS,KAAK;AACrC,uBAAK,SAAS,IAAIF,aAAY,KAAK,UAAU;AAC7C,uBAAK,aAAa;AAClB,uBAAKxG,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK,GAAG;AACnC,yBAAK,QAAQA,IAAG0G,OAAM,QAAQ1G,EAAC,CAAC;AAAA,kBAClC;AAAA,gBACF,WAAW,QAAQ,UAAU,CAAC,CAAC,MAAM,YAAY,EAAE,UAAU,CAAC,aAAawG,gBAAe,WAAW,MAAM,UAAU,CAAC,CAAC,MAAM,gBAAgB;AAC3I,6BAAW,UAAU,CAAC;AACtB,uBAAK,SAAS,WAAW,SAAS,SAAS,MAAM;AACjD,uBAAK,aAAa,KAAK,SAAS,KAAK;AACrC,uBAAK,SAAS,IAAIA,aAAY,KAAK,UAAU;AAC7C,uBAAK,aAAa;AAClB,uBAAKxG,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK,GAAG;AACnC,oBAAAW,KAAI,SAASX,EAAC;AACd,yBAAK,QAAQA,IAAG,OAAOW,EAAC,CAAC;AAAA,kBAC3B;AAAA,gBACF,WAAW,QAAQ,UAAU,CAAC,CAAC,MAAM,aAAa,UAAU,CAAC,aAAa6F,gBAAe,WAAW,MAAM,UAAU,CAAC,CAAC,MAAM,gBAAgB;AAC1I,uBAAK,SAAS;AACd,uBAAK,aAAa,WAAW,SAAS,UAAU;AAChD,sBAAI,KAAK,aAAa,KAAK,OAAO,YAAY;AAC5C,0BAAM,IAAI,WAAW,yBAAyB;AAAA,kBAChD;AACA,sBAAI,KAAK,aAAa,KAAK,mBAAmB;AAC5C,0BAAM,IAAI,WAAW,gFAAgF;AAAA,kBACvG;AACA,sBAAI,UAAU,SAAS,GAAG;AACxB,yBAAK,aAAa,KAAK,OAAO,aAAa,KAAK;AAChD,wBAAI,KAAK,aAAa,KAAK,mBAAmB;AAC5C,4BAAM,IAAI,WAAW,sEAAsE;AAAA,oBAC7F;AACA,yBAAK,SAAS,KAAK,aAAa,KAAK;AAAA,kBACvC,OAAO;AACL,yBAAK,SAAS,WAAW,SAAS,MAAM;AACxC,yBAAK,aAAa,KAAK,SAAS,KAAK;AAAA,kBACvC;AACA,sBAAI,KAAK,aAAa,KAAK,aAAa,KAAK,OAAO,YAAY;AAC9D,0BAAM,IAAI,WAAW,sEAAsE;AAAA,kBAC7F;AAAA,gBACF,OAAO;AACL,wBAAM,IAAI,UAAU,6BAA6B;AAAA,gBACnD;AACA,qBAAK,cAAc;AACnB,oCAAoB,IAAI;AACxB,mCAAmB,IAAI;AAAA,cACzB;AACA,oBAAM,YAAY,IAAI,gBAAgB;AACtC,oBAAM,UAAU,oBAAoB;AACpC,oBAAM,UAAU,QAAQ;AACxB,oBAAM,UAAU,UAAU;AAC1B,oBAAM,oBAAoB;AAC1B,oBAAM,UAAU,UAAU,SAAS3D,QAAO;AACxC,oBAAI,UAAU,SAAS,GAAG;AACxB,wBAAM,IAAI,YAAY,sBAAsB;AAAA,gBAC9C;AACA,gBAAAA,SAAQ,WAAW,SAASA,MAAK;AACjC,oBAAIA,UAAS,KAAK,QAAQ;AACxB,yBAAO;AAAA,gBACT;AACA,oBAAI,QAAQ,CAAC,GAAG7C,IAAGC;AACnB,qBAAKD,KAAI,GAAGC,KAAI,KAAK,aAAa4C,SAAQ,KAAK,mBAAmB7C,KAAI,KAAK,mBAAmBA,MAAK,GACnGC,MAAK,GAAG;AACN,wBAAM,KAAK,KAAK,OAAO,OAAOA,EAAC,CAAC;AAAA,gBAClC;AACA,uBAAO,KAAK,QAAQ,KAAK;AAAA,cAC3B;AACA,oBAAM,UAAU,MAAM,MAAM,UAAU;AACtC,oBAAM,UAAU,UAAU,SAAS4C,QAAO,OAAO;AAC/C,oBAAI,UAAU,SAAS,GAAG;AACxB,wBAAM,IAAI,YAAY,sBAAsB;AAAA,gBAC9C;AACA,gBAAAA,SAAQ,WAAW,SAASA,MAAK;AACjC,oBAAIA,UAAS,KAAK,QAAQ;AACxB,yBAAO;AAAA,gBACT;AACA,oBAAI,QAAQ,KAAK,MAAM,KAAK,GAAG7C,IAAGC;AAClC,qBAAKD,KAAI,GAAGC,KAAI,KAAK,aAAa4C,SAAQ,KAAK,mBAAmB7C,KAAI,KAAK,mBAAmBA,MAAK,GACnGC,MAAK,GAAG;AACN,uBAAK,OAAO,OAAOA,EAAC,IAAI,MAAMD,EAAC;AAAA,gBACjC;AAAA,cACF;AACA,oBAAM,UAAU,MAAM,SAAS6C,QAAO,OAAO;AAC3C,oBAAI,UAAU,SAAS,GAAG;AACxB,wBAAM,IAAI,YAAY,sBAAsB;AAAA,gBAC9C;AACA,oBAAI6D,QAAO,UAAU,QAAQ7F,MAAKb,IAAGW,IAAGyC,IAAG,YAAY,YAAY;AACnE,oBAAI,QAAQ,UAAU,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC,EAAE,gBAAgB,KAAK,aAAa;AACvF,kBAAAsD,SAAQ,UAAU,CAAC;AACnB,2BAAS,WAAW,SAAS,UAAU,CAAC,CAAC;AACzC,sBAAI,SAASA,OAAM,SAAS,KAAK,QAAQ;AACvC,0BAAM,IAAI,WAAW,6CAA6C;AAAA,kBACpE;AACA,+BAAa,KAAK,aAAa,SAAS,KAAK;AAC7C,+BAAaA,OAAM,SAAS,KAAK;AACjC,sBAAIA,OAAM,WAAW,KAAK,QAAQ;AAChC,0BAAM,CAAC;AACP,yBAAK1G,KAAI,GAAGW,KAAI+F,OAAM,YAAY1G,KAAI,YAAYA,MAAK,GAAGW,MAAK,GAAG;AAChE,0BAAIX,EAAC,IAAI0G,OAAM,OAAO,OAAO/F,EAAC;AAAA,oBAChC;AACA,yBAAKX,KAAI,GAAGoD,KAAI,YAAYpD,KAAI,YAAYA,MAAK,GAAGoD,MAAK,GAAG;AAC1D,2BAAK,OAAO,OAAOA,EAAC,IAAI,IAAIpD,EAAC;AAAA,oBAC/B;AAAA,kBACF,OAAO;AACL,yBAAKA,KAAI,GAAGW,KAAI+F,OAAM,YAAYtD,KAAI,YAAYpD,KAAI,YAAYA,MAAK,GAAGW,MAAK,GAC/EyC,MAAK,GAAG;AACN,2BAAK,OAAO,OAAOA,EAAC,IAAIsD,OAAM,OAAO,OAAO/F,EAAC;AAAA,oBAC/C;AAAA,kBACF;AAAA,gBACF,WAAW,QAAQ,UAAU,CAAC,CAAC,MAAM,YAAY,OAAO,UAAU,CAAC,EAAE,WAAW,aAAa;AAC3F,6BAAW,UAAU,CAAC;AACtB,kBAAAE,OAAM,WAAW,SAAS,SAAS,MAAM;AACzC,2BAAS,WAAW,SAAS,UAAU,CAAC,CAAC;AACzC,sBAAI,SAASA,OAAM,KAAK,QAAQ;AAC9B,0BAAM,IAAI,WAAW,6CAA6C;AAAA,kBACpE;AACA,uBAAKb,KAAI,GAAGA,KAAIa,MAAKb,MAAK,GAAG;AAC3B,oBAAAW,KAAI,SAASX,EAAC;AACd,yBAAK,QAAQ,SAASA,IAAG,OAAOW,EAAC,CAAC;AAAA,kBACpC;AAAA,gBACF,OAAO;AACL,wBAAM,IAAI,UAAU,6BAA6B;AAAA,gBACnD;AAAA,cACF;AACA,oBAAM,UAAU,WAAW,SAASgG,QAAO,KAAK;AAC9C,yBAAS,MAAMf,IAAGgB,OAAMjE,MAAK;AAC3B,yBAAOiD,KAAIgB,QAAOA,QAAOhB,KAAIjD,OAAMA,OAAMiD;AAAA,gBAC3C;AACA,gBAAAe,SAAQ,WAAW,QAAQA,MAAK;AAChC,sBAAM,WAAW,QAAQ,GAAG;AAC5B,oBAAI,UAAU,SAAS,GAAG;AACxB,kBAAAA,SAAQ;AAAA,gBACV;AACA,oBAAI,UAAU,SAAS,GAAG;AACxB,wBAAM,KAAK;AAAA,gBACb;AACA,oBAAIA,SAAQ,GAAG;AACb,kBAAAA,SAAQ,KAAK,SAASA;AAAA,gBACxB;AACA,oBAAI,MAAM,GAAG;AACX,wBAAM,KAAK,SAAS;AAAA,gBACtB;AACA,gBAAAA,SAAQ,MAAMA,QAAO,GAAG,KAAK,MAAM;AACnC,sBAAM,MAAM,KAAK,GAAG,KAAK,MAAM;AAC/B,oBAAI9F,OAAM,MAAM8F;AAChB,oBAAI9F,OAAM,GAAG;AACX,kBAAAA,OAAM;AAAA,gBACR;AACA,uBAAO,IAAI,KAAK,YAAY,KAAK,QAAQ,KAAK,aAAa8F,SAAQ,KAAK,mBAAmB9F,IAAG;AAAA,cAChG;AACA,qBAAO;AAAA,YACT;AACA,gBAAI,YAAY,gBAAgB,GAAG,QAAQ,QAAQ;AACnD,gBAAI,cAAc,gBAAgB,GAAG,QAAQ,QAAQ;AACrD,gBAAI,qBAAqB,gBAAgB,GAAG,eAAe,QAAQ;AACnE,gBAAI,aAAa,gBAAgB,GAAG,SAAS,SAAS;AACtD,gBAAI,cAAc,gBAAgB,GAAG,SAAS,SAAS;AACvD,gBAAI,aAAa,gBAAgB,GAAG,SAAS,SAAS;AACtD,gBAAI,eAAe,gBAAgB,GAAG,SAAS,SAAS;AACxD,gBAAIgG,gBAAe,gBAAgB,GAAG,SAAS,SAAS;AACxD,gBAAIC,gBAAe,gBAAgB,GAAG,SAAS,SAAS;AACxD,YAAAhF,SAAQ,YAAYA,SAAQ,aAAa;AACzC,YAAAA,SAAQ,aAAaA,SAAQ,cAAc;AAC3C,YAAAA,SAAQ,oBAAoBA,SAAQ,qBAAqB;AACzD,YAAAA,SAAQ,aAAaA,SAAQ,cAAc;AAC3C,YAAAA,SAAQ,cAAcA,SAAQ,eAAe;AAC7C,YAAAA,SAAQ,aAAaA,SAAQ,cAAc;AAC3C,YAAAA,SAAQ,cAAcA,SAAQ,eAAe;AAC7C,YAAAA,SAAQ,eAAeA,SAAQ,gBAAgB+E;AAC/C,YAAA/E,SAAQ,eAAeA,SAAQ,gBAAgBgF;AAAA,UACjD,GAAG;AACH,WAAC,WAAW;AACV,qBAASC,GAAEL,QAAO7D,QAAO;AACvB,qBAAO,WAAW,WAAW6D,OAAM,GAAG,IAAIA,OAAM,IAAI7D,MAAK,IAAI6D,OAAM7D,MAAK;AAAA,YAC1E;AACA,gBAAI,gBAAgB,WAAW;AAC7B,kBAAI,WAAW,IAAIf,SAAQ,YAAY,CAAE,IAAK,CAAC,GAAG,UAAU,IAAIA,SAAQ,WAAW,SAAS,MAAM;AAClG,qBAAOiF,GAAE,SAAS,CAAC,MAAM;AAAA,YAC3B,EAAE;AACF,gBAAIC,YAAW,SAASC,WAAU,QAAQ,YAAY,YAAY;AAChE,kBAAI,UAAU,WAAW,GAAG;AAC1B,yBAAS,IAAInF,SAAQ,YAAY,CAAC;AAAA,cACpC,WAAW,EAAE,kBAAkBA,SAAQ,eAAe,WAAW,MAAM,MAAM,MAAM,gBAAgB;AACjG,sBAAM,IAAI,UAAU,WAAW;AAAA,cACjC;AACA,mBAAK,SAAS,UAAU,IAAIA,SAAQ,YAAY,CAAC;AACjD,mBAAK,aAAa,WAAW,SAAS,UAAU;AAChD,kBAAI,KAAK,aAAa,KAAK,OAAO,YAAY;AAC5C,sBAAM,IAAI,WAAW,yBAAyB;AAAA,cAChD;AACA,kBAAI,UAAU,SAAS,GAAG;AACxB,qBAAK,aAAa,KAAK,OAAO,aAAa,KAAK;AAAA,cAClD,OAAO;AACL,qBAAK,aAAa,WAAW,SAAS,UAAU;AAAA,cAClD;AACA,kBAAI,KAAK,aAAa,KAAK,aAAa,KAAK,OAAO,YAAY;AAC9D,sBAAM,IAAI,WAAW,sEAAsE;AAAA,cAC7F;AACA,kCAAoB,IAAI;AAAA,YAC1B;AACA,qBAAS,WAAW,WAAW;AAC7B,qBAAO,SAAS,YAAY,cAAc;AACxC,6BAAa,WAAW,SAAS,UAAU;AAC3C,oBAAI,aAAa,UAAU,oBAAoB,KAAK,YAAY;AAC9D,wBAAM,IAAI,WAAW,0BAA0B;AAAA,gBACjD;AACA,8BAAc,KAAK;AACnB,oBAAI,aAAa,IAAIA,SAAQ,WAAW,KAAK,QAAQ,YAAY,UAAU,iBAAiB,GAAG,QAAQ,CAAC,GAAG9B;AAC3G,qBAAKA,KAAI,GAAGA,KAAI,UAAU,mBAAmBA,MAAK,GAAG;AACnD,wBAAM,KAAK+G,GAAE,YAAY/G,EAAC,CAAC;AAAA,gBAC7B;AACA,oBAAI,QAAQ,YAAY,MAAM,QAAQ,aAAa,GAAG;AACpD,wBAAM,QAAQ;AAAA,gBAChB;AACA,uBAAO+G,GAAE,IAAI,UAAU,IAAIjF,SAAQ,WAAW,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,cACjE;AAAA,YACF;AACA,YAAAkF,UAAS,UAAU,WAAW,WAAWlF,SAAQ,UAAU;AAC3D,YAAAkF,UAAS,UAAU,UAAU,WAAWlF,SAAQ,SAAS;AACzD,YAAAkF,UAAS,UAAU,YAAY,WAAWlF,SAAQ,WAAW;AAC7D,YAAAkF,UAAS,UAAU,WAAW,WAAWlF,SAAQ,UAAU;AAC3D,YAAAkF,UAAS,UAAU,YAAY,WAAWlF,SAAQ,WAAW;AAC7D,YAAAkF,UAAS,UAAU,WAAW,WAAWlF,SAAQ,UAAU;AAC3D,YAAAkF,UAAS,UAAU,aAAa,WAAWlF,SAAQ,YAAY;AAC/D,YAAAkF,UAAS,UAAU,aAAa,WAAWlF,SAAQ,YAAY;AAC/D,qBAAS,WAAW,WAAW;AAC7B,qBAAO,SAAS,YAAY,OAAO,cAAc;AAC/C,6BAAa,WAAW,SAAS,UAAU;AAC3C,oBAAI,aAAa,UAAU,oBAAoB,KAAK,YAAY;AAC9D,wBAAM,IAAI,WAAW,0BAA0B;AAAA,gBACjD;AACA,oBAAI,YAAY,IAAI,UAAU,CAAE,KAAM,CAAC,GAAG,YAAY,IAAIA,SAAQ,WAAW,UAAU,MAAM,GAAG,QAAQ,CAAC,GAAG9B,IAAG;AAC/G,qBAAKA,KAAI,GAAGA,KAAI,UAAU,mBAAmBA,MAAK,GAAG;AACnD,wBAAM,KAAK+G,GAAE,WAAW/G,EAAC,CAAC;AAAA,gBAC5B;AACA,oBAAI,QAAQ,YAAY,MAAM,QAAQ,aAAa,GAAG;AACpD,wBAAM,QAAQ;AAAA,gBAChB;AACA,2BAAW,IAAI8B,SAAQ,WAAW,KAAK,QAAQ,YAAY,UAAU,iBAAiB;AACtF,yBAAS,IAAI,KAAK;AAAA,cACpB;AAAA,YACF;AACA,YAAAkF,UAAS,UAAU,WAAW,WAAWlF,SAAQ,UAAU;AAC3D,YAAAkF,UAAS,UAAU,UAAU,WAAWlF,SAAQ,SAAS;AACzD,YAAAkF,UAAS,UAAU,YAAY,WAAWlF,SAAQ,WAAW;AAC7D,YAAAkF,UAAS,UAAU,WAAW,WAAWlF,SAAQ,UAAU;AAC3D,YAAAkF,UAAS,UAAU,YAAY,WAAWlF,SAAQ,WAAW;AAC7D,YAAAkF,UAAS,UAAU,WAAW,WAAWlF,SAAQ,UAAU;AAC3D,YAAAkF,UAAS,UAAU,aAAa,WAAWlF,SAAQ,YAAY;AAC/D,YAAAkF,UAAS,UAAU,aAAa,WAAWlF,SAAQ,YAAY;AAC/D,YAAAA,SAAQ,WAAWA,SAAQ,YAAYkF;AAAA,UACzC,GAAG;AAAA,QACL,CAAC;AACD,YAAI,2BAA2B3F,YAAW,SAASS,UAAS;AAC1D,WAAC,SAAS,OAAO;AACf;AACA,gBAAI,MAAM,SAAS;AACjB;AAAA,YACF;AACA,gBAAIyB,mBAAkB,OAAO,UAAU;AACvC,gBAAI,iBAAiB,SAAS2D,gBAAe,QAAQ,MAAM,OAAO;AAChE,kBAAI,OAAO,gBAAgB;AACzB,uBAAO,eAAe,QAAQ,MAAM;AAAA,kBAClC,cAAc;AAAA,kBACd,UAAU;AAAA,kBACV;AAAA,gBACF,CAAC;AAAA,cACH,OAAO;AACL,uBAAO,IAAI,IAAI;AAAA,cACjB;AAAA,YACF;AACA,kBAAM,UAAU,WAAW;AACzB,uBAAS,WAAW;AAClB,oBAAI,SAAS,QAAQ;AACnB,wBAAM,IAAI,UAAU,oCAAsC;AAAA,gBAC5D;AACA,+BAAe,MAAM,OAAO,MAAM,UAAU,CAAC;AAC7C,oBAAI,UAAU,SAAS,GAAG;AACxB,wBAAM,IAAI,UAAU,mCAAmC;AAAA,gBACzD;AAAA,cACF;AACA,6BAAe,SAAS,WAAW,UAAU,SAAS,KAAK;AACzD,8BAAc,MAAM,QAAQ;AAC5B,oBAAI,CAAClE,UAAS,GAAG,GAAG;AAClB,yBAAO;AAAA,gBACT;AACA,oBAAI,QAAQ,IAAI,KAAK,GAAG;AACxB,oBAAI,SAAS,MAAM,CAAC,MAAM,KAAK;AAC7B,yBAAO,IAAI,KAAK,GAAG;AACnB,yBAAO;AAAA,gBACT;AACA,uBAAO;AAAA,cACT,CAAC;AACD,6BAAe,SAAS,WAAW,OAAO,SAAS,KAAK;AACtD,8BAAc,MAAM,KAAK;AACzB,oBAAI,CAACA,UAAS,GAAG,GAAG;AAClB,yBAAO;AAAA,gBACT;AACA,oBAAI,QAAQ,IAAI,KAAK,GAAG;AACxB,oBAAI,SAAS,MAAM,CAAC,MAAM,KAAK;AAC7B,yBAAO,MAAM,CAAC;AAAA,gBAChB;AACA,uBAAO;AAAA,cACT,CAAC;AACD,6BAAe,SAAS,WAAW,OAAO,SAAS,KAAK;AACtD,8BAAc,MAAM,KAAK;AACzB,oBAAI,CAACA,UAAS,GAAG,GAAG;AAClB,yBAAO;AAAA,gBACT;AACA,oBAAI,QAAQ,IAAI,KAAK,GAAG;AACxB,oBAAI,SAAS,MAAM,CAAC,MAAM,KAAK;AAC7B,yBAAO;AAAA,gBACT;AACA,uBAAO;AAAA,cACT,CAAC;AACD,6BAAe,SAAS,WAAW,OAAO,SAAS,KAAK,OAAO;AAC7D,8BAAc,MAAM,KAAK;AACzB,oBAAI,CAACA,UAAS,GAAG,GAAG;AAClB,wBAAM,IAAI,UAAU,oCAAoC;AAAA,gBAC1D;AACA,oBAAI,QAAQ,IAAI,KAAK,GAAG;AACxB,oBAAI,SAAS,MAAM,CAAC,MAAM,KAAK;AAC7B,wBAAM,CAAC,IAAI;AACX,yBAAO;AAAA,gBACT;AACA,+BAAe,KAAK,KAAK,KAAK,CAAE,KAAK,KAAM,CAAC;AAC5C,uBAAO;AAAA,cACT,CAAC;AACD,uBAAS,cAAc+C,IAAG,YAAY;AACpC,oBAAI,CAAC/C,UAAS+C,EAAC,KAAK,CAACxC,iBAAgB,KAAKwC,IAAG,KAAK,GAAG;AACnD,wBAAM,IAAI,UAAU,aAAa,6CAA6C,QAAQA,EAAC,CAAC;AAAA,gBAC1F;AAAA,cACF;AACA,uBAAS,MAAM,QAAQ;AACrB,uBAAO,SAAS,MAAM,KAAK,IAAI,MAAM,KAAK;AAAA,cAC5C;AACA,uBAAS,OAAO;AACd,uBAAO,KAAK,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;AAAA,cAC7C;AACA,6BAAe,UAAU,aAAa,IAAI;AAC1C,qBAAO;AAAA,YACT,EAAE;AACF,qBAAS/C,UAAS+C,IAAG;AACnB,qBAAO,OAAOA,EAAC,MAAMA;AAAA,YACvB;AAAA,UACF,GAAG,OAAO,SAAS,cAAc,OAAO,OAAOrG,YAAW,cAAcA,UAAS,OAAOC,YAAW,cAAcA,UAASmC,QAAO;AAAA,QACnI,CAAC;AACD,YAAI,cAAc,CAAE;AAAA,UAClB,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO;AAAA,QACT,GAAG;AAAA,UACD,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO;AAAA,QACT,GAAG;AAAA,UACD,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO;AAAA,QACT,GAAG;AAAA,UACD,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,OAAO;AAAA,QACT,CAAE;AACF,YAAIqF,aAAY;AAAA,UACd,aAAa;AAAA,UACb,SAAS,CAAC;AAAA,UACV,cAAc,CAAC;AAAA,UACf,gBAAgB,CAAC;AAAA,UACjB,QAAQ,OAAO,OAAO,CAAE,SAAS,YAAY,WAAW,UAAW,CAAC;AAAA,UACpE,SAAS,OAAO,OAAO;AAAA,YACrB,QAAQ,CAAE,SAAS,OAAQ;AAAA,YAC3B,SAAS;AAAA,UACX,CAAC;AAAA,UACD,YAAY;AAAA,UACZ,YAAY;AAAA,QACd;AACA,oBAAY,QAAQ,SAAS,YAAY;AACvC,cAAI,OAAO,WAAW;AACtB,cAAI,QAAQ,WAAW;AACvB,cAAI,WAAW,WAAW;AAC1B,cAAIC,SAAQ,WAAW;AACvB,UAAAD,WAAU,IAAI,IAAI;AAClB,UAAAA,WAAU,OAAO,OAAO,IAAI;AAC5B,UAAAA,WAAU,OAAO,QAAQ,IAAIC;AAC7B,UAAAD,WAAU,QAAQ,QAAQ,IAAI;AAC9B,UAAAA,WAAU,aAAa,QAAQ,IAAIC;AACnC,UAAAD,WAAU,eAAe,KAAK,IAAIC;AAAA,QACpC,CAAC;AACD,eAAO,OAAOD,WAAU,OAAO;AAC/B,eAAO,OAAOA,WAAU,YAAY;AACpC,eAAO,OAAOA,WAAU,cAAc;AACtC,eAAO,OAAOA,UAAS;AACvB,YAAI,oBAAoBA;AACxB,iBAASE,OAAM;AACb,eAAK,OAAO,YAAY,cAAc,cAAc,QAAQ,OAAO,OAAO,YAAY,QAAQ,KAAK;AACjG,qBAAS,UAAU,MAAM,KAAK,QAAQ,KAAK,SAAS,SAAS;AAAA,UAC/D;AAAA,QACF;AACA,YAAI,cAAcA;AAClB,YAAI,kBAAkB;AACtB,YAAI,sBAAsB,WAAW;AACnC,mBAASC,uBAAsB;AAC7B,4BAAgB,MAAMA,oBAAmB;AACzC,iBAAK,SAAS;AAAA,UAChB;AACA,uBAAaA,sBAAqB,CAAE;AAAA,YAClC,KAAK;AAAA,YACL,OAAO,SAAS,OAAO;AACrB,oBAAM,IAAI,MAAM,gDAAgD;AAAA,YAClE;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,OAAO,SAAS,UAAU;AACxB,oBAAM,IAAI,MAAM,kDAAkD;AAAA,YACpE;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,OAAO,SAAS,SAAS,WAAW;AAClC,kBAAI,YAAY,KAAK,KAAK,OAAO;AACjC,kBAAI,CAAC,WAAW;AACd,uBAAO;AAAA,cACT;AACA,kBAAI,WAAW,MAAM,YAAY;AACjC,sBAAQ,MAAM,YAAY,KAAK,QAAQ,iBAAiB,GAAG,EAAE,QAAQ,QAAQ,KAAK;AAAA,YACpF;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAAS3F,OAAM;AAClB,oBAAM,IAAI,MAAM,iGAAiG;AAAA,YACnH;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAASA,OAAM;AAClB,oBAAM,IAAI,MAAM,qDAAqD;AAAA,YACvE;AAAA,UACF,CAAE,CAAC;AACH,iBAAO2F;AAAA,QACT,EAAE;AACF,YAAI,gCAAgC;AACpC,YAAIC,iBAAgB,CAAC;AACrB,QAAAhG,UAASgG,gBAAe;AAAA,UACtB,WAAW,SAASC,aAAY;AAC9B,mBAAO;AAAA,UACT;AAAA,UACA,WAAW,SAASC,aAAY;AAC9B,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,sBAAsB,SAASC,wBAAuB;AACpD,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,SAASC,gBAAe;AACpC,mBAAO;AAAA,UACT;AAAA,UACA,QAAQ,SAASC,UAAS;AACxB,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,OAAO,SAASC,SAAQ;AACtB,mBAAOC;AAAA,UACT;AAAA,UACA,SAAS,SAASC,WAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,0BAA0B,SAASC,4BAA2B;AAC5D,mBAAO;AAAA,UACT;AAAA,UACA,UAAU,SAASC,YAAW;AAC5B,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAAS,kBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,WAAW,SAAS,YAAY;AAC9B,mBAAO;AAAA,UACT;AAAA,UACA,WAAW,SAASC,aAAY;AAC9B,mBAAO;AAAA,UACT;AAAA,UACA,gBAAgB,SAASC,kBAAiB;AACxC,mBAAO;AAAA,UACT;AAAA,UACA,gBAAgB,SAASC,kBAAiB;AACxC,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,oBAAoB,SAASC,sBAAqB;AAChD,mBAAO;AAAA,UACT;AAAA,UACA,QAAQ,SAASC,UAAS;AACxB,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,SAASC,gBAAe;AACpC,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAAS,cAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,gBAAgB,SAASC,kBAAiB;AACxC,mBAAO;AAAA,UACT;AAAA,UACA,kBAAkB,SAASC,oBAAmB;AAC5C,mBAAO;AAAA,UACT;AAAA,UACA,mBAAmB,SAASC,qBAAoB;AAC9C,mBAAO;AAAA,UACT;AAAA,UACA,mBAAmB,SAASC,qBAAoB;AAC9C,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,kBAAkB,SAAS,mBAAmB;AAC5C,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,SAASC,WAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,WAAW,SAASC,aAAY;AAC9B,mBAAO;AAAA,UACT;AAAA,UACA,gBAAgB,SAASC,kBAAiB;AACxC,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAAS,cAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAAS,kBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,mBAAmB,SAASC,qBAAoB;AAC9C,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,SAAS,eAAe;AACpC,mBAAO;AAAA,UACT;AAAA,UACA,sBAAsB,SAASC,wBAAuB;AACpD,mBAAO;AAAA,UACT;AAAA,UACA,UAAU,SAASC,YAAW;AAC5B,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,UAAU,SAASC,YAAW;AAC5B,mBAAO;AAAA,UACT;AAAA,UACA,eAAe,SAASC,iBAAgB;AACtC,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,SAASC,gBAAe;AACpC,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,SAASC,WAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,SAASC,WAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,mBAAmB,SAAS,oBAAoB;AAC9C,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,SAAS,UAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,SAASC,gBAAe;AACpC,mBAAO;AAAA,UACT;AAAA,UACA,YAAY,SAASC,cAAa;AAChC,mBAAO;AAAA,UACT;AAAA,UACA,4BAA4B,SAASC,8BAA6B;AAChE,mBAAO;AAAA,UACT;AAAA,UACA,2BAA2B,SAASC,6BAA4B;AAC9D,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,kBAAkB,SAASC,oBAAmB;AAC5C,mBAAO;AAAA,UACT;AAAA,UACA,4BAA4B,SAAS,6BAA6B;AAChE,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,SAASC,WAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,SAASC,gBAAe;AACpC,mBAAO;AAAA,UACT;AAAA,UACA,cAAc,SAASC,gBAAe;AACpC,mBAAO;AAAA,UACT;AAAA,UACA,gBAAgB,SAASC,kBAAiB;AACxC,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,kBAAkB,SAASC,oBAAmB;AAC5C,mBAAO;AAAA,UACT;AAAA,UACA,wBAAwB,SAASC,0BAAyB;AACxD,mBAAO;AAAA,UACT;AAAA,UACA,OAAO,SAASC,SAAQ;AACtB,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAAS,cAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,eAAe,SAASC,iBAAgB;AACtC,mBAAO;AAAA,UACT;AAAA,UACA,QAAQ,SAASC,UAAS;AACxB,mBAAOC;AAAA,UACT;AAAA,UACA,oBAAoB,SAASC,sBAAqB;AAChD,mBAAO;AAAA,UACT;AAAA,UACA,gBAAgB,SAASC,kBAAiB;AACxC,mBAAO;AAAA,UACT;AAAA,UACA,eAAe,SAAS,gBAAgB;AACtC,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,SAASC,WAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,WAAW,SAASC,aAAY;AAC9B,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,MAAM,SAASC,QAAO;AACpB,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,YAAY,SAAS,aAAa;AAChC,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,aAAa,OAAO,OAAO,CAAE,aAAa,cAAc,kBAAkB,eAAe,aAAa,UAAW,CAAC;AACtH,iBAAS,iBAAiB,MAAM;AAC9B,cAAI,QAAQ,KAAK,OAAO,YAAY,KAAK,WAAW,UAAU,KAAK,SAAS,YAAY,KAAK,WAAW,YAAY,KAAK;AACzH,cAAI,QAAQ;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW,CAAC,CAAC;AAAA,YACb,QAAQ,UAAU;AAAA,UACpB;AACA,cAAI,mBAAmB,OAAO;AAC5B,kBAAM,QAAQ;AAAA,cACZ,MAAM,QAAQ;AAAA,cACd,SAAS,QAAQ;AAAA,cACjB,OAAO,QAAQ;AAAA,YACjB;AAAA,UACF,OAAO;AACL,kBAAM,UAAU;AAAA,UAClB;AACA,iBAAO,KAAK,UAAU,KAAK;AAAA,QAC7B;AACA,iBAAS,aAAa,YAAY;AAChC,cAAI;AACJ,cAAI;AACF,oBAAQ,KAAK,MAAM,UAAU;AAAA,UAC/B,SAASrL,IAAG;AACV;AAAA,UACF;AACA,cAAI,CAAC,qBAAqB,KAAK,GAAG;AAChC;AAAA,UACF;AACA,cAAI,QAAQ,OAAO,QAAQ,MAAM,OAAO,YAAY,MAAM,WAAW,YAAY,MAAM,WAAW,YAAY,MAAM;AACpH,cAAI,UAAU,QAAQ,MAAM,KAAK,MAAM,WAAW,iBAAiB,MAAM,KAAK,IAAI,MAAM;AACxF,iBAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW,CAAC,CAAC;AAAA,UACf;AAAA,QACF;AACA,iBAAS,qBAAqB,eAAe;AAC3C,iBAAO,QAAQ,aAAa,MAAM,YAAY,OAAO,cAAc,cAAc,YAAY,cAAc,WAAW,UAAU;AAAA,QAClI;AACA,iBAAS,iBAAiB,OAAO;AAC/B,cAAI,MAAM,MAAM,WAAW;AAC3B,cAAI,YAAY,WAAW,SAAS,MAAM,IAAI,IAAI,MAAM,OAAO;AAC/D,cAAI,iBAAiBX,QAAO,SAAS,KAAK;AAC1C,cAAI,MAAM,OAAO;AACf,mBAAO,OAAO,MAAM,MAAM,QAAQ,MAAM,SAAS,EAAE;AAAA,UACrD;AACA,iBAAO,IAAI,eAAe,GAAG;AAAA,QAC/B;AACA,iBAAS,YAAY;AACnB,cAAI,cAAc;AAClB,cAAIiM,WAAU;AACd,cAAI,OAAO,QAAQ,eAAe,IAAI,UAAU,IAAI,OAAO,aAAa;AACtE,0BAAc,IAAI,OAAO;AAAA,UAC3B;AACA,cAAI,OAAO,QAAQ,aAAa;AAC9B,YAAAA,WAAU,IAAI;AAAA,UAChB;AACA,iBAAO,cAAc,MAAMA;AAAA,QAC7B;AACA,iBAAS,OAAO,MAAM,SAAS;AAC7B,cAAI,CAAC,MAAM;AACT,kBAAM,IAAI,MAAM,OAAO;AAAA,UACzB;AAAA,QACF;AACA,YAAI,iBAAiB;AACrB,iBAAS,qBAAqB,KAAK;AACjC,+BAAqB,GAAG;AACxB,yBAAejM,QAAO,WAAW,KAAK,mDAAmD;AAAA,QAC3F;AACA,iBAAS,oBAAoB,KAAK;AAChC,+BAAqB,GAAG;AACxB,yBAAe,IAAI,WAAWA,SAAQ,0DAA0D;AAAA,QAClG;AACA,iBAAS,qBAAqB,KAAK;AACjC,yBAAeA,YAAW,KAAK,8CAA8C;AAAA,QAC/E;AACA,YAAI,WAAW,CAAC;AAChB,iBAAS,kBAAkB,WAAW,cAAc;AAClD,cAAI,eAAe,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACvF,yBAAe,CAAC,SAAS,SAAS,GAAG,yDAAyD;AAC9F,mBAAS,SAAS,IAAI;AAAA,YACpB;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,iBAAS,gBAAgB,OAAO;AAC9B,iBAAO,SAAS,KAAK;AAAA,QACvB;AACA,iBAAS,mBAAmB,WAAW;AACrC,iBAAO,SAAS,SAAS;AAAA,QAC3B;AACA,YAAI;AACJ,YAAI;AACJ,YAAI,UAAUA,QAAO,UAAUA,QAAO;AACtC,YAAI,CAAC,QAAQ,WAAW,QAAQ,iBAAiB;AAC/C,cAAI,SAAS,IAAI,WAAW,EAAE;AAC9B,iBAAO,SAAS,YAAY;AAC1B,oBAAQ,gBAAgB,MAAM;AAC9B,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI;AACF,cAAI,CAAC,MAAM;AACT,gBAAI,aAAa,UAAQ,QAAQ;AACjC,mBAAO,SAASkM,QAAO;AACrB,qBAAO,WAAW,YAAY,EAAE;AAAA,YAClC;AAAA,UACF;AAAA,QACF,SAASvL,IAAG;AAAA,QAAC;AACb,YAAI,CAAC,MAAM;AACT,cAAI,QAAQ,IAAI,MAAM,EAAE;AACxB,iBAAO,SAASuL,QAAO;AACrB,qBAAS5L,KAAI,GAAG+G,IAAG/G,KAAI,IAAIA,MAAK;AAC9B,mBAAKA,KAAI,OAAO,GAAG;AACjB,gBAAA+G,KAAI,KAAK,OAAO,IAAI;AAAA,cACtB;AACA,oBAAM/G,EAAC,IAAI+G,SAAQ/G,KAAI,MAAM,KAAK;AAAA,YACpC;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,cAAc,OAAON,QAAO,UAAU,aAAaA,QAAO,SAAS;AACvE,YAAI,aAAa,CAAC;AAClB,YAAI,aAAa,CAAC;AAClB,iBAASM,KAAI,GAAGA,KAAI,KAAKA,MAAK;AAC5B,qBAAWA,EAAC,KAAKA,KAAI,KAAK,SAAS,EAAE,EAAE,OAAO,CAAC;AAC/C,qBAAW,WAAWA,EAAC,CAAC,IAAIA;AAAA,QAC9B;AACA,iBAAS6L,OAAMlL,IAAG,KAAK,QAAQ;AAC7B,cAAIX,KAAI,OAAO,UAAU,GAAG,KAAK;AACjC,gBAAM,OAAO,CAAC;AACd,UAAAW,GAAE,YAAY,EAAE,QAAQ,gBAAgB,SAAS,KAAK;AACpD,gBAAI,KAAK,IAAI;AACX,kBAAIX,KAAI,IAAI,IAAI,WAAW,GAAG;AAAA,YAChC;AAAA,UACF,CAAC;AACD,iBAAO,KAAK,IAAI;AACd,gBAAIA,KAAI,IAAI,IAAI;AAAA,UAClB;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,QAAQ,KAAK,QAAQ;AAC5B,cAAIA,KAAI,UAAU,GAAG,MAAM;AAC3B,iBAAO,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,MAAM,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,MAAM,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,MAAM,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,MAAM,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC,IAAI,IAAI,IAAIA,IAAG,CAAC;AAAA,QAC7R;AACA,YAAI,aAAa,KAAK;AACtB,YAAI,UAAU,CAAE,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,CAAE;AAC7G,YAAI,aAAa,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK;AACvD,YAAI,aAAa;AACjB,YAAI,aAAa;AACjB,iBAAS,GAAG,SAAS,KAAK,QAAQ;AAChC,cAAIA,KAAI,OAAO,UAAU;AACzB,cAAIuG,KAAI,OAAO,CAAC;AAChB,oBAAU,WAAW,CAAC;AACtB,cAAI,WAAW,QAAQ,YAAY,OAAO,QAAQ,WAAW;AAC7D,cAAI,QAAQ,QAAQ,SAAS,OAAO,QAAQ,SAAQ,oBAAI,KAAK,GAAE,QAAQ;AACvE,cAAI,QAAQ,QAAQ,SAAS,OAAO,QAAQ,QAAQ,aAAa;AACjE,cAAIuF,MAAK,QAAQ,cAAc,QAAQ,cAAc;AACrD,cAAIA,MAAK,KAAK,QAAQ,YAAY,MAAM;AACtC,uBAAW,WAAW,IAAI;AAAA,UAC5B;AACA,eAAKA,MAAK,KAAK,QAAQ,eAAe,QAAQ,SAAS,MAAM;AAC3D,oBAAQ;AAAA,UACV;AACA,cAAI,SAAS,KAAK;AAChB,kBAAM,IAAI,MAAM,iDAAkD;AAAA,UACpE;AACA,uBAAa;AACb,uBAAa;AACb,sBAAY;AACZ,mBAAS;AACT,cAAI,OAAO,QAAQ,aAAa,MAAM,SAAS;AAC/C,UAAAvF,GAAEvG,IAAG,IAAI,OAAO,KAAK;AACrB,UAAAuG,GAAEvG,IAAG,IAAI,OAAO,KAAK;AACrB,UAAAuG,GAAEvG,IAAG,IAAI,OAAO,IAAI;AACpB,UAAAuG,GAAEvG,IAAG,IAAI,KAAK;AACd,cAAI,MAAM,QAAQ,aAAa,MAAM;AACrC,UAAAuG,GAAEvG,IAAG,IAAI,QAAQ,IAAI;AACrB,UAAAuG,GAAEvG,IAAG,IAAI,MAAM;AACf,UAAAuG,GAAEvG,IAAG,IAAI,QAAQ,KAAK,KAAK;AAC3B,UAAAuG,GAAEvG,IAAG,IAAI,QAAQ,KAAK;AACtB,UAAAuG,GAAEvG,IAAG,IAAI,aAAa,IAAI;AAC1B,UAAAuG,GAAEvG,IAAG,IAAI,WAAW;AACpB,cAAI,OAAO,QAAQ,QAAQ;AAC3B,mBAASU,KAAI,GAAGA,KAAI,GAAGA,MAAK;AAC1B,YAAA6F,GAAEvG,KAAIU,EAAC,IAAI,KAAKA,EAAC;AAAA,UACnB;AACA,iBAAO,MAAM,MAAM,QAAQ6F,EAAC;AAAA,QAC9B;AACA,iBAAS,GAAG,SAAS,KAAK,QAAQ;AAChC,cAAIvG,KAAI,OAAO,UAAU;AACzB,cAAI,OAAO,WAAW,UAAU;AAC9B,kBAAM,WAAW,WAAW,IAAI,YAAY,EAAE,IAAI;AAClD,sBAAU;AAAA,UACZ;AACA,oBAAU,WAAW,CAAC;AACtB,cAAI,OAAO,QAAQ,WAAW,QAAQ,OAAO,MAAM;AACnD,eAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK;AACzB,eAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK;AACzB,cAAI,KAAK;AACP,qBAAS,KAAK,GAAG,KAAK,IAAI,MAAM;AAC9B,kBAAIA,KAAI,EAAE,IAAI,KAAK,EAAE;AAAA,YACvB;AAAA,UACF;AACA,iBAAO,OAAO,QAAQ,IAAI;AAAA,QAC5B;AACA,eAAO;AACP,aAAK,KAAK;AACV,aAAK,KAAK;AACV,aAAK,QAAQ6L;AACb,aAAK,UAAU;AACf,aAAK,cAAc;AACnB,YAAI,QAAQ,GAAG;AACf,YAAI,eAAe;AACnB,YAAI,aAAa,CAAC;AAClB,iBAAS,kBAAkB;AACzB,cAAI,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,OAAO,GAAG,CAAC;AAC5C,cAAI,WAAW,SAAS,KAAK,GAAG;AAC9B,mBAAO,gBAAgB;AAAA,UACzB;AACA,qBAAW,KAAK,KAAK;AACrB,iBAAO;AAAA,QACT;AACA,iBAAS,aAAa,OAAO;AAC3B,cAAI,WAAW,SAAS,KAAK,GAAG;AAC9B,mBAAO;AAAA,UACT;AACA,qBAAW,KAAK,KAAK;AACrB,iBAAO;AAAA,QACT;AACA,iBAAS,YAAY,KAAK,OAAO,cAAc,cAAc;AAC3D,cAAI,OAAO,iBAAiB,YAAY;AACtC,8BAAkB,MAAM,WAAW,cAAc,YAAY;AAAA,UAC/D;AACA,yBAAe,qBAAqB,GAAG,IAAI,oBAAoB,GAAG;AAClE,cAAI,MAAM,mBAAmB,SAAS,CAAC,cAAc;AACnD,gBAAI,IAAI,MAAM,OAAO;AACrB,mBAAO;AAAA,UACT;AACA,cAAI,aAAa,iBAAiB,SAAS;AAAA,YACzC,WAAW,gBAAgB;AAAA,UAC7B,GAAG,KAAK,CAAC;AACT,cAAI,iBAAiB,IAAI,OAAO;AAChC,cAAI,CAAC,kBAAkB,CAAC,eAAe,QAAQ;AAC7C,mBAAO;AAAA,UACT;AACA,yBAAe,QAAQ,SAASE,SAAQ;AACtC,gBAAI;AACF,kBAAI,YAAY,YAAYA,OAAM;AAAA,YACpC,SAAS,MAAM;AACb,kBAAI,gBAAgB,IAAI,cAAc;AACpC,sBAAM,IAAI,MAAM,yBAAyB,OAAOA,SAAQ,yBAAyB,CAAC;AAAA,cACpF;AACA,oBAAM;AAAA,YACR;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACT;AACA,iBAAS,aAAa,KAAK,OAAO,WAAW;AAC3C,cAAI,CAAC,IAAI,WAAWrM,SAAQ;AAC1B,mBAAO,IAAI,IAAI,KAAK;AAAA,UACtB;AACA,cAAI;AACF,wBAAY,KAAK;AAAA,cACf,OAAO;AAAA,cACP;AAAA,cACA,SAAS;AAAA,cACT,WAAW,gBAAgB;AAAA,cAC3B,WAAW;AAAA,YACb,GAAG,IAAI;AAAA,UACT,SAAS,MAAM;AACb,mBAAO,IAAI,IAAI,IAAI;AAAA,UACrB;AAAA,QACF;AACA,iBAAS,gBAAgB,KAAK,WAAW;AACvC,cAAI,eAAe,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACvF,iBAAO,SAAS,QAAQ,SAAS,WAAW,cAAc;AACxD,gBAAI,QAAQ;AAAA,cACV;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,wBAAY,KAAK,OAAO,cAAc,YAAY;AAAA,UACpD;AAAA,QACF;AACA,iBAAS,gBAAgBqM,SAAQ;AAC/B,cAAI,iBAAiB,IAAI,OAAO;AAChC,iBAAO,kBAAkB,eAAe,SAAS,GAAG,KAAK,eAAe,SAASA,OAAM;AAAA,QACzF;AACA,iBAAS,eAAe,OAAO,cAAc;AAC3C,cAAIA,UAAS,MAAM,QAAQ,aAAa,MAAM,MAAM,MAAM,MAAM;AAChE,cAAI,QAAQ,aAAa,UAAU,KAAK,CAAC;AACzC,cAAI,YAAY,MAAM,WAAW,UAAU,MAAM,SAAS,YAAY,MAAM;AAC5E,cAAI,CAAC,gBAAgBA,OAAM,KAAK,CAAC,aAAa,SAAS,GAAG;AACxD;AAAA,UACF;AACA,cAAI,mBAAmB,SAAS,IAAI,WAAWrM,SAAQ;AACrD,gBAAI,IAAI,OAAO;AACf,mBAAO;AAAA,UACT;AACA,cAAI;AACF,gBAAI,MAAM,OAAO;AACf,kBAAI,YAAY,gBAAgB,KAAK,SAAS;AAC9C,mCAAqB,GAAG;AACxB,2BAAa,OAAO,SAAS;AAAA,YAC/B,OAAO;AACL,+BAAiB,KAAK,KAAK;AAAA,YAC7B;AAAA,UACF,SAAS,OAAO;AACd,yBAAa,KAAK,OAAO,SAAS;AAAA,UACpC;AAAA,QACF;AACA,iBAAS,iBAAiB,KAAK,OAAO;AACpC,cAAI,YAAY,MAAM,WAAW,UAAU,MAAM,SAAS,YAAY,MAAM;AAC5E,cAAI,QAAQ,gBAAgB,SAAS,KAAK,CAAC,GAAG,eAAe,MAAM,cAAc,eAAe,MAAM;AACtG,cAAI,CAAC,cAAc;AACjB;AAAA,UACF;AACA,yBAAe,qBAAqB,GAAG,IAAI,oBAAoB,GAAG;AAClE,cAAI,YAAY,gBAAgB,KAAK,WAAW,YAAY;AAC5D,cAAI,CAAC,aAAa,WAAW;AAC3B,+BAAmB,SAAS;AAAA,UAC9B;AACA,cAAI;AACF,yBAAa,SAAS,WAAW,SAAS;AAAA,UAC5C,SAAS,OAAO;AACd,gBAAI,IAAI,KAAK;AACb,sBAAU,OAAO,SAAS;AAAA,UAC5B;AAAA,QACF;AACA,YAAI,iBAAiB;AAAA,UACnB,MAAM,SAAS,KAAK,cAAc;AAChC,gBAAI,OAAOA,QAAO,qBAAqB,YAAY;AACjD;AAAA,YACF;AACA,gBAAI,UAAU,SAASsM,SAAQ,cAAc;AAC3C,6BAAe,cAAc,YAAY;AAAA,YAC3C;AACA,YAAAtM,QAAO,iBAAiB,WAAW,SAAS,KAAK;AACjD,mBAAO,WAAW;AAChB,cAAAA,QAAO,oBAAoB,WAAW,SAAS,KAAK;AAAA,YACtD;AAAA,UACF;AAAA,UACA,MAAM,SAAS,KAAK,KAAK,OAAO,cAAc;AAC5C,gBAAI,OAAOA,QAAO,qBAAqB,YAAY;AACjD,qBAAO;AAAA,YACT;AACA,mBAAO,YAAY,KAAK,OAAO,OAAO,YAAY;AAAA,UACpD;AAAA,QACF;AACA,iBAAS,yBAAyB,cAAc;AAC9C,uBAAa,gBAAgB,cAAc;AAAA,QAC7C;AACA,iBAAS,UAAUqD,MAAK,QAAQ,SAAS;AACvC,mBAAS,OAAO,MAAM;AACtB,cAAI,SAAS;AACX,mBAAO,KAAK,OAAO;AAAA,UACrB;AACA,cAAI,UAAU,OAAO,IAAI,SAAS,KAAK;AACrC,mBAAOA,KAAI,QAAQ,GAAG;AAAA,UACxB,CAAC,EAAE,KAAK;AACR,iBAAOA,KAAI,QAAQ,IAAI,CAAC;AAAA,QAC1B;AACA,YAAI,oBAAoB;AACxB,YAAI,gBAAgB,kBAAkB,eAAe,YAAY,kBAAkB;AACnF,YAAI,WAAW,CAAC;AAChB,iBAAS,kBAAkB,SAAS,IAAI;AACxC,iBAAS,kBAAkB,aAAa,IAAI;AAC5C,iBAAS,kBAAkB,SAAS,IAAI;AACxC,YAAI,aAAa,CAAE,OAAO,OAAO,MAAO;AACxC,iBAAS,WAAW,KAAK,SAAS;AAChC,iBAAO,WAAW,OAAO,SAAS,KAAKW,OAAM;AAC3C,gBAAIA,KAAI,KAAK,IAAIA,KAAI,KAAK,CAAC,GAAG,IAAI,SAAS,KAAK;AAC9C,qBAAO,QAAQ,KAAKA,KAAI;AAAA,YAC1B,CAAC;AACD,mBAAO;AAAA,UACT,GAAG,CAAC,CAAC;AAAA,QACP;AACA,iBAAS,gBAAgB,iBAAiB;AACxC,cAAI,aAAa,OAAO,OAAO,CAAC,GAAG,eAAe;AAClD,qBAAW,YAAY,SAAS,QAAQA,OAAM;AAC5C,gBAAI1D,KAAI,OAAO,OAAO,WAAW,cAAc,KAAK,SAAS,QAAQ,OAAO,MAAM;AAClF,mBAAO,WAAWA,OAAM,KAAKA,KAAI,kBAAkB;AACnD,gBAAI0D,UAAS,QAAQ;AACnB,kBAAI,OAAO,aAAa,kBAAkB,WAAW;AACnD,uBAAO,WAAW,kBAAkB;AAAA,cACtC,WAAW,OAAO,aAAa,kBAAkB,WAAW;AAC1D,uBAAO,WAAW,kBAAkB;AAAA,cACtC;AAAA,YACF;AAAA,UACF,CAAC;AACD,cAAI,aAAa;AAAA,YACf,KAAK,WAAW,IAAI,OAAO,SAASuI,IAAG1F,IAAG;AACxC,qBAAO,KAAK,IAAI0F,IAAG1F,GAAE,QAAQ;AAAA,YAC/B,GAAG,CAAC;AAAA,YACJ,MAAM,WAAW,KAAK,OAAO,SAAS0F,IAAG1F,IAAG;AAC1C,qBAAO,KAAK,IAAI0F,IAAG1F,GAAE,QAAQ;AAAA,YAC/B,GAAG,CAAC;AAAA,YACJ,KAAK,WAAW,IAAI,OAAO,SAAS0F,IAAG1F,IAAG;AACxC,qBAAO,KAAK,IAAI0F,IAAG1F,GAAE,QAAQ;AAAA,YAC/B,GAAG,CAAC,IAAI;AAAA,UACV;AACA,qBAAW,WAAW,KAAK,IAAI,WAAW,KAAK,WAAW,MAAM,WAAW,GAAG;AAC9E,cAAI2F,WAAU,CAAC;AACf,qBAAW,QAAQ,SAASxI,OAAM;AAChC,uBAAWA,KAAI,IAAI,WAAWA,KAAI,EAAE,OAAO,SAAS,QAAQ;AAC1D,qBAAO,OAAO,aAAa,WAAW,YAAY,OAAO,aAAa,WAAWA,KAAI;AAAA,YACvF,CAAC;AACD,uBAAWA,KAAI,EAAE,QAAQ,SAAS,QAAQ;AACxC,qBAAOwI,SAAQ,KAAK,OAAO,MAAM;AAAA,YACnC,CAAC;AAAA,UACH,CAAC;AACD,cAAI,CAAE,eAAe,SAAU,EAAE,SAAS,WAAW,QAAQ,GAAG;AAC9D,uBAAW,SAAS,kBAAkB,kBAAkB,QAAQA,QAAO;AAAA,UACzE,OAAO;AACL,uBAAW,SAAS;AAAA,UACtB;AACA,qBAAW,YAAY,SAASnK,IAAG;AACjC,mBAAOA,GAAE;AACT,mBAAOA,GAAE;AAAA,UACX,CAAC;AACD,qBAAW,SAAS,kBAAkB,QAAQ,WAAW,QAAQ;AACjE,iBAAO,WAAW;AAClB,iBAAO;AAAA,QACT;AACA,YAAI,2BAA2B;AAC/B,iBAAS,mBAAmB,YAAY;AACtC,cAAI,QAAQ,IAAI,OAAO,MAAM,KAAK,SAAS,OAAO;AAChD,mBAAO,MAAM,OAAO,WAAW;AAAA,UACjC,CAAC;AACD,cAAI,SAAS,MAAM,QAAQ;AACzB,uBAAW,MAAM,QAAQ,SAAS,MAAM;AACtC,eAAE,OAAO,OAAO,MAAO,EAAE,QAAQ,SAAS,WAAW;AACnD,iBAAC,KAAK,SAAS,KAAK,CAAC,GAAG,QAAQ,SAAS,aAAa;AACpD,8BAAY,SAAS,MAAM;AAAA,gBAC7B,CAAC;AAAA,cACH,CAAC;AAAA,YACH,CAAC;AAAA,UACH;AACA,iBAAO,OAAO,YAAY,+BAA+B,WAAW,KAAK,CAAC;AAC1E,iBAAO,WAAW;AAClB,iBAAO;AAAA,QACT;AACA,YAAI,0BAA0B;AAC9B,iBAAS,qBAAqB,aAAa;AACzC,cAAI,aAAa,CAAC;AAClB,wBAAc,YAAY,IAAI,SAAS,YAAY;AACjD,gBAAI,WAAW,OAAO,WAAW,OAAO,WAAW,MAAM;AACvD,qBAAO,yBAAyB,UAAU;AAAA,YAC5C,WAAW,MAAM,QAAQ,WAAW,IAAI,GAAG;AACzC,qBAAO,wBAAwB,UAAU;AAAA,YAC3C,OAAO;AACL,oBAAM,IAAI,UAAU,qBAAqB;AAAA,YAC3C;AAAA,UACF,CAAC;AACD,cAAI,eAAe,YAAY,QAAQ;AACrC,gBAAI,aAAa,YAAY,IAAI,SAAS,MAAM;AAC9C,qBAAO,KAAK;AAAA,YACd,CAAC;AACD,uBAAW,SAAS,kBAAkB,kBAAkB,SAAS,YAAY,WAAW,MAAM;AAAA,UAChG,OAAO;AACL,uBAAW,SAAS;AAAA,UACtB;AACA,4BAAkB,aAAa,QAAQ,SAASqF,QAAO;AACrD,mBAAO,WAAWA,MAAK,IAAI,CAAC;AAAA,UAC9B,CAAC;AACD,sBAAY,QAAQ,SAAS,YAAY;AACvC,gBAAI,YAAY,kBAAkB,eAAe,WAAW,MAAM;AAClE,uBAAW,SAAS,EAAE,KAAK,UAAU;AAAA,UACvC,CAAC;AACD,cAAI,cAAc,kBAAkB;AACpC,cAAI,WAAW,WAAW,EAAE,WAAW,GAAG;AACxC,0BAAc,kBAAkB;AAAA,UAClC;AACA,cAAI,WAAW,WAAW,EAAE,SAAS,GAAG;AACtC,gBAAI,aAAa,WAAW,WAAW,EAAE,IAAI,SAAS,SAAS;AAC7D,qBAAO,QAAQ;AAAA,YACjB,CAAC;AACD,uBAAW,SAAS,kBAAkB,kBAAkB,QAAQ,UAAU,KAAK;AAAA,UACjF,OAAO;AACL,uBAAW,SAAS;AAAA,UACtB;AACA,iBAAO;AAAA,QACT;AACA,YAAI,iCAAiC;AACrC,iBAAS,YAAY,cAAc,WAAWA,QAAO;AACnD,cAAI,aAAa,OAAO,OAAO,CAAC,GAAG,SAAS;AAC5C,qBAAW,SAAS,WAAWA,MAAK,KAAK,CAAC,GAAG,OAAO;AACpD,4BAAkB,aAAa,QAAQ,SAAS+E,SAAQ;AACtD,mBAAO,WAAWA,OAAM;AAAA,UAC1B,CAAC;AACD,uBAAa/E,MAAK,EAAE,KAAK,UAAU;AAAA,QACrC;AACA,iBAAS,gBAAgB,SAAS;AAChC,cAAI,eAAe,CAAC;AACpB,4BAAkB,aAAa,QAAQ,SAAS,WAAW;AACzD,mBAAO,aAAa,SAAS,IAAI,CAAC;AAAA,UACpC,CAAC;AACD,kBAAQ,QAAQ,SAAS,WAAW;AAClC,gBAAI,UAAU,OAAO;AACnB,0BAAY,cAAc,WAAW,kBAAkB,cAAc;AAAA,YACvE,WAAW,UAAU,WAAW,kBAAkB,IAAI;AACpD,0BAAY,cAAc,WAAW,kBAAkB,QAAQ;AAAA,YACjE,OAAO;AACL,gCAAkB,aAAa,QAAQ,SAASA,QAAO;AACrD,oBAAI,MAAM,QAAQ,UAAUA,MAAK,CAAC,KAAK,UAAUA,MAAK,EAAE,SAAS,GAAG;AAClE,8BAAY,cAAc,WAAWA,MAAK;AAAA,gBAC5C;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACT;AACA,YAAI,2BAA2B;AAC/B,iBAAS,aAAa,IAAI,QAAQ,QAAQ;AACxC,cAAI,OAAO1H,QAAO,iBAAiB,IAAI,IAAI;AAC3C,cAAI,CAAC,MAAM;AACT,mBAAO;AAAA,UACT;AACA,mBAASM,KAAI,GAAGA,KAAI,OAAO,QAAQ,EAAEA,IAAG;AACtC,gBAAI,MAAM,OAAOA,EAAC;AAClB,gBAAI,KAAK,iBAAiB,IAAI,QAAQ,MAAM,IAAI,OAAO;AACrD,qBAAO;AAAA,YACT;AAAA,UACF;AACA,cAAI,CAAC,GAAG,cAAc,GAAG,SAAS,YAAY,MAAM,OAAO,YAAY,GAAG;AACxE,mBAAO;AAAA,UACT;AACA,iBAAO,aAAa,GAAG,YAAY,QAAQ,MAAM;AAAA,QACnD;AACA,YAAI,yBAAyB;AAC7B,iBAASsL,SAAQ,OAAO;AACtB,iBAAO,MAAM,UAAU,MAAM,KAAK,KAAK;AAAA,QACzC;AACA,YAAI,mBAAmBA;AACvB,iBAAS,eAAe,OAAO;AAC7B,cAAI,SAAS,OAAO,KAAK;AACzB,cAAI,SAAS,OAAO;AACpB,cAAIzI,SAAQ;AACZ,cAAI;AACJ,cAAI,SAAS;AACb,cAAI,gBAAgB,OAAO,WAAW,CAAC;AACvC,iBAAO,EAAEA,SAAQ,QAAQ;AACvB,uBAAW,OAAO,WAAWA,MAAK;AAClC,gBAAI,YAAY,GAAG;AACjB,wBAAU;AACV;AAAA,YACF;AACA,gBAAI,YAAY,KAAK,YAAY,MAAM,YAAY,OAAOA,UAAS,KAAK,YAAY,MAAM,YAAY,MAAMA,UAAS,KAAK,YAAY,MAAM,YAAY,MAAM,iBAAiB,IAAI;AACjL,wBAAU,OAAO,SAAS,SAAS,EAAE,IAAI;AACzC;AAAA,YACF;AACA,gBAAIA,UAAS,KAAK,UAAU,KAAK,YAAY,IAAI;AAC/C,wBAAU,OAAO,OAAO,OAAOA,MAAK;AACpC;AAAA,YACF;AACA,gBAAI,YAAY,OAAO,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,KAAK;AACpK,wBAAU,OAAO,OAAOA,MAAK;AAC7B;AAAA,YACF;AACA,sBAAU,OAAO,OAAO,OAAOA,MAAK;AAAA,UACtC;AACA,iBAAO;AAAA,QACT;AACA,YAAI,0BAA0B;AAC9B,iBAAS,kBAAkB;AACzB,cAAIZ,OAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAC9E,iBAAOA,KAAI,WAAW,MAAMA,KAAI,MAAM,QAAQ,KAAK,IAAI,UAAUA,KAAI,SAAS;AAAA,QAChF;AACA,iBAAS,YAAYA,MAAK,YAAY;AACpC,iBAAO,CAAEA,KAAI,UAAU,GAAG,UAAU,GAAGA,KAAI,UAAU,UAAU,CAAE;AAAA,QACnE;AACA,iBAAS,UAAUA,MAAK;AACtB,iBAAOA,KAAI,QAAQ,QAAQ,EAAE;AAAA,QAC/B;AACA,iBAAS,UAAU,KAAK;AACtB,cAAI,WAAW;AACf,cAAI,WAAW,IAAI,SAAS,IAAI,OAAO,IAAIK,QAAO,IAAI8J,SAAQ,IAAIC,QAAO;AACzE,cAAI,IAAI,SAAS,GAAG,GAAG;AACrB,gBAAI,eAAe,YAAY,KAAK,IAAI,QAAQ,GAAG,CAAC;AACpD,gBAAI,gBAAgB,eAAe,cAAc,CAAC;AAClD,kBAAM,cAAc,CAAC;AACrB,YAAAA,QAAO,cAAc,CAAC;AAAA,UACxB;AACA,cAAI,IAAI,SAAS,GAAG,GAAG;AACrB,gBAAI,gBAAgB,YAAY,KAAK,IAAI,QAAQ,GAAG,CAAC;AACrD,gBAAI,gBAAgB,eAAe,eAAe,CAAC;AACnD,kBAAM,cAAc,CAAC;AACrB,YAAAD,SAAQ,cAAc,CAAC;AAAA,UACzB;AACA,cAAI,IAAI,SAAS,KAAK,GAAG;AACvB,gBAAI,aAAa,IAAI,MAAM,KAAK;AAChC,gBAAI,cAAc,eAAe,YAAY,CAAC;AAC9C,uBAAW,YAAY,CAAC;AACxB,kBAAM,YAAY,CAAC;AACnB,gBAAI,gBAAgB,YAAY,KAAK,IAAI,QAAQ,GAAG,CAAC;AACrD,gBAAI,gBAAgB,eAAe,eAAe,CAAC;AACnD,qBAAS,cAAc,CAAC;AACxB,kBAAM,cAAc,CAAC;AAAA,UACvB,WAAW,IAAI,OAAO,GAAG,CAAC,MAAM,MAAM;AACpC,kBAAM,IAAI,OAAO,CAAC;AAClB,gBAAI,gBAAgB,YAAY,KAAK,IAAI,QAAQ,GAAG,CAAC;AACrD,gBAAI,gBAAgB,eAAe,eAAe,CAAC;AACnD,qBAAS,cAAc,CAAC;AACxB,kBAAM,cAAc,CAAC;AAAA,UACvB;AACA,cAAI,OAAO,OAAO,GAAG,CAAC,MAAM,QAAQ;AAClC,qBAAS,OAAO,OAAO,CAAC;AAAA,UAC1B;AACA,cAAI,UAAU,OAAO,SAAS,GAAG,GAAG;AAClC,gBAAI,gBAAgB,YAAY,QAAQ,OAAO,QAAQ,GAAG,CAAC;AAC3D,gBAAI,iBAAiB,eAAe,eAAe,CAAC;AACpD,qBAAS,eAAe,CAAC;AACzB,mBAAO,eAAe,CAAC;AAAA,UACzB;AACA,UAAA9J,QAAO;AACP,iBAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAMA;AAAA,YACN,OAAO8J;AAAA,YACP,MAAMC;AAAA,UACR;AAAA,QACF;AACA,iBAAS,oBAAoB;AAC3B,cAAI,MAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAC9E,cAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACnF,cAAI,IAAI,UAAU,KAAK,IAAI,OAAO,GAAG,CAAC,MAAM,WAAW,IAAI,OAAO,GAAG,EAAE,MAAM,iBAAiB,IAAI,SAAS,GAAG,GAAG;AAC/G;AAAA,UACF;AACA,cAAI,gBAAgB,QAAQ,eAAe,qBAAqB,QAAQ,WAAW,YAAY,uBAAuB,SAAS,KAAK;AACpI,cAAI,aAAa,UAAU,GAAG,GAAG/J,QAAO,WAAW,MAAM,SAAS,WAAW,QAAQ+J,QAAO,WAAW;AACvG,cAAI,UAAU/J,MAAK,OAAOA,MAAK,OAAO,GAAGA,MAAK,SAAS,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;AAC9E,cAAI+J,OAAM;AACR,gBAAI,YAAY,UAAUA,OAAM,UAAU,WAAW;AACnD,qBAAO,UAAU,UAAUA,KAAI;AAAA,YACjC,WAAW,QAAQ,SAAS,KAAKA,MAAK,SAAS,KAAKA,MAAK,UAAU,WAAW;AAC5E,qBAAO,UAAUA,KAAI;AAAA,YACvB,OAAO;AACL;AAAA,YACF;AAAA,UACF,WAAW,UAAU,OAAO,SAAS,aAAa/J,MAAK,UAAU,GAAG;AAClE,mBAAO,UAAU,SAASA,KAAI;AAAA,UAChC;AACA,cAAIA,UAAS,MAAM,WAAW,UAAU,iBAAiB,WAAW,kBAAkB,SAASA,OAAM,UAAU,WAAW;AACxH,mBAAO,UAAU,SAASA,KAAI;AAAA,UAChC;AACA,cAAI,eAAe,QAAQ,YAAY,GAAG;AAC1C,eAAK,iBAAiB,MAAM,eAAe,OAAO,iBAAiB,MAAM,QAAQ,SAAS,MAAM,QAAQ,UAAU,aAAa,CAAC,QAAQ,MAAM,yBAAyB,KAAK,CAAC,gBAAgB,OAAO,GAAG;AACrM,mBAAO,UAAU,OAAO;AAAA,UAC1B;AAAA,QACF;AACA,YAAI,+BAA+B;AACnC,iBAAS,kBAAkB,MAAM;AAC/B,cAAI,KAAK,sBAAsB5C,QAAO,cAAc;AAClD,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO,KAAK,UAAU,KAAK,EAAE;AAAA,QAC/B;AACA,YAAI,8BAA8B;AAClC,YAAI,kBAAkB,2BAAW;AAC/B,cAAI;AACJ,mBAAS,UAAU,MAAM;AACvB,gBAAImD,QAAO,WAAW,aAAa,CAAE,WAAW,mBAAmB,sBAAsB,yBAAyB,mBAAoB,GAAG,SAAS,WAAW;AAC7J,iBAAKA,SAAQ,GAAGA,SAAQ,QAAQA,UAAS;AACvC,0BAAY,WAAWA,MAAK;AAC5B,kBAAI,KAAK,SAAS,GAAG;AACnB,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AACA,iBAAO,SAAS,MAAM,UAAU;AAC9B,gBAAI,CAAC,UAAU,CAAC,KAAK,MAAM,GAAG;AAC5B,uBAAS,UAAU,IAAI;AAAA,YACzB;AACA,gBAAI,KAAK,MAAM,GAAG;AAChB,qBAAO,KAAK,MAAM,EAAE,QAAQ;AAAA,YAC9B;AACA,mBAAO;AAAA,UACT;AAAA,QACF,EAAE;AACF,YAAI,0BAA0B;AAC9B,iBAAS,QAAQ,KAAK;AACpB,cAAI,CAAC,IAAI,eAAe;AACtB,mBAAO;AAAA,UACT;AACA,iBAAO,IAAI,cAAc,GAAG,EAAE,cAAc;AAAA,QAC9C;AACA,YAAI,mBAAmB;AACvB,iBAAS,kBAAkB,mBAAmB,KAAK;AACjD,cAAI,UAAU,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI,CAAC;AACnF,cAAI,CAAC,KAAK;AACR,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,IAAI,eAAe,IAAI,YAAY,KAAKjD;AAClD,cAAI,IAAI,aAAa,IAAI;AACvB,mBAAO,kBAAkB,KAAK,SAAS,GAAG;AAAA,UAC5C;AACA,cAAI,QAAQ,CAAC;AACb,iBAAO,IAAI,aAAa,IAAI;AAC1B,gBAAI,CAAC,IAAI,MAAM;AACb,qBAAO;AAAA,YACT;AACA,kBAAM,QAAQ;AAAA,cACZ;AAAA,cACA;AAAA,YACF,CAAC;AACD,kBAAM,IAAI;AACV,kBAAM,IAAI,YAAY;AAAA,UACxB;AACA,gBAAM,QAAQ;AAAA,YACZ;AAAA,YACA;AAAA,UACF,CAAC;AACD,iBAAO,MAAM,IAAI,SAAS,OAAO;AAC/B,gBAAI,OAAO,MAAM,KAAK,OAAO,MAAM;AACnC,mBAAO,kBAAkB,MAAM,SAAS,IAAI;AAAA,UAC9C,CAAC;AAAA,QACH;AACA,YAAI,8BAA8B;AAClC,YAAI0M;AACJ,YAAI,oBAAoB,CAAE,SAAS,SAAS,MAAM,YAAY,WAAW,YAAY,YAAY,gBAAgB,iBAAiB,gBAAgB,yBAAyB,aAAa,iBAAiB,iBAAiB,gBAAgB,gBAAgB,eAAgB;AAC1Q,YAAI,qBAAqB;AACzB,iBAAS,sBAAsB,MAAMC,KAAI;AACvC,cAAI,OAAOA,IAAG;AACd,cAAI;AACJ,cAAI,KAAK,QAAQ,MAAM,MAAM,MAAM,KAAK,QAAQ,KAAK,MAAM,IAAI;AAC7D,gBAAI,WAAW,6BAA6B,KAAK,aAAa,IAAI,CAAC;AACnE,gBAAI,UAAU;AACZ,kBAAI,QAAQ,UAAU,QAAQ;AAC9B,kBAAI,OAAO;AACT,uBAAO,wBAAwBA,IAAG,IAAI,IAAI,QAAQ,wBAAwB,KAAK,IAAI;AAAA,cACrF,OAAO;AACL;AAAA,cACF;AAAA,YACF,OAAO;AACL,qBAAO,wBAAwBA,IAAG,IAAI,IAAI,OAAO,wBAAwB,KAAK,aAAa,IAAI,CAAC,IAAI;AAAA,YACtG;AAAA,UACF,OAAO;AACL,mBAAO,wBAAwB,IAAI,IAAI,OAAO,wBAAwBA,IAAG,KAAK,IAAI;AAAA,UACpF;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,UAAUN,IAAG1F,IAAG;AACvB,iBAAO0F,GAAE,QAAQ1F,GAAE,QAAQ,KAAK0F,GAAE,UAAU1F,GAAE,QAAQ,IAAI;AAAA,QAC5D;AACA,iBAAS,iBAAiBgG,KAAI;AAC5B,iBAAO,CAAC,kBAAkB,SAASA,IAAG,IAAI,KAAKA,IAAG,KAAK,QAAQ,GAAG,MAAM,OAAO,CAACA,IAAG,SAASA,IAAG,MAAM,SAAS;AAAA,QAChH;AACA,iBAAS,iBAAiB,SAAS;AACjC,cAAI,QAAQ;AAAA,YACV,SAAS,CAAC;AAAA,YACV,MAAM,CAAC;AAAA,YACP,YAAY,CAAC;AAAA,UACf;AACA,oBAAU,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAE,OAAQ;AACvD,cAAI,eAAe,QAAQ,MAAM;AACjC,cAAI,QAAQ,CAAC;AACb,cAAI,SAAS,SAASC,UAAS;AAC7B,gBAAI,UAAU,aAAa,IAAI;AAC/B,gBAAI,OAAO,QAAQ;AACnB,gBAAI,CAAC,CAAC,KAAK,kBAAkB;AAC3B,kBAAI,MAAM,KAAK;AACf,kBAAI,MAAM,KAAK,GAAG,GAAG;AACnB,sBAAM,KAAK,GAAG;AAAA,cAChB,OAAO;AACL,sBAAM,KAAK,GAAG,IAAI;AAAA,cACpB;AACA,kBAAI,KAAK,WAAW;AAClB,sBAAM,KAAK,KAAK,SAAS,EAAE,QAAQ,SAAS,IAAI;AAC9C,sBAAI,MAAM,wBAAwB,EAAE;AACpC,sBAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,0BAAM,QAAQ,GAAG;AAAA,kBACnB,OAAO;AACL,0BAAM,QAAQ,GAAG,IAAI;AAAA,kBACvB;AAAA,gBACF,CAAC;AAAA,cACH;AACA,kBAAI,KAAK,cAAc,GAAG;AACxB,sBAAM,KAAK,4BAA4B,IAAI,CAAC,EAAE,OAAO,gBAAgB,EAAE,QAAQ,SAASD,KAAI;AAC1F,sBAAI,OAAO,sBAAsB,MAAMA,GAAE;AACzC,sBAAI,MAAM;AACR,wBAAI,MAAM,WAAW,IAAI,GAAG;AAC1B,4BAAM,WAAW,IAAI;AAAA,oBACvB,OAAO;AACL,4BAAM,WAAW,IAAI,IAAI;AAAA,oBAC3B;AAAA,kBACF;AAAA,gBACF,CAAC;AAAA,cACH;AAAA,YACF;AACA,gBAAI,QAAQ,SAAS,QAAQ;AAC3B,oBAAM,KAAK,YAAY;AACvB,6BAAe,QAAQ,SAAS,MAAM;AAAA,YACxC;AACA,mBAAO,CAAC,aAAa,UAAU,MAAM,QAAQ;AAC3C,6BAAe,MAAM,IAAI;AAAA,YAC3B;AAAA,UACF;AACA,iBAAO,aAAa,QAAQ;AAC1B,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,gBAAgB,MAAM,cAAc;AAC3C,cAAI,SAAS,CAAC;AACd,cAAI,YAAY,aAAa;AAC7B,cAAI,UAAU,aAAa;AAC3B,cAAI,KAAK,WAAW;AAClB,kBAAM,KAAK,KAAK,SAAS,EAAE,QAAQ,SAAS,IAAI;AAC9C,kBAAI,MAAM,wBAAwB,EAAE;AACpC,kBAAI,UAAU,GAAG,IAAI,QAAQ,KAAK,QAAQ,GAAG;AAC3C,uBAAO,KAAK;AAAA,kBACV,MAAM;AAAA,kBACN,OAAO,UAAU,GAAG;AAAA,kBACpB,SAAS;AAAA,gBACX,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AACA,iBAAO,OAAO,KAAK,SAAS;AAAA,QAC9B;AACA,iBAAS,kBAAkB,KAAK,UAAU;AACxC,cAAI,WAAW,IAAI,cAAc,MAAM,KAAK,IAAI,WAAW,YAAY,EAAE,KAAK,CAAC;AAC/E,cAAI,sBAAsB,SAAS,KAAK,SAAS,SAAS;AACxD,mBAAO,YAAY,OAAO,wBAAwB,SAAS,QAAQ;AAAA,UACrE,CAAC;AACD,cAAI,qBAAqB;AACvB,gBAAI,WAAW,IAAI,SAAS,QAAQ,GAAG;AACvC,mBAAO,gBAAgB,WAAW;AAAA,UACpC,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AACA,iBAAS,SAAS,KAAK;AACrB,cAAI,CAAC,IAAI,aAAa,IAAI,GAAG;AAC3B;AAAA,UACF;AACA,cAAI,MAAM,IAAI,eAAe,IAAI,YAAY,KAAK3M;AAClD,cAAIoE,MAAK,MAAM,wBAAwB,IAAI,aAAa,IAAI,KAAK,EAAE;AACnE,cAAI,CAACA,IAAG,MAAM,aAAa,KAAK,IAAI,iBAAiBA,GAAE,EAAE,WAAW,GAAG;AACrE,mBAAOA;AAAA,UACT;AAAA,QACF;AACA,iBAAS,gBAAgB,KAAK;AAC5B,cAAI,OAAOsI,WAAU,aAAa;AAChC,YAAAA,SAAQ,iBAAiB1M,SAAQ;AAAA,UACnC;AACA,iBAAO,wBAAwB0M,SAAQ,IAAI,YAAY,IAAI,SAAS,YAAY,CAAC;AAAA,QACnF;AACA,iBAAS,mBAAmB,MAAM,cAAc;AAC9C,cAAI,SAAS,CAAC;AACd,cAAI,UAAU,aAAa;AAC3B,cAAI,UAAU,aAAa;AAC3B,cAAI,KAAK,cAAc,GAAG;AACxB,kBAAM,KAAK,4BAA4B,IAAI,CAAC,EAAE,OAAO,gBAAgB,EAAE,QAAQ,SAASC,KAAI;AAC1F,kBAAI,OAAO,sBAAsB,MAAMA,GAAE;AACzC,kBAAI,QAAQ,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ,GAAG;AAClD,uBAAO,KAAK;AAAA,kBACV,MAAM;AAAA,kBACN,OAAO,QAAQ,IAAI;AAAA,kBACnB,SAAS;AAAA,gBACX,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AACA,iBAAO,OAAO,KAAK,SAAS;AAAA,QAC9B;AACA,iBAAS,4BAA4B,KAAK,cAAc;AACtD,cAAI,WAAW;AACf,cAAI;AACJ,cAAI,OAAO,gBAAgB,KAAK,YAAY;AAC5C,cAAI,OAAO,mBAAmB,KAAK,YAAY;AAC/C,cAAI,KAAK,UAAU,KAAK,CAAC,EAAE,UAAU,GAAG;AACtC,uBAAW,CAAE,KAAK,CAAC,CAAE;AAAA,UACvB,WAAW,KAAK,UAAU,KAAK,CAAC,EAAE,UAAU,GAAG;AAC7C,uBAAW,CAAE,KAAK,CAAC,CAAE;AACrB,uBAAW,gBAAgB,GAAG;AAAA,UAChC,OAAO;AACL,uBAAW,KAAK,OAAO,IAAI;AAC3B,qBAAS,KAAK,SAAS;AACvB,uBAAW,SAAS,MAAM,GAAG,CAAC;AAC9B,gBAAI,CAAC,SAAS,KAAK,SAAS,MAAM;AAChC,qBAAO,KAAK,YAAY;AAAA,YAC1B,CAAC,GAAG;AACF,yBAAW,gBAAgB,GAAG;AAAA,YAChC,OAAO;AACL,uBAAS,KAAK,SAASN,IAAG1F,IAAG;AAC3B,uBAAO0F,GAAE,YAAY1F,GAAE,WAAW0F,GAAE,YAAY,UAAU,KAAKA,GAAE,YAAY1F,GAAE,UAAU,IAAI;AAAA,cAC/F,CAAC;AAAA,YACH;AAAA,UACF;AACA,iBAAO,YAAY,SAAS,OAAO,SAAS,KAAK,MAAM;AACrD,oBAAQ,KAAK,SAAS;AAAA,cACrB,KAAK;AACJ,uBAAO,MAAM,MAAM,KAAK;AAAA,cAEzB,KAAK;AACJ,uBAAO,MAAM,MAAM,KAAK,OAAO;AAAA,YACjC;AACA,mBAAO;AAAA,UACT,GAAG,EAAE;AAAA,QACP;AACA,iBAAS,iBAAiB,KAAK,SAAS,KAAK;AAC3C,cAAI,CAAC,IAAI,eAAe;AACtB,kBAAM,IAAI,MAAM,uCAAuC;AAAA,UACzD;AACA,cAAI,kBAAkB,QAAQ,QAAQ,SAAS,oBAAoB,SAAS,QAAQ;AACpF,cAAI;AACJ,cAAI;AACJ,aAAG;AACD,gBAAI,WAAW,SAAS,GAAG;AAC3B,gBAAI,CAAC,UAAU;AACb,yBAAW,4BAA4B,KAAK,IAAI,aAAa;AAC7D,0BAAY,kBAAkB,KAAK,QAAQ;AAAA,YAC7C;AACA,gBAAI,UAAU;AACZ,yBAAW,WAAW,QAAQ;AAAA,YAChC,OAAO;AACL,yBAAW;AAAA,YACb;AACA,gBAAI,CAAC,SAAS;AACZ,wBAAU,MAAM,KAAK,IAAI,iBAAiB,QAAQ,CAAC;AAAA,YACrD,OAAO;AACL,wBAAU,QAAQ,OAAO,SAAS,MAAM;AACtC,uBAAO,wBAAwB,MAAM,QAAQ;AAAA,cAC/C,CAAC;AAAA,YACH;AACA,kBAAM,IAAI;AAAA,UACZ,UAAU,QAAQ,SAAS,KAAK,WAAW,OAAO,IAAI,aAAa;AACnE,cAAI,QAAQ,WAAW,GAAG;AACxB,mBAAO;AAAA,UACT,WAAW,SAAS,QAAQ,KAAK,MAAM,IAAI;AACzC,mBAAO,UAAU,SAAS,UAAU,SAAS,QAAQ,KAAK,CAAC;AAAA,UAC7D;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,aAAa,KAAK,SAAS;AAClC,iBAAO,4BAA4B,kBAAkB,KAAK,OAAO;AAAA,QACnE;AACA,iBAAS,iBAAiB,MAAM;AAC9B,cAAI,YAAY,KAAK,SAAS,YAAY;AAC1C,cAAI,SAAS,KAAK;AAClB,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA,UACT;AACA,cAAI,WAAW;AACf,cAAI,cAAc,UAAU,cAAc,UAAU,OAAO,SAAS,SAAS,GAAG;AAC9E,gBAAI1D,SAAQ,MAAM,UAAU,QAAQ,KAAK,OAAO,UAAU,IAAI,IAAI;AAClE,uBAAW,cAAc,OAAOA,QAAO,GAAG;AAAA,UAC5C;AACA,iBAAO,iBAAiB,MAAM,IAAI,QAAQ,YAAY;AAAA,QACxD;AACA,iBAAS,aAAa,KAAK,SAAS;AAClC,iBAAO,4BAA4B,kBAAkB,KAAK,OAAO;AAAA,QACnE;AACA,iBAAS,cAAc,MAAMP,OAAM;AACjC,cAAI,SAAS;AACb,cAAI,CAAC,MAAM;AACT,mBAAO,CAAC;AAAA,UACV;AACA,cAAI,CAACA,SAAQ,KAAK,aAAa,GAAG;AAChC,YAAAA,QAAO,CAAE;AAAA,cACP,KAAK;AAAA,YACP,CAAE;AACF,mBAAOA;AAAA,UACT;AACA,UAAAA,QAAOA,SAAQ,CAAC;AAChB,cAAI,KAAK,cAAc,KAAK,eAAe,MAAM;AAC/C,YAAAA,QAAO,cAAc,KAAK,YAAYA,KAAI;AAAA,UAC5C;AACA,cAAI,KAAK,iBAAiB;AACxB,oBAAQ;AACR,sBAAU,KAAK;AACf,eAAG;AACD,kBAAI,QAAQ,aAAa,KAAK,QAAQ,aAAa,KAAK,UAAU;AAChE;AAAA,cACF;AACA,wBAAU,QAAQ;AAAA,YACpB,SAAS;AACT,gBAAI,UAAU,GAAG;AACf,sBAAQ;AAAA,YACV;AAAA,UACF,WAAW,KAAK,aAAa;AAC3B,sBAAU,KAAK;AACf,eAAG;AACD,kBAAI,QAAQ,aAAa,KAAK,QAAQ,aAAa,KAAK,UAAU;AAChE,wBAAQ;AACR,0BAAU;AAAA,cACZ,OAAO;AACL,wBAAQ;AACR,0BAAU,QAAQ;AAAA,cACpB;AAAA,YACF,SAAS;AAAA,UACX;AACA,cAAI,KAAK,aAAa,GAAG;AACvB,gBAAI,UAAU,CAAC;AACf,oBAAQ,MAAM,KAAK,SAAS,YAAY;AACxC,gBAAI0B,MAAK,KAAK,gBAAgB,wBAAwB,KAAK,aAAa,IAAI,CAAC;AAC7E,gBAAIA,OAAM,KAAK,cAAc,iBAAiB,MAAMA,GAAE,EAAE,WAAW,GAAG;AACpE,sBAAQ,KAAK,KAAK,aAAa,IAAI;AAAA,YACrC;AACA,gBAAI,QAAQ,GAAG;AACb,sBAAQ,QAAQ;AAAA,YAClB;AACA,YAAA1B,MAAK,KAAK,OAAO;AAAA,UACnB;AACA,iBAAOA;AAAA,QACT;AACA,iBAAS,cAAc,YAAY;AACjC,iBAAO,WAAW,OAAO,SAASL,MAAK,KAAK;AAC1C,gBAAI,IAAI,IAAI;AACV,qBAAO,IAAI,OAAO,IAAI,KAAK,QAAS,EAAE,OAAO,IAAI,IAAI,IAAK;AAAA,YAC5D,OAAO;AACL,qBAAOA,OAAM,IAAI,OAAO,IAAI,GAAG,KAAK,IAAI,QAAQ,IAAI,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI;AAAA,YACnF;AAAA,UACF,GAAG,EAAE;AAAA,QACP;AACA,iBAAS,SAAS,MAAM;AACtB,cAAI,aAAa,cAAc,IAAI;AACnC,iBAAO,cAAc,UAAU;AAAA,QACjC;AACA,YAAI,oBAAoB;AACxB,iBAASwK,UAASxK,MAAK,WAAW;AAChC,sBAAY,aAAa;AACzB,cAAIA,KAAI,SAAS,WAAW;AAC1B,gBAAIY,SAAQZ,KAAI,QAAQ,GAAG;AAC3B,YAAAA,OAAMA,KAAI,UAAU,GAAGY,SAAQ,CAAC;AAAA,UAClC;AACA,iBAAOZ;AAAA,QACT;AACA,iBAAS,WAAW,SAAS;AAC3B,cAAI,SAAS,QAAQ;AACrB,cAAI,CAAC,UAAU,OAAO,kBAAkB,YAAY;AAClD,qBAAS,IAAI,cAAc,EAAE,kBAAkB,OAAO;AAAA,UACxD;AACA,iBAAOwK,UAAS,UAAU,EAAE;AAAA,QAC9B;AACA,iBAAS,UAAU,SAAS,SAAS,MAAM;AACzC,eAAK,aAAa,CAAC,CAAC;AACpB,eAAK,OAAO,QAAQ,CAAC;AACrB,cAAI,WAAW,QAAQ,eAAe;AACpC,iBAAK,WAAW;AAAA,cACd,QAAQ;AAAA,YACV;AAAA,UACF;AACA,cAAI,IAAI,OAAO,QAAQ;AACrB,iBAAK,SAAS;AAAA,UAChB,WAAW,KAAK,KAAK,WAAW,QAAQ;AACtC,iBAAK,SAAS,KAAK,KAAK;AAAA,UAC1B,OAAO;AACL,iBAAK,SAAS,WAAW,OAAO;AAAA,UAClC;AACA,eAAK,WAAW;AAAA,QAClB;AACA,kBAAU,YAAY;AAAA,UACpB,IAAI,WAAW;AACb,mBAAO,KAAK,KAAK,YAAY,CAAE,aAAa,KAAK,SAAS,KAAK,QAAQ,CAAE;AAAA,UAC3E;AAAA,UACA,IAAI,WAAW;AACb,mBAAO,KAAK,KAAK,YAAY,CAAE,aAAa,KAAK,OAAO,CAAE;AAAA,UAC5D;AAAA,UACA,IAAI,QAAQ;AACV,mBAAO,KAAK,KAAK,SAAS,CAAE,kBAAkB,KAAK,OAAO,CAAE;AAAA,UAC9D;AAAA,UACA,IAAI,UAAU;AACZ,mBAAO,KAAK;AAAA,UACd;AAAA,UACA,IAAI,YAAY;AACd,mBAAO,KAAK;AAAA,UACd;AAAA,UACA,QAAQ,SAAS,SAAS;AACxB,mBAAO;AAAA,cACL,UAAU,KAAK;AAAA,cACf,QAAQ,KAAK;AAAA,cACb,OAAO,KAAK;AAAA,cACZ,UAAU,KAAK;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AACA,kBAAU,YAAY,SAAS,UAAU,MAAM,SAASC,QAAO;AAC7D,cAAI,OAAO,SAAS,CAAC,GAAG,MAAM;AAAA,YAC5B,UAAU,CAAC,EAAE,OAAO,mBAAmBA,OAAM,QAAQ,GAAG,mBAAmB,KAAK,QAAQ,CAAC;AAAA,YACzF,UAAU,CAAC,EAAE,OAAO,mBAAmBA,OAAM,QAAQ,GAAG,mBAAmB,KAAK,QAAQ,CAAC;AAAA,YACzF,OAAO,CAAC,EAAE,OAAO,mBAAmBA,OAAM,KAAK,GAAG,mBAAmB,KAAK,KAAK,CAAC;AAAA,UAClF,CAAC;AACD,iBAAO,IAAI,UAAUA,OAAM,SAAS,SAAS,IAAI;AAAA,QACnD;AACA,YAAI,qBAAqB;AACzB,iBAAS,YAAY,aAAa,SAAS,SAAS,QAAQ;AAC1D,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO,SAAS,QAAQ;AACtB,mBAAK,UAAU;AACf,qBAAO,SAAS,QAAQ;AACtB,oBAAI,kBAAkB,UAAU,OAAO;AACrC,8BAAY,SAAS;AACrB,0BAAQ,WAAW;AAAA,gBACrB,OAAO;AACL,yBAAO,MAAM;AAAA,gBACf;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAM,SAASC,MAAKC,QAAO;AACzB,0BAAY,OAAOA;AAAA,YACrB;AAAA,YACA,cAAc,SAAS,aAAa,OAAO;AACzC,sBAAQ,iBAAiBlN,QAAO,OAAO,CAAE,KAAM,IAAI,iBAAiB,KAAK;AACzE,0BAAY,eAAe,MAAM,IAAI,SAAS,SAAS;AACrD,uBAAO,IAAI,mBAAmB,SAAS,OAAO;AAAA,cAChD,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AACA,YAAI,uBAAuB;AAC3B,iBAAS,MAAM,KAAK;AAClB,cAAImD,QAAO,QAAQ,MAAM;AACzB,cAAI,QAAQ,QAAQ,QAAQ,GAAG,MAAM,UAAU;AAC7C,gBAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,oBAAM,CAAC;AACP,mBAAKA,SAAQ,GAAG,SAAS,IAAI,QAAQA,SAAQ,QAAQA,UAAS;AAC5D,oBAAIA,MAAK,IAAI,MAAM,IAAIA,MAAK,CAAC;AAAA,cAC/B;AAAA,YACF,OAAO;AACL,oBAAM,CAAC;AACP,mBAAKA,UAAS,KAAK;AACjB,oBAAIA,MAAK,IAAI,MAAM,IAAIA,MAAK,CAAC;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,YAAIoF,iBAAgB;AACpB,YAAI,sBAAsB,WAAW,YAAY,CAAC;AAClD,YAAI,SAAS,IAAI,oBAAoB,kBAAkB;AACvD,eAAO,wBAAwB,KAAK;AACpC,eAAO,wBAAwB,IAAI;AACnC,eAAO,yBAAyB,GAAG;AACnC,eAAO,yBAAyB,KAAK,KAAK,KAAK,GAAG;AAClD,YAAI,qBAAqB;AACzB,iBAAS,WAAW,OAAO,KAAK;AAC9B,iBAAO,MAAM,MAAM,aAAa,MAAM,IAAI,QAAQ,OAAO,MAAM,MAAM,aAAa,IAAI;AAAA,QACxF;AACA,iBAAS,eAAe,OAAO,KAAK;AAClC,iBAAO,CAAC,IAAI,WAAW,IAAI,QAAQ,MAAM,SAAS,IAAI;AACpD,mBAAO,MAAM,SAAS,GAAG,KAAK;AAAA,UAChC,CAAC;AAAA,QACH;AACA,iBAAS,kBAAkB,OAAO,KAAK;AACrC,iBAAO,CAAC,IAAI,cAAc,IAAI,WAAW,MAAM,SAAS,KAAK;AAC3D,gBAAI,UAAU,MAAM,KAAK,IAAI,GAAG;AAChC,mBAAO,YAAY,SAAS,CAAC,IAAI,SAAS,IAAI,KAAK,OAAO;AAAA,UAC5D,CAAC;AAAA,QACH;AACA,iBAAS,UAAU,OAAO,KAAK;AAC7B,iBAAO,CAAC,IAAI,MAAM,MAAM,MAAM,OAAO,IAAI;AAAA,QAC3C;AACA,iBAAS,eAAelI,SAAQ,KAAK;AACnC,cAAI,CAAC,IAAI,WAAW,IAAI,QAAQ,MAAM,SAAS,QAAQ;AACrD,gBAAI,OAAO,SAAS,OAAO;AACzB,qBAAO,CAAC,OAAO,YAAY,KAAK,SAAS,YAAY;AACnD,uBAAO,mBAAmBA,SAAQ,UAAU;AAAA,cAC9C,CAAC;AAAA,YACH,WAAW,OAAO,SAAS,MAAM;AAC/B,qBAAO,OAAO,YAAY,KAAK,SAAS,YAAY;AAClD,uBAAO,mBAAmBA,SAAQ,UAAU;AAAA,cAC9C,CAAC;AAAA,YACH;AACA,kBAAM,IAAI,MAAM,yBAAyB,OAAO,OAAO,+BAA+B;AAAA,UACxF,CAAC,GAAG;AACF,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,gBAAgB,OAAO,YAAY;AAC1C,iBAAO,WAAW,OAAO,UAAU,KAAK,eAAe,OAAO,UAAU,KAAK,kBAAkB,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,KAAK,eAAe,OAAO,UAAU;AAAA,QACvL;AACA,YAAI,eAAe,2BAAW;AAC5B,cAAI,OAAO;AACX,cAAI,KAAK;AACT,iBAAO,SAAS,QAAQ;AACtB,mBAAO,OAAO,QAAQ,MAAM,EAAE;AAAA,UAChC;AAAA,QACF,EAAE;AACF,YAAI,aAAa;AACjB,iBAAS,kBAAkB,MAAM;AAC/B,cAAI,CAAC,MAAM;AACT;AAAA,UACF;AACA,iBAAO,KAAK,IAAI,SAAS,KAAK;AAC5B,gBAAI,eAAe,IAAI,KAAK,QAAQ,YAAY,EAAE;AAClD,gBAAI,kBAAkB,IAAI,SAAS,IAAI,QAAQ,YAAY,EAAE;AAC7D,gBAAIkD,OAAM;AACV,oBAAQ,IAAI,UAAU;AAAA,cACrB,KAAK;AACJ,yBAAS,IAAI,OAAO,MAAM,aAAa,cAAc,CAAC;AACtD;AAAA,cAED,KAAK;AACJ,yBAAS,IAAI,OAAO,aAAa,cAAc,IAAI,GAAG;AACtD;AAAA,cAED,KAAK;AACJ,yBAAS,IAAI,OAAO,YAAY,aAAa,cAAc,IAAI,SAAS;AACxE;AAAA,cAED,KAAK;AACJ,yBAAS,IAAI,OAAO,MAAM,aAAa,cAAc,IAAI,OAAO;AAChE;AAAA,cAED,KAAK;AACJ,gBAAAA,QAAO,SAASA,MAAK,OAAO;AAC1B,yBAAO,mBAAmB;AAAA,gBAC5B;AACA;AAAA,cAED,KAAK;AACJ,gBAAAA,QAAO,SAASA,MAAK,OAAO;AAC1B,yBAAO,SAAS,MAAM,SAAS,cAAc;AAAA,gBAC/C;AACA;AAAA,cAED,KAAK;AACJ,gBAAAA,QAAO,SAASA,MAAK,OAAO;AAC1B,yBAAO,mBAAmB;AAAA,gBAC5B;AACA;AAAA,cAED;AACC,gBAAAA,QAAO,SAASA,MAAK,OAAO;AAC1B,yBAAO,CAAC,CAAC;AAAA,gBACX;AAAA,YACF;AACA,gBAAI,mBAAmB,MAAM,WAAW,KAAK,IAAI,QAAQ,GAAG;AAC1D,cAAAA,QAAO,SAASA,QAAO;AACrB,uBAAO;AAAA,cACT;AAAA,YACF;AACA,gBAAI,CAACA,OAAM;AACT,cAAAA,QAAO,SAASA,MAAK,OAAO;AAC1B,uBAAO,SAAS,OAAO,KAAK,KAAK;AAAA,cACnC;AAAA,YACF;AACA,mBAAO;AAAA,cACL,KAAK;AAAA,cACL,OAAO;AAAA,cACP,MAAMA;AAAA,YACR;AAAA,UACF,CAAC;AAAA,QACH;AACA,iBAAS,eAAe,SAAS;AAC/B,cAAI,CAAC,SAAS;AACZ;AAAA,UACF;AACA,iBAAO,QAAQ,IAAI,SAAS,WAAW;AACrC,wBAAY,UAAU,QAAQ,YAAY,EAAE;AAC5C,mBAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ,IAAI,OAAO,YAAY,aAAa,SAAS,IAAI,SAAS;AAAA,YACpE;AAAA,UACF,CAAC;AAAA,QACH;AACA,iBAAS,eAAe,SAAS;AAC/B,cAAI,CAAC,SAAS;AACZ;AAAA,UACF;AACA,iBAAO,QAAQ,IAAI,SAAS/C,IAAG;AAC7B,gBAAI;AACJ,gBAAI,CAAE,MAAM,KAAM,EAAE,SAASA,GAAE,IAAI,GAAG;AACpC,4BAAcA,GAAE;AAChB,4BAAc,YAAY,YAAY,YAAY,YAAY,CAAE,WAAY;AAC5E,4BAAc,mBAAmB,WAAW;AAAA,YAC9C;AACA,mBAAO;AAAA,cACL,MAAMA,GAAE;AAAA,cACR;AAAA,cACA,OAAOA,GAAE;AAAA,YACX;AAAA,UACF,CAAC;AAAA,QACH;AACA,iBAAS,mBAAmB,aAAa;AACvC,iBAAO,YAAY,IAAI,SAAS,KAAK;AACnC,gBAAI,SAAS,CAAC;AACd,gBAAI,QAAQ,IAAI;AAChB,mBAAO,OAAO;AACZ,qBAAO,KAAK;AAAA,gBACV,KAAK,MAAM,UAAU,MAAM,QAAQ,YAAY,IAAI;AAAA,gBACnD,YAAY,MAAM,kBAAkB,MAAM,kBAAkB;AAAA,gBAC5D,IAAI,MAAM;AAAA,gBACV,YAAY,kBAAkB,MAAM,KAAK;AAAA,gBACzC,SAAS,eAAe,MAAM,UAAU;AAAA,gBACxC,SAAS,eAAe,MAAM,OAAO;AAAA,cACvC,CAAC;AACD,sBAAQ,MAAM;AAAA,YAChB;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AACA,iBAAS,iBAAiB,UAAU;AAClC,cAAI,cAAc,mBAAmB,MAAM,QAAQ;AACnD,wBAAc,YAAY,YAAY,YAAY,YAAY,CAAE,WAAY;AAC5E,iBAAO,mBAAmB,WAAW;AAAA,QACvC;AACA,iBAAS,mBAAmB,OAAO,aAAa,gBAAgB;AAC9D,cAAI,OAAO,CAAC,EAAE,OAAO,WAAW;AAChC,cAAI,aAAa,KAAK,IAAI;AAC1B,cAAI,YAAY,gBAAgB,OAAO,UAAU;AACjD,iBAAO,CAAC,aAAa,kBAAkB,MAAM,QAAQ;AACnD,oBAAQ,MAAM;AACd,wBAAY,gBAAgB,OAAO,UAAU;AAAA,UAC/C;AACA,cAAI,KAAK,QAAQ;AACf,gBAAI,CAAE,KAAK,GAAI,EAAE,SAAS,WAAW,UAAU,MAAM,OAAO;AAC1D,oBAAM,IAAI,MAAM,kEAAkE,WAAW,UAAU;AAAA,YACzG;AACA,wBAAY,aAAa,mBAAmB,MAAM,QAAQ,MAAM,WAAW,eAAe,GAAG;AAAA,UAC/F;AACA,iBAAO;AAAA,QACT;AACA,iBAAS+J,SAAQ,OAAO,UAAU;AAChC,cAAI,cAAc,iBAAiB,QAAQ;AAC3C,iBAAO,YAAY,KAAK,SAAS,YAAY;AAC3C,mBAAO,mBAAmB,OAAO,UAAU;AAAA,UAC7C,CAAC;AAAA,QACH;AACA,YAAI,kBAAkBA;AACtB,iBAAS,QAAQ,OAAO,UAAU;AAChC,iBAAO,OAAO;AACZ,gBAAI,gBAAgB,OAAO,QAAQ,GAAG;AACpC,qBAAO;AAAA,YACT;AACA,gBAAI,OAAO,MAAM,WAAW,aAAa;AACvC,oBAAM,IAAI,UAAU,yCAAyC;AAAA,YAC/D;AACA,oBAAQ,MAAM;AAAA,UAChB;AACA,iBAAO;AAAA,QACT;AACA,YAAI,kBAAkB;AACtB,iBAAS4C,QAAO;AAAA,QAAC;AACjB,iBAAS,UAAUjM,IAAG;AACpB,cAAI,OAAOA,OAAM,YAAY;AAC3B,kBAAM,IAAI,UAAU,8CAA8C;AAAA,UACpE;AAAA,QACF;AACA,iBAASoK,SAAQ;AACf,cAAI,QAAQ,CAAC;AACb,cAAI,UAAU;AACd,cAAI,YAAY;AAChB,cAAI,gBAAgB6B;AACpB,cAAI,WAAW;AACf,cAAI;AACJ,cAAI,cAAc,SAASC,aAAYzM,IAAG;AACxC,mBAAOA;AACP,uBAAW,WAAW;AACpB,kBAAI,SAAS,UAAU,SAAS,MAAM;AACpC,4BAAY,6BAA6B,IAAI;AAAA,cAC/C;AAAA,YACF,GAAG,CAAC;AAAA,UACN;AACA,cAAI,SAAS;AACb,mBAAS,cAAcL,IAAG;AACxB,mBAAO,SAAS+G,IAAG;AACjB,oBAAM/G,EAAC,IAAI+G;AACX,2BAAa;AACb,kBAAI,CAAC,aAAa,kBAAkB8F,OAAM;AACxC,2BAAW;AACX,8BAAc,KAAK;AAAA,cACrB;AAAA,YACF;AAAA,UACF;AACA,mBAAS,MAAM,KAAK;AAClB,4BAAgBA;AAChB,mBAAO,GAAG;AACV,mBAAO;AAAA,UACT;AACA,mBAAS,MAAM;AACb,gBAAI,SAAS,MAAM;AACnB,mBAAM,UAAU,QAAQ,WAAW;AACjC,kBAAI,OAAO,MAAM,OAAO;AACxB,kBAAI;AACF,qBAAK,KAAK,MAAM,cAAc,OAAO,GAAG,KAAK;AAAA,cAC/C,SAASxM,IAAG;AACV,sBAAMA,EAAC;AAAA,cACT;AAAA,YACF;AAAA,UACF;AACA,cAAI0M,KAAI;AAAA,YACN,OAAO,SAAS,MAAM,IAAI;AACxB,kBAAI,QAAQ,EAAE,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG;AACtD,oBAAIC,SAAQ;AACZ,qBAAK,SAASC,IAAG,SAAS,QAAQ;AAChC,kBAAAD,OAAM,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM;AAAA,gBACrC;AAAA,cACF;AACA,wBAAU,EAAE;AACZ,kBAAI,SAAS,QAAQ;AACnB;AAAA,cACF,WAAW,UAAU;AACnB,sBAAM,IAAI,MAAM,yBAAyB;AAAA,cAC3C;AACA,oBAAM,KAAK,EAAE;AACb,gBAAE;AACF,kBAAI;AACJ,qBAAOD;AAAA,YACT;AAAA,YACA,MAAM,SAAS,KAAK,IAAI;AACtB,wBAAU,EAAE;AACZ,kBAAI,kBAAkBF,OAAM;AAC1B,sBAAM,IAAI,MAAM,0BAA0B;AAAA,cAC5C;AACA,kBAAI,CAAC,MAAM;AACT,gCAAgB;AAChB,oBAAI,CAAC,WAAW;AACd,6BAAW;AACX,gCAAc,KAAK;AAAA,gBACrB;AAAA,cACF;AACA,qBAAOE;AAAA,YACT;AAAA,YACA,OAAO,SAAS,OAAO,IAAI;AACzB,wBAAU,EAAE;AACZ,kBAAI,WAAW,aAAa;AAC1B,sBAAM,IAAI,MAAM,2BAA2B;AAAA,cAC7C;AACA,kBAAI,CAAC,MAAM;AACT,yBAAS;AAAA,cACX,OAAO;AACL,mBAAG,IAAI;AACP,uBAAO;AAAA,cACT;AACA,qBAAOA;AAAA,YACT;AAAA,YACA;AAAA,UACF;AACA,iBAAOA;AAAA,QACT;AACA,YAAI,gBAAgB/B;AACpB,YAAI;AACJ,YAAI;AACJ,YAAI,gBAAgB,CAAC;AACrB,iBAAS,aAAa,KAAK,OAAO,SAAS,WAAW,cAAc;AAClE,cAAI,QAAQ;AAAA,YACV;AAAA,YACA;AAAA,YACA,WAAW,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,OAAO,GAAG,CAAC;AAAA,YAC3C;AAAA,UACF;AACA,iBAAO,aAAa,KAAK,OAAO,YAAY;AAAA,QAC9C;AACA,iBAAS,gBAAgB,OAAO,WAAW;AACzC,cAAI,QAAQ,MAAM,OAAO,UAAU,MAAM,SAAS,YAAY,MAAM;AACpE,cAAI,eAAe,cAAc,KAAK;AACtC,cAAI,CAAC,cAAc;AACjB;AAAA,UACF;AACA,cAAI;AACF,yBAAa,SAAS,WAAW,SAAS;AAAA,UAC5C,SAAS,OAAO;AACd,gBAAI,IAAI,KAAK;AACb,sBAAU,OAAO,SAAS;AAAA,UAC5B;AAAA,QACF;AACA,qBAAa,kBAAkB,SAAS,gBAAgB,OAAO;AAC7D,cAAI,OAAO,MAAM,MAAM,OAAO,MAAM;AACpC,yBAAe,OAAO,SAAS,YAAY,kCAAkC;AAC7E,yBAAe,OAAO,SAAS,YAAY,kCAAkC;AAC7E,cAAI,cAAc;AAChB,yBAAa;AAAA,UACf;AACA,cAAI,QAAQ,KAAK,eAAe;AAChC,cAAI,OAAO;AACT,2BAAe,OAAO,UAAU,YAAY,8CAA8C;AAC1F,2BAAe;AAAA,UACjB,OAAO;AACL,2BAAe;AAAA,UACjB;AACA,yBAAe;AAAA,QACjB;AACA,qBAAa,YAAY,SAAS,UAAU,OAAO,cAAc;AAC/D,yBAAe,OAAO,iBAAiB,YAAY,wCAAwC;AAC3F,yBAAe,CAAC,cAAc,KAAK,GAAG,SAAS,OAAO,OAAO,4BAA4B,CAAC;AAC1F,wBAAc,KAAK,IAAI;AAAA,QACzB;AACA,qBAAa,YAAY,SAAS,YAAY;AAC5C,cAAI,MAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAItL;AAC9E,iBAAO,CAAC,CAAC,IAAI;AAAA,QACf;AACA,iCAAyB,YAAY;AACrC,iBAAS,IAAI,SAAS,MAAM;AAC1B,cAAI;AACJ,cAAI,IAAI,OAAO;AACb,uBAAW,aAAa,IAAI;AAAA,UAC9B;AACA,iBAAO,IAAI,MAAM,UAAU,QAAQ,YAAY,KAAK;AAAA,QACtD;AACA,iBAAS,mBAAmB,MAAM,YAAY,SAAS,QAAQ;AAC7D,cAAI,MAAM,KAAK;AACf,cAAI,CAAC,KAAK;AACR,wBAAY,wCAAwC,IAAI;AACxD,oBAAQ,IAAI;AACZ;AAAA,UACF;AACA,cAAI2F,WAAU,WAAW,WAAW;AAClC,YAAAA,WAAU,WAAW,WAAW;AAC9B,kBAAI,CAAC,WAAW,OAAO;AACrB,wBAAQ,IAAI;AAAA,cACd,OAAO;AACL,uBAAO,IAAI,0BAA0B,IAAI,CAAC;AAAA,cAC5C;AAAA,YACF,GAAG,CAAC;AAAA,UACN,GAAG,GAAG;AACN,uBAAa,KAAK,YAAY,MAAM,QAAQ,WAAW;AACrD,yBAAaA,QAAO;AACpB,gBAAI,gBAAgB,WAAW,WAAW,WAAW,QAAQ,iBAAiB;AAC9E,YAAAA,WAAU,WAAW,SAAS,6BAA6B;AACzD,qBAAO,IAAI,0BAA0B,IAAI,CAAC;AAAA,YAC5C,GAAG,aAAa;AAChB,yBAAa,KAAK,aAAa,YAAY,QAAQ,SAAS,OAAO;AACjE,2BAAaA,QAAO;AACpB,kBAAI,iBAAiB,UAAU,OAAO;AACpC,wBAAQ,KAAK;AAAA,cACf,OAAO;AACL,uBAAO,KAAK;AAAA,cACd;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AACA,YAAI,gCAAgC;AACpC,iBAAS,aAAa,QAAQ;AAC5B,cAAI,SAAS,CAAC;AACd,iBAAO,OAAO,OAAO,OAAO,OAAO,CAAC,CAAC,EAAE,OAAO,OAAO,OAAO,CAAC,CAAC,EAAE,OAAO,OAAO,QAAQ,CAAC,CAAC;AAAA,QAC1F;AACA,YAAI,yBAAyB;AAC7B,iBAAS,WAAW,OAAO,OAAO;AAChC,kBAAQ,MAAM,cAAc;AAC5B,kBAAQ,MAAM,cAAc;AAC5B,cAAI,UAAU,OAAO;AACnB,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,wBAAwB,KAAK,IAAI,GAAG;AAC5C,mBAAO;AAAA,UACT,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,sBAAsB;AAC1B,iBAAS,OAAOqB,QAAO,KAAK,OAAO;AACjC,cAAI,MAAM,QAAQA,MAAK,GAAG;AACxB,mBAAOA,OAAM,KAAK,SAAS,KAAK;AAC9B,qBAAO,QAAQ,GAAG,MAAM,YAAY,IAAI,GAAG,MAAM;AAAA,YACnD,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,kBAAkB;AACtB,iBAAS,UAAU,WAAW,SAAS,SAAS;AAC9C,oBAAU,QAAQ,SAAS,KAAK;AAC9B,gBAAI,OAAO,mBAAmB,UAAU,IAAI,MAAM,SAAS,OAAO;AAClE,gBAAI,SAAS,uBAAuB,GAAG;AACvC,mBAAO,QAAQ,SAAS,QAAQ;AAC9B,qBAAO,eAAe,OAAO,aAAa,IAAI,SAAS,MAAM;AAC3D,uBAAO,mBAAmB,UAAU,MAAM,SAAS,OAAO;AAAA,cAC5D,CAAC;AAAA,YACH,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AACA,iBAAS,YAAY3G,SAAQ,IAAI;AAC/B,cAAI,iBAAiB,GAAG,CAAC,EAAE;AAC3B,mBAAS,MAAM,GAAG,MAAMA,QAAO,QAAQ,OAAO;AAC5C,gBAAI,OAAOA,QAAO,GAAG,EAAE;AACvB,gBAAI,eAAe,oBAAoB;AAAA,cACrC,YAAY,KAAK;AAAA,YACnB,GAAG;AAAA,cACD,YAAY,eAAe;AAAA,YAC7B,CAAC;AACD,gBAAI,eAAe,KAAK,iBAAiB,KAAK,eAAe,SAAS,SAAS,KAAK,SAAS,QAAQ;AACnG,cAAAA,QAAO,OAAO,MAAMA,SAAQ,CAAE,KAAK,CAAE,EAAE,OAAO,EAAE,CAAC;AACjD;AAAA,YACF;AAAA,UACF;AACA,UAAAA,QAAO,KAAK,MAAMA,SAAQ,EAAE;AAAA,QAC9B;AACA,iBAAS,gBAAgB,QAAQ;AAC/B,cAAI,CAAC,UAAU,CAAC,OAAO,SAAS;AAC9B,mBAAO;AAAA,UACT;AACA,cAAI,CAAC,MAAM,QAAQ,OAAO,OAAO,GAAG;AAClC,mBAAO,CAAE,OAAO,OAAQ;AAAA,UAC1B;AACA,cAAI,CAAC,OAAO,QAAQ,QAAQ;AAC1B,mBAAO;AAAA,UACT;AACA,iBAAO,OAAO;AAAA,QAChB;AACA,iBAAS,aAAa,cAAc,SAAS;AAC3C,cAAI,eAAe,CAAC;AACpB,uBAAa,QAAQ,SAAS,aAAa;AACzC,gBAAI,UAAU,gBAAgB,WAAW;AACzC,gBAAI,CAAC,WAAW,CAAC,QAAQ,QAAQ;AAC/B;AAAA,YACF;AACA,gBAAI;AACJ,gBAAI,YAAY,cAAc;AAC5B,kBAAI,OAAO;AAAA,gBACT,UAAU,CAAE,YAAY,KAAM;AAAA,cAChC;AACA,wBAAU,IAAI,mBAAmB,YAAY,cAAc,SAAS,IAAI;AAAA,YAC1E;AACA,oBAAQ,QAAQ,SAAS,YAAY;AACnC,kBAAI,WAAW,SAAS,SAAS;AAC/B,0BAAU,WAAW,OAAO,SAAS,OAAO;AAAA,cAC9C;AACA,kBAAI,MAAM,gBAAgB,cAAc,MAAM,WAAW,EAAE;AAC3D,kBAAI,CAAC,KAAK;AACR,6BAAa,KAAK,UAAU;AAAA,cAC9B,OAAO;AACL,oBAAI,WAAW,MAAM,QAAQ;AAC3B,8BAAY,IAAI,OAAO,WAAW,KAAK;AAAA,gBACzC;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AACD,cAAI,aAAa,SAAS,KAAKL,WAAUA,QAAO,MAAM;AACpD,yBAAa,QAAQ,SAAS,QAAQ;AACpC,kBAAI,OAAO,OAAO;AAChB,uBAAO,MAAM,KAAK,SAASuM,IAAG1F,IAAG;AAC/B,sBAAI,QAAQ0F,GAAE,KAAK;AACnB,sBAAI,QAAQ1F,GAAE,KAAK;AACnB,sBAAI,UAAU,UAAU0F,GAAE,KAAK,cAAc1F,GAAE,KAAK,aAAa;AAC/D,2BAAO,oBAAoB,OAAO,KAAK;AAAA,kBACzC;AACA,yBAAO;AAAA,gBACT,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AACA,iBAAO;AAAA,QACT;AACA,YAAI,wBAAwB;AAC5B,iBAAS,yBAAyB,eAAe,SAAS,SAAS,WAAW,SAAS,QAAQ;AAC7F,cAAIwG,KAAI,cAAc;AACtB,cAAI,SAAS,cAAc;AAC3B,iBAAO,QAAQ,SAASL,QAAO;AAC7B,gBAAI,WAAW,SAASA,OAAM,KAAK,aAAa,UAAU,GAAG,EAAE;AAC/D,gBAAI,YAAY,MAAM,QAAQ,KAAK,YAAY;AAC/C,gBAAI,OAAOA,OAAM,KAAK,sBAAsB;AAC5C,gBAAI,QAAQ,SAASA,OAAM,KAAK,aAAa,OAAO,GAAG,EAAE;AACzD,gBAAI,SAAS,SAASA,OAAM,KAAK,aAAa,QAAQ,GAAG,EAAE;AAC3D,oBAAQ,MAAM,KAAK,IAAI,KAAK,QAAQ;AACpC,qBAAS,MAAM,MAAM,IAAI,KAAK,SAAS;AACvC,gBAAI,SAAS;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS;AAAA,gBACP,WAAW;AAAA,gBACX,WAAW,cAAc,cAAc,QAAQ,QAAQ;AAAA,gBACvD,oBAAoB;AAAA,kBAClB;AAAA,kBACA;AAAA,gBACF;AAAA,gBACA,MAAM,cAAc;AAAA,gBACpB,SAASA,OAAM,WAAW,CAAC;AAAA,gBAC3B,SAASA,OAAM,WAAW,CAAC;AAAA,cAC7B;AAAA,YACF;AACA,YAAAK,GAAE,MAAM,SAAS,KAAK,KAAK;AACzB,kBAAI,OAAOL,OAAM;AACjB,4CAA8B,MAAM,QAAQ,SAAS,OAAO;AAC1D,oBAAI,OAAO;AACT,yBAAO,IAAI;AAAA,oBACT,SAAS;AAAA,oBACT,cAAc;AAAA,oBACd,OAAO,aAAa,IAAI;AAAA,kBAC1B,CAAC;AAAA,gBACH;AACA,oBAAI,IAAI;AAAA,cACV,GAAG,GAAG;AAAA,YACR,CAAC;AAAA,UACH,CAAC;AACD,UAAAK,GAAE,KAAK,SAAS,OAAO;AACrB,oBAAQ,sBAAsB,OAAO,OAAO,CAAC;AAAA,UAC/C,CAAC,EAAE,OAAO,EAAE,MAAM;AAAA,QACpB;AACA,YAAI,sCAAsC;AAC1C,iBAAS,SAAS,OAAO,YAAY;AACnC,mBAAS,oBAAoB,QAAQ,aAAa;AAChD,gBAAI,OAAO,aAAa,YAAY,UAAU;AAC5C,qBAAO;AAAA,YACT;AACA,mBAAO,CAAC,CAAC,OAAO,SAAS,KAAK,SAAS,OAAO;AAC5C,qBAAO,oBAAoB,OAAO,WAAW;AAAA,YAC/C,CAAC;AAAA,UACH;AACA,cAAI,MAAM,YAAY,WAAW,UAAU;AACzC,mBAAO,oBAAoB,OAAO,UAAU;AAAA,UAC9C;AACA,cAAI,MAAM,YAAY;AACpB,gBAAI,OAAO,MAAM,WAAW,aAAa,YAAY;AACnD,qBAAO,MAAM,WAAW,SAAS,WAAW,UAAU;AAAA,YACxD;AACA,mBAAO,CAAC,EAAE,MAAM,WAAW,wBAAwB,WAAW,UAAU,IAAI;AAAA,UAC9E,OAAO;AACL,eAAG;AACD,kBAAI,eAAe,OAAO;AACxB,uBAAO;AAAA,cACT;AAAA,YACF,SAAS,aAAa,cAAc,WAAW;AAAA,UACjD;AACA,iBAAO;AAAA,QACT;AACA,YAAI,mBAAmB;AACvB,iBAAS,YAAY;AACnB,cAAIhN,UAAS,CAAC;AACd,mBAAS,OAAO,UAAU,QAAQ,UAAU,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AAC1F,oBAAQ,IAAI,IAAI,UAAU,IAAI;AAAA,UAChC;AACA,kBAAQ,QAAQ,SAAS,QAAQ;AAC/B,gBAAI,CAAC,UAAU,QAAQ,MAAM,MAAM,YAAY,MAAM,QAAQ,MAAM,GAAG;AACpE;AAAA,YACF;AACA,qBAAS,MAAM,GAAG,eAAe,OAAO,KAAK,MAAM,GAAG,MAAM,aAAa,QAAQ,OAAO;AACtF,kBAAI,MAAM,aAAa,GAAG;AAC1B,kBAAI,CAACA,QAAO,eAAe,GAAG,KAAK,QAAQ,OAAO,GAAG,CAAC,MAAM,YAAY,MAAM,QAAQA,QAAO,GAAG,CAAC,GAAG;AAClG,gBAAAA,QAAO,GAAG,IAAI,OAAO,GAAG;AAAA,cAC1B,OAAO;AACL,gBAAAA,QAAO,GAAG,IAAI,UAAUA,QAAO,GAAG,GAAG,OAAO,GAAG,CAAC;AAAA,cAClD;AAAA,YACF;AAAA,UACF,CAAC;AACD,iBAAOA;AAAA,QACT;AACA,YAAI,qBAAqB;AACzB,iBAAS,eAAe,IAAI,MAAM;AAChC,iBAAO,OAAO,IAAI,IAAI;AACtB,iBAAO,KAAK,IAAI,EAAE,OAAO,SAAS,MAAM;AACtC,mBAAO,OAAO,KAAK,IAAI,MAAM;AAAA,UAC/B,CAAC,EAAE,QAAQ,SAAS,MAAM;AACxB,eAAG,IAAI,IAAI;AACX,gBAAI;AACF,iBAAG,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE;AAAA,YAC1B,SAASM,IAAG;AAAA,YAAC;AAAA,UACf,CAAC;AAAA,QACH;AACA,YAAI,2BAA2B;AAC/B,YAAI,sBAAsB,CAAE,WAAW,SAAS,cAAc,QAAQ,OAAO,UAAU,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,UAAU,QAAQ,OAAO,KAAK,WAAW,MAAO;AAC3K,iBAAS,aAAa,MAAM;AAC1B,cAAI,KAAK,YAAY;AACnB,gBAAI,YAAY,KAAK,SAAS,YAAY;AAC1C,gBAAI,oBAAoB,SAAS,SAAS,KAAK,mCAAmC,KAAK,SAAS,GAAG;AACjG,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,YAAI,yBAAyB;AAC7B,YAAI,cAAc,CAAC;AACnB,QAAAkB,UAAS,aAAa;AAAA,UACpB,mBAAmB,SAAS2L,qBAAoB;AAC9C,mBAAO;AAAA,UACT;AAAA,UACA,QAAQ,SAASC,UAAS;AACxB,mBAAO;AAAA,UACT;AAAA,UACA,eAAe,SAASC,iBAAgB;AACtC,mBAAO;AAAA,UACT;AAAA,UACA,mBAAmB,SAASC,qBAAoB;AAC9C,mBAAO;AAAA,UACT;AAAA,UACA,uBAAuB,SAASC,yBAAwB;AACtD,mBAAO;AAAA,UACT;AAAA,UACA,uBAAuB,SAASC,yBAAwB;AACtD,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASrE,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASsE,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,qBAAqB,SAASC,uBAAsB;AAClD,mBAAO;AAAA,UACT;AAAA,UACA,qBAAqB,SAASC,uBAAsB;AAClD,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,YAAY,SAASC,cAAa;AAChC,mBAAO;AAAA,UACT;AAAA,UACA,mBAAmB,SAASC,qBAAoB;AAC9C,mBAAO;AAAA,UACT;AAAA,UACA,QAAQ,SAASC,UAAS;AACxB,mBAAO;AAAA,UACT;AAAA,UACA,wBAAwB,SAASC,0BAAyB;AACxD,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,SAAS,SAASC,WAAU;AAC1B,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,eAAe,SAASC,iBAAgB;AACtC,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,qBAAqB,SAASC,uBAAsB;AAClD,mBAAO;AAAA,UACT;AAAA,UACA,QAAQ,SAASC,UAAS;AACxB,mBAAO;AAAA,UACT;AAAA,UACA,aAAa,SAASC,eAAc;AAClC,mBAAO;AAAA,UACT;AAAA,UACA,UAAU,SAASC,YAAW;AAC5B,mBAAO;AAAA,UACT;AAAA,UACA,YAAY,SAASC,cAAa;AAChC,mBAAO;AAAA,UACT;AAAA,UACA,WAAW,SAASC,aAAY;AAC9B,mBAAO;AAAA,UACT;AAAA,UACA,iBAAiB,SAASC,mBAAkB;AAC1C,mBAAO;AAAA,UACT;AAAA,UACA,+BAA+B,SAASC,iCAAgC;AACtE,mBAAO;AAAA,UACT;AAAA,UACA,yBAAyB,SAASC,2BAA0B;AAC1D,mBAAO;AAAA,UACT;AAAA,UACA,uBAAuB,SAASC,yBAAwB;AACtD,mBAAO;AAAA,UACT;AAAA,UACA,kBAAkB,SAASC,oBAAmB;AAC5C,mBAAO;AAAA,UACT;AAAA,UACA,kBAAkB,SAASC,oBAAmB;AAC5C,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AACD,iBAAS,YAAY,MAAM;AACzB,cAAI,MAAM,KAAK,eAAe,KAAK,YAAY,KAAKrP;AACpD,cAAI,QAAQ,MAAM;AAChB,kBAAMA;AAAA,UACR;AACA,iBAAO;AAAA,QACT;AACA,YAAI,wBAAwB;AAC5B,YAAI,yBAAyB;AAC7B,iBAAS,kBAAkB,OAAO;AAChC,cAAI,WAAW,MAAM,SAAS,QAAQ,MAAM,OAAO,OAAO,MAAM,MAAM,YAAY,MAAM,KAAK,MAAM,cAAc,SAAS,KAAK;AAC/H,cAAIsP;AACJ,cAAI,eAAe,wBAAwB,KAAK;AAChD,cAAI,SAAS,aAAa,KAAK,SAAS,aAAa,IAAI;AACvD,YAAAA,QAAO;AAAA,UACT,OAAO;AACL,YAAAA,QAAO,uBAAuB,QAAQ;AAAA,UACxC;AACA,iBAAO,MAAM,KAAKA,MAAK,iBAAiB,MAAM,MAAM,OAAO,MAAM,eAAe,GAAG,CAAC;AAAA,QACtF;AACA,YAAI,+BAA+B;AACnC,iBAAS,cAAc,SAASnP,SAAQ;AACtC,cAAI;AACJ,mBAAS,QAAQ;AACjB,cAAI,CAAC,QAAQ,YAAY,OAAO,QAAQ,WAAW,YAAY,YAAY;AACzE,gBAAI,QAAQ,QAAQ,WAAW,QAAQA,OAAM;AAC7C,gBAAI,OAAO;AACT,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AACA,aAAG;AACD,qBAAS,OAAO,eAAe,OAAO,eAAe,OAAO;AAC5D,gBAAI,UAAU,OAAO,aAAa,IAAI;AACpC,uBAAS,OAAO;AAAA,YAClB;AAAA,UACF,SAAS,UAAU,CAAC,wBAAwB,QAAQA,OAAM,KAAK,WAAWH,UAAS;AACnF,cAAI,CAAC,QAAQ;AACX,mBAAO;AAAA,UACT;AACA,cAAI,CAAC,wBAAwB,QAAQG,OAAM,GAAG;AAC5C,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AACA,YAAI,0BAA0B;AAC9B,iBAAS,OAAO,SAASA,SAAQ;AAC/B,iBAAO,wBAAwB,2BAA2B,OAAO,GAAGA,OAAM;AAAA,QAC5E;AACA,YAAI,kBAAkB;AACtB,iBAAS,kBAAkB,SAAS;AAClC,cAAI,QAAQ,cAAc;AACxB,mBAAO,kBAAkB,QAAQ,YAAY;AAAA,UAC/C,WAAW,QAAQ,YAAY;AAC7B,gBAAIoP,cAAa,QAAQ;AACzB,gBAAIA,YAAW,aAAa,GAAG;AAC7B,qBAAOA;AAAA,YACT,WAAWA,YAAW,MAAM;AAC1B,qBAAOA,YAAW;AAAA,YACpB;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,YAAI,8BAA8B;AAClC,iBAAS,sBAAsB,MAAM,MAAM;AACzC,cAAI,WAAW,KAAK,aAAa,IAAI;AACrC,cAAI,CAAC,UAAU;AACb,mBAAO;AAAA,UACT;AACA,cAAI,SAAS,OAAO,CAAC,MAAM,KAAK;AAC9B,uBAAW,mBAAmB,SAAS,UAAU,CAAC,CAAC;AAAA,UACrD,WAAW,SAAS,OAAO,GAAG,CAAC,MAAM,MAAM;AACzC,uBAAW,mBAAmB,SAAS,UAAU,CAAC,CAAC;AAAA,UACrD;AACA,cAAI,YAAYvP,UAAS,eAAe,QAAQ;AAChD,cAAI,WAAW;AACb,mBAAO;AAAA,UACT;AACA,sBAAYA,UAAS,kBAAkB,QAAQ;AAC/C,cAAI,UAAU,QAAQ;AACpB,mBAAO,UAAU,CAAC;AAAA,UACpB;AACA,iBAAO;AAAA,QACT;AACA,YAAI,mCAAmC;AACvC,iBAAS,gBAAgB,SAAS;AAChC,cAAI,CAAC,QAAQ,YAAY,QAAQ,UAAU;AACzC,sBAAU,QAAQ;AAAA,UACpB;AACA,cAAI,QAAQ,aAAa,GAAG;AAC1B,gBAAI,aAAa,QAAQ,iBAAiB,OAAO,QAAQ;AACzD,mBAAO;AAAA,cACL,MAAM,cAAc,WAAW,cAAc,QAAQ,KAAK,cAAc;AAAA,cACxE,KAAK,cAAc,WAAW,aAAa,QAAQ,KAAK,aAAa;AAAA,YACvE;AAAA,UACF;AACA,iBAAO;AAAA,YACL,MAAM,QAAQ;AAAA,YACd,KAAK,QAAQ;AAAA,UACf;AAAA,QACF;AACA,YAAI,4BAA4B;AAChC,iBAAS,sBAAsB,SAAS;AACtC,cAAI,eAAe,0BAA0BA,SAAQ,GAAG,UAAU,aAAa,MAAM,UAAU,aAAa,KAAK,SAAS,QAAQ,sBAAsB;AACxJ,iBAAO;AAAA,YACL,KAAK,OAAO,MAAM;AAAA,YAClB,OAAO,OAAO,QAAQ;AAAA,YACtB,QAAQ,OAAO,SAAS;AAAA,YACxB,MAAM,OAAO,OAAO;AAAA,YACpB,OAAO,OAAO,QAAQ,OAAO;AAAA,YAC7B,QAAQ,OAAO,SAAS,OAAO;AAAA,UACjC;AAAA,QACF;AACA,YAAI,kCAAkC;AACtC,iBAAS,gBAAgB,KAAK;AAC5B,cAAI,MAAM,IAAI;AACd,cAAI,aAAa,IAAI;AACrB,cAAI,IAAI,YAAY;AAClB,mBAAO;AAAA,cACL,OAAO,IAAI;AAAA,cACX,QAAQ,IAAI;AAAA,YACd;AAAA,UACF;AACA,cAAI,YAAY;AACd,mBAAO;AAAA,cACL,OAAO,WAAW;AAAA,cAClB,QAAQ,WAAW;AAAA,YACrB;AAAA,UACF;AACA,cAAI,OAAO,IAAI;AACf,iBAAO;AAAA,YACL,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,UACf;AAAA,QACF;AACA,YAAI,4BAA4B;AAChC,iBAAS,iBAAiB,SAAS,QAAQ;AACzC,oBAAU,4BAA4B,OAAO;AAC7C,iBAAO,WAAW,QAAQ,SAAS,YAAY,MAAM,QAAQ;AAC3D,gBAAI,QAAQ,WAAW;AACrB,wBAAU,QAAQ;AAClB,kBAAI,UAAU,GAAG;AACf,uBAAO;AAAA,cACT;AAAA,YACF;AACA,sBAAU,4BAA4B,OAAO;AAAA,UAC/C;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,YAAY,SAAS;AAC5B,cAAI;AACJ,cAAI,aAAaA,UAAS;AAC1B,cAAI,OAAOF,QAAO,iBAAiB,OAAO;AAC1C,cAAI,MAAMA,QAAO,iBAAiBE,UAAS,QAAQ,UAAU,EAAE,iBAAiB,WAAW;AAC3F,cAAI,SAAS,gCAAgC,OAAO;AACpD,cAAI,OAAO,SAAS,MAAM,iBAAiB,SAAS,OAAO,MAAM,KAAK,KAAK,aAAa,aAAa;AACnG,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,SAAS,KAAK,OAAO,UAAU,GAAG;AAC3C,mBAAO;AAAA,UACT;AACA,cAAI,QAAQ,OAAO;AACjB,gBAAI,OAAO,SAAS,GAAG;AACrB,qBAAO;AAAA,YACT;AAAA,UACF,OAAO;AACL,2BAAe,KAAK,IAAI,WAAW,aAAa,0BAA0BF,OAAM,EAAE,KAAK;AACvF,gBAAI,OAAO,QAAQ,cAAc;AAC/B,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,YAAI,uBAAuB;AAC3B,YAAI,YAAY;AAChB,YAAI,gBAAgB;AACpB,iBAAS,UAAU0P,QAAO;AACxB,cAAI,cAAcA,OAAM,iBAAiB,MAAM,EAAE,MAAM,SAAS;AAChE,cAAI,kBAAkBA,OAAM,iBAAiB,WAAW,EAAE,MAAM,aAAa;AAC7E,cAAI,eAAe,YAAY,WAAW,GAAG;AAC3C,mBAAO,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,YAAY,CAAC,KAAK;AAAA,UACpF;AACA,cAAI,iBAAiB;AACnB,gBAAI1L,QAAO,gBAAgB,CAAC;AAC5B,gBAAI,QAAQ,SAAS,gBAAgB,CAAC,GAAG,EAAE;AAC3C,oBAAQA,OAAM;AAAA,cACb,KAAK;AACJ,uBAAO,SAAS;AAAA,cAEjB,KAAK;AACJ,uBAAO,UAAU;AAAA,cAElB;AAAA,YACD;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,cAAc,IAAI,cAAc,UAAU;AACjD,cAAI,QAAQ,gBAAgB,IAAI,KAAK;AACrC,cAAI,CAAC,OAAO;AACV,mBAAO;AAAA,UACT;AACA,cAAI,YAAY,MAAM,aAAa,MAAM;AACzC,cAAI,CAAC,WAAW;AACd,mBAAO;AAAA,UACT;AACA,cAAI,gBAAgB,uBAAuB,EAAE;AAC7C,cAAI,CAAC,iBAAiB,cAAc,aAAa,GAAG;AAClD,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,2BAA2B,IAAI,OAAO,gBAAgB,OAAO,wBAAwB,SAAS,GAAG,IAAI,CAAC;AACjH,cAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;AACzB,mBAAO;AAAA,UACT;AACA,iBAAO,KAAK,KAAK,SAAS,OAAO;AAC/B,gBAAI,aAAa,MAAM;AACvB,mBAAO,UAAU,YAAY,cAAc,QAAQ;AAAA,UACrD,CAAC;AAAA,QACH;AACA,iBAAS,UAAU,IAAI,cAAc,UAAU;AAC7C,cAAI,CAAC,IAAI;AACP,kBAAM,IAAI,UAAU,0DAA0D;AAAA,UAChF;AACA,cAAI,QAAQ,2BAA2B,EAAE;AACzC,cAAI,YAAY,gBAAgB,eAAe,iBAAiB;AAChE,cAAI,GAAG,aAAa,GAAG;AACrB,mBAAO;AAAA,UACT;AACA,cAAI,GAAG,aAAa,IAAI;AACtB,iBAAK,GAAG;AAAA,UACV;AACA,cAAI,SAAS,OAAO,MAAM,SAAS,MAAM,aAAa;AACpD,mBAAO,MAAM,SAAS;AAAA,UACxB;AACA,cAAI0L,SAAQ1P,QAAO,iBAAiB,IAAI,IAAI;AAC5C,cAAI0P,WAAU,MAAM;AAClB,mBAAO;AAAA,UACT;AACA,cAAI,YAAY,GAAG,SAAS,YAAY;AACxC,cAAI,cAAc,QAAQ;AACxB,mBAAO,cAAc,IAAI,cAAc,QAAQ;AAAA,UACjD;AACA,cAAIA,OAAM,iBAAiB,SAAS,MAAM,UAAU,CAAE,SAAS,UAAU,YAAY,UAAW,EAAE,SAAS,SAAS,GAAG;AACrH,mBAAO;AAAA,UACT;AACA,cAAI,gBAAgB,GAAG,aAAa,aAAa,MAAM,QAAQ;AAC7D,mBAAO;AAAA,UACT;AACA,cAAI,CAAC,iBAAiB,UAAUA,MAAK,KAAKA,OAAM,iBAAiB,SAAS,MAAM,OAAO,mBAAmB,EAAE,KAAK,SAASA,OAAM,iBAAiB,QAAQ,CAAC,MAAM,IAAI;AAClK,mBAAO;AAAA,UACT;AACA,cAAI,CAAC,aAAaA,OAAM,iBAAiB,YAAY,MAAM,YAAY,CAAC,gBAAgB,qBAAqB,EAAE,IAAI;AACjH,mBAAO;AAAA,UACT;AACA,cAAI,SAAS,GAAG,eAAe,GAAG,eAAe,GAAG;AACpD,cAAI,WAAW;AACf,cAAI,QAAQ;AACV,uBAAW,UAAU,QAAQ,cAAc,IAAI;AAAA,UACjD;AACA,cAAI,OAAO;AACT,kBAAM,SAAS,IAAI;AAAA,UACrB;AACA,iBAAO;AAAA,QACT;AACA,YAAI,qBAAqB;AACzB,YAAI,WAAW;AACf,iBAAS,kBAAkB,OAAO,aAAa;AAC7C,cAAI,WAAW,MAAM,8BAA8B,UAAU;AAC7D,cAAI,SAAS,MAAM,8BAA8B,SAAS;AAC1D,cAAI,aAAa,WAAW,aAAa,UAAU;AACjD,mBAAO;AAAA,UACT;AACA,cAAI,WAAW,UAAU,aAAa,UAAU;AAC9C,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,8BAA8B,SAAS,MAAM,KAAK;AAC1D,mBAAO;AAAA,UACT;AACA,cAAIC,aAAY,MAAM,8BAA8B,mBAAmB,KAAK,MAAM,8BAA8B,eAAe,KAAK,MAAM,8BAA8B,WAAW,KAAK;AACxL,cAAIA,eAAc,QAAQ;AACxB,mBAAO;AAAA,UACT;AACA,cAAI,eAAe,MAAM,8BAA8B,gBAAgB;AACvE,cAAI,gBAAgB,iBAAiB,UAAU;AAC7C,mBAAO;AAAA,UACT;AACA,cAAIC,UAAS,MAAM,8BAA8B,QAAQ;AACzD,cAAIA,WAAUA,YAAW,QAAQ;AAC/B,mBAAO;AAAA,UACT;AACA,cAAI,cAAc,MAAM,8BAA8B,aAAa;AACnE,cAAI,eAAe,gBAAgB,QAAQ;AACzC,mBAAO;AAAA,UACT;AACA,cAAI,WAAW,MAAM,8BAA8B,WAAW;AAC9D,cAAI,YAAY,aAAa,QAAQ;AACnC,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,MAAM,8BAA8B,cAAc,KAAK,MAAM,8BAA8B,MAAM,KAAK;AACjH,cAAI,SAAS,QAAQ;AACnB,mBAAO;AAAA,UACT;AACA,cAAI,YAAY,MAAM,8BAA8B,oBAAoB,KAAK,MAAM,8BAA8B,YAAY,KAAK;AAClI,cAAI,cAAc,QAAQ;AACxB,mBAAO;AAAA,UACT;AACA,cAAI,aAAa,MAAM,8BAA8B,qBAAqB,KAAK,MAAM,8BAA8B,aAAa,KAAK;AACrI,cAAI,eAAe,QAAQ;AACzB,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,8BAA8B,WAAW,MAAM,WAAW;AAClE,mBAAO;AAAA,UACT;AACA,cAAI,aAAa,MAAM,8BAA8B,aAAa;AAClE,cAAI,eAAe,eAAe,eAAe,WAAW;AAC1D,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,8BAA8B,4BAA4B,MAAM,SAAS;AACjF,mBAAO;AAAA,UACT;AACA,cAAI,UAAU,MAAM,8BAA8B,SAAS;AAC3D,cAAI,CAAE,UAAU,SAAS,UAAU,SAAU,EAAE,SAAS,OAAO,GAAG;AAChE,mBAAO;AAAA,UACT;AACA,cAAI,WAAW,UAAU,aAAa;AACpC,gBAAI,gBAAgB,YAAY,8BAA8B,SAAS;AACvE,gBAAI,CAAE,QAAQ,eAAe,eAAe,QAAQ,eAAe,aAAc,EAAE,SAAS,aAAa,GAAG;AAC1G,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,UAAU,OAAO;AACxB,cAAI,CAAC,OAAO;AACV,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,eAAe,QAAQ;AAC/B,mBAAO,MAAM;AAAA,UACf;AACA,cAAI,aAAa,MAAM,8BAA8B,OAAO;AAC5D,cAAI,eAAe,QAAQ;AACzB,kBAAM,aAAa;AACnB,mBAAO;AAAA,UACT;AACA,cAAI,UAAU,UAAU,MAAM,MAAM;AACpC,gBAAM,aAAa;AACnB,iBAAO;AAAA,QACT;AACA,iBAAS,iBAAiB,OAAO;AAC/B,cAAI,MAAM,8BAA8B,UAAU,MAAM,UAAU;AAChE,gBAAI,MAAM,8BAA8B,SAAS,EAAE,QAAQ,QAAQ,MAAM,IAAI;AAC3E,qBAAO;AAAA,YACT;AACA,gBAAI,UAAU,KAAK,GAAG;AACpB,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,aAAarD,IAAG1F,IAAG;AAC1B,mBAAS,MAAM,GAAG,MAAM0F,GAAE,eAAe,QAAQ,OAAO;AACtD,gBAAI,OAAO1F,GAAE,eAAe,GAAG,MAAM,aAAa;AAChD,qBAAO;AAAA,YACT;AACA,gBAAIA,GAAE,eAAe,GAAG,IAAI0F,GAAE,eAAe,GAAG,GAAG;AACjD,qBAAO;AAAA,YACT;AACA,gBAAI1F,GAAE,eAAe,GAAG,IAAI0F,GAAE,eAAe,GAAG,GAAG;AACjD,qBAAO;AAAA,YACT;AAAA,UACF;AACA,cAAI,QAAQA,GAAE;AACd,cAAI,QAAQ1F,GAAE;AACd,cAAI,MAAM,eAAe,MAAM,YAAY,MAAM,MAAM,YAAY,GAAG;AACpE,gBAAI,aAAa,CAAC;AAClB,mBAAO,OAAO;AACZ,yBAAW,KAAK;AAAA,gBACd,MAAM,MAAM,YAAY;AAAA,gBACxB,MAAM;AAAA,cACR,CAAC;AACD,sBAAQ,MAAM,YAAY,EAAE;AAAA,YAC9B;AACA,mBAAO,SAAS,CAAC,WAAW,KAAK,SAAS,UAAU;AAClD,qBAAO,SAAS,SAAS,MAAM,YAAY;AAAA,YAC7C,CAAC,GAAG;AACF,sBAAQ,MAAM,YAAY,EAAE;AAAA,YAC9B;AACA,oBAAQ,WAAW,KAAK,SAAS,UAAU;AACzC,qBAAO,SAAS,SAAS,MAAM,YAAY;AAAA,YAC7C,CAAC,EAAE;AACH,gBAAI,UAAU,OAAO;AACnB,qBAAO0F,GAAE,WAAW,YAAY,MAAM,MAAM,YAAY,IAAI,KAAK;AAAA,YACnE;AAAA,UACF;AACA,cAAI,eAAevM,QAAO,MAAM,8BAA8B,aAAa,6BAA6B,6BAA6B,aAAa,4BAA4B,iCAAiC,aAAa;AAC5N,cAAI,cAAc,MAAM,wBAAwB,KAAK;AACrD,cAAI,WAAW,cAAc,8BAA8B,IAAI;AAC/D,cAAI,eAAe,cAAc,8BAA8B,cAAc;AAC7E,cAAI,YAAY,iBAAiBuM,EAAC;AAClC,cAAI,YAAY,iBAAiB1F,EAAC;AAClC,cAAI,cAAc,aAAa,cAAc;AAC3C,mBAAO;AAAA,UACT;AACA,iBAAO,YAAY;AAAA,QACrB;AACA,iBAAS,iBAAiB,OAAO,aAAa;AAC5C,cAAI,gBAAgB,YAAY,eAAe,MAAM;AACrD,cAAI,SAAS,MAAM,8BAA8B,SAAS;AAC1D,cAAI,WAAW,QAAQ;AACrB,0BAAc,cAAc,SAAS,CAAC,IAAI,SAAS,MAAM;AAAA,UAC3D;AACA,cAAI,kBAAkB,OAAO,WAAW,GAAG;AACzC,0BAAc,KAAK,CAAC;AAAA,UACtB;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,uBAAuB,OAAO,aAAa;AAClD,cAAI,qBAAqB;AACzB,cAAI,eAAe,CAAE,KAAM;AAC3B,iBAAO,aAAa;AAClB,gBAAI,YAAY,qBAAqB;AACnC,mCAAqB,YAAY;AACjC;AAAA,YACF;AACA,gBAAI,mBAAmB,YAAY,UAAU,GAAG;AAC9C,mCAAqB;AACrB;AAAA,YACF;AACA,yBAAa,KAAK,WAAW;AAC7B,0BAAc,2BAA2B,YAAY,WAAW,iBAAiB,YAAY,WAAW,UAAU;AAAA,UACpH;AACA,uBAAa,QAAQ,SAAS,QAAQ;AACpC,mBAAO,OAAO,sBAAsB;AAAA,UACtC,CAAC;AACD,iBAAO;AAAA,QACT;AACA,iBAAS,cAAc,MAAM,OAAO;AAClC,gBAAM,QAAQ;AACd,gBAAM,YAAY,QAAQ,SAAS,MAAM;AACvC,gBAAIR,KAAI,KAAK;AACb,gBAAIwJ,KAAI,KAAK;AACb,gBAAI,WAAWA,KAAI,WAAW;AAC9B,gBAAI,WAAWxJ,KAAI,WAAW;AAC9B,gBAAI,UAAUwJ,KAAI,KAAK,UAAU,WAAW;AAC5C,gBAAI,UAAUxJ,KAAI,KAAK,SAAS,WAAW;AAC3C,qBAAS,MAAM,UAAU,OAAO,QAAQ,OAAO;AAC7C,mBAAK,MAAM,GAAG,IAAI,KAAK,MAAM,GAAG,KAAK,CAAC;AACtC,uBAAS,MAAM,UAAU,OAAO,QAAQ,OAAO;AAC7C,qBAAK,MAAM,GAAG,EAAE,GAAG,IAAI,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC;AAChD,oBAAI,CAAC,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,SAAS,KAAK,GAAG;AACzC,uBAAK,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK,KAAK;AAAA,gBACjC;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AACA,iBAAS,aAAa;AACpB,cAAImJ,QAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAItP,UAAS;AACxF,cAAI,WAAW,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAAA,YACjF,WAAW;AAAA,YACX,OAAO,CAAC;AAAA,UACV;AACA,cAAI,cAAc,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACtF,cAAI,CAAC,aAAa;AAChB,gBAAI,QAAQ,2BAA2BA,UAAS,eAAe;AAC/D,gBAAI,CAAC,OAAO;AACV,sBAAQ,IAAI,qBAAqBA,UAAS,eAAe;AAAA,YAC3D;AACA,kBAAM,iBAAiB,CAAE,CAAE;AAC3B,0BAAc,UAAU,KAAK;AAC7B,gBAAI,mBAAmB,MAAM,UAAU,GAAG;AACxC,kBAAI,UAAU;AAAA,gBACZ,WAAW;AAAA,gBACX,OAAO,CAAC;AAAA,cACV;AACA,oBAAM,WAAW;AAAA,YACnB;AAAA,UACF;AACA,cAAI,aAAaA,UAAS,iBAAiBsP,OAAMxP,QAAO,WAAW,cAAc,MAAM,KAAK;AAC5F,cAAI,OAAO,cAAc,WAAW,SAAS,IAAI,WAAW;AAC5D,iBAAO,MAAM;AACX,gBAAI,SAAS,2BAA2B,IAAI;AAC5C,gBAAI,KAAK,eAAe;AACtB,4BAAc,2BAA2B,KAAK,aAAa;AAAA,YAC7D,WAAW,KAAK,cAAc,2BAA2B,KAAK,UAAU,GAAG;AACzE,4BAAc,2BAA2B,KAAK,UAAU;AAAA,YAC1D;AACA,gBAAI,CAAC,QAAQ;AACX,uBAAS,IAAI,IAAI,YAAY,MAAM,WAAW;AAAA,YAChD;AACA,mBAAO,iBAAiB,iBAAiB,QAAQ,WAAW;AAC5D,gBAAI,qBAAqB,uBAAuB,QAAQ,WAAW;AACnE,gBAAI,OAAO,qBAAqB,mBAAmB,WAAW;AAC9D,gBAAI,mBAAmB,OAAO,UAAU,GAAG;AACzC,kBAAI,WAAW;AAAA,gBACb,WAAW;AAAA,gBACX,OAAO,CAAC;AAAA,cACV;AACA,qBAAO,WAAW;AAAA,YACpB;AACA,gBAAI,OAAO,OAAO;AAClB,gBAAI,KAAK,UAAU,KAAK,KAAK,WAAW,KAAK,mBAAmB,IAAI,GAAG;AACrE,4BAAc,MAAM,MAAM;AAAA,YAC5B;AACA,gBAAI,uBAAuB,IAAI,GAAG;AAChC,yBAAW,KAAK,YAAY,MAAM,MAAM;AAAA,YAC1C;AACA,mBAAO,WAAW,SAAS;AAAA,UAC7B;AAAA,QACF;AACA,iBAAS,aAAa,MAAM,MAAM;AAChC,cAAI,WAAW,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACnF,cAAIqG,KAAI,KAAK,OAAO,KAAK,QAAQ;AACjC,cAAIwJ,KAAI,KAAK,MAAM,KAAK,SAAS;AACjC,cAAI,MAAMA,KAAI,WAAW;AACzB,cAAI,MAAMxJ,KAAI,WAAW;AACzB,cAAI,QAAQ,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,SAAS,cAAc;AAC7D,mBAAO,aAAa,YAAY,KAAK,SAAS,YAAY;AACxD,kBAAI,QAAQ,WAAW;AACvB,kBAAI,QAAQ,WAAW;AACvB,qBAAOA,MAAK,QAAQ,WAAW,SAASA,MAAK,SAASwJ,MAAK,QAAQ,WAAW,UAAUA,MAAK;AAAA,YAC/F,CAAC;AAAA,UACH,CAAC;AACD,cAAI,gBAAgB,KAAK;AACzB,cAAI,eAAe;AACjB,oBAAQ,aAAa,cAAc,OAAO,cAAc,oBAAoB,IAAI,EAAE,OAAO,KAAK;AAAA,UAChG;AACA,cAAI,CAAC,UAAU;AACb,oBAAQ,MAAM,KAAK,YAAY,EAAE,IAAI,SAAS,OAAO;AACnD,qBAAO,MAAM;AAAA,YACf,CAAC,EAAE,OAAO3P,UAAS,eAAe,EAAE,OAAO,SAAS,MAAMiD,QAAO6D,QAAO;AACtE,qBAAOA,OAAM,QAAQ,IAAI,MAAM7D;AAAA,YACjC,CAAC;AAAA,UACH;AACA,iBAAO;AAAA,QACT;AACA,YAAI,SAAS,CAAC;AACd,YAAI,QAAQ;AAAA,UACV,KAAK,SAASS,KAAI,KAAK,OAAO;AAC5B,mBAAO,GAAG,IAAI;AAAA,UAChB;AAAA,UACA,KAAK,SAAS3B,KAAI,KAAK;AACrB,mBAAO,OAAO,GAAG;AAAA,UACnB;AAAA,UACA,OAAO,SAAS,QAAQ;AACtB,qBAAS,CAAC;AAAA,UACZ;AAAA,QACF;AACA,YAAI,gBAAgB;AACpB,iBAAS,gBAAgB,MAAM;AAC7B,cAAI,CAAC,cAAc,IAAI,aAAa,GAAG;AACrC,uBAAW;AACX,0BAAc,IAAI,eAAe,IAAI;AAAA,UACvC;AACA,cAAI,QAAQ,2BAA2B,IAAI;AAC3C,cAAI,OAAO,MAAM;AACjB,cAAI,CAAC,MAAM;AACT,mBAAO,CAAC;AAAA,UACV;AACA,iBAAO,aAAa,MAAM,MAAM,kBAAkB;AAAA,QACpD;AACA,YAAI,4BAA4B;AAChC,iBAAS,oBAAoB,aAAa;AACxC,cAAI,qBAAqB,2BAA2B,aAAa,GAAG;AACpE,cAAI,mBAAmB,mBAAmB,OAAO,SAAS,OAAO;AAC/D,gBAAI,eAAe,MAAM;AACzB,gBAAI,WAAW,MAAM,WAAW,aAAa,UAAU;AACvD,uBAAW,YAAY,CAAC,MAAM,SAAS,UAAU,EAAE,CAAC,IAAI,SAAS,QAAQ,IAAI;AAC7E,mBAAO,WAAW,gBAAgB,YAAY,IAAI;AAAA,UACpD,CAAC;AACD,iBAAO;AAAA,QACT;AACA,YAAI,gCAAgC;AACpC,iBAAS,SAASM,MAAK;AACrB,cAAI,CAACA,MAAK;AACR,mBAAO;AAAA,UACT;AACA,iBAAOA,KAAI,QAAQ,SAAS,IAAI,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,aAAa,GAAG,EAAE,KAAK;AAAA,QAC3F;AACA,YAAI,mBAAmB;AACvB,iBAAS,oBAAoB,MAAM;AACjC,cAAI,CAAC,cAAc,IAAI,aAAa,GAAG;AACrC,uBAAW;AACX,0BAAc,IAAI,eAAe,IAAI;AAAA,UACvC;AACA,cAAI,QAAQ,2BAA2B,IAAI;AAC3C,cAAI,OAAO,MAAM;AACjB,cAAI,CAAC,MAAM;AACT,mBAAO,CAAC;AAAA,UACV;AACA,cAAI,WAAW,MAAM;AACrB,cAAI,cAAc,CAAC;AACnB,gBAAM,KAAK,KAAK,UAAU,EAAE,QAAQ,SAAS,KAAK;AAChD,gBAAI,IAAI,aAAa,KAAK,iBAAiB,IAAI,WAAW,MAAM,IAAI;AAClE,kBAAIuN,SAAQ5P,UAAS,YAAY;AACjC,cAAA4P,OAAM,mBAAmB,GAAG;AAC5B,kBAAI,QAAQA,OAAM,eAAe;AACjC,kBAAI,oBAAoB,MAAM,KAAK,KAAK,EAAE,KAAK,SAASC,OAAM;AAC5D,oBAAI,qBAAqBA,MAAK,OAAOA,MAAK,QAAQ;AAClD,oBAAI,mBAAmBA,MAAK,MAAMA,MAAK,SAAS;AAChD,uBAAO,qBAAqB,SAAS,QAAQ,qBAAqB,SAAS,SAAS,mBAAmB,SAAS,OAAO,mBAAmB,SAAS;AAAA,cACrJ,CAAC;AACD,kBAAI,mBAAmB;AACrB;AAAA,cACF;AACA,uBAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO;AAC3C,oBAAI,OAAO,MAAM,GAAG;AACpB,oBAAI,KAAK,SAAS,KAAK,KAAK,UAAU,GAAG;AACvC,8BAAY,KAAK,IAAI;AAAA,gBACvB;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AACD,cAAI,CAAC,YAAY,QAAQ;AACvB,mBAAO,CAAE,0BAA0B,IAAI,CAAE;AAAA,UAC3C;AACA,iBAAO,YAAY,IAAI,SAAS,MAAM;AACpC,mBAAO,aAAa,MAAM,IAAI;AAAA,UAChC,CAAC;AAAA,QACH;AACA,YAAI,iCAAiC;AACrC,YAAI,cAAc,CAAE,YAAY,OAAO,SAAS,SAAS,UAAU,cAAc,SAAU;AAC3F,iBAAS,gBAAgB,SAAS;AAChC,cAAI,OAAO,QAAQ,aAAa,MAAM;AACtC,cAAI,MAAM;AACR,mBAAO,YAAY,QAAQ,IAAI,MAAM;AAAA,UACvC;AACA,kBAAQ,QAAQ,SAAS,YAAY,GAAG;AAAA,YACvC,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACJ,qBAAO;AAAA,YAER,KAAK;AACJ,qBAAO,QAAQ,SAAS;AAAA,YAEzB;AACC,qBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,4BAA4B;AAChC,iBAAS,OAAO,MAAM,MAAM;AAC1B,iBAAO,KAAK,cAAc;AAC1B,cAAI;AACF,gBAAI,MAAM,uBAAuB,IAAI;AACrC,gBAAI,SAAS,CAAC;AACd,gBAAI,YAAY,KAAK,aAAa,IAAI;AACtC,gBAAI,WAAW;AACb,0BAAY,mBAAmB,SAAS;AACxC,uBAAS5M,SAAQ,GAAGA,SAAQ,UAAU,QAAQA,UAAS;AACrD,uBAAO,KAAK,IAAI,eAAe,UAAUA,MAAK,CAAC,CAAC;AAAA,cAClD;AAAA,YACF;AACA,mBAAO;AAAA,UACT,SAASxC,IAAG;AACV,kBAAM,IAAI,UAAU,gDAAgD;AAAA,UACtE;AAAA,QACF;AACA,YAAI,iBAAiB;AACrB,iBAAS,eAAe,SAAS,cAAc,aAAa;AAC1D,cAAI,QAAQ,mBAAmB,gCAAgC,UAAU,2BAA2B,OAAO;AAC3G,cAAI,WAAW,CAAC,QAAQ,cAAc,QAAQ,cAAc,mBAAmB,QAAQ,YAAY,YAAY;AAC/G,cAAI,SAAS,MAAM,SAAS,IAAI,SAAS,OAAO;AAC9C,gBAAI,eAAe,MAAM,OAAO,WAAW,aAAa,UAAU,YAAY,aAAa;AAC3F,gBAAI,aAAa,GAAG;AAClB,kBAAI,aAAa,UAAU;AACzB,uBAAO;AAAA,cACT;AAAA,YACF,WAAW,CAAC,aAAa;AACvB,qBAAO,eAAe,OAAO,YAAY;AAAA,YAC3C;AAAA,UACF,CAAC,EAAE,KAAK,EAAE;AACV,iBAAO,iBAAiB,MAAM;AAAA,QAChC;AACA,YAAI,0BAA0B;AAC9B,iBAAS,aAAa,aAAa;AACjC,cAAIqP,MAAK;AACT,cAAI,YAAY,KAAK,iBAAiB,GAAG;AACvC,YAAAA,OAAM,eAAe,YAAY,YAAY,iBAAiB;AAC9D,wBAAYA,KAAI,IAAI,SAAS,OAAO;AAClC,kBAAI,QAAQ,2BAA2B,KAAK;AAC5C,qBAAO,QAAQ,wBAAwB,OAAO,IAAI,IAAI;AAAA,YACxD,CAAC,EAAE,KAAK,GAAG,EAAE,KAAK;AAClB,gBAAI,WAAW;AACb,qBAAO;AAAA,YACT;AAAA,UACF;AACA,sBAAY,YAAY,KAAK,YAAY;AACzC,cAAI,WAAW;AACb,wBAAY,iBAAiB,SAAS;AACtC,gBAAI,WAAW;AACb,qBAAO;AAAA,YACT;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,YAAI,wBAAwB;AAC5B,YAAI,iBAAiB,CAAE,QAAQ,SAAS,YAAY,UAAU,SAAS,UAAU,UAAU,SAAS,SAAS,UAAW;AACxH,iBAAS,kBAAkB,KAAK;AAC9B,cAAI,CAAC,eAAe,SAAS,IAAI,WAAW,SAAS,YAAY,CAAC,GAAG;AACnE,mBAAO,IAAI,SAAS,KAAK,SAAS,OAAO;AACvC,kBAAI,aAAa,MAAM;AACvB,qBAAO,WAAW,aAAa,KAAK,WAAW,UAAU,KAAK;AAAA,YAChE,CAAC;AAAA,UACH;AAAA,QACF;AACA,iBAAS,kBAAkB,KAAK,aAAa,YAAY;AACvD,iBAAO,kBAAkB,GAAG,KAAK,0BAA0B,IAAI,UAAU,KAAK,CAAC,cAAc,CAAC,CAAC,sBAAsB,GAAG,KAAK,CAAC,eAAe,IAAI,SAAS,KAAK,SAAS,OAAO;AAC7K,mBAAO,MAAM,WAAW,aAAa,KAAK,kBAAkB,KAAK;AAAA,UACnE,CAAC;AAAA,QACH;AACA,YAAI,8BAA8B;AAClC,iBAAS,WAAW,KAAK,aAAa,YAAY;AAChD,gBAAM,2BAA2B,GAAG;AACpC,iBAAO,4BAA4B,KAAK,aAAa,UAAU;AAAA,QACjE;AACA,YAAI,sBAAsB;AAC1B,iBAAS,gBAAgB,IAAI,2BAA2B;AACtD,cAAI,QAAQ,2BAA2B,EAAE;AACzC,cAAI,CAAC,OAAO;AACV,mBAAO,iBAAiB,IAAI,yBAAyB;AAAA,UACvD;AACA,cAAI,MAAM,qBAAqB,QAAQ;AACrC,kBAAM,mBAAmB,iBAAiB,IAAI,yBAAyB;AAAA,UACzE;AACA,iBAAO,MAAM;AAAA,QACf;AACA,iBAAS,iBAAiB,IAAI,2BAA2B;AACvD,cAAI,GAAG,aAAa,GAAG;AACrB,mBAAO;AAAA,UACT;AACA,cAAI,GAAG,aAAa,IAAI;AACtB,iBAAK,GAAG;AAAA,UACV;AACA,cAAI,CAAE,SAAS,QAAS,EAAE,SAAS,GAAG,SAAS,YAAY,CAAC,GAAG;AAC7D,mBAAO;AAAA,UACT;AACA,cAAIN,SAAQ1P,QAAO,iBAAiB,IAAI,IAAI;AAC5C,cAAI,CAAC0P,QAAO;AACV,kBAAM,IAAI,MAAM,6CAA6C;AAAA,UAC/D;AACA,cAAI,eAAeA,OAAM,iBAAiB,SAAS;AACnD,cAAI,iBAAiB,QAAQ;AAC3B,mBAAO;AAAA,UACT;AACA,cAAI,2BAA2B,CAAE,UAAU,UAAW;AACtD,cAAI,kBAAkBA,OAAM,iBAAiB,YAAY;AACzD,cAAI,yBAAyB,SAAS,eAAe,KAAK,CAAC,2BAA2B;AACpF,mBAAO;AAAA,UACT;AACA,cAAI,yBAAyB,SAAS,eAAe,KAAK,6BAA6B,yBAAyB,SAAS,yBAAyB,GAAG;AACnJ,mBAAO;AAAA,UACT;AACA,cAAI,SAAS,4BAA4B,EAAE;AAC3C,cAAI,UAAU,CAAC,yBAAyB,SAAS,eAAe,GAAG;AACjE,mBAAO,gBAAgB,QAAQ,eAAe;AAAA,UAChD;AACA,iBAAO;AAAA,QACT;AACA,YAAI,6BAA6B;AACjC,iBAAS,cAAc,IAAI;AACzB,cAAI,QAAQ,cAAc,gCAAgC,KAAK,2BAA2B,EAAE;AAC5F,cAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,mBAAO;AAAA,UACT;AACA,cAAI,MAAM,MAAM,aAAa,QAAQ;AACnC,gBAAI,CAAC,MAAM,YAAY;AACrB,qBAAO;AAAA,YACT;AACA,mBAAO,2BAA2B,MAAM,UAAU;AAAA,UACpD;AACA,iBAAO;AAAA,QACT;AACA,YAAI,yBAAyB;AAC7B,iBAAS,oBAAoB,IAAI;AAC/B,cAAI,QAAQ,cAAc,gCAAgC,KAAK,2BAA2B,EAAE;AAC5F,cAAI,CAAC,SAAS,uBAAuB,KAAK,GAAG;AAC3C,mBAAO;AAAA,UACT;AACA,kBAAQ,MAAM,MAAM,UAAU;AAAA,YAC7B,KAAK;AAAA,YACL,KAAK;AACJ,kBAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,uBAAO;AAAA,cACT;AACA;AAAA,YAED,KAAK;AACJ,qBAAO,MAAM,MAAM,SAAS;AAAA,YAE7B,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACJ,qBAAO;AAAA,YAER,KAAK;AACJ,qBAAO,CAAC,2BAA2B,OAAO,SAAS,EAAE;AAAA,UACvD;AACA,iBAAO;AAAA,QACT;AACA,YAAI,gCAAgC;AACpC,iBAAS,YAAY,IAAI;AACvB,cAAI,QAAQ,cAAc,gCAAgC,KAAK,2BAA2B,EAAE;AAC5F,cAAI,MAAM,MAAM,aAAa,GAAG;AAC9B,mBAAO;AAAA,UACT;AACA,cAAI,uBAAuB,KAAK,GAAG;AACjC,mBAAO;AAAA,UACT,WAAW,8BAA8B,KAAK,GAAG;AAC/C,mBAAO;AAAA,UACT;AACA,cAAI,WAAW,MAAM,KAAK,UAAU;AACpC,cAAI,YAAY,CAAC,MAAM,SAAS,UAAU,EAAE,CAAC,GAAG;AAC9C,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AACA,YAAI,uBAAuB;AAC3B,iBAAS,uBAAuB,IAAI;AAClC,cAAI,WAAW,SAAS,GAAG,aAAa,UAAU,GAAG,EAAE;AACvD,iBAAO,WAAW,MAAM,qBAAqB,EAAE,KAAK,CAAC,8BAA8B,EAAE;AAAA,QACvF;AACA,YAAI,oCAAoC;AACxC,iBAAS,QAAQ,KAAK;AACpB,cAAI,OAAO,IAAI;AACf,cAAI,SAAS,MAAM;AACjB,mBAAO;AAAA,UACT;AACA,iBAAO,KAAK,SAAS,UAAU,CAAC,KAAK,YAAY,CAAC,KAAK;AAAA,QACzD;AACA,YAAI,mBAAmB;AACvB,iBAAS,YAAY,MAAM,SAAS;AAClC,cAAI,QAAQ,KAAK,UAAU,MAAM,OAAO;AACtC,iBAAK,SAAS,QAAQ,SAAS,OAAO;AACpC,qBAAO,YAAY,OAAO,OAAO;AAAA,YACnC,CAAC;AAAA,UACH;AAAA,QACF;AACA,YAAI,YAAY,CAAE,SAAS,aAAa,SAAS,QAAQ,QAAQ,cAAe;AAChF,iBAAS,QAAQ,KAAK;AACpB,cAAI,UAAU1P,QAAO,iBAAiB,GAAG,EAAE,iBAAiB,SAAS;AACrE,iBAAO,UAAU,SAAS,OAAO,KAAK,QAAQ,OAAO,GAAG,CAAC,MAAM;AAAA,QACjE;AACA,iBAAS,eAAe,MAAM;AAC5B,cAAI,cAAc,4BAA4B,IAAI;AAClD,iBAAO,eAAe,CAAC,QAAQ,WAAW,GAAG;AAC3C,0BAAc,4BAA4B,WAAW;AAAA,UACvD;AACA,iBAAO,2BAA2B,WAAW;AAAA,QAC/C;AACA,iBAAS,cAAc,MAAM;AAC3B,cAAI,QAAQ,IAAI,GAAG;AACjB,mBAAO;AAAA,UACT;AACA,cAAI,gBAAgB,eAAe,IAAI;AACvC,cAAI,aAAa;AACjB,cAAI,WAAW;AACf,cAAI,YAAY;AAChB,sBAAY,eAAe,SAAS,UAAU;AAC5C,gBAAI,cAAc,GAAG;AACnB,qBAAO;AAAA,YACT;AACA,gBAAI,SAAS,aAAa,GAAG;AAC3B,4BAAc,SAAS;AAAA,YACzB;AACA,gBAAI,SAAS,aAAa,GAAG;AAC3B;AAAA,YACF;AACA,gBAAI,aAAa,SAAS,YAAY,IAAI,YAAY;AACtD,gBAAI,CAAE,MAAM,IAAK,EAAE,SAAS,SAAS,GAAG;AACtC,kBAAI,cAAc,GAAG;AACnB,6BAAa;AACb,2BAAW;AAAA,cACb,OAAO;AACL,4BAAY;AAAA,cACd;AAAA,YACF,WAAW,SAAS,MAAM,YAAY,UAAU,SAAS,MAAM,aAAa,YAAY,CAAC,CAAE,IAAI,MAAM,MAAO,EAAE,SAAS,SAAS,MAAM,OAAO,CAAC,KAAK,CAAC,CAAE,IAAI,MAAM,UAAW,EAAE,SAAS,SAAS,MAAM,QAAQ,GAAG;AAC9M,qBAAO;AAAA,YACT,WAAW,cAAc,OAAO,SAAS,SAAS,SAAS,aAAa,MAAM,KAAK,IAAI,YAAY,MAAM,QAAQ;AAC/G,kBAAI,aAAa,MAAM;AACrB,4BAAY;AAAA,cACd;AACA,0BAAY,SAAS;AACrB,qBAAO;AAAA,YACT;AAAA,UACF,CAAC;AACD,uBAAa,iBAAiB,UAAU;AACxC,qBAAW,iBAAiB,QAAQ;AACpC,iBAAO,WAAW,SAAS,SAAS;AAAA,QACtC;AACA,YAAI,2BAA2B;AAC/B,iBAAS,YAAY,SAAS;AAC5B,oBAAU,WAAW,CAAC;AACtB,cAAI,eAAe,QAAQ,gBAAgB;AAC3C,cAAI,cAAc,IAAI,aAAa,GAAG;AACpC,mBAAO,cAAc,IAAI,aAAa;AAAA,UACxC;AACA,cAAI,iBAAiB,kCAAkC,IAAI,MAAM,CAAC,GAAG,4CAA4C,SAAS,OAAO;AAC/H,mBAAO,mBAAmB,MAAM,UAAU;AAAA,UAC5C,CAAC;AACD,cAAI,eAAe,QAAQ;AACzB,0BAAc,IAAI,eAAe,IAAI;AACrC,mBAAO;AAAA,UACT;AACA,cAAI,WAAW,0BAA0BA,OAAM;AAC/C,cAAI,eAAe,SAAS,QAAQ;AACpC,cAAI,gBAAgB,SAAS,SAAS;AACtC,cAAIqG,MAAK,SAAS,QAAQ,gBAAgB;AAC1C,cAAIwJ,MAAK,SAAS,SAAS,iBAAiB;AAC5C,cAAI,SAAS,CAAE;AAAA,YACb,GAAGxJ;AAAA,YACH,GAAGwJ;AAAA,UACL,GAAG;AAAA,YACD,GAAG,SAAS,QAAQxJ;AAAA,YACpB,GAAGwJ;AAAA,UACL,GAAG;AAAA,YACD,GAAG,SAAS,QAAQ;AAAA,YACpB,GAAG,SAAS,SAAS;AAAA,UACvB,GAAG;AAAA,YACD,GAAGxJ;AAAA,YACH,GAAG,SAAS,SAASwJ;AAAA,UACvB,GAAG;AAAA,YACD,GAAG,SAAS,QAAQxJ;AAAA,YACpB,GAAG,SAAS,SAASwJ;AAAA,UACvB,CAAE;AACF,cAAI,SAAS,OAAO,IAAI,SAASI,QAAO;AACtC,mBAAO,MAAM,KAAK/P,UAAS,kBAAkB+P,OAAM,GAAGA,OAAM,CAAC,CAAC;AAAA,UAChE,CAAC;AACD,cAAI,SAAS,SAASC,QAAOC,MAAK;AAChC,gBAAI,eAAe,OAAOA,IAAG,EAAE,KAAK,SAAS,KAAK;AAChD,kBAAIT,SAAQ1P,QAAO,iBAAiB,GAAG;AACvC,qBAAO,SAAS0P,OAAM,OAAO,EAAE,KAAK,gBAAgB,SAASA,OAAM,QAAQ,EAAE,KAAK,iBAAiBA,OAAM,iBAAiB,gBAAgB,MAAM,WAAWA,OAAM,aAAa,cAAcA,OAAM,aAAa;AAAA,YACjN,CAAC;AACD,gBAAI,gBAAgB,OAAO,MAAM,SAAS,OAAO;AAC/C,qBAAO,MAAM,SAAS,YAAY;AAAA,YACpC,CAAC,GAAG;AACF,4BAAc,IAAI,eAAe,IAAI;AACrC,qBAAO;AAAA,gBACL,GAAG;AAAA,cACL;AAAA,YACF;AAAA,UACF;AACA,mBAAS,MAAM,GAAG,MAAM,OAAO,QAAQ,OAAO;AAC5C,gBAAI,OAAO,OAAO,GAAG;AACrB,gBAAI,QAAQ,IAAI,MAAM,UAAU;AAC9B,qBAAO,KAAK;AAAA,YACd;AAAA,UACF;AACA,wBAAc,IAAI,eAAe,MAAM;AACvC,iBAAO;AAAA,QACT;AACA,YAAI,wBAAwB;AAC5B,iBAAS,OAAO,SAAS;AACvB,iBAAO,mBAAmB1P,QAAO;AAAA,QACnC;AACA,YAAI,kBAAkB;AACtB,YAAI,OAAO,CAAC;AACZ,YAAI,iBAAiB;AAAA,UACnB,KAAK,SAAS4D,KAAI,KAAK,QAAQ;AAC7B,gBAAI,OAAO,QAAQ,UAAU;AAC3B,oBAAM,IAAI,MAAM,uCAAuC;AAAA,YACzD;AACA,gBAAI,QAAQ;AACV,mBAAK,GAAG,IAAI;AAAA,YACd;AACA,mBAAO,KAAK,GAAG;AAAA,UACjB;AAAA,UACA,KAAK,SAAS3B,KAAI,KAAK;AACrB,mBAAO,KAAK,GAAG;AAAA,UACjB;AAAA,UACA,OAAO,SAAS,QAAQ;AACtB,mBAAO,CAAC;AAAA,UACV;AAAA,QACF;AACA,YAAI,0BAA0B;AAC9B,iBAAS,gBAAgB,KAAKyN,QAAO;AACnC,cAAI,eAAe,CAAE,OAAO,UAAU,UAAU,UAAU,SAAS,KAAM;AACzE,cAAI,YAAY,IAAI,SAAS,YAAY;AACzC,cAAI,aAAa,SAAS,SAAS,GAAG;AACpC,oCAAwB,IAAI,WAAW,SAAS;AAChD,mBAAO;AAAA,UACT;AACA,UAAAA,SAAQA,UAAS1P,QAAO,iBAAiB,GAAG;AAC5C,cAAI,eAAe0P,OAAM,iBAAiB,kBAAkB;AAC5D,cAAI,aAAa,iBAAiB;AAClC,cAAI,YAAY;AACd,gBAAI,cAAc,WAAW,KAAK,YAAY;AAC9C,oCAAwB,IAAI,WAAW,cAAc,eAAe,SAAS;AAAA,UAC/E;AACA,iBAAO;AAAA,QACT;AACA,YAAI,4BAA4B;AAChC,YAAI,YAAY;AAAA,UACd,yBAAyB;AAAA,YACvB,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,UACA,qBAAqB;AAAA,YACnB,MAAM;AAAA,YACN,QAAQ,CAAE,UAAU,QAAQ,QAAQ,MAAO;AAAA,UAC7C;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,QAAQ,CAAE,SAAS,SAAS,QAAQ,WAAY;AAAA,UAClD;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ,CAAE,QAAQ,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,OAAQ;AAAA,YACtE,QAAQ;AAAA,UACV;AAAA,UACA,oBAAoB;AAAA,YAClB,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,UACA,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,QAAQ,CAAE,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,OAAQ;AAAA,YAC7D,QAAQ;AAAA,UACV;AAAA,UACA,qBAAqB;AAAA,YACnB,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,QAAQ,CAAE,QAAQ,SAAS,WAAY;AAAA,UACzC;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,QAAQ,CAAE,QAAQ,SAAS,WAAY;AAAA,YACvC,QAAQ;AAAA,UACV;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ,CAAE,QAAQ,SAAS,QAAQ,WAAW,QAAQ,QAAQ,QAAS;AAAA,YACvE,QAAQ;AAAA,UACV;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,QAAQ,CAAE,QAAQ,SAAS,WAAY;AAAA,YACvC,QAAQ;AAAA,UACV;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ,CAAE,WAAW,SAAS,YAAY,MAAO;AAAA,YACjD,QAAQ;AAAA,UACV;AAAA,UACA,qBAAqB;AAAA,YACnB,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,QAAQ,CAAE,aAAa,OAAO,QAAS;AAAA,YACvC,QAAQ;AAAA,UACV;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,YAChB,MAAM;AAAA,UACR;AAAA,UACA,wBAAwB;AAAA,YACtB,MAAM;AAAA,UACR;AAAA,UACA,oBAAoB;AAAA,YAClB,MAAM;AAAA,YACN,QAAQ,CAAE,cAAc,aAAa,UAAW;AAAA,UAClD;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,oBAAoB;AAAA,YAClB,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,QAAQ,CAAE,SAAS,SAAS,QAAQ,WAAY;AAAA,UAClD;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,UACR;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,QAAQ,CAAE,aAAa,OAAO,YAAY,MAAO;AAAA,YACjD,QAAQ;AAAA,UACV;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,UACR;AAAA,UACA,wBAAwB;AAAA,YACtB,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,QAAQ,CAAE,SAAS,QAAQ,WAAY;AAAA,UACzC;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,QAAQ,CAAE,aAAa,cAAc,QAAQ,OAAQ;AAAA,UACvD;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,UACR;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,UACR;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,UACR;AAAA,UACA,kBAAkB;AAAA,YAChB,MAAM;AAAA,UACR;AAAA,QACF;AACA,YAAI,qBAAqB;AACzB,YAAI,YAAY;AAAA,UACd,OAAO;AAAA,YACL,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,cAAc,CAAE,iBAAiB,YAAa;AAAA,YAC9C,gBAAgB,CAAE,SAAS,QAAS;AAAA,YACpC,wBAAwB;AAAA,UAC1B;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,cAAc,CAAE,yBAAyB,eAAgB;AAAA,YACzD,gBAAgB,CAAE,WAAY;AAAA,YAC9B,wBAAwB;AAAA,UAC1B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,cAAc,CAAE,iBAAiB,gBAAgB,eAAgB;AAAA,YACjE,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,YAAY;AAAA,YACV,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,cAAc,CAAE,iBAAiB,cAAe;AAAA,YAChD,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,iBAAiB,CAAE,UAAU,SAAS,QAAQ,UAAW;AAAA,YACzD,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,iBAAiB,CAAE,KAAM;AAAA,YACzB,cAAc,CAAE,iBAAiB,gBAAgB,iBAAiB,gBAAgB,eAAgB;AAAA,YAClG,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB;AAAA,UACnB;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,cAAc,CAAE,gBAAgB,iBAAiB,eAAgB;AAAA,YACjE,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,iBAAiB,CAAE,KAAM;AAAA,YACzB,cAAc,CAAE,aAAa,iBAAiB,gBAAgB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,gBAAgB,eAAgB;AAAA,YAClK,gBAAgB,CAAE,QAAQ,YAAY,aAAc;AAAA,YACpD,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,UACnB;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,eAAe,CAAE,WAAW,QAAQ,QAAQ,UAAU,SAAU;AAAA,YAChE,eAAe,CAAE,eAAgB;AAAA,YACjC,cAAc,CAAE,iBAAiB,qBAAqB,iBAAiB,iBAAiB,yBAAyB,kBAAmB;AAAA,YACpI,gBAAgB,CAAE,QAAS;AAAA,YAC3B,wBAAwB;AAAA,UAC1B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,gBAAgB,CAAE,QAAS;AAAA,UAC7B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,gBAAgB,CAAE,QAAS;AAAA,UAC7B;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,YAAY;AAAA,YACV,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,cAAc,CAAE,iBAAiB,YAAa;AAAA,YAC9C,gBAAgB,CAAE,QAAS;AAAA,YAC3B,wBAAwB;AAAA,UAC1B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,MAAO;AAAA,YACzB,iBAAiB;AAAA,UACnB;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,WAAY;AAAA,UAChC;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,eAAe,CAAE,SAAU;AAAA,YAC3B,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB;AAAA,UACnB;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,eAAe,CAAE,YAAY,KAAM;AAAA,YACnC,cAAc,CAAE,cAAc,wBAAwB,iBAAiB,yBAAyB,iBAAiB,iBAAiB,eAAgB;AAAA,YAClJ,gBAAgB,CAAE,aAAa,OAAQ;AAAA,YACvC,wBAAwB;AAAA,UAC1B;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,iBAAiB,CAAE,KAAM;AAAA,YACzB,cAAc,CAAE,iBAAiB,iBAAiB,iBAAiB,iBAAiB,gBAAgB,iBAAiB,iBAAiB,cAAe;AAAA,YACrJ,gBAAgB,CAAE,QAAQ,QAAS;AAAA,YACnC,iBAAiB;AAAA,UACnB;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,cAAc,CAAE,yBAAyB,eAAgB;AAAA,YACzD,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,eAAe,CAAE,YAAa;AAAA,YAC9B,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,aAAc;AAAA,YAChC,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,UACnB;AAAA,UACA,KAAK;AAAA,YACH,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,YACxB,wBAAwB;AAAA,UAC1B;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,gBAAgB,CAAE,QAAS;AAAA,UAC7B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,UACnB;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,eAAe,CAAE,SAAS,UAAW;AAAA,YACrC,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,eAAe,CAAE,QAAS;AAAA,YAC1B,cAAc,CAAE,wBAAwB,iBAAiB,iBAAiB,yBAAyB,iBAAiB,kBAAmB;AAAA,YACvI,gBAAgB,CAAE,QAAS;AAAA,YAC3B,wBAAwB;AAAA,UAC1B;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,iBAAiB,CAAE,QAAQ,OAAQ;AAAA,YACnC,cAAc,CAAE,cAAc,iBAAiB,gBAAgB,eAAgB;AAAA,YAC/E,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB;AAAA,UACnB;AAAA,UACA,KAAK;AAAA,YACH,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,UAC1B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,eAAe,CAAE,SAAS,iBAAiB,YAAY,kBAAmB;AAAA,YAC1E,cAAc,CAAE,yBAAyB,iBAAiB,kBAAmB;AAAA,YAC7E,gBAAgB,CAAE,QAAS;AAAA,UAC7B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,eAAe,CAAE,SAAS,iBAAiB,YAAY,kBAAmB;AAAA,YAC1E,cAAc,CAAE,yBAAyB,iBAAiB,kBAAmB;AAAA,YAC7E,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,iBAAiB,CAAE,QAAQ,WAAW,OAAQ;AAAA,YAC9C,cAAc,CAAE,iBAAiB,gBAAgB,eAAgB;AAAA,YACjE,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,UACnB;AAAA,UACA,kBAAkB;AAAA,YAChB,MAAM;AAAA,YACN,iBAAiB,CAAE,QAAQ,WAAW,OAAQ;AAAA,YAC9C,cAAc,CAAE,gBAAgB,iBAAiB,iBAAiB,cAAe;AAAA,YACjF,gBAAgB,CAAE,YAAY,UAAW;AAAA,YACzC,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,iBAAiB,CAAE,QAAQ,WAAW,OAAQ;AAAA,YAC9C,cAAc,CAAE,gBAAgB,iBAAiB,iBAAiB,cAAe;AAAA,YACjF,gBAAgB,CAAE,oBAAoB,OAAQ;AAAA,YAC9C,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,cAAc,CAAE,gBAAiB;AAAA,YACjC,eAAe,CAAE,iBAAiB,iBAAiB,eAAgB;AAAA,YACnE,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,YACxB,wBAAwB;AAAA,UAC1B;AAAA,UACA,YAAY;AAAA,YACV,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,gBAAgB,CAAE,WAAY;AAAA,YAC9B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,iBAAiB,CAAE,SAAU;AAAA,YAC7B,cAAc,CAAE,iBAAiB,gBAAgB,iBAAiB,cAAe;AAAA,YACjF,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,gBAAgB,CAAE,WAAY;AAAA,YAC9B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,cAAc,CAAE,iBAAiB,iBAAiB,iBAAiB,iBAAiB,gBAAiB;AAAA,YACrG,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,YACxB,wBAAwB;AAAA,UAC1B;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,cAAc,CAAE,gBAAgB,iBAAiB,gBAAgB,eAAgB;AAAA,YACjF,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,YAAY;AAAA,YACV,MAAM;AAAA,YACN,eAAe,CAAE,OAAQ;AAAA,YACzB,cAAc,CAAE,iBAAiB,iBAAiB,yBAAyB,iBAAiB,kBAAmB;AAAA,YAC/G,gBAAgB,CAAE,QAAS;AAAA,YAC3B,wBAAwB;AAAA,UAC1B;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,gBAAgB,CAAE,QAAS;AAAA,UAC7B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,YAC7B,wBAAwB;AAAA,UAC1B;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,gBAAgB,CAAC;AAAA,UACnB;AAAA,UACA,KAAK;AAAA,YACH,MAAM;AAAA,YACN,iBAAiB,CAAE,QAAQ,YAAY,SAAS,UAAW;AAAA,YAC3D,eAAe,CAAE,QAAQ,gBAAgB,YAAY,WAAY;AAAA,YACjE,cAAc,CAAE,iBAAiB,cAAc,iBAAiB,iBAAiB,yBAAyB,eAAgB;AAAA,YAC1H,gBAAgB,CAAE,SAAS,QAAS;AAAA,YACpC,iBAAiB;AAAA,UACnB;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,iBAAiB,CAAE,QAAQ,SAAS,UAAW;AAAA,YAC/C,eAAe,CAAE,KAAM;AAAA,YACvB,gBAAgB,CAAE,WAAY;AAAA,YAC9B,iBAAiB;AAAA,UACnB;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,iBAAiB,CAAE,KAAM;AAAA,YACzB,cAAc,CAAE,aAAa,iBAAiB,gBAAgB,iBAAiB,iBAAiB,iBAAiB,iBAAiB,gBAAgB,eAAgB;AAAA,YAClK,gBAAgB,CAAE,QAAQ,YAAY,aAAc;AAAA,YACpD,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,UACnB;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,eAAe,CAAE,eAAgB;AAAA,YACjC,cAAc,CAAE,iBAAiB,oBAAoB,iBAAiB,iBAAiB,gBAAiB;AAAA,YACxG,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,UAC1B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,cAAc,CAAE,yBAAyB,qBAAqB,kBAAkB,oBAAoB,iBAAiB,eAAgB;AAAA,YACrI,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,UAC1B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,gBAAgB,CAAE,WAAY;AAAA,YAC9B,iBAAiB;AAAA,UACnB;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,gBAAgB,CAAE,WAAY;AAAA,YAC9B,iBAAiB;AAAA,UACnB;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,gBAAgB,CAAE,aAAa,OAAQ;AAAA,UACzC;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,cAAc,CAAE,iBAAiB,iBAAiB,iBAAiB,oBAAoB,gBAAiB;AAAA,YACxG,gBAAgB,CAAE,aAAa,QAAS;AAAA,YACxC,wBAAwB;AAAA,UAC1B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,eAAe,CAAE,eAAgB;AAAA,YACjC,cAAc,CAAE,iBAAiB,iBAAiB,oBAAoB,iBAAiB,gBAAiB;AAAA,YACxG,gBAAgB,CAAE,SAAS,OAAQ;AAAA,YACnC,wBAAwB;AAAA,YACxB,wBAAwB;AAAA,UAC1B;AAAA,UACA,YAAY;AAAA,YACV,MAAM;AAAA,YACN,eAAe,CAAE,eAAgB;AAAA,YACjC,cAAc,CAAE,iBAAiB,iBAAiB,iBAAiB,iBAAiB,yBAAyB,gBAAiB;AAAA,YAC9H,gBAAgB,CAAE,aAAa,SAAS,OAAQ;AAAA,YAChD,wBAAwB;AAAA,UAC1B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB,CAAE,cAAc,iBAAkB;AAAA,UACrD;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,eAAe,CAAE,cAAe;AAAA,YAChC,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,YAC7B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,KAAK;AAAA,YACH,MAAM;AAAA,YACN,iBAAiB,CAAE,SAAU;AAAA,YAC7B,cAAc,CAAE,iBAAiB,iBAAiB,gBAAgB,eAAgB;AAAA,YAClF,gBAAgB,CAAE,eAAe,QAAS;AAAA,YAC1C,iBAAiB;AAAA,YACjB,wBAAwB;AAAA,UAC1B;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,eAAe,CAAE,YAAY,KAAM;AAAA,YACnC,cAAc,CAAE,iBAAiB,iBAAiB,eAAgB;AAAA,YAClE,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,UACnB;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,eAAe,CAAE,KAAM;AAAA,YACvB,cAAc,CAAE,cAAc,wBAAwB,oBAAoB,yBAAyB,eAAgB;AAAA,YACnH,gBAAgB,CAAE,WAAY;AAAA,UAChC;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,YAC5B,wBAAwB;AAAA,UAC1B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB;AAAA,UACnB;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB;AAAA,UACnB;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,cAAc,CAAE,yBAAyB,qBAAqB,kBAAkB,oBAAoB,iBAAiB,eAAgB;AAAA,YACrI,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,UAC1B;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,QAAS;AAAA,UAC7B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,cAAc,CAAE,oBAAoB,yBAAyB,eAAgB;AAAA,YAC7E,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,wBAAwB;AAAA,UAC1B;AAAA,UACA,SAAS;AAAA,YACP,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,YAC5B,iBAAiB;AAAA,UACnB;AAAA,UACA,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,eAAe,CAAE,SAAS,UAAW;AAAA,YACrC,cAAc,CAAE,wBAAwB,iBAAiB,yBAAyB,iBAAiB,kBAAmB;AAAA,YACtH,gBAAgB,CAAE,QAAS;AAAA,YAC3B,wBAAwB;AAAA,UAC1B;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,eAAe,CAAE,YAAY,KAAM;AAAA,YACnC,cAAc,CAAE,yBAAyB,iBAAiB,iBAAiB,cAAc,wBAAwB,oBAAoB,iBAAiB,iBAAiB,eAAgB;AAAA,YACvL,gBAAgB,CAAE,QAAQ,MAAO;AAAA,YACjC,wBAAwB;AAAA,UAC1B;AAAA,UACA,UAAU;AAAA,YACR,MAAM;AAAA,YACN,iBAAiB,CAAE,SAAS,MAAO;AAAA,YACnC,cAAc,CAAE,gBAAgB,iBAAiB,cAAc,iBAAiB,iBAAiB,cAAe;AAAA,YAChH,gBAAgB,CAAE,YAAY,QAAS;AAAA,YACvC,wBAAwB;AAAA,YACxB,iBAAiB;AAAA,UACnB;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,QACF;AACA,YAAI,qBAAqB;AACzB,YAAI,YAAY;AAAA,UACd,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,uBAAuB;AAAA,YACrB,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,iBAAiB;AAAA,YACjB,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,iBAAiB,CAAE,kBAAmB;AAAA,YACtC,cAAc,CAAE,iBAAiB,cAAc,iBAAiB,cAAe;AAAA,YAC/E,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,oBAAoB;AAAA,YAClB,MAAM;AAAA,YACN,eAAe,CAAE,iBAAkB;AAAA,YACnC,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,iBAAiB;AAAA,YACjB,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,kBAAkB;AAAA,YAChB,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,KAAM;AAAA,UAC1B;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,kBAAkB;AAAA,YAChB,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,iBAAiB,CAAE,cAAe;AAAA,YAClC,cAAc,CAAE,iBAAiB,cAAc,iBAAiB,cAAe;AAAA,YAC/E,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,eAAe,CAAE,aAAc;AAAA,YAC/B,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,eAAe,CAAE,cAAc,MAAO;AAAA,YACtC,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,iBAAiB;AAAA,YACjB,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,aAAa;AAAA,YACX,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,YAAa;AAAA,UACjC;AAAA,UACA,oBAAoB;AAAA,YAClB,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,iBAAiB;AAAA,YACjB,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,cAAc;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,cAAc,CAAE,iBAAiB,kBAAmB;AAAA,YACpD,gBAAgB,CAAE,WAAY;AAAA,YAC9B,wBAAwB;AAAA,UAC1B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,YAAa;AAAA,UACjC;AAAA,UACA,YAAY;AAAA,YACV,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,eAAe;AAAA,YACb,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,UAAW;AAAA,UAC/B;AAAA,UACA,iBAAiB;AAAA,YACf,MAAM;AAAA,YACN,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,SAAU;AAAA,UAC9B;AAAA,UACA,gBAAgB;AAAA,YACd,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,aAAc;AAAA,UAClC;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,MAAO;AAAA,UAC3B;AAAA,UACA,WAAW;AAAA,YACT,MAAM;AAAA,YACN,cAAc,CAAE,eAAgB;AAAA,YAChC,gBAAgB,CAAE,YAAa;AAAA,UACjC;AAAA,QACF;AACA,YAAI,qBAAqB;AACzB,YAAI,gBAAgB;AAAA,UAClB,qBAAqB;AAAA,YACnB,MAAM;AAAA,YACN,gBAAgB,CAAE,UAAW;AAAA,YAC7B,wBAAwB;AAAA,UAC1B;AAAA,UACA,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,gBAAgB,CAAE,OAAQ;AAAA,YAC1B,iBAAiB;AAAA,UACnB;AAAA,UACA,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,gBAAgB,CAAE,KAAM;AAAA,YACxB,wBAAwB;AAAA,YACxB,wBAAwB;AAAA,UAC1B;AAAA,QACF;AACA,YAAI,yBAAyB;AAC7B,YAAI,WAAW;AAAA,UACb,GAAG;AAAA,YACD,SAAS;AAAA,cACP,MAAM;AAAA,gBACJ,SAAS;AAAA,gBACT,cAAc,CAAE,eAAe,YAAY,MAAO;AAAA,gBAClD,cAAc,CAAE,UAAU,YAAY,YAAY,oBAAoB,iBAAiB,UAAU,SAAS,UAAU,OAAO,YAAY,gBAAgB,iBAAiB,gBAAgB,aAAc;AAAA,gBACtM,eAAe,CAAE,aAAc;AAAA,cACjC;AAAA,cACA,SAAS;AAAA,gBACP,cAAc,CAAE,YAAY,MAAO;AAAA,gBACnC,cAAc;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,eAAe,CAAE,SAAU;AAAA,UAC7B;AAAA,UACA,SAAS;AAAA,YACP,cAAc,CAAE,cAAc,MAAO;AAAA,YACrC,cAAc,CAAE,QAAQ,gBAAgB,QAAQ,YAAY,eAAe,QAAQ,QAAS;AAAA,YAC5F,YAAY;AAAA,UACd;AAAA,UACA,OAAO;AAAA,YACL,cAAc,CAAE,cAAc,MAAO;AAAA,YACrC,cAAc,CAAE,QAAQ,QAAQ,gBAAgB,QAAQ,UAAU,UAAU,kBAAkB,eAAe,gBAAgB,iBAAiB,SAAU;AAAA,UAC1J;AAAA,UACA,OAAO;AAAA,YACL,SAAS;AAAA,cACP,UAAU;AAAA,gBACR,SAAS;AAAA,gBACT,cAAc,CAAE,eAAe,YAAY,YAAY,MAAO;AAAA,cAChE;AAAA,cACA,SAAS;AAAA,gBACP,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,cACjD;AAAA,YACF;AAAA,YACA,cAAc,CAAE,aAAc;AAAA,UAChC;AAAA,UACA,GAAG;AAAA,YACD,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,YAAY;AAAA,YACV,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,UACA,MAAM;AAAA,YACJ,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc,CAAE,gBAAgB,MAAO;AAAA,YACvC,eAAe,CAAE,aAAa,aAAc;AAAA,UAC9C;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,eAAe,YAAY,MAAO;AAAA,YAClD,cAAc,CAAE,YAAY,QAAQ,YAAY,oBAAoB,iBAAiB,UAAU,SAAS,UAAU,KAAM;AAAA,YACxH,eAAe,CAAE,aAAc;AAAA,UACjC;AAAA,UACA,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,UACjD;AAAA,UACA,SAAS;AAAA,YACP,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,KAAK;AAAA,YACH,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,UAAU;AAAA,YACR,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,YACR,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,eAAe;AAAA,cACb,wBAAwB;AAAA,YAC1B;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,cAAc;AAAA,UAChB;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,SAAS;AAAA,YACP,cAAc,CAAE,eAAe,MAAO;AAAA,YACtC,cAAc;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,aAAc;AAAA,UAChC;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,SAAS,QAAQ,gBAAgB,MAAO;AAAA,UAC1D;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,UAAW;AAAA,UAC7B;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,cAAc,CAAE,eAAe,YAAY,YAAY,MAAO;AAAA,YAC9D,cAAc,CAAE,eAAe,YAAY,OAAO,gBAAgB,MAAO;AAAA,UAC3E;AAAA,UACA,UAAU;AAAA,YACR,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,QAAQ,gBAAgB,YAAa;AAAA,YACrD,eAAe,CAAE,oBAAqB;AAAA,UACxC;AAAA,UACA,YAAY;AAAA,YACV,cAAc,CAAE,SAAS,QAAQ,cAAe;AAAA,UAClD;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,YACd,eAAe,CAAE,cAAc,WAAY;AAAA,UAC7C;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,SAAS,QAAQ,gBAAgB,cAAe;AAAA,YAChE,YAAY;AAAA,UACd;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,UAAU,QAAQ,cAAe;AAAA,UACnD;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,WAAW,MAAO;AAAA,YAClC,cAAc,CAAE,QAAQ,gBAAgB,OAAO,cAAe;AAAA,YAC9D,YAAY;AAAA,YACZ,eAAe;AAAA,cACb,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,WAAW,MAAO;AAAA,YAClC,cAAc,CAAE,QAAQ,gBAAgB,OAAO,cAAe;AAAA,YAC9D,YAAY;AAAA,YACZ,eAAe;AAAA,cACb,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,WAAW,MAAO;AAAA,YAClC,cAAc,CAAE,QAAQ,gBAAgB,OAAO,cAAe;AAAA,YAC9D,YAAY;AAAA,YACZ,eAAe;AAAA,cACb,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,WAAW,MAAO;AAAA,YAClC,cAAc,CAAE,QAAQ,gBAAgB,OAAO,cAAe;AAAA,YAC9D,YAAY;AAAA,YACZ,eAAe;AAAA,cACb,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,WAAW,MAAO;AAAA,YAClC,cAAc,CAAE,QAAQ,gBAAgB,OAAO,cAAe;AAAA,YAC9D,YAAY;AAAA,YACZ,eAAe;AAAA,cACb,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,WAAW,MAAO;AAAA,YAClC,cAAc,CAAE,QAAQ,gBAAgB,OAAO,cAAe;AAAA,YAC9D,YAAY;AAAA,YACZ,eAAe;AAAA,cACb,cAAc;AAAA,YAChB;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,SAAS,QAAQ,gBAAgB,cAAe;AAAA,YAChE,YAAY;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,WAAW,MAAO;AAAA,YAClC,cAAc;AAAA,UAChB;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,QAAQ,gBAAgB,eAAgB;AAAA,YACxD,eAAe,CAAE,aAAa,aAAc;AAAA,UAC9C;AAAA,UACA,MAAM;AAAA,YACJ,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,GAAG;AAAA,YACD,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,eAAe,YAAY,YAAY,MAAO;AAAA,YAC9D,cAAc,CAAE,eAAe,YAAY,OAAO,QAAQ,cAAe;AAAA,UAC3E;AAAA,UACA,KAAK;AAAA,YACH,SAAS;AAAA,cACP,aAAa;AAAA,gBACX,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,KAAK;AAAA,kBACP;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,UAAU,YAAY,QAAQ,YAAY,oBAAoB,iBAAiB,UAAU,eAAe,aAAa,aAAa,UAAU,UAAU,OAAO,YAAY,WAAY;AAAA,cACvM;AAAA,cACA,QAAQ;AAAA,gBACN,SAAS;AAAA,gBACT,cAAc,CAAE,eAAe,YAAY,YAAY,MAAO;AAAA,cAChE;AAAA,cACA,SAAS;AAAA,gBACP,cAAc,CAAE,gBAAgB,MAAO;AAAA,gBACvC,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,cACjD;AAAA,YACF;AAAA,YACA,eAAe,CAAE,SAAU;AAAA,UAC7B;AAAA,UACA,OAAO;AAAA,YACL,SAAS;AAAA,cACP,QAAQ;AAAA,gBACN,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,QAAQ,YAAY,oBAAoB,iBAAiB,UAAU,SAAS,UAAU,KAAM;AAAA,cAC9G;AAAA,cACA,YAAY;AAAA,gBACV,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM,CAAE,UAAU,UAAU,OAAQ;AAAA,kBACtC;AAAA,gBACF;AAAA,gBACA,eAAe,CAAE,aAAa,aAAa,mBAAoB;AAAA,cACjE;AAAA,cACA,iBAAiB;AAAA,gBACf,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,kBACA,YAAY;AAAA,oBACV,gBAAgB;AAAA,kBAClB;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,UAAU,oBAAoB,UAAU,QAAS;AAAA,gBACjE,eAAe;AAAA,kBACb,gBAAgB;AAAA,gBAClB;AAAA,cACF;AAAA,cACA,UAAU;AAAA,gBACR,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,kBACA,YAAY;AAAA,oBACV,gBAAgB;AAAA,kBAClB;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,oBAAoB,UAAU,QAAS;AAAA,gBACvD,eAAe;AAAA,kBACb,gBAAgB;AAAA,gBAClB;AAAA,cACF;AAAA,cACA,SAAS;AAAA,gBACP,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM,CAAE,SAAS,QAAQ,kBAAkB,QAAQ,SAAS,UAAU,YAAY,SAAS,SAAS,UAAU,QAAQ,MAAO;AAAA,kBAC/H;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,cAChB;AAAA,cACA,QAAQ;AAAA,gBACN,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,MAAO;AAAA,gBACvB,cAAc;AAAA,gBACd,aAAa;AAAA,cACf;AAAA,cACA,OAAO;AAAA,gBACL,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,QAAQ,YAAY,oBAAoB,iBAAiB,SAAS,QAAS;AAAA,gBAC3F,eAAe,CAAE,WAAW,aAAa,aAAa,aAAa,mBAAoB;AAAA,cACzF;AAAA,cACA,OAAO;AAAA,gBACL,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,eAAgB;AAAA,gBAChC,eAAe;AAAA,kBACb,gBAAgB;AAAA,gBAClB;AAAA,cACF;AAAA,cACA,cAAc;AAAA,gBACZ,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,kBACA,YAAY;AAAA,oBACV,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,cAAc;AAAA,cAChB;AAAA,cACA,SAAS;AAAA,gBACP,cAAc,CAAE,eAAe,MAAO;AAAA,gBACtC,cAAc,CAAE,YAAY,aAAa,YAAa;AAAA,gBACtD,eAAe;AAAA,kBACb,iBAAiB;AAAA,gBACnB;AAAA,gBACA,eAAe,CAAE,aAAa,iBAAkB;AAAA,cAClD;AAAA,YACF;AAAA,UACF;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,cAAc,CAAE,eAAe,YAAY,MAAO;AAAA,YAClD,cAAc;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACN,cAAc;AAAA,UAChB;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,YAAY,oBAAoB,iBAAiB,UAAU,QAAQ,gBAAgB,SAAS,aAAa,OAAO,YAAY,mBAAmB,aAAc;AAAA,YAC7K,eAAe;AAAA,cACb,gBAAgB;AAAA,cAChB,iBAAiB;AAAA,YACnB;AAAA,UACF;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,YAC/C,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,aAAa,SAAS,WAAW,QAAQ,WAAW,QAAQ,gBAAgB,cAAc,WAAW,WAAW,MAAO;AAAA,UACzI;AAAA,UACA,MAAM;AAAA,YACJ,SAAS;AAAA,cACP,UAAU;AAAA,gBACR,SAAS;AAAA,gBACT,cAAc,CAAE,YAAY,MAAO;AAAA,cACrC;AAAA,YACF;AAAA,YACA,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,OAAO;AAAA,YACL,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,cAAc,MAAO;AAAA,YACrC,cAAc,CAAE,aAAa,gBAAgB,SAAU;AAAA,YACvD,YAAY;AAAA,UACd;AAAA,UACA,UAAU;AAAA,YACR,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,QAAQ;AAAA,gBACN,SAAS;AAAA,gBACT,cAAc,CAAE,eAAe,YAAY,YAAY,MAAO;AAAA,cAChE;AAAA,cACA,SAAS;AAAA,gBACP,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,cACjD;AAAA,YACF;AAAA,YACA,cAAc,CAAE,eAAe,YAAY,KAAM;AAAA,UACnD;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,aAAa,SAAS,WAAW,QAAQ,WAAW,QAAQ,gBAAgB,cAAc,WAAW,WAAW,MAAO;AAAA,UACzI;AAAA,UACA,UAAU;AAAA,YACR,cAAc;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,eAAe;AAAA,cACb,iBAAiB;AAAA,YACnB;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,eAAe,CAAE,aAAc;AAAA,UACjC;AAAA,UACA,GAAG;AAAA,YACD,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,UACA,OAAO;AAAA,YACL,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,SAAS;AAAA,YACP,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,YAC/C,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,YACR,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,eAAe;AAAA,cACb,iBAAiB;AAAA,cACjB,iBAAiB;AAAA,cACjB,iBAAiB;AAAA,YACnB;AAAA,UACF;AAAA,UACA,GAAG;AAAA,YACD,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,IAAI;AAAA,YACF,cAAc;AAAA,UAChB;AAAA,UACA,IAAI;AAAA,YACF,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,GAAG;AAAA,YACD,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,SAAS;AAAA,YACP,cAAc,CAAE,cAAc,MAAO;AAAA,YACrC,cAAc,CAAE,SAAS,eAAe,eAAe,UAAU,iBAAiB,eAAe,UAAU,YAAY,QAAQ,OAAO,QAAQ,WAAW,cAAc,QAAQ,QAAQ,gBAAgB,UAAU,UAAU,YAAY,gBAAgB,uBAAuB,iBAAiB,gBAAgB,oBAAoB,eAAe,gBAAgB,kBAAkB,cAAc,eAAe,kBAAkB,gBAAgB,gBAAgB,gBAAgB,cAAc,eAAe,gBAAgB,gBAAgB,aAAa,oBAAoB,cAAc,gBAAgB,YAAY,eAAe,gBAAgB,iBAAiB,WAAW,SAAU;AAAA,YAChqB,YAAY;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,UAAU;AAAA,gBACR,SAAS;AAAA,kBACP,YAAY;AAAA,oBACV,UAAU;AAAA,oBACV,MAAM,CAAE,MAAM,GAAI;AAAA,kBACpB;AAAA,gBACF;AAAA,gBACA,cAAc,CAAE,MAAO;AAAA,cACzB;AAAA,cACA,SAAS;AAAA,gBACP,cAAc;AAAA,cAChB;AAAA,YACF;AAAA,YACA,cAAc,CAAE,eAAe,YAAY,MAAO;AAAA,YAClD,eAAe;AAAA,cACb,iBAAiB;AAAA,YACnB;AAAA,YACA,eAAe,CAAE,WAAY;AAAA,UAC/B;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,OAAO;AAAA,YACL,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,YACN,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,YACN,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,YAC/C,cAAc,CAAE,eAAe,YAAY,KAAM;AAAA,YACjD,eAAe,CAAE,cAAe;AAAA,UAClC;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,SAAS;AAAA,YACP,cAAc;AAAA,YACd,eAAe,CAAE,aAAc;AAAA,UACjC;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc;AAAA,YACd,eAAe,CAAE,oBAAoB,kBAAmB;AAAA,UAC1D;AAAA,UACA,OAAO;AAAA,YACL,cAAc;AAAA,UAChB;AAAA,UACA,UAAU;AAAA,YACR,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,UAAU;AAAA,YACR,cAAc,CAAE,eAAe,YAAY,MAAO;AAAA,YAClD,cAAc;AAAA,YACd,eAAe;AAAA,cACb,iBAAiB;AAAA,cACjB,kBAAkB;AAAA,YACpB;AAAA,YACA,eAAe,CAAE,aAAa,iBAAkB;AAAA,UAClD;AAAA,UACA,OAAO;AAAA,YACL,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,cAAc;AAAA,UAChB;AAAA,UACA,MAAM;AAAA,YACJ,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,IAAI;AAAA,YACF,cAAc;AAAA,UAChB;AAAA,UACA,IAAI;AAAA,YACF,cAAc;AAAA,UAChB;AAAA,UACA,IAAI;AAAA,YACF,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,cAAc;AAAA,YACd,aAAa;AAAA,UACf;AAAA,UACA,GAAG;AAAA,YACD,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,IAAI;AAAA,YACF,cAAc,CAAE,MAAO;AAAA,YACvB,cAAc,CAAE,aAAa,SAAS,WAAW,QAAQ,WAAW,QAAQ,gBAAgB,cAAc,WAAW,WAAW,MAAO;AAAA,UACzI;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,YACL,SAAS;AAAA,cACP,UAAU;AAAA,gBACR,SAAS;AAAA,gBACT,cAAc,CAAE,eAAe,YAAY,YAAY,MAAO;AAAA,cAChE;AAAA,cACA,SAAS;AAAA,gBACP,cAAc,CAAE,YAAY,YAAY,MAAO;AAAA,cACjD;AAAA,YACF;AAAA,YACA,cAAc,CAAE,aAAc;AAAA,UAChC;AAAA,UACA,KAAK;AAAA,YACH,cAAc,CAAE,YAAY,MAAO;AAAA,YACnC,cAAc;AAAA,UAChB;AAAA,QACF;AACA,YAAI,oBAAoB;AACxB,YAAI,YAAY;AAAA,UACd,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,cAAc,CAAE,KAAK,KAAK,GAAI;AAAA,UAC9B,MAAM,CAAE,GAAG,KAAK,GAAI;AAAA,UACpB,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,OAAO,CAAE,KAAK,KAAK,GAAI;AAAA,UACvB,OAAO,CAAE,KAAK,KAAK,GAAI;AAAA,UACvB,QAAQ,CAAE,KAAK,KAAK,GAAI;AAAA,UACxB,OAAO,CAAE,GAAG,GAAG,CAAE;AAAA,UACjB,gBAAgB,CAAE,KAAK,KAAK,GAAI;AAAA,UAChC,MAAM,CAAE,GAAG,GAAG,GAAI;AAAA,UAClB,YAAY,CAAE,KAAK,IAAI,GAAI;AAAA,UAC3B,OAAO,CAAE,KAAK,IAAI,EAAG;AAAA,UACrB,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,WAAW,CAAE,IAAI,KAAK,GAAI;AAAA,UAC1B,YAAY,CAAE,KAAK,KAAK,CAAE;AAAA,UAC1B,WAAW,CAAE,KAAK,KAAK,EAAG;AAAA,UAC1B,OAAO,CAAE,KAAK,KAAK,EAAG;AAAA,UACtB,gBAAgB,CAAE,KAAK,KAAK,GAAI;AAAA,UAChC,UAAU,CAAE,KAAK,KAAK,GAAI;AAAA,UAC1B,SAAS,CAAE,KAAK,IAAI,EAAG;AAAA,UACvB,MAAM,CAAE,GAAG,KAAK,GAAI;AAAA,UACpB,UAAU,CAAE,GAAG,GAAG,GAAI;AAAA,UACtB,UAAU,CAAE,GAAG,KAAK,GAAI;AAAA,UACxB,eAAe,CAAE,KAAK,KAAK,EAAG;AAAA,UAC9B,UAAU,CAAE,KAAK,KAAK,GAAI;AAAA,UAC1B,WAAW,CAAE,GAAG,KAAK,CAAE;AAAA,UACvB,UAAU,CAAE,KAAK,KAAK,GAAI;AAAA,UAC1B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,aAAa,CAAE,KAAK,GAAG,GAAI;AAAA,UAC3B,gBAAgB,CAAE,IAAI,KAAK,EAAG;AAAA,UAC9B,YAAY,CAAE,KAAK,KAAK,CAAE;AAAA,UAC1B,YAAY,CAAE,KAAK,IAAI,GAAI;AAAA,UAC3B,SAAS,CAAE,KAAK,GAAG,CAAE;AAAA,UACrB,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,cAAc,CAAE,KAAK,KAAK,GAAI;AAAA,UAC9B,eAAe,CAAE,IAAI,IAAI,GAAI;AAAA,UAC7B,eAAe,CAAE,IAAI,IAAI,EAAG;AAAA,UAC5B,eAAe,CAAE,IAAI,IAAI,EAAG;AAAA,UAC5B,eAAe,CAAE,GAAG,KAAK,GAAI;AAAA,UAC7B,YAAY,CAAE,KAAK,GAAG,GAAI;AAAA,UAC1B,UAAU,CAAE,KAAK,IAAI,GAAI;AAAA,UACzB,aAAa,CAAE,GAAG,KAAK,GAAI;AAAA,UAC3B,SAAS,CAAE,KAAK,KAAK,GAAI;AAAA,UACzB,SAAS,CAAE,KAAK,KAAK,GAAI;AAAA,UACzB,YAAY,CAAE,IAAI,KAAK,GAAI;AAAA,UAC3B,WAAW,CAAE,KAAK,IAAI,EAAG;AAAA,UACzB,aAAa,CAAE,KAAK,KAAK,GAAI;AAAA,UAC7B,aAAa,CAAE,IAAI,KAAK,EAAG;AAAA,UAC3B,SAAS,CAAE,KAAK,GAAG,GAAI;AAAA,UACvB,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,MAAM,CAAE,KAAK,KAAK,CAAE;AAAA,UACpB,WAAW,CAAE,KAAK,KAAK,EAAG;AAAA,UAC1B,MAAM,CAAE,KAAK,KAAK,GAAI;AAAA,UACtB,OAAO,CAAE,GAAG,KAAK,CAAE;AAAA,UACnB,aAAa,CAAE,KAAK,KAAK,EAAG;AAAA,UAC5B,MAAM,CAAE,KAAK,KAAK,GAAI;AAAA,UACtB,UAAU,CAAE,KAAK,KAAK,GAAI;AAAA,UAC1B,SAAS,CAAE,KAAK,KAAK,GAAI;AAAA,UACzB,WAAW,CAAE,KAAK,IAAI,EAAG;AAAA,UACzB,QAAQ,CAAE,IAAI,GAAG,GAAI;AAAA,UACrB,OAAO,CAAE,KAAK,KAAK,GAAI;AAAA,UACvB,OAAO,CAAE,KAAK,KAAK,GAAI;AAAA,UACvB,UAAU,CAAE,KAAK,KAAK,GAAI;AAAA,UAC1B,eAAe,CAAE,KAAK,KAAK,GAAI;AAAA,UAC/B,WAAW,CAAE,KAAK,KAAK,CAAE;AAAA,UACzB,cAAc,CAAE,KAAK,KAAK,GAAI;AAAA,UAC9B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,sBAAsB,CAAE,KAAK,KAAK,GAAI;AAAA,UACtC,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,aAAa,CAAE,KAAK,KAAK,GAAI;AAAA,UAC7B,eAAe,CAAE,IAAI,KAAK,GAAI;AAAA,UAC9B,cAAc,CAAE,KAAK,KAAK,GAAI;AAAA,UAC9B,gBAAgB,CAAE,KAAK,KAAK,GAAI;AAAA,UAChC,gBAAgB,CAAE,KAAK,KAAK,GAAI;AAAA,UAChC,gBAAgB,CAAE,KAAK,KAAK,GAAI;AAAA,UAChC,aAAa,CAAE,KAAK,KAAK,GAAI;AAAA,UAC7B,MAAM,CAAE,GAAG,KAAK,CAAE;AAAA,UAClB,WAAW,CAAE,IAAI,KAAK,EAAG;AAAA,UACzB,OAAO,CAAE,KAAK,KAAK,GAAI;AAAA,UACvB,SAAS,CAAE,KAAK,GAAG,GAAI;AAAA,UACvB,QAAQ,CAAE,KAAK,GAAG,CAAE;AAAA,UACpB,kBAAkB,CAAE,KAAK,KAAK,GAAI;AAAA,UAClC,YAAY,CAAE,GAAG,GAAG,GAAI;AAAA,UACxB,cAAc,CAAE,KAAK,IAAI,GAAI;AAAA,UAC7B,cAAc,CAAE,KAAK,KAAK,GAAI;AAAA,UAC9B,gBAAgB,CAAE,IAAI,KAAK,GAAI;AAAA,UAC/B,iBAAiB,CAAE,KAAK,KAAK,GAAI;AAAA,UACjC,mBAAmB,CAAE,GAAG,KAAK,GAAI;AAAA,UACjC,iBAAiB,CAAE,IAAI,KAAK,GAAI;AAAA,UAChC,iBAAiB,CAAE,KAAK,IAAI,GAAI;AAAA,UAChC,cAAc,CAAE,IAAI,IAAI,GAAI;AAAA,UAC5B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,UAAU,CAAE,KAAK,KAAK,GAAI;AAAA,UAC1B,aAAa,CAAE,KAAK,KAAK,GAAI;AAAA,UAC7B,MAAM,CAAE,GAAG,GAAG,GAAI;AAAA,UAClB,SAAS,CAAE,KAAK,KAAK,GAAI;AAAA,UACzB,OAAO,CAAE,KAAK,KAAK,CAAE;AAAA,UACrB,WAAW,CAAE,KAAK,KAAK,EAAG;AAAA,UAC1B,QAAQ,CAAE,KAAK,KAAK,CAAE;AAAA,UACtB,WAAW,CAAE,KAAK,IAAI,CAAE;AAAA,UACxB,QAAQ,CAAE,KAAK,KAAK,GAAI;AAAA,UACxB,eAAe,CAAE,KAAK,KAAK,GAAI;AAAA,UAC/B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,eAAe,CAAE,KAAK,KAAK,GAAI;AAAA,UAC/B,eAAe,CAAE,KAAK,KAAK,GAAI;AAAA,UAC/B,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,MAAM,CAAE,KAAK,KAAK,EAAG;AAAA,UACrB,MAAM,CAAE,KAAK,KAAK,GAAI;AAAA,UACtB,MAAM,CAAE,KAAK,KAAK,GAAI;AAAA,UACtB,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,QAAQ,CAAE,KAAK,GAAG,GAAI;AAAA,UACtB,eAAe,CAAE,KAAK,IAAI,GAAI;AAAA,UAC9B,KAAK,CAAE,KAAK,GAAG,CAAE;AAAA,UACjB,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,WAAW,CAAE,IAAI,KAAK,GAAI;AAAA,UAC1B,aAAa,CAAE,KAAK,IAAI,EAAG;AAAA,UAC3B,QAAQ,CAAE,KAAK,KAAK,GAAI;AAAA,UACxB,YAAY,CAAE,KAAK,KAAK,EAAG;AAAA,UAC3B,UAAU,CAAE,IAAI,KAAK,EAAG;AAAA,UACxB,UAAU,CAAE,KAAK,KAAK,GAAI;AAAA,UAC1B,QAAQ,CAAE,KAAK,IAAI,EAAG;AAAA,UACtB,QAAQ,CAAE,KAAK,KAAK,GAAI;AAAA,UACxB,SAAS,CAAE,KAAK,KAAK,GAAI;AAAA,UACzB,WAAW,CAAE,KAAK,IAAI,GAAI;AAAA,UAC1B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,WAAW,CAAE,KAAK,KAAK,GAAI;AAAA,UAC3B,MAAM,CAAE,KAAK,KAAK,GAAI;AAAA,UACtB,aAAa,CAAE,GAAG,KAAK,GAAI;AAAA,UAC3B,WAAW,CAAE,IAAI,KAAK,GAAI;AAAA,UAC1B,KAAK,CAAE,KAAK,KAAK,GAAI;AAAA,UACrB,MAAM,CAAE,GAAG,KAAK,GAAI;AAAA,UACpB,SAAS,CAAE,KAAK,KAAK,GAAI;AAAA,UACzB,QAAQ,CAAE,KAAK,IAAI,EAAG;AAAA,UACtB,WAAW,CAAE,IAAI,KAAK,GAAI;AAAA,UAC1B,QAAQ,CAAE,KAAK,KAAK,GAAI;AAAA,UACxB,OAAO,CAAE,KAAK,KAAK,GAAI;AAAA,UACvB,OAAO,CAAE,KAAK,KAAK,GAAI;AAAA,UACvB,YAAY,CAAE,KAAK,KAAK,GAAI;AAAA,UAC5B,QAAQ,CAAE,KAAK,KAAK,CAAE;AAAA,UACtB,aAAa,CAAE,KAAK,KAAK,EAAG;AAAA,QAC9B;AACA,YAAI,qBAAqB;AACzB,YAAI,YAAY;AAAA,UACd,WAAW;AAAA,UACX,WAAW,SAAS,CAAC,GAAG,oBAAoB,oBAAoB,sBAAsB;AAAA,UACtF,UAAU;AAAA,UACV,WAAW;AAAA,QACb;AACA,YAAI,YAAY,SAAS,CAAC,GAAG,SAAS;AACtC,iBAAS,mBAAmBU,SAAQ;AAClC,iBAAO,KAAK,SAAS,EAAE,QAAQ,SAAS,UAAU;AAChD,gBAAIA,QAAO,QAAQ,GAAG;AACpB,wBAAU,QAAQ,IAAI,mBAAmB,UAAU,QAAQ,GAAGA,QAAO,QAAQ,CAAC;AAAA,YAChF;AAAA,UACF,CAAC;AAAA,QACH;AACA,iBAAS,iBAAiB;AACxB,iBAAO,KAAK,SAAS,EAAE,QAAQ,SAAS,UAAU;AAChD,sBAAU,QAAQ,IAAI,UAAU,QAAQ;AAAA,UAC1C,CAAC;AAAA,QACH;AACA,YAAI,oBAAoB;AACxB,iBAAS,gBAAgB,WAAW,OAAOjN,QAAO;AAChD,cAAI,KAAK,KAAK,KAAK,GAAG;AACpB,gBAAIA,WAAU,GAAG;AACf,qBAAO,WAAW,KAAK,IAAI;AAAA,YAC7B;AACA,mBAAO,WAAW,KAAK,IAAI,MAAM;AAAA,UACnC;AACA,cAAI,UAAUA,MAAK,MAAM,KAAK;AAC5B,gBAAI,QAAQ,KAAK,KAAK,GAAG;AACvB,qBAAO,WAAW,KAAK,IAAI;AAAA,YAC7B;AACA,gBAAI,OAAO,KAAK,KAAK,GAAG;AACtB,qBAAO,WAAW,KAAK,IAAI;AAAA,YAC7B;AAAA,UACF;AACA,iBAAO,WAAW,KAAK;AAAA,QACzB;AACA,iBAAS,SAAS,OAAO;AACvB,cAAI,SAAS,eAAe,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,aAAa,OAAO,CAAC,GAAG,YAAY,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AACvH,wBAAc;AACd,uBAAa;AACb,cAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,YAAY,CAAC,KAAK;AAC/C,cAAI,MAAM,QAAQ,IAAI,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC;AAC/C,cAAI,OAAO,YAAY,OAAO;AAC9B,cAAI;AACJ,cAAI,MAAM,IAAI;AACZ,qBAAS,CAAE,MAAM,KAAK,CAAE;AAAA,UAC1B,WAAW,MAAM,KAAK;AACpB,qBAAS,CAAE,KAAK,MAAM,CAAE;AAAA,UAC1B,WAAW,MAAM,KAAK;AACpB,qBAAS,CAAE,GAAG,MAAM,GAAI;AAAA,UAC1B,WAAW,MAAM,KAAK;AACpB,qBAAS,CAAE,GAAG,KAAK,IAAK;AAAA,UAC1B,WAAW,MAAM,KAAK;AACpB,qBAAS,CAAE,KAAK,GAAG,IAAK;AAAA,UAC1B,OAAO;AACL,qBAAS,CAAE,MAAM,GAAG,GAAI;AAAA,UAC1B;AACA,iBAAO,OAAO,IAAI,SAAS,SAAS;AAClC,mBAAO,KAAK,OAAO,UAAU,QAAQ,GAAG;AAAA,UAC1C,CAAC,EAAE,OAAO,KAAK;AAAA,QACjB;AACA,iBAASkN,OAAM,KAAK,OAAO,MAAM,OAAO;AACtC,eAAK,MAAM;AACX,eAAK,QAAQ;AACb,eAAK,OAAO;AACZ,eAAK,QAAQ;AACb,eAAK,cAAc,SAAS,cAAc;AACxC,gBAAI,YAAY,KAAK,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE;AAChD,gBAAI,cAAc,KAAK,MAAM,KAAK,KAAK,EAAE,SAAS,EAAE;AACpD,gBAAI,aAAa,KAAK,MAAM,KAAK,IAAI,EAAE,SAAS,EAAE;AAClD,mBAAO,OAAO,KAAK,MAAM,OAAO,YAAY,MAAM,cAAc,KAAK,QAAQ,OAAO,cAAc,MAAM,gBAAgB,KAAK,OAAO,OAAO,aAAa,MAAM;AAAA,UAChK;AACA,cAAI,WAAW;AACf,cAAI,eAAe;AACnB,eAAK,cAAc,SAASC,aAAY,aAAa;AACnD,gBAAI,kBAAkB,UAAU,WAAW,KAAK,gBAAgB,eAAe;AAC7E,kBAAI,SAAS,kBAAkB,UAAU,WAAW,KAAK,CAAE,GAAG,GAAG,CAAE,GAAG,SAAS,eAAe,QAAQ,CAAC,GAAG,OAAO,OAAO,CAAC,GAAG,SAAS,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAChK,mBAAK,MAAM;AACX,mBAAK,QAAQ;AACb,mBAAK,OAAO;AACZ,mBAAK,QAAQ,gBAAgB,gBAAgB,IAAI;AACjD;AAAA,YACF;AACA,gBAAI,YAAY,MAAM,YAAY,GAAG;AACnC,mBAAK,mBAAmB,WAAW;AACnC;AAAA,YACF;AACA,gBAAI,YAAY,MAAM,QAAQ,GAAG;AAC/B,mBAAK,eAAe,WAAW;AAC/B;AAAA,YACF;AACA,kBAAM,IAAI,MAAM,0BAA0B,OAAO,aAAa,GAAG,CAAC;AAAA,UACpE;AACA,eAAK,iBAAiB,SAAS,eAAe,aAAa;AACzD,gBAAI,gBAAgB,eAAe;AACjC,mBAAK,MAAM;AACX,mBAAK,QAAQ;AACb,mBAAK,OAAO;AACZ,mBAAK,QAAQ;AACb;AAAA,YACF;AACA,iBAAK,mBAAmB,WAAW;AAAA,UACrC;AACA,eAAK,iBAAiB,SAAS,eAAe,aAAa;AACzD,gBAAI,CAAC,YAAY,MAAM,QAAQ,KAAK,CAAE,GAAG,CAAE,EAAE,SAAS,YAAY,MAAM,GAAG;AACzE;AAAA,YACF;AACA,0BAAc,YAAY,QAAQ,KAAK,EAAE;AACzC,gBAAI,YAAY,SAAS,GAAG;AAC1B,kBAAI,eAAe,aAAa,gBAAgB,eAAe,cAAc,CAAC,GAAGjJ,KAAI,cAAc,CAAC,GAAGkJ,KAAI,cAAc,CAAC,GAAG1J,KAAI,cAAc,CAAC,GAAG0F,KAAI,cAAc,CAAC;AACtK,4BAAclF,KAAIA,KAAIkJ,KAAIA,KAAI1J,KAAIA;AAClC,kBAAI0F,IAAG;AACL,+BAAeA,KAAIA;AAAA,cACrB;AAAA,YACF;AACA,gBAAI,UAAU,YAAY,MAAM,SAAS;AACzC,iBAAK,MAAM,SAAS,QAAQ,CAAC,GAAG,EAAE;AAClC,iBAAK,QAAQ,SAAS,QAAQ,CAAC,GAAG,EAAE;AACpC,iBAAK,OAAO,SAAS,QAAQ,CAAC,GAAG,EAAE;AACnC,gBAAI,QAAQ,CAAC,GAAG;AACd,mBAAK,QAAQ,SAAS,QAAQ,CAAC,GAAG,EAAE,IAAI;AAAA,YAC1C,OAAO;AACL,mBAAK,QAAQ;AAAA,YACf;AAAA,UACF;AACA,eAAK,qBAAqB,SAAS,mBAAmB,aAAa;AACjE,gBAAI,SAAS,YAAY,MAAM,YAAY,KAAK,CAAC,GAAG,SAAS,eAAe,QAAQ,CAAC,GAAG,YAAY,OAAO,CAAC,GAAG,cAAc,OAAO,CAAC;AACrI,gBAAI,CAAC,aAAa,CAAC,aAAa;AAC9B;AAAA,YACF;AACA,gBAAI,YAAY,YAAY,MAAM,eAAe,EAAE,IAAI,SAAShK,MAAK;AACnE,qBAAOA,KAAI,QAAQ,KAAK,EAAE,EAAE,KAAK;AAAA,YACnC,CAAC,EAAE,OAAO,SAASA,MAAK;AACtB,qBAAOA,SAAQ;AAAA,YACjB,CAAC;AACD,gBAAI,YAAY,UAAU,IAAI,SAAS,KAAKY,QAAO;AACjD,qBAAO,gBAAgB,WAAW,KAAKA,MAAK;AAAA,YAC9C,CAAC;AACD,gBAAI,UAAU,OAAO,GAAG,CAAC,MAAM,OAAO;AACpC,0BAAY,SAAS,SAAS;AAAA,YAChC;AACA,iBAAK,MAAM,UAAU,CAAC;AACtB,iBAAK,QAAQ,UAAU,CAAC;AACxB,iBAAK,OAAO,UAAU,CAAC;AACvB,iBAAK,QAAQ,OAAO,UAAU,CAAC,MAAM,WAAW,UAAU,CAAC,IAAI;AAAA,UACjE;AACA,eAAK,uBAAuB,SAAS,uBAAuB;AAC1D,gBAAI,QAAQ,KAAK,MAAM;AACvB,gBAAI,QAAQ,KAAK,QAAQ;AACzB,gBAAI,QAAQ,KAAK,OAAO;AACxB,gBAAIkE,KAAI,SAAS,UAAS,QAAQ,QAAQ,KAAK,KAAK,QAAQ,SAAQ,OAAO,GAAG;AAC9E,gBAAIkJ,KAAI,SAAS,UAAS,QAAQ,QAAQ,KAAK,KAAK,QAAQ,SAAQ,OAAO,GAAG;AAC9E,gBAAI1J,KAAI,SAAS,UAAS,QAAQ,QAAQ,KAAK,KAAK,QAAQ,SAAQ,OAAO,GAAG;AAC9E,mBAAO,SAAQQ,KAAI,SAAQkJ,KAAI,SAAQ1J;AAAA,UACzC;AAAA,QACF;AACA,YAAI,gBAAgBwJ;AACpB,iBAAS,sBAAsB,UAAU;AACvC,cAAI,UAAU,IAAI,cAAc;AAChC,kBAAQ,YAAY,SAAS,iBAAiB,kBAAkB,CAAC;AACjE,cAAI,QAAQ,UAAU,GAAG;AACvB,gBAAI,UAAU,SAAS,iBAAiB,SAAS;AACjD,oBAAQ,QAAQ,QAAQ,QAAQ;AAAA,UAClC;AACA,iBAAO;AAAA,QACT;AACA,YAAI,mCAAmC;AACvC,iBAAS,SAAS,MAAM;AACtB,cAAIX,SAAQ1P,QAAO,iBAAiB,IAAI;AACxC,iBAAO,0BAA0B,MAAM0P,MAAK,KAAK,iCAAiCA,MAAK,EAAE,UAAU;AAAA,QACrG;AACA,YAAI,oBAAoB;AACxB,YAAI,sBAAsB;AAC1B,iBAAS,WAAW,SAAS;AAC3B,cAAI,CAAC,oBAAoB,KAAK,QAAQ,aAAa,MAAM,CAAC,GAAG;AAC3D,mBAAO;AAAA,UACT;AACA,cAAI;AACJ,cAAI,OAAO,cAAc,IAAI,eAAe,MAAM,aAAa;AAC7D,4BAAgB,cAAc,IAAI,eAAe;AAAA,UACnD,OAAO;AACL,4BAAgB,2BAA2B,IAAI,OAAO,gEAAgE,EAAE,CAAC;AACzH,0BAAc,IAAI,iBAAiB,iBAAiB,IAAI;AAAA,UAC1D;AACA,cAAI,CAAC,eAAe;AAClB,mBAAO;AAAA,UACT;AACA,iBAAO,QAAQ,wBAAwB,cAAc,UAAU,MAAM,QAAQ;AAAA,QAC/E;AACA,YAAI,uBAAuB;AAC3B,iBAAS,8BAA8B,UAAU,YAAY;AAC3D,cAAI,oBAAoB,CAAE,SAAS,QAAS;AAC5C,cAAI,gBAAgB,CAAC;AACrB,cAAI,cAAc;AAClB,mBAASvM,SAAQ,GAAGA,SAAQ,SAAS,QAAQ,EAAEA,QAAO;AACpD,gBAAI,cAAc,SAASA,MAAK;AAChC,gBAAI,gBAAgB,YAAY;AAC9B,4BAAc;AAAA,YAChB;AACA,gBAAIuM,SAAQ1P,QAAO,iBAAiB,WAAW;AAC/C,gBAAI,CAAC,eAAe,kBAAkB,QAAQ0P,OAAM,QAAQ,MAAM,IAAI;AACpE,8BAAgB,CAAC;AACjB;AAAA,YACF;AACA,0BAAc,KAAK,WAAW;AAAA,UAChC;AACA,iBAAO;AAAA,QACT;AACA,YAAI,4CAA4C;AAChD,iBAAS,kBAAkB,MAAM;AAC/B,cAAI,QAAQ,2BAA2B,IAAI;AAC3C,cAAI,WAAW,MAAM;AACrB,iBAAO,UAAU;AACf,gBAAI,mBAAmB,SAAS,UAAU,GAAG;AAC3C,qBAAO,SAAS;AAAA,YAClB;AACA,uBAAW,SAAS;AAAA,UACtB;AAAA,QACF;AACA,iBAAS,UAAU,MAAM,QAAQ;AAC/B,cAAI,YAAY,KAAK,sBAAsB;AAC3C,cAAI,SAAS;AACb,cAAI,OAAO;AAAA,YACT,KAAK,UAAU,MAAM;AAAA,YACrB,QAAQ,UAAU,SAAS;AAAA,YAC3B,MAAM,UAAU,OAAO;AAAA,YACvB,OAAO,UAAU,QAAQ;AAAA,UAC3B;AACA,cAAI,aAAa,OAAO,sBAAsB;AAC9C,cAAI,YAAY,WAAW;AAC3B,cAAI,aAAa,WAAW;AAC5B,cAAI,mBAAmB;AAAA,YACrB,KAAK,YAAY,OAAO;AAAA,YACxB,QAAQ,YAAY,OAAO,YAAY,OAAO;AAAA,YAC9C,MAAM,aAAa,OAAO;AAAA,YAC1B,OAAO,aAAa,OAAO,aAAa,OAAO;AAAA,UACjD;AACA,cAAIA,SAAQ1P,QAAO,iBAAiB,MAAM;AAC1C,cAAI0P,OAAM,iBAAiB,SAAS,MAAM,UAAU;AAClD,mBAAO;AAAA,UACT;AACA,cAAI,KAAK,OAAO,iBAAiB,QAAQ,KAAK,OAAO,WAAW,QAAQ,KAAK,MAAM,iBAAiB,OAAO,KAAK,MAAM,WAAW,OAAO,KAAK,QAAQ,iBAAiB,SAAS,KAAK,QAAQ,WAAW,SAAS,KAAK,SAAS,iBAAiB,UAAU,KAAK,SAAS,WAAW,QAAQ;AACxR,mBAAO;AAAA,UACT;AACA,cAAI,KAAK,QAAQ,WAAW,SAAS,KAAK,SAAS,WAAW,QAAQ;AACpE,mBAAOA,OAAM,aAAa,YAAYA,OAAM,aAAa,UAAUA,OAAM,aAAa,YAAY,kBAAkB1P,QAAO,mBAAmB,kBAAkBA,QAAO;AAAA,UACzK;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,iBAAiB,MAAM,QAAQ;AACtC,cAAI,uBAAuB,kBAAkB,MAAM;AACnD,aAAG;AACD,gBAAI,qBAAqB,kBAAkB,IAAI;AAC/C,gBAAI,uBAAuB,wBAAwB,uBAAuB,QAAQ;AAChF,qBAAO,UAAU,MAAM,MAAM;AAAA,YAC/B;AACA,mBAAO;AAAA,UACT,SAAS;AACT,iBAAO;AAAA,QACT;AACA,YAAI,4BAA4B;AAChC,iBAAS,wBAAwB,OAAO,OAAO;AAC7C,cAAIwP,QAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAItP;AAC/E,cAAII,KAAI,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AAC5E,cAAIA,KAAI,KAAK;AACX,kBAAM,IAAI,MAAM,wBAAwB;AAAA,UAC1C;AACA,iBAAO,MAAM,KAAKkP,MAAK,kBAAkB,OAAO,KAAK,KAAK,CAAC,CAAC,EAAE,OAAO,SAAS,OAAO;AACnF,mBAAO,uBAAuB,KAAK,MAAMA;AAAA,UAC3C,CAAC,EAAE,OAAO,SAAS,OAAO,KAAK;AAC7B,gBAAI,uBAAuB,GAAG,GAAG;AAC/B,kBAAI,cAAc,wBAAwB,OAAO,OAAO,IAAI,YAAYlP,KAAI,CAAC;AAC7E,sBAAQ,MAAM,OAAO,WAAW;AAChC,kBAAI,MAAM,UAAU,0BAA0B,MAAM,CAAC,GAAG,GAAG,GAAG;AAC5D,sBAAM,KAAK,GAAG;AAAA,cAChB;AAAA,YACF,OAAO;AACL,oBAAM,KAAK,GAAG;AAAA,YAChB;AACA,mBAAO;AAAA,UACT,GAAG,CAAC,CAAC;AAAA,QACP;AACA,YAAI,qCAAqC;AACzC,iBAAS,sBAAsB,MAAMkQ,YAAW;AAC9C,cAAI,CAAC,KAAK,aAAaA,UAAS,GAAG;AACjC,mBAAO;AAAA,UACT;AACA,cAAI,YAAY,KAAK,SAAS,YAAY;AAC1C,cAAI,UAAU;AACd,cAAI,CAAC,CAAE,KAAK,MAAO,EAAE,SAAS,SAAS,KAAK,KAAK,iBAAiB;AAChE,sBAAUtQ,UAAS,cAAc,GAAG;AACpC,oBAAQ,OAAO,KAAK,aAAasQ,UAAS;AAAA,UAC5C;AACA,cAAI,WAAW,CAAE,UAAU,OAAQ,EAAE,SAAS,QAAQ,QAAQ,IAAI,QAAQ,SAAS,QAAQ,OAAO,GAAG,IAAI,QAAQ;AACjH,cAAI,iBAAiB,MAAM,KAAK,QAAQ,QAAQ,IAAI,QAAQ,WAAW,IAAI,OAAO,QAAQ,QAAQ;AAClG,cAAI,wBAAwB,sBAAsB,cAAc,GAAG,WAAW,sBAAsB,UAAU,WAAW,sBAAsB;AAC/I,iBAAO;AAAA,YACL;AAAA,YACA,UAAU,QAAQ;AAAA,YAClB,MAAM,QAAQ,QAAQ,IAAI;AAAA,YAC1B,UAAU,MAAM,KAAK,QAAQ,IAAI,WAAW,GAAG,OAAO,UAAU,GAAG;AAAA,YACnE,QAAQ,eAAe,QAAQ,MAAM;AAAA,YACrC,MAAM,aAAa,QAAQ,IAAI;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AACA,iBAAS,QAAQ,MAAM;AACrB,cAAI,eAAe,CAAE,OAAO,IAAK;AACjC,iBAAO,CAAC,aAAa,SAAS,IAAI,IAAI,OAAO;AAAA,QAC/C;AACA,iBAAS,sBAAsB,UAAU;AACvC,cAAI,WAAW,SAAS,MAAM,GAAG,EAAE,IAAI;AACvC,cAAI,CAAC,YAAY,SAAS,QAAQ,GAAG,MAAM,IAAI;AAC7C,mBAAO;AAAA,cACL;AAAA,cACA,UAAU;AAAA,YACZ;AAAA,UACF;AACA,iBAAO;AAAA,YACL,UAAU,SAAS,QAAQ,UAAU,EAAE;AAAA,YACvC,UAAU,SAAS,KAAK,QAAQ,IAAI,KAAK;AAAA,UAC3C;AAAA,QACF;AACA,iBAAS,eAAe,WAAW;AACjC,cAAI9D,SAAQ,CAAC;AACb,cAAI,CAAC,aAAa,CAAC,UAAU,QAAQ;AACnC,mBAAOA;AAAA,UACT;AACA,cAAI,QAAQ,UAAU,UAAU,CAAC,EAAE,MAAM,GAAG;AAC5C,cAAI,CAAC,SAAS,CAAC,MAAM,QAAQ;AAC3B,mBAAOA;AAAA,UACT;AACA,mBAASvJ,SAAQ,GAAGA,SAAQ,MAAM,QAAQA,UAAS;AACjD,gBAAI,OAAO,MAAMA,MAAK;AACtB,gBAAI,cAAc,KAAK,MAAM,GAAG,GAAG,eAAe,eAAe,aAAa,CAAC,GAAG,MAAM,aAAa,CAAC,GAAG,gBAAgB,aAAa,CAAC,GAAG,QAAQ,kBAAkB,SAAS,KAAK;AAClL,YAAAuJ,OAAM,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,KAAK;AAAA,UAC3D;AACA,iBAAOA;AAAA,QACT;AACA,iBAAS,aAAaC,OAAM;AAC1B,cAAI,CAACA,OAAM;AACT,mBAAO;AAAA,UACT;AACA,cAAI,YAAY;AAChB,cAAI,WAAWA,MAAK,MAAM,SAAS;AACnC,cAAI,CAAC,UAAU;AACb,mBAAO;AAAA,UACT;AACA,cAAI,YAAY,eAAe,UAAU,CAAC,GAAG,aAAa,UAAU,CAAC;AACrE,cAAI,eAAe,KAAK;AACtB,mBAAO;AAAA,UACT;AACA,iBAAOA;AAAA,QACT;AACA,YAAI,mCAAmC;AACvC,iBAAS,iBAAiB,MAAM,QAAQ;AACtC,cAAI,aAAa,OAAO,sBAAsB;AAC9C,cAAI,YAAY,WAAW;AAC3B,cAAI,aAAa,WAAW;AAC5B,cAAI,mBAAmB;AAAA,YACrB,KAAK,YAAY,OAAO;AAAA,YACxB,QAAQ,YAAY,OAAO,YAAY,OAAO;AAAA,YAC9C,MAAM,aAAa,OAAO;AAAA,YAC1B,OAAO,aAAa,OAAO,aAAa,OAAO;AAAA,UACjD;AACA,cAAI,KAAK,OAAO,iBAAiB,SAAS,KAAK,OAAO,WAAW,SAAS,KAAK,MAAM,iBAAiB,UAAU,KAAK,MAAM,WAAW,UAAU,KAAK,QAAQ,iBAAiB,QAAQ,KAAK,QAAQ,WAAW,QAAQ,KAAK,SAAS,iBAAiB,OAAO,KAAK,SAAS,WAAW,KAAK;AACxR,mBAAO;AAAA,UACT;AACA,cAAI+C,SAAQ1P,QAAO,iBAAiB,MAAM;AAC1C,cAAI,KAAK,OAAO,WAAW,SAAS,KAAK,MAAM,WAAW,QAAQ;AAChE,mBAAO0P,OAAM,aAAa,YAAYA,OAAM,aAAa,UAAU,kBAAkB1P,QAAO,mBAAmB,kBAAkBA,QAAO;AAAA,UAC1I;AACA,iBAAO;AAAA,QACT;AACA,YAAI,4BAA4B;AAChC,YAAI;AACJ,YAAI,cAAc,SAAS,uBAAuB;AAChD,oBAAUyQ,cAAa,qBAAqB;AAC5C,cAAI,SAAS,aAAaA,YAAW;AACrC,mBAASA,aAAY,MAAM,QAAQ,UAAU;AAC3C,gBAAI;AACJ,4BAAgB,MAAMA,YAAW;AACjC,oBAAQ,OAAO,KAAK,IAAI;AACxB,kBAAM,WAAW;AACjB,kBAAM,WAAW,CAAC;AAClB,kBAAM,aAAa;AACnB,kBAAM,SAAS;AACf,kBAAM,YAAY;AAClB,kBAAM,SAAS,CAAC;AAChB,gBAAI,OAAO,kBAAkB,aAAa;AACxC,8BAAgB,iBAAiB,KAAK,aAAa;AAAA,YACrD;AACA,kBAAM,WAAW;AACjB,gBAAI,KAAK,SAAS,YAAY,MAAM,SAAS;AAC3C,kBAAIzM,QAAO,KAAK,aAAa,MAAM;AACnC,cAAAA,QAAO,MAAM,WAAWA,SAAQA,SAAQ,IAAI,YAAY;AACxD,kBAAI,CAAC,yBAAyB,EAAE,SAASA,KAAI,GAAG;AAC9C,gBAAAA,QAAO;AAAA,cACT;AACA,oBAAM,QAAQA;AAAA,YAChB;AACA,gBAAI,cAAc,IAAI,SAAS,GAAG;AAChC,4BAAc,IAAI,SAAS,EAAE,IAAI,MAAM,uBAAuB,KAAK,CAAC;AAAA,YACtE;AACA,mBAAO;AAAA,UACT;AACA,uBAAayM,cAAa,CAAE;AAAA,YAC1B,KAAK;AAAA,YACL,OAAO,SAAS,KAAK,UAAU;AAC7B,kBAAI,OAAO,KAAK,WAAW,iBAAiB,YAAY;AACtD,uBAAO;AAAA,cACT;AACA,qBAAO,KAAK,WAAW,aAAa,QAAQ;AAAA,YAC9C;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,OAAO,SAAS,QAAQ,UAAU;AAChC,kBAAI,OAAO,KAAK,WAAW,iBAAiB,YAAY;AACtD,uBAAO;AAAA,cACT;AACA,qBAAO,KAAK,WAAW,aAAa,QAAQ;AAAA,YAC9C;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,OAAO,SAAS,8BAA8B,UAAU;AACtD,kBAAI,MAAM,mBAAmB;AAC7B,kBAAI,CAAC,KAAK,OAAO,eAAe,GAAG,GAAG;AACpC,oBAAI,CAAC,KAAK,OAAO,eAAe,eAAe,GAAG;AAChD,uBAAK,OAAO,gBAAgBzQ,QAAO,iBAAiB,KAAK,UAAU;AAAA,gBACrE;AACA,qBAAK,OAAO,GAAG,IAAI,KAAK,OAAO,cAAc,iBAAiB,QAAQ;AAAA,cACxE;AACA,qBAAO,KAAK,OAAO,GAAG;AAAA,YACxB;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAASiC,OAAM;AAClB,kBAAI,mBAAmB,KAAK,YAAY,WAAW,iBAAiB,UAAU,YAAY,iBAAiB,UAAUqC,MAAK,iBAAiB,IAAI,WAAW,iBAAiB,UAAU,YAAY,iBAAiB,WAAW,QAAQ,iBAAiB;AACtP,qBAAO;AAAA,gBACL;AAAA,gBACA,UAAU,KAAK,WAAW,YAAY,UAAU,YAAY;AAAA,gBAC5D,IAAIA;AAAA,gBACJ,MAAM,KAAK;AAAA,gBACX;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,YACF;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAASrC,OAAM;AAClB,kBAAI,CAAC,KAAK,OAAO,eAAe,WAAW,GAAG;AAC5C,oBAAIyO;AACJ,oBAAI,KAAK,WAAW,sBAAsB1Q,QAAO,cAAc;AAC7D,kBAAA0Q,SAAQ,KAAK,WAAW;AAAA,gBAC1B,OAAO;AACL,kBAAAA,SAAQ,KAAK,WAAW,UAAU,KAAK,EAAE;AAAA,gBAC3C;AACA,qBAAK,OAAO,YAAY,MAAM,KAAKA,MAAK,EAAE,IAAI,SAAS,MAAM;AAC3D,yBAAO,KAAK;AAAA,gBACd,CAAC;AAAA,cACH;AACA,qBAAO,KAAK,OAAO;AAAA,YACrB;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAASzO,OAAM;AAClB,kBAAI,CAAC,KAAK,OAAO,eAAe,aAAa,GAAG;AAC9C,qBAAK,OAAO,cAAc,qBAAqB,KAAK,UAAU;AAAA,cAChE;AACA,qBAAO,KAAK,OAAO;AAAA,YACrB;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAASA,OAAM;AAClB,kBAAI,CAAC,KAAK,OAAO,eAAe,kBAAkB,GAAG;AACnD,qBAAK,OAAO,mBAAmB,8BAA8B,IAAI;AAAA,cACnE;AACA,qBAAO,KAAK,OAAO;AAAA,YACrB;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAASA,OAAM;AAClB,kBAAI,CAAC,KAAK,OAAO,eAAe,aAAa,GAAG;AAC9C,qBAAK,OAAO,cAAc,MAAM,KAAK,KAAK,WAAW,eAAe,CAAC,EAAE,OAAO,SAAS,MAAM;AAC3F,yBAAO,KAAK,QAAQ;AAAA,gBACtB,CAAC;AAAA,cACH;AACA,qBAAO,KAAK,OAAO;AAAA,YACrB;AAAA,UACF,GAAG;AAAA,YACD,KAAK;AAAA,YACL,KAAK,SAASA,OAAM;AAClB,kBAAI,CAAC,KAAK,OAAO,eAAe,oBAAoB,GAAG;AACrD,qBAAK,OAAO,qBAAqB,KAAK,WAAW,sBAAsB;AAAA,cACzE;AACA,qBAAO,KAAK,OAAO;AAAA,YACrB;AAAA,UACF,CAAE,CAAC;AACH,iBAAOwO;AAAA,QACT,EAAE,6BAA6B;AAC/B,YAAI,uBAAuB;AAC3B,iBAAS,gBAAgB,MAAM;AAC7B,cAAI,SAAS,CAAC;AACd,iBAAO,KAAK;AACZ,iBAAO,MAAM;AACX,mBAAO,KAAK,IAAI;AAChB,mBAAO,KAAK;AAAA,UACd;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,YAAY,MAAM,UAAU,QAAQ;AAC3C,cAAI,QAAQ,WAAW;AACvB,mBAAS,gBAAgB,KAAK,OAAO,SAAS;AAC5C,gBAAI,eAAe,YAAY,OAAO,UAAU,OAAO;AACvD,gBAAI,cAAc;AAChB,oBAAM,IAAI,OAAO,YAAY;AAAA,YAC/B;AACA,mBAAO;AAAA,UACT;AACA,cAAI,KAAK,iBAAiB;AACxB,mBAAO,KAAK;AAAA,UACd;AACA,sBAAY,KAAK,SAAS,YAAY;AACtC,cAAI,uBAAuB,IAAI,GAAG;AAChC,qBAAS,IAAI,qBAAqB,MAAM,QAAQ,QAAQ;AACxD,uBAAW,MAAM,KAAK,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;AACrD,wBAAY,MAAM,KAAK,KAAK,WAAW,UAAU;AACjD,mBAAO,WAAW,UAAU,OAAO,SAAS,KAAK,OAAO;AACtD,qBAAO,gBAAgB,KAAK,OAAO,MAAM;AAAA,YAC3C,GAAG,CAAC,CAAC;AACL,mBAAO,CAAE,MAAO;AAAA,UAClB,OAAO;AACL,gBAAI,cAAc,aAAa,OAAO,KAAK,wBAAwB,YAAY;AAC7E,0BAAY,MAAM,KAAK,KAAK,oBAAoB,CAAC;AACjD,qBAAO,UAAU,OAAO,SAAS,KAAK,OAAO;AAC3C,uBAAO,gBAAgB,KAAK,OAAO,MAAM;AAAA,cAC3C,GAAG,CAAC,CAAC;AAAA,YACP,WAAW,cAAc,UAAU,OAAO,KAAK,kBAAkB,YAAY;AAC3E,0BAAY,MAAM,KAAK,KAAK,cAAc,CAAC;AAC3C,kBAAI,CAAC,UAAU,QAAQ;AACrB,4BAAY,gBAAgB,IAAI;AAAA,cAClC;AACA,kBAAI,OAAOzQ,QAAO,iBAAiB,IAAI;AACvC,kBAAI,OAAO;AACT,yBAAS,IAAI,qBAAqB,MAAM,QAAQ,QAAQ;AACxD,uBAAO,WAAW,UAAU,OAAO,SAAS,KAAK,OAAO;AACtD,yBAAO,gBAAgB,KAAK,OAAO,MAAM;AAAA,gBAC3C,GAAG,CAAC,CAAC;AACL,uBAAO,CAAE,MAAO;AAAA,cAClB,OAAO;AACL,uBAAO,UAAU,OAAO,SAAS,KAAK,OAAO;AAC3C,yBAAO,gBAAgB,KAAK,OAAO,MAAM;AAAA,gBAC3C,GAAG,CAAC,CAAC;AAAA,cACP;AAAA,YACF,OAAO;AACL,kBAAI,KAAK,aAAa,GAAG;AACvB,yBAAS,IAAI,qBAAqB,MAAM,QAAQ,QAAQ;AACxD,4BAAY,MAAM,KAAK,KAAK,UAAU;AACtC,uBAAO,WAAW,UAAU,OAAO,SAAS,KAAK,OAAO;AACtD,yBAAO,gBAAgB,KAAK,OAAO,MAAM;AAAA,gBAC3C,GAAG,CAAC,CAAC;AACL,uBAAO,CAAE,MAAO;AAAA,cAClB,WAAW,KAAK,aAAa,GAAG;AAC9B,uBAAO,CAAE,IAAI,qBAAqB,MAAM,MAAM,CAAE;AAAA,cAClD;AACA,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AACA,iBAAS,mBAAmB;AAC1B,cAAI,OAAO,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIE,UAAS;AACxF,cAAI,WAAW,UAAU,SAAS,IAAI,UAAU,CAAC,IAAI;AACrD,wBAAc,IAAI,WAAW,oBAAI,QAAQ,CAAC;AAC1C,iBAAO,YAAY,MAAM,UAAU,IAAI;AAAA,QACzC;AACA,YAAI,6BAA6B;AACjC,iBAAS,YAAY,MAAM;AACzB,cAAI,CAAC,MAAM;AACT,mBAAO;AAAA,UACT;AACA,iBAAO,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,YAAY;AAAA,QAC/C;AACA,YAAI,wBAAwB;AAC5B,iBAAS,eAAe,UAAU;AAChC,cAAI,gBAAgB,CAAC;AACrB,wBAAc,OAAO,SAAS,KAAK,OAAO,SAAS,GAAG;AACtD,wBAAc,MAAM,SAAS;AAC7B,iBAAO,OAAO,KAAK,aAAa,EAAE,IAAI,SAAS,KAAK;AAClD,gBAAI,CAAC,cAAc,GAAG,EAAE,QAAQ;AAC9B;AAAA,YACF;AACA,gBAAIyQ,OAAM,IAAI,OAAO,KAAK,iBAAiB,GAAG;AAC9C,gBAAIA,QAAO,OAAOA,KAAI,mBAAmB,YAAY;AACnD,qBAAOA,KAAI,eAAe,cAAc,GAAG,EAAE,IAAI,SAAS,QAAQ;AAChE,uBAAO,OAAO,WAAW;AAAA,cAC3B,CAAC,CAAC;AAAA,YACJ;AAAA,UACF,CAAC,EAAE,OAAO,SAASrQ,IAAG;AACpB,mBAAOA,OAAM;AAAA,UACf,CAAC,EAAE,KAAK,MAAM;AAAA,QAChB;AACA,YAAI,0BAA0B;AAC9B,iBAAS,qBAAqB;AAC5B,cAAI,MAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIN;AAC9E,cAAI,cAAc,IAAI,QAAQ4Q,UAAS,gBAAgB,SAAS,CAAC,IAAI,aAAa,iBAAiB,IAAI,WAAWC,aAAY,mBAAmB,SAAS,CAAC,IAAI,gBAAgB,gBAAgB,IAAI,UAAUC,YAAW,kBAAkB,SAAS,CAAC,IAAI,eAAe,cAAc,IAAI,aAAaC,cAAa,IAAI;AACvT,cAAI,cAAcH,QAAO,iBAAiBA,QAAO,eAAeA,QAAO,kBAAkB,CAAC;AAC1F,iBAAO;AAAA,YACL,YAAY;AAAA,cACV,MAAM;AAAA,cACN,SAAS,IAAI;AAAA,YACf;AAAA,YACA,YAAY;AAAA,cACV,MAAM,IAAI,OAAO;AAAA,YACnB;AAAA,YACA,iBAAiB;AAAA,cACf,WAAWC,WAAU;AAAA,cACrB,aAAaE;AAAA,cACb,cAAc;AAAA,cACd,kBAAkB,YAAY;AAAA,cAC9B,iBAAiB,YAAY;AAAA,YAC/B;AAAA,YACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,YAClC,KAAKD,UAAS;AAAA,UAChB;AAAA,QACF;AACA,YAAI,+BAA+B;AACnC,iBAAS,4BAA4B;AACnC,iBAAO,OAAO,IAAI,OAAO,KAAK,8BAA8B,aAAa,IAAI,OAAO,KAAK,0BAA0B,IAAI,IAAI,OAAO,KAAK;AAAA,QACzI;AACA,YAAI,kCAAkC;AACtC,iBAAS,sBAAsB,MAAM,SAAS;AAC5C,WAAE,OAAO,OAAO,MAAO,EAAE,QAAQ,SAAS9M,OAAM;AAC9C,gBAAI,CAAC,MAAM,QAAQ,KAAKA,KAAI,CAAC,GAAG;AAC9B;AAAA,YACF;AACA,iBAAKA,KAAI,EAAE,OAAO,SAAS,UAAU;AACnC,qBAAO,MAAM,QAAQ,SAAS,YAAY;AAAA,YAC5C,CAAC,EAAE,QAAQ,SAAS,UAAU;AAC5B,uBAAS,eAAe,SAAS,aAAa,IAAI,SAAS,aAAa;AACtE,oBAAI,MAAM;AAAA,kBACR,MAAM,YAAY;AAAA,gBACpB;AACA,oBAAI,QAAQ,cAAc,CAAC,YAAY,WAAW;AAChD,sBAAI,UAAU,YAAY;AAAA,gBAC5B;AACA,oBAAI,QAAQ,cAAc,SAAS,YAAY,WAAW;AACxD,sBAAI,SAAS,YAAY;AAAA,gBAC3B;AACA,oBAAI,QAAQ,UAAU;AACpB,sBAAI,WAAW,YAAY;AAAA,gBAC7B;AACA,oBAAI,QAAQ,OAAO;AACjB,sBAAI,QAAQ,YAAY;AAAA,gBAC1B;AACA,uBAAO;AAAA,cACT,CAAC;AAAA,YACH,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AACA,YAAI,aAAa,kBAAkB;AACnC,iBAAS,iBAAiB,SAAS,SAAS;AAC1C,cAAI,eAAe,IAAI,MAAM,gBAAgB,OAAO;AACpD,qBAAW,QAAQ,SAAS,KAAK;AAC/B,gBAAI,QAAQ,eAAe,CAAC,QAAQ,YAAY,SAAS,GAAG,GAAG;AAC7D,eAAC,aAAa,GAAG,KAAK,CAAC,GAAG,QAAQ,SAAS,YAAY;AACrD,oBAAI,MAAM,QAAQ,WAAW,KAAK,KAAK,WAAW,MAAM,SAAS,GAAG;AAClE,6BAAW,QAAQ,CAAE,WAAW,MAAM,CAAC,CAAE;AAAA,gBAC3C;AAAA,cACF,CAAC;AAAA,YACH;AACA,yBAAa,GAAG,KAAK,aAAa,GAAG,KAAK,CAAC,GAAG,IAAI,SAAS,YAAY;AACrE,2BAAa,OAAO,OAAO,CAAC,GAAG,UAAU;AACzC,kBAAI,MAAM,QAAQ,WAAW,KAAK,KAAK,WAAW,MAAM,SAAS,GAAG;AAClE,2BAAW,QAAQ,WAAW,MAAM,IAAI,SAAS,WAAW;AAC1D,sBAAI,QAAQ,UAAU,IAAI,MAAM,UAAU;AACxC,8BAAU,OAAO,UAAU,KAAK;AAChC,wBAAI,QAAQ,cAAc,CAAC,UAAU,KAAK,WAAW;AACnD,gCAAU,UAAU,UAAU,KAAK;AAAA,oBACrC;AACA,wBAAI,QAAQ,cAAc,SAAS,UAAU,KAAK,WAAW;AAC3D,gCAAU,SAAS,UAAU,KAAK;AAAA,oBACpC;AACA,wBAAI,QAAQ,UAAU;AACpB,gCAAU,WAAW,UAAU,KAAK;AAAA,oBACtC;AACA,wBAAI,QAAQ,OAAO;AACjB,gCAAU,QAAQ,UAAU,KAAK;AAAA,oBACnC;AAAA,kBACF;AACA,yBAAO,UAAU;AACjB,yBAAO,UAAU;AACjB,wCAAsB,WAAW,OAAO;AACxC,yBAAO;AAAA,gBACT,CAAC;AAAA,cACH;AACA,yBAAW,QAAQ,SAAS,MAAM;AAChC,uBAAO,OAAO,WAAW,IAAI;AAAA,cAC/B,CAAC;AACD,qBAAO,WAAW;AAClB,qBAAO,WAAW;AAClB,qBAAO;AAAA,YACT,CAAC;AAAA,UACH,CAAC;AACD,iBAAO;AAAA,QACT;AACA,YAAI,4BAA4B;AAChC,YAAI,6BAA6B,IAAI,8BAA8B,CAAC;AACpE,YAAI,2BAA2B,UAAU;AAAA,UACvC,gBAAgB;AAAA,UAChB,oBAAoB;AAAA,UACpB,2BAA2B;AAAA,UAC3B,kBAAkB;AAAA,QACpB;AACA,YAAI,YAAY;AAChB,iBAAS,WAAWzB,MAAK,OAAO;AAC9B,cAAI,OAAO,UAAU,UAAU;AAC7B,mBAAOA,KAAI,QAAQ,WAAW,KAAK;AAAA,UACrC;AACA,mBAAS,QAAQ,OAAO;AACtB,gBAAI,MAAM,eAAe,IAAI,GAAG;AAC9B,kBAAI,QAAQ,IAAI,OAAO,oBAAoB,OAAO,SAAS,GAAG;AAC9D,kBAAI,UAAU,OAAO,MAAM,IAAI,MAAM,cAAc,KAAK,OAAO,MAAM,IAAI,CAAC;AAC1E,cAAAA,OAAMA,KAAI,QAAQ,OAAO,OAAO;AAAA,YAClC;AAAA,UACF;AACA,iBAAOA;AAAA,QACT;AACA,iBAAS,eAAe,SAAS,OAAO;AACtC,cAAI,CAAC,SAAS;AACZ;AAAA,UACF;AACA,cAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,kBAAM,SAAS,MAAM,KAAK,IAAI;AAC9B,gBAAI,OAAO,QAAQ,aAAa,YAAY,OAAO,QAAQ,WAAW,UAAU;AAC9E,kBAAI,OAAO,MAAM,WAAW,IAAI,QAAQ,WAAW,QAAQ;AAC3D,qBAAO,WAAW,MAAM,KAAK;AAAA,YAC/B;AACA,mBAAO,WAAW,SAAS,KAAK;AAAA,UAClC;AACA,cAAI,OAAO,YAAY,UAAU;AAC/B,mBAAO,WAAW,SAAS,KAAK;AAAA,UAClC;AACA,cAAI,OAAO,UAAU,UAAU;AAC7B,gBAAI,OAAO,QAAQ,KAAK;AACxB,mBAAO,WAAW,MAAM,KAAK;AAAA,UAC/B;AACA,cAAIA,OAAM,QAAQ,SAAS,KAAK,gCAAgC;AAChE,cAAI,SAAS,MAAM,cAAc,QAAQ,MAAM,UAAU,GAAG;AAC1D,YAAAA,OAAM,QAAQ,MAAM,UAAU;AAAA,UAChC;AACA,iBAAO,eAAeA,MAAK,KAAK;AAAA,QAClC;AACA,YAAI,0BAA0B;AAC9B,iBAAS,gBAAgB,SAASyB,OAAM,OAAO;AAC7C,cAAI,SAAS,IAAI,OAAO,KAAK,OAAO,OAAO;AAC3C,cAAI,CAAC,QAAQ;AACX,kBAAM,IAAI,MAAM,yCAAyC,OAAO,SAAS,GAAG,CAAC;AAAA,UAC/E;AACA,cAAI,CAAC,OAAO,SAASA,KAAI,GAAG;AAC1B,kBAAM,IAAI,MAAM,UAAU,OAAO,SAAS,sBAAsB,EAAE,OAAOA,OAAM,YAAY,CAAC;AAAA,UAC9F;AACA,iBAAO,wBAAwB,OAAO,SAASA,KAAI,GAAG,KAAK;AAAA,QAC7D;AACA,YAAI,4BAA4B;AAChC,iBAAS,eAAe,QAAQ,QAAQ,SAAS;AAC/C,cAAI,oBAAoB,QAAQ,SAAS,QAAQ,MAAM,MAAM,KAAK,CAAC,GAAG,UAAU,CAAC,GAAG,OAAO,EAAE;AAC7F,cAAI,eAAe,QAAQ,UAAU,CAAC,GAAG,OAAO,EAAE;AAClD,cAAI,UAAU,OAAO;AACrB,cAAI,OAAO,OAAO;AAClB,cAAI,aAAa;AACf,gBAAI,YAAY,eAAe,SAAS,GAAG;AACzC,wBAAU,YAAY;AAAA,YACxB;AACA,gBAAI,YAAY,eAAe,SAAS,GAAG;AACzC,qBAAO,YAAY;AAAA,YACrB;AAAA,UACF;AACA,cAAI,iBAAiB;AACnB,gBAAI,gBAAgB,eAAe,SAAS,GAAG;AAC7C,wBAAU,gBAAgB;AAAA,YAC5B;AACA,gBAAI,gBAAgB,eAAe,SAAS,GAAG;AAC7C,qBAAO,gBAAgB;AAAA,YACzB;AAAA,UACF;AACA,iBAAO;AAAA,YACL;AAAA,YACA,SAAS;AAAA,YACT,eAAe,QAAQ;AAAA,UACzB;AAAA,QACF;AACA,YAAI,2BAA2B;AAC/B,iBAAS,gBAAgB,OAAO,MAAM;AACpC,cAAI,KAAK,QAAQ;AACjB,iBAAO,cAAc,IAAI,SAAS,IAAI,cAAc,IAAI,SAAS,EAAE,IAAI,EAAE,IAAI;AAAA,QAC/E;AACA,YAAI,6BAA6B;AACjC,iBAAS,QAAQ,QAAQ;AACvB,cAAI,QAAQ,IAAI,OAAO,MAAM,KAAK,SAAS,OAAO;AAChD,mBAAO,MAAM,OAAO;AAAA,UACtB,CAAC;AACD,cAAI,CAAC,OAAO;AACV,kBAAM,IAAI,MAAM,2BAA2B,OAAO,MAAM,CAAC;AAAA,UAC3D;AACA,iBAAO;AAAA,QACT;AACA,YAAI,mBAAmB;AACvB,iBAAS,UAAU,KAAK;AACtB,cAAI,SAAS,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACjF,cAAI,YAAY,IAAI,cAAc,IAAI,cAAc;AACpD,cAAI,YAAY,IAAI,eAAe,IAAI,eAAe;AACtD,cAAI,EAAE,aAAa,YAAY;AAC7B;AAAA,UACF;AACA,cAAI0L,SAAQ1P,QAAO,iBAAiB,GAAG;AACvC,cAAI,iBAAiB0P,OAAM,iBAAiB,YAAY;AACxD,cAAI,iBAAiBA,OAAM,iBAAiB,YAAY;AACxD,cAAI,cAAc,mBAAmB,aAAa,mBAAmB;AACrE,cAAI,cAAc,mBAAmB,aAAa,mBAAmB;AACrE,cAAI,aAAa,eAAe,aAAa,aAAa;AACxD,mBAAO;AAAA,cACL;AAAA,cACA,KAAK,IAAI;AAAA,cACT,MAAM,IAAI;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AACA,YAAI,qBAAqB;AACzB,iBAAS,sBAAsBF,OAAM;AACnC,iBAAO,MAAM,KAAKA,MAAK,YAAYA,MAAK,cAAc,CAAC,CAAC,EAAE,OAAO,SAAS,SAAS,KAAK;AACtF,gBAAI,SAAS,mBAAmB,GAAG;AACnC,gBAAI,QAAQ;AACV,sBAAQ,KAAK,MAAM;AAAA,YACrB;AACA,mBAAO,QAAQ,OAAO,sBAAsB,GAAG,CAAC;AAAA,UAClD,GAAG,CAAC,CAAC;AAAA,QACP;AACA,iBAAS,iBAAiB;AACxB,cAAI,MAAM,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAIxP;AAC9E,cAAIwP,QAAO,IAAI,SAAS;AACxB,cAAI,eAAe,CAAE,IAAI,gBAAgB,SAAS;AAAA,YAChD,KAAK;AAAA,YACL,KAAK,IAAI;AAAA,YACT,MAAM,IAAI;AAAA,UACZ,IAAI;AAAA,YACF,KAAKA;AAAA,YACL,KAAKA,MAAK;AAAA,YACV,MAAMA,MAAK;AAAA,UACb,CAAE;AACF,iBAAO,aAAa,OAAO,sBAAsBtP,UAAS,IAAI,CAAC;AAAA,QACjE;AACA,YAAI,2BAA2B;AAC/B,iBAAS,gBAAgB;AACvB,iBAAOqI,eAAc,iBAAiB;AAAA,QACxC;AACA,iBAAS,qBAAqB,YAAY;AACxC,cAAI,CAAC,YAAY;AACf,kBAAM,IAAI,MAAM,mEAAmE;AAAA,UACrF;AACA,iBAAO,SAAS,SAAS;AACvB,gBAAI,QAAQ,QAAQ,MAAM,wBAAwB,QAAQ,eAAe,gBAAgB,0BAA0B,SAAS,QAAQ,uBAAuB,WAAW,QAAQ,UAAUiH,QAAO,QAAQ,MAAM,WAAW,QAAQ,UAAU,kBAAkB,QAAQ,QAAQ,SAAS,oBAAoB,SAAS,QAAQ;AAC1T,gBAAIE,SAAQ,WAAW,cAAc,OAAO;AAC5C,gBAAI,QAAQ;AACV,kBAAI,SAAS,WAAW,eAAe,YAAY,OAAO,MAAM,MAAM,GAAG,CAAC;AAC1E,cAAAA,OAAM,YAAY,MAAM;AAAA,YAC1B,OAAO;AACL,cAAAA,OAAM,YAAY,WAAW,eAAe,KAAK,CAAC;AAAA,YACpD;AACA,uBAAW,KAAK,YAAYA,MAAK;AACjC,mBAAO;AAAA,cACL,OAAOA,OAAM;AAAA,cACb;AAAA,cACA;AAAA,cACA,MAAMF;AAAA,cACN;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,YAAI,iCAAiC;AACrC,YAAI;AACJ,iBAAS,YAAYE,QAAO;AAC1B,cAAI,cAAc,WAAW,YAAY;AACvC,gBAAI,WAAW,eAAe,QAAQ;AACpC,yBAAW,YAAYxP,UAAS,eAAewP,MAAK,CAAC;AAAA,YACvD,OAAO;AACL,yBAAW,WAAW,WAAWA;AAAA,YACnC;AACA,mBAAO;AAAA,UACT;AACA,cAAI,CAACA,QAAO;AACV;AAAA,UACF;AACA,cAAI,OAAOxP,UAAS,QAAQA,UAAS,qBAAqB,MAAM,EAAE,CAAC;AACnE,uBAAaA,UAAS,cAAc,OAAO;AAC3C,qBAAW,OAAO;AAClB,cAAI,WAAW,eAAe,QAAQ;AACpC,uBAAW,YAAYA,UAAS,eAAewP,MAAK,CAAC;AAAA,UACvD,OAAO;AACL,uBAAW,WAAW,UAAUA;AAAA,UAClC;AACA,eAAK,YAAY,UAAU;AAC3B,iBAAO;AAAA,QACT;AACA,YAAI,uBAAuB;AAC3B,iBAAS,SAAS,IAAI,UAAU;AAC9B,cAAI,OAAO,2BAA2B,EAAE;AACxC,cAAI,GAAG,aAAa,GAAG;AACrB,mBAAO;AAAA,UACT;AACA,cAAI,GAAG,aAAa,IAAI;AACtB,iBAAK,GAAG;AAAA,UACV;AACA,cAAI,QAAQ,KAAK,cAAc,MAAM;AACnC,mBAAO,KAAK;AAAA,UACd;AACA,cAAIA,SAAQ1P,QAAO,iBAAiB,IAAI,IAAI;AAC5C,cAAI,CAAC0P,UAAS,CAAC,GAAG,cAAcA,OAAM,iBAAiB,SAAS,MAAM,UAAU,CAAC,YAAYA,OAAM,iBAAiB,YAAY,MAAM,YAAY,GAAG,aAAa,aAAa,MAAM,QAAQ;AAC3L,mBAAO;AAAA,UACT;AACA,cAAI,SAAS,GAAG,eAAe,GAAG,eAAe,GAAG;AACpD,cAAI,SAAS,SAAS,QAAQ,IAAI;AAClC,cAAI,MAAM;AACR,iBAAK,YAAY;AAAA,UACnB;AACA,iBAAO;AAAA,QACT;AACA,YAAI,oBAAoB;AACxB,YAAI,WAAW,CAAE,KAAK,QAAQ,WAAW,QAAQ,WAAW,SAAS,SAAS,KAAK,QAAQ,OAAO,OAAO,cAAc,QAAQ,MAAM,UAAU,UAAU,WAAW,QAAQ,QAAQ,OAAO,YAAY,QAAQ,YAAY,MAAM,OAAO,WAAW,OAAO,UAAU,OAAO,MAAM,MAAM,MAAM,SAAS,YAAY,cAAc,UAAU,UAAU,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QAAQ,UAAU,UAAU,MAAM,QAAQ,KAAK,UAAU,OAAO,SAAS,OAAO,OAAO,UAAU,SAAS,UAAU,MAAM,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,YAAY,QAAQ,SAAS,OAAO,YAAY,UAAU,MAAM,YAAY,UAAU,UAAU,KAAK,SAAS,WAAW,OAAO,YAAY,KAAK,MAAM,MAAM,MAAM,OAAO,QAAQ,KAAK,QAAQ,UAAU,WAAW,UAAU,QAAQ,SAAS,UAAU,QAAQ,UAAU,SAAS,OAAO,WAAW,OAAO,OAAO,SAAS,SAAS,MAAM,YAAY,YAAY,SAAS,MAAM,SAAS,QAAQ,SAAS,MAAM,SAAS,KAAK,MAAM,OAAO,SAAS,KAAM;AACt+B,iBAAS,cAAc,MAAM;AAC3B,cAAI,KAAK,iBAAiB,8BAA8B;AACtD,mBAAO;AAAA,UACT;AACA,iBAAO,SAAS,SAAS,KAAK,SAAS,YAAY,CAAC;AAAA,QACtD;AACA,YAAI,0BAA0B;AAC9B,iBAAS,WAAW,YAAY;AAC9B,iBAAO,WAAW,KAAK,SAASnD,IAAG1F,IAAG;AACpC,gBAAI,iBAAiB0F,IAAG1F,EAAC,GAAG;AAC1B,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT,CAAC,EAAE,CAAC;AAAA,QACN;AACA,iBAAS,gBAAgB,MAAM,UAAU;AACvC,cAAI,UAAU,SAAS,WAAW,WAAW,SAAS,QAAQ,OAAO,SAAS,WAAW;AACvF,mBAAO,iBAAiB,WAAW,IAAI;AAAA,UACzC,CAAC,CAAC;AACF,cAAI,UAAU,SAAS,WAAW,WAAW,SAAS,QAAQ,OAAO,SAAS,WAAW;AACvF,mBAAO,iBAAiB,WAAW,IAAI;AAAA,UACzC,CAAC,CAAC;AACF,cAAI,CAAC,WAAW,WAAW,WAAW,iBAAiB,SAAS,OAAO,GAAG;AACxE,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AACA,YAAI,6BAA6B;AACjC,YAAI,WAAW,WAAW,iBAAiB,CAAC;AAC5C,YAAI,eAAe,CAAC;AACpB,iBAAS,sBAAsB,IAAI;AACjC,cAAI,WAAW,SAAS,SAAS,EAAE,EAAE;AACrC,cAAI,aAAa,KAAK,QAAQ;AAC9B,iBAAO;AAAA,QACT;AACA,YAAI,kBAAkB;AACtB,iBAAS,0BAA0B,OAAO,SAAS,UAAU,cAAc;AACzE,cAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACxF,cAAI,QAAQ,MAAM,KAAK,MAAM,QAAQ;AACrC,cAAI,CAAC,OAAO;AACV,mBAAO,QAAQ,QAAQ;AAAA,UACzB;AACA,cAAI,iBAAiB,MAAM,OAAO,SAASQ,IAAG;AAC5C,mBAAOA,GAAE,SAAS;AAAA,UACpB,CAAC;AACD,cAAI,CAAC,eAAe,QAAQ;AAC1B,mBAAO,QAAQ,QAAQ;AAAA,cACrB;AAAA,cACA;AAAA,cACA,MAAM,QAAQ;AAAA,cACd,UAAU,QAAQ;AAAA,cAClB;AAAA,YACF,CAAC;AAAA,UACH;AACA,cAAI,kCAAkC,eAAe,OAAO,SAAS,OAAO;AAC1E,mBAAO,MAAM;AAAA,UACf,CAAC,EAAE,IAAI,SAAS,OAAO;AACrB,mBAAO,MAAM;AAAA,UACf,CAAC,EAAE,OAAO,SAAS,KAAK;AACtB,mBAAO,CAAC,aAAa,SAAS,GAAG;AAAA,UACnC,CAAC;AACD,cAAI,WAAW,gCAAgC,IAAI,SAAS,WAAW,cAAc;AACnF,gBAAI,cAAc,CAAC,EAAE,OAAO,mBAAmB,QAAQ,GAAG,CAAE,YAAa,CAAC;AAC1E,gBAAI,uBAAuB,sBAAsB,KAAK,SAAS;AAC/D,mBAAO,qCAAqC,WAAW,SAAS,aAAa,cAAc,oBAAoB;AAAA,UACjH,CAAC;AACD,cAAI,oBAAoB,MAAM,OAAO,SAASA,IAAG;AAC/C,mBAAOA,GAAE,SAAS;AAAA,UACpB,CAAC;AACD,cAAI,CAAC,kBAAkB,QAAQ;AAC7B,mBAAO,QAAQ,IAAI,QAAQ;AAAA,UAC7B;AACA,mBAAS,KAAK,QAAQ,QAAQ,QAAQ,wBAAwB;AAAA,YAC5D,MAAM,kBAAkB,IAAI,SAAS,OAAO;AAC1C,qBAAO,MAAM;AAAA,YACf,CAAC,EAAE,KAAK;AAAA,YACR;AAAA,YACA;AAAA,YACA,MAAM,QAAQ;AAAA,YACd,UAAU,QAAQ;AAAA,UACpB,CAAC,CAAC,CAAC;AACH,iBAAO,QAAQ,IAAI,QAAQ;AAAA,QAC7B;AACA,YAAI,sCAAsC;AAC1C,iBAAS,gBAAgB,OAAO,SAAS,UAAU,cAAc;AAC/D,cAAI,gBAAgB,UAAU,SAAS,KAAK,UAAU,CAAC,MAAM,SAAY,UAAU,CAAC,IAAI;AACxF,cAAI,eAAe,uBAAuB,KAAK;AAC/C,cAAI,cAAc;AAChB,mBAAO,oCAAoC,OAAO,SAAS,UAAU,cAAc,aAAa;AAAA,UAClG;AACA,iBAAO,qCAAqC,MAAM,MAAM,SAAS,UAAU,cAAc,IAAI;AAAA,QAC/F;AACA,iBAAS,uBAAuB,OAAO;AACrC,cAAI;AACF,gBAAI,QAAQ,MAAM;AAClB,gBAAI,CAAC,SAAS,MAAM,MAAM;AACxB,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT,SAAS1G,IAAG;AACV,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,2BAA2B;AAC/B,iBAAS,2BAA2B,KAAK,SAAS,UAAU,cAAc,eAAe;AACvF,uBAAa,KAAK,GAAG;AACrB,iBAAO,IAAI,QAAQ,SAAS,SAAS,QAAQ;AAC3C,gBAAI,UAAU,IAAI,eAAe;AACjC,oBAAQ,KAAK,OAAO,GAAG;AACvB,oBAAQ,UAAU,kBAAkB,QAAQ;AAC5C,oBAAQ,iBAAiB,SAAS,MAAM;AACxC,oBAAQ,iBAAiB,WAAW,MAAM;AAC1C,oBAAQ,iBAAiB,WAAW,SAASqQ,QAAO;AAClD,kBAAIA,OAAM,UAAU,QAAQ,cAAc;AACxC,uBAAO,QAAQ,QAAQ,YAAY;AAAA,cACrC;AACA,qBAAO,QAAQ,YAAY;AAAA,YAC7B,CAAC;AACD,oBAAQ,KAAK;AAAA,UACf,CAAC,EAAE,KAAK,SAAS,OAAO;AACtB,gBAAI,SAAS,QAAQ,wBAAwB;AAAA,cAC3C,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA,MAAM,QAAQ;AAAA,cACd,UAAU,QAAQ;AAAA,YACpB,CAAC;AACD,mBAAO,yBAAyB,OAAO,OAAO,SAAS,UAAU,cAAc,OAAO,aAAa;AAAA,UACrG,CAAC;AAAA,QACH;AACA,YAAI,uCAAuC;AAC3C,YAAI,mBAAmB,WAAW;AAChC,mBAASC,OAAM;AACb,gBAAIjR,QAAO,eAAeA,QAAO,aAAa;AAC5C,qBAAOA,QAAO,YAAY,IAAI;AAAA,YAChC;AAAA,UACF;AACA,cAAI,eAAe;AACnB,cAAI,mBAAmBiR,KAAI;AAC3B,iBAAO;AAAA,YACL,OAAO,SAAShK,SAAQ;AACtB,mBAAK,KAAK,gBAAgB;AAAA,YAC5B;AAAA,YACA,KAAK,SAAS,MAAM;AAClB,mBAAK,KAAK,cAAc;AACxB,mBAAK,QAAQ,OAAO,kBAAkB,cAAc;AACpD,mBAAK,YAAY,KAAK;AAAA,YACxB;AAAA,YACA,YAAY,SAAS,aAAa;AAChC,mBAAK,KAAK,kBAAkB;AAAA,YAC9B;AAAA,YACA,UAAU,SAAS,WAAW;AAC5B,mBAAK,KAAK,gBAAgB;AAC1B,mBAAK,QAAQ,sBAAsB,oBAAoB,gBAAgB;AACvE,mBAAK,YAAY;AAAA,YACnB;AAAA,YACA,MAAM,SAASiK,MAAK,UAAU;AAC5B,kBAAIlR,QAAO,eAAeA,QAAO,YAAY,SAAS,QAAQ;AAC5D,gBAAAA,QAAO,YAAY,KAAK,QAAQ;AAAA,cAClC;AAAA,YACF;AAAA,YACA,SAAS,SAASmR,SAAQ,aAAa,WAAW,SAAS;AACzD,kBAAInR,QAAO,eAAeA,QAAO,YAAY,YAAY,QAAQ;AAC/D,gBAAAA,QAAO,YAAY,QAAQ,aAAa,WAAW,OAAO;AAAA,cAC5D;AAAA,YACF;AAAA,YACA,aAAa,SAAS,YAAY,aAAa;AAC7C,uBAAS,WAAW,MAAM;AACxB,4BAAY,aAAa,KAAK,OAAO,WAAW,KAAK,WAAW,IAAI;AAAA,cACtE;AACA,kBAAIA,QAAO,eAAeA,QAAO,YAAY,qBAAqB,QAAQ;AACxE,oBAAI,WAAWA,QAAO,YAAY,iBAAiB,gBAAgB,EAAE,CAAC;AACtE,oBAAI,WAAWA,QAAO,YAAY,iBAAiB,SAAS,EAAE,OAAO,SAASmR,UAAS;AACrF,yBAAOA,SAAQ,aAAa,SAAS;AAAA,gBACvC,CAAC;AACD,yBAAS7Q,KAAI,GAAGA,KAAI,SAAS,QAAQ,EAAEA,IAAG;AACxC,sBAAI,MAAM,SAASA,EAAC;AACpB,sBAAI,IAAI,SAAS,aAAa;AAC5B,+BAAW,GAAG;AACd;AAAA,kBACF;AACA,6BAAW,GAAG;AAAA,gBAChB;AAAA,cACF;AAAA,YACF;AAAA,YACA,aAAa,SAAS,cAAc;AAClC,qBAAO2Q,KAAI,IAAI;AAAA,YACjB;AAAA,YACA,OAAO,SAASG,SAAQ;AACtB,kBAAI,CAAC,cAAc;AACjB,+BAAeH,KAAI;AAAA,cACrB;AACA,iCAAmBA,KAAI;AAAA,YACzB;AAAA,UACF;AAAA,QACF,EAAE;AACF,YAAI,4BAA4B;AAChC,YAAI,OAAO,OAAO,WAAW,YAAY;AACvC,WAAC,WAAW;AACV,mBAAO,SAAS,SAAS5Q,SAAQ;AAC/B,kBAAIA,YAAW,UAAUA,YAAW,MAAM;AACxC,sBAAM,IAAI,UAAU,4CAA4C;AAAA,cAClE;AACA,kBAAI,SAAS,OAAOA,OAAM;AAC1B,uBAAS8C,SAAQ,GAAGA,SAAQ,UAAU,QAAQA,UAAS;AACrD,oBAAI,SAAS,UAAUA,MAAK;AAC5B,oBAAI,WAAW,UAAU,WAAW,MAAM;AACxC,2BAAS,WAAW,QAAQ;AAC1B,wBAAI,OAAO,eAAe,OAAO,GAAG;AAClC,6BAAO,OAAO,IAAI,OAAO,OAAO;AAAA,oBAClC;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAAA,UACF,GAAG;AAAA,QACL;AACA,YAAI,CAAC,MAAM,UAAU,MAAM;AACzB,iBAAO,eAAe,MAAM,WAAW,QAAQ;AAAA,YAC7C,OAAO,SAAS,MAAM,WAAW;AAC/B,kBAAI,SAAS,MAAM;AACjB,sBAAM,IAAI,UAAU,kDAAkD;AAAA,cACxE;AACA,kBAAI,OAAO,cAAc,YAAY;AACnC,sBAAM,IAAI,UAAU,8BAA8B;AAAA,cACpD;AACA,kBAAI,OAAO,OAAO,IAAI;AACtB,kBAAI,SAAS,KAAK,WAAW;AAC7B,kBAAI,UAAU,UAAU,CAAC;AACzB,kBAAIkO;AACJ,uBAAS/Q,KAAI,GAAGA,KAAI,QAAQA,MAAK;AAC/B,gBAAA+Q,SAAQ,KAAK/Q,EAAC;AACd,oBAAI,UAAU,KAAK,SAAS+Q,QAAO/Q,IAAG,IAAI,GAAG;AAC3C,yBAAO+Q;AAAA,gBACT;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAAA,UACF,CAAC;AAAA,QACH;AACA,iBAAS,8BAA8B;AACrC,cAAInR,UAAS,mBAAmB;AAC9B,mBAAOA,UAAS;AAAA,UAClB;AACA,cAAIA,UAAS,qBAAqB;AAChC,mBAAOA,UAAS;AAAA,UAClB;AACA,cAAI,aAAa,WAAW;AAC1B,gBAAI,UAAUA,UAAS,cAAc,GAAG;AACxC,oBAAQ,MAAM,UAAU;AACxB,mBAAO,QAAQ,MAAM,kBAAkB;AAAA,UACzC,EAAE;AACF,cAAI,UAAU,aAAa,mBAAmB;AAC9C,cAAI,gBAAgB,aAAa,SAAS;AAC1C,cAAIwP,SAAQxP,UAAS,cAAc,OAAO;AAC1C,UAAAwP,OAAM,YAAY,aAAa,8BAA8B;AAC7D,iBAAO,SAASrJ,IAAGwJ,IAAG;AACpB,gBAAI,SAASvP,IAAGoD;AAChB,gBAAI,WAAW,CAAC;AAChB,gBAAI,wBAAwB,CAAC;AAC7B,YAAAxD,UAAS,KAAK,YAAYwP,MAAK;AAC/B,oBAAQ,UAAUxP,UAAS,iBAAiBmG,IAAGwJ,EAAC,MAAM,SAAS,QAAQ,OAAO,MAAM,IAAI;AACtF,uBAAS,KAAK,OAAO;AACrB,oCAAsB,KAAK;AAAA,gBACzB,OAAO,QAAQ,MAAM,iBAAiB,OAAO;AAAA,gBAC7C,UAAU,QAAQ,MAAM,oBAAoB,OAAO;AAAA,cACrD,CAAC;AACD,sBAAQ,MAAM,YAAY,SAAS,eAAe,WAAW;AAAA,YAC/D;AACA,gBAAI,SAAS,QAAQ3P,UAAS,eAAe,IAAI,SAAS,SAAS,GAAG;AACpE,uBAAS,OAAO,SAAS,QAAQA,UAAS,eAAe,GAAG,CAAC;AAC7D,uBAAS,KAAKA,UAAS,eAAe;AAAA,YACxC;AACA,iBAAKI,KAAI,sBAAsB,QAAQ,CAAC,EAAEoD,KAAI,sBAAsB,EAAEpD,EAAC,MAAM;AAC3E,uBAASA,EAAC,EAAE,MAAM,YAAY,SAASoD,GAAE,QAAQA,GAAE,QAAQ,IAAIA,GAAE,QAAQ;AAAA,YAC3E;AACA,YAAAxD,UAAS,KAAK,YAAYwP,MAAK;AAC/B,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,OAAO1P,QAAO,qBAAqB,YAAY;AACjD,UAAAE,UAAS,oBAAoB,4BAA4B;AAAA,QAC3D;AACA,YAAI,CAAC,MAAM,UAAU,UAAU;AAC7B,iBAAO,eAAe,MAAM,WAAW,YAAY;AAAA,YACjD,OAAO,SAAS,MAAM,eAAe;AACnC,kBAAIoR,KAAI,OAAO,IAAI;AACnB,kBAAInQ,OAAM,SAASmQ,GAAE,QAAQ,EAAE,KAAK;AACpC,kBAAInQ,SAAQ,GAAG;AACb,uBAAO;AAAA,cACT;AACA,kBAAIH,KAAI,SAAS,UAAU,CAAC,GAAG,EAAE,KAAK;AACtC,kBAAIuQ;AACJ,kBAAIvQ,MAAK,GAAG;AACV,gBAAAuQ,KAAIvQ;AAAA,cACN,OAAO;AACL,gBAAAuQ,KAAIpQ,OAAMH;AACV,oBAAIuQ,KAAI,GAAG;AACT,kBAAAA,KAAI;AAAA,gBACN;AAAA,cACF;AACA,kBAAI;AACJ,qBAAOA,KAAIpQ,MAAK;AACd,iCAAiBmQ,GAAEC,EAAC;AACpB,oBAAI,kBAAkB,kBAAkB,kBAAkB,iBAAiB,mBAAmB,gBAAgB;AAC5G,yBAAO;AAAA,gBACT;AACA,gBAAAA;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAAA,UACF,CAAC;AAAA,QACH;AACA,YAAI,CAAC,MAAM,UAAU,MAAM;AACzB,iBAAO,eAAe,MAAM,WAAW,QAAQ;AAAA,YAC7C,OAAO,SAAS,MAAM,KAAK;AACzB,kBAAI,QAAQ,MAAM;AAChB,sBAAM,IAAI,UAAU,kDAAkD;AAAA,cACxE;AACA,kBAAI,OAAO,QAAQ,YAAY;AAC7B,sBAAM,IAAI,UAAU;AAAA,cACtB;AACA,kBAAIC,KAAI,OAAO,IAAI;AACnB,kBAAIrQ,OAAMqQ,GAAE,WAAW;AACvB,kBAAI,UAAU,UAAU,UAAU,IAAI,UAAU,CAAC,IAAI;AACrD,uBAASlR,KAAI,GAAGA,KAAIa,MAAKb,MAAK;AAC5B,oBAAIA,MAAKkR,MAAK,IAAI,KAAK,SAASA,GAAElR,EAAC,GAAGA,IAAGkR,EAAC,GAAG;AAC3C,yBAAO;AAAA,gBACT;AAAA,cACF;AACA,qBAAO;AAAA,YACT;AAAA,UACF,CAAC;AAAA,QACH;AACA,YAAI,CAAC,MAAM,MAAM;AACf,iBAAO,eAAe,OAAO,QAAQ;AAAA,YACnC,OAAO,WAAW;AAChB,kBAAI,QAAQ,OAAO,UAAU;AAC7B,kBAAI,aAAa,SAASC,YAAW,IAAI;AACvC,uBAAO,OAAO,OAAO,cAAc,MAAM,KAAK,EAAE,MAAM;AAAA,cACxD;AACA,kBAAI,YAAY,SAASC,WAAU,OAAO;AACxC,oBAAIC,UAAS,OAAO,KAAK;AACzB,oBAAI,MAAMA,OAAM,GAAG;AACjB,yBAAO;AAAA,gBACT;AACA,oBAAIA,YAAW,KAAK,CAAC,SAASA,OAAM,GAAG;AACrC,yBAAOA;AAAA,gBACT;AACA,wBAAQA,UAAS,IAAI,IAAI,MAAM,KAAK,MAAM,KAAK,IAAIA,OAAM,CAAC;AAAA,cAC5D;AACA,kBAAI,iBAAiB,KAAK,IAAI,GAAG,EAAE,IAAI;AACvC,kBAAI,WAAW,SAASC,UAAS,OAAO;AACtC,oBAAIzQ,OAAM,UAAU,KAAK;AACzB,uBAAO,KAAK,IAAI,KAAK,IAAIA,MAAK,CAAC,GAAG,cAAc;AAAA,cAClD;AACA,qBAAO,SAAS,KAAK,WAAW;AAC9B,oBAAI0Q,KAAI;AACR,oBAAI,QAAQ,OAAO,SAAS;AAC5B,oBAAI,aAAa,MAAM;AACrB,wBAAM,IAAI,UAAU,kEAAkE;AAAA,gBACxF;AACA,oBAAI,QAAQ,UAAU,SAAS,IAAI,UAAU,CAAC,IAAI;AAClD,oBAAIC;AACJ,oBAAI,OAAO,UAAU,aAAa;AAChC,sBAAI,CAAC,WAAW,KAAK,GAAG;AACtB,0BAAM,IAAI,UAAU,mEAAmE;AAAA,kBACzF;AACA,sBAAI,UAAU,SAAS,GAAG;AACxB,oBAAAA,KAAI,UAAU,CAAC;AAAA,kBACjB;AAAA,gBACF;AACA,oBAAI3Q,OAAM,SAAS,MAAM,MAAM;AAC/B,oBAAI4Q,KAAI,WAAWF,EAAC,IAAI,OAAO,IAAIA,GAAE1Q,IAAG,CAAC,IAAI,IAAI,MAAMA,IAAG;AAC1D,oBAAIoQ,KAAI;AACR,oBAAI;AACJ,uBAAOA,KAAIpQ,MAAK;AACd,2BAAS,MAAMoQ,EAAC;AAChB,sBAAI,OAAO;AACT,oBAAAQ,GAAER,EAAC,IAAI,OAAOO,OAAM,cAAc,MAAM,QAAQP,EAAC,IAAI,MAAM,KAAKO,IAAG,QAAQP,EAAC;AAAA,kBAC9E,OAAO;AACL,oBAAAQ,GAAER,EAAC,IAAI;AAAA,kBACT;AACA,kBAAAA,MAAK;AAAA,gBACP;AACA,gBAAAQ,GAAE,SAAS5Q;AACX,uBAAO4Q;AAAA,cACT;AAAA,YACF,EAAE;AAAA,UACJ,CAAC;AAAA,QACH;AACA,YAAI,CAAC,OAAO,UAAU,UAAU;AAC9B,iBAAO,UAAU,WAAW,SAAS,QAAQ9K,QAAO;AAClD,gBAAI,OAAOA,WAAU,UAAU;AAC7B,cAAAA,SAAQ;AAAA,YACV;AACA,gBAAIA,SAAQ,OAAO,SAAS,KAAK,QAAQ;AACvC,qBAAO;AAAA,YACT,OAAO;AACL,qBAAO,KAAK,QAAQ,QAAQA,MAAK,MAAM;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AACA,iBAAS,YAAY,MAAM,MAAM;AAC/B,iBAAO,KAAK,OAAO,IAAI,EAAE,OAAO,SAAS,MAAM,KAAK,KAAK;AACvD,mBAAO,IAAI,QAAQ,IAAI,MAAM;AAAA,UAC/B,CAAC;AAAA,QACH;AACA,YAAI,uBAAuB;AAC3B,iBAAS,qBAAqB,QAAQ,UAAU,WAAW,gBAAgB;AACzE,cAAI,SAAS;AAAA,YACX,QAAQ,OAAO,MAAM;AAAA,YACrB;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,iBAAO,OAAO,QAAQ;AACtB,iBAAO;AAAA,QACT;AACA,iBAAS,iBAAiB,SAAS,aAAa2I,SAAQ;AACtD,cAAI,QAAQ,CAAC;AACb,cAAI,SAAS,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAE,OAAQ;AAC1D,cAAI,eAAe,qBAAqB,QAAQ,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,QAAQ;AACpF,cAAI,SAAS,CAAC;AACd,iBAAO,aAAa,OAAO,QAAQ;AACjC,gBAAI,QAAQ,aAAa,OAAO,IAAI;AACpC,gBAAI,YAAY,CAAC;AACjB,gBAAI,WAAW,CAAC;AAChB,gBAAI,WAAW,aAAa,SAAS,MAAM,EAAE,OAAO,aAAa,SAAS;AAC1E,gBAAI,QAAQ;AACZ,qBAAS,MAAM,GAAG,MAAM,SAAS,QAAQ,OAAO;AAC9C,kBAAI,MAAM,SAAS,GAAG;AACtB,mBAAK,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,aAAa,aAAa,mBAAmB,mBAAmB,OAAO,IAAI,CAAC,CAAC,GAAG;AACvG,oBAAI,IAAI,WAAW,GAAG;AACpB,sBAAI,CAAC,UAAU,CAACA,WAAUA,QAAO,KAAK,IAAI;AACxC,2BAAO,KAAK,KAAK;AACjB,4BAAQ;AAAA,kBACV;AAAA,gBACF,OAAO;AACL,sBAAI,OAAO,IAAI,MAAM,CAAC;AACtB,sBAAI,CAAE,KAAK,GAAI,EAAE,SAAS,KAAK,CAAC,EAAE,UAAU,MAAM,OAAO;AACvD,0BAAM,IAAI,MAAM,iEAAiE,IAAI,CAAC,EAAE,UAAU;AAAA,kBACpG;AACA,sBAAI,KAAK,CAAC,EAAE,eAAe,KAAK;AAC9B,8BAAU,KAAK,IAAI;AAAA,kBACrB,OAAO;AACL,6BAAS,KAAK,IAAI;AAAA,kBACpB;AAAA,gBACF;AAAA,cACF;AACA,mBAAK,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,aAAa,aAAa,mBAAmB,aAAa,SAAS,SAAS,GAAG,GAAG;AACzG,yBAAS,KAAK,GAAG;AAAA,cACnB;AAAA,YACF;AACA,gBAAI,MAAM,YAAY,MAAM,SAAS,QAAQ;AAC3C,oBAAM,KAAK,YAAY;AACvB,6BAAe,qBAAqB,MAAM,UAAU,UAAU,WAAW,MAAM,QAAQ;AAAA,YACzF;AACA,mBAAO,CAAC,aAAa,OAAO,UAAU,MAAM,QAAQ;AAClD,6BAAe,MAAM,IAAI;AAAA,YAC3B;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,uBAAuB,SAAS,UAAUA,SAAQ;AACzD,oBAAU,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAE,OAAQ;AACvD,cAAI,cAAc,iBAAiB,QAAQ;AAC3C,iBAAO,iBAAiB,SAAS,aAAaA,OAAM;AAAA,QACtD;AACA,YAAI,oCAAoC;AACxC,iBAAS,aAAa,QAAQ;AAC5B,cAAI,kBAAkB,OAAO,UAAU,WAAW,oBAAoB,SAAS,IAAI,MAAM,CAAC,IAAI;AAC9F,cAAI,YAAY,sBAAsB,QAAQ;AAC9C,cAAI,CAAC,UAAU,QAAQ;AACrB,mBAAO,QAAQ,QAAQ;AAAA,UACzB;AACA,cAAI,aAAa1P,UAAS,eAAe,mBAAmB,oCAAoC;AAChG,cAAI,0BAA0B,+BAA+B,UAAU;AACvE,iBAAO,wBAAwB,WAAW,uBAAuB,EAAE,KAAK,SAAS,QAAQ;AACvF,mBAAO,cAAc,MAAM;AAAA,UAC7B,CAAC;AAAA,QACH;AACA,YAAI,wBAAwB;AAC5B,iBAAS,sBAAsB,MAAM;AACnC,cAAI,MAAM,CAAC;AACX,cAAI,YAAY,kCAAkC,MAAM,KAAK,SAAS,MAAM;AAC1E,gBAAI,IAAI,SAAS,KAAK,QAAQ,GAAG;AAC/B,qBAAO;AAAA,YACT;AACA,gBAAI,KAAK,KAAK,QAAQ;AACtB,mBAAO;AAAA,UACT,CAAC,EAAE,IAAI,SAAS,MAAM;AACpB,mBAAO;AAAA,cACL,UAAU,KAAK;AAAA,cACf,UAAU,sBAAsB,KAAK,UAAU;AAAA,YACjD;AAAA,UACF,CAAC;AACD,iBAAO,qBAAqB,WAAW,CAAC,CAAC;AAAA,QAC3C;AACA,iBAAS,wBAAwB,WAAW,yBAAyB;AACnE,cAAI,WAAW,CAAC;AAChB,oBAAU,QAAQ,SAAS,QAAQiD,QAAO;AACxC,gBAAI,WAAW,OAAO,UAAU,WAAW,OAAO;AAClD,gBAAI,SAAS,yBAAyB,UAAU,UAAU,uBAAuB;AACjF,gBAAI,CAAC,QAAQ;AACX,qBAAO,QAAQ,IAAI,QAAQ;AAAA,YAC7B;AACA,gBAAI,YAAYA,SAAQ;AACxB,gBAAI,eAAe;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,gBAAI,eAAe,CAAC;AACpB,gBAAI3C,KAAI,QAAQ,IAAI,OAAO,IAAI,SAAS,OAAO,YAAY;AACzD,kBAAI,WAAW,CAAE,WAAW,UAAW;AACvC,qBAAO,yBAAyB,OAAO,cAAc,UAAU,YAAY;AAAA,YAC7E,CAAC,CAAC;AACF,qBAAS,KAAKA,EAAC;AAAA,UACjB,CAAC;AACD,iBAAO,QAAQ,IAAI,QAAQ;AAAA,QAC7B;AACA,iBAAS,cAAc,QAAQ;AAC7B,iBAAO,OAAO,OAAO,SAAS,KAAK,KAAK;AACtC,mBAAO,MAAM,QAAQ,GAAG,IAAI,IAAI,OAAO,cAAc,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG;AAAA,UAC7E,GAAG,CAAC,CAAC;AAAA,QACP;AACA,iBAAS,yBAAyB,UAAU,UAAU,yBAAyB;AAC7E,cAAI;AACJ,cAAI,SAAS,aAAa,MAAM,UAAU;AACxC,qBAAS,mCAAmC,UAAU,uBAAuB;AAAA,UAC/E,OAAO;AACL,qBAAS,2BAA2B,QAAQ;AAAA,UAC9C;AACA,iBAAO,8BAA8B,MAAM;AAAA,QAC7C;AACA,iBAAS,mCAAmC,UAAU,yBAAyB;AAC7E,iBAAO,MAAM,KAAK,SAAS,QAAQ,EAAE,OAAO,6CAA6C,EAAE,OAAO,SAAS,KAAK,MAAM;AACpH,gBAAI,YAAY,KAAK,SAAS,YAAY;AAC1C,gBAAI,QAAQ,cAAc,UAAU,KAAK,cAAc;AACvD,gBAAI,SAAS,cAAc;AAC3B,gBAAI,aAAa,wBAAwB;AAAA,cACvC,MAAM;AAAA,cACN;AAAA,cACA,MAAM;AAAA,YACR,CAAC;AACD,gBAAI,KAAK,WAAW,KAAK;AACzB,mBAAO;AAAA,UACT,GAAG,CAAC,CAAC;AAAA,QACP;AACA,iBAAS,2BAA2B,UAAU;AAC5C,iBAAO,MAAM,KAAK,SAAS,WAAW,EAAE,OAAO,SAAS,OAAO;AAC7D,mBAAO,mBAAmB,MAAM,MAAM,SAAS;AAAA,UACjD,CAAC;AAAA,QACH;AACA,iBAAS,8CAA8C,MAAM;AAC3D,cAAI,YAAY,KAAK,SAAS,YAAY;AAC1C,cAAI,WAAW,KAAK,aAAa,MAAM;AACvC,cAAI,UAAU,KAAK,aAAa,KAAK;AACrC,cAAI,SAAS,cAAc,UAAU,YAAY,WAAW,KAAK,IAAI,YAAY,EAAE,SAAS,YAAY;AACxG,cAAI,UAAU,cAAc;AAC5B,iBAAO,WAAW,UAAU,mBAAmB,KAAK,KAAK;AAAA,QAC3D;AACA,iBAAS,mBAAmB,OAAO;AACjC,cAAI,CAAC,OAAO;AACV,mBAAO;AAAA,UACT;AACA,iBAAO,CAAC,MAAM,YAAY,EAAE,SAAS,OAAO;AAAA,QAC9C;AACA,iBAAS,8BAA8B,QAAQ;AAC7C,cAAI,QAAQ,CAAC;AACb,iBAAO,OAAO,OAAO,SAAS,OAAO;AACnC,gBAAI,CAAC,MAAM,MAAM;AACf,qBAAO;AAAA,YACT;AACA,gBAAI,MAAM,SAAS,MAAM,IAAI,GAAG;AAC9B,qBAAO;AAAA,YACT;AACA,kBAAM,KAAK,MAAM,IAAI;AACrB,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AACA,iBAAS,aAAa,QAAQ;AAC5B,cAAI,kBAAkB,OAAO,UAAU,WAAW,oBAAoB,SAAS,IAAI,MAAM,CAAC,IAAI;AAC9F,cAAI,oBAAoB,kCAAkC,UAAU,gBAAgB,SAAS,QAAQ;AACnG,gBAAI,aAAa,OAAO;AACxB,gBAAI,WAAW,aAAa,KAAK,GAAG;AAClC,qBAAO,CAAC,CAAC,WAAW,aAAa,KAAK;AAAA,YACxC;AACA,gBAAI,gBAAgB,MAAM,KAAK,WAAW,qBAAqB,QAAQ,CAAC,EAAE,OAAO,SAAS,QAAQ;AAChG,qBAAO,CAAC,CAAC,OAAO,aAAa,KAAK;AAAA,YACpC,CAAC;AACD,gBAAI,cAAc,UAAU,GAAG;AAC7B,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT,CAAC;AACD,iBAAO,QAAQ,IAAI,kBAAkB,IAAI,SAAS,QAAQ;AACxD,gBAAI,aAAa,OAAO;AACxB,mBAAO,oBAAoB,UAAU;AAAA,UACvC,CAAC,CAAC;AAAA,QACJ;AACA,YAAI,wBAAwB;AAC5B,iBAAS,oBAAoB,KAAK;AAChC,iBAAO,IAAI,QAAQ,SAAS,SAAS;AACnC,gBAAI,IAAI,aAAa,GAAG;AACtB,sBAAQ,GAAG;AAAA,YACb;AACA,qBAAS,eAAe;AACtB,kBAAI,oBAAoB,kBAAkB,YAAY;AACtD,sBAAQ,GAAG;AAAA,YACb;AACA,gBAAI,iBAAiB,kBAAkB,YAAY;AAAA,UACrD,CAAC;AAAA,QACH;AACA,iBAAS,qBAAqB,UAAU;AACtC,iBAAO,QAAQ,QAAQ,MAAM,YAAY,MAAM,QAAQ,SAAS,MAAM;AAAA,QACxE;AACA,iBAAS,eAAe,SAAS;AAC/B,cAAI,CAAC,WAAW,QAAQ,YAAY,UAAU,QAAQ,YAAY,MAAM;AACtE,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,QAAQ,YAAY,WAAW;AACxC,mBAAO,QAAQ;AAAA,UACjB;AACA,iBAAO,qBAAqB,QAAQ,OAAO;AAAA,QAC7C;AACA,iBAAS,kBAAkB,SAAS;AAClC,cAAI,wBAAwB,kBAAkB,SAAS,SAAS,sBAAsB,QAAQmF,WAAU,sBAAsB;AAC9H,cAAIyK,UAAS;AAAA,YACX;AAAA,YACA,SAASzK;AAAA,UACX;AACA,cAAI,CAAC,QAAQ,SAAS;AACpB,mBAAOyK;AAAA,UACT;AACA,cAAI,OAAO,QAAQ,YAAY,WAAW;AACxC,mBAAOA;AAAA,UACT;AACA,cAAI,0BAA0B,QAAQ,QAAQ,OAAO,MAAM,SAAS7D,IAAG;AACrE,mBAAO,OAAO,SAASA,GAAE,YAAY,CAAC;AAAA,UACxC,CAAC;AACD,cAAI,CAAC,yBAAyB;AAC5B,kBAAM,IAAI,MAAM,0DAA0D,OAAO,OAAO,KAAK,IAAI,GAAG,GAAG,CAAC;AAAA,UAC1G;AACA,UAAA6D,QAAO,SAAS,qBAAqB,QAAQ,QAAQ,OAAO,IAAI,SAAS7D,IAAG;AAC1E,mBAAOA,GAAE,YAAY;AAAA,UACvB,CAAC,GAAG,CAAC,CAAC;AACN,cAAI,QAAQ,QAAQ,WAAW,OAAO,QAAQ,QAAQ,YAAY,YAAY,CAAC,MAAM,QAAQ,QAAQ,OAAO,GAAG;AAC7G,YAAA6D,QAAO,UAAU,QAAQ,QAAQ;AAAA,UACnC;AACA,iBAAOA;AAAA,QACT;AACA,iBAAS,QAAQ,SAAS;AACxB,cAAI,sBAAsB;AAAA,YACxB,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AACA,cAAI,CAAC,eAAe,OAAO,GAAG;AAC5B,mBAAO,QAAQ,QAAQ;AAAA,UACzB;AACA,iBAAO,IAAI,QAAQ,SAAS,SAAS,QAAQ;AAC3C,gBAAI,qBAAqB,kBAAkB,OAAO,GAAG,SAAS,mBAAmB,QAAQzK,WAAU,mBAAmB;AACtH,gBAAI,iBAAiB,WAAW,WAAW;AACzC,qBAAO,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAAA,YACtD,GAAGA,QAAO;AACV,oBAAQ,IAAI,OAAO,IAAI,SAAS,OAAO;AACrC,qBAAO,oBAAoB,KAAK,EAAE,OAAO,EAAE,KAAK,SAAS,SAAS;AAChE,uBAAO,gBAAgB,CAAC,GAAG,OAAO,OAAO;AAAA,cAC3C,CAAC;AAAA,YACH,CAAC,CAAC,EAAE,KAAK,SAAS,SAAS;AACzB,kBAAI,gBAAgB,QAAQ,OAAO,SAAS,KAAK,QAAQ;AACvD,uBAAO,SAAS,CAAC,GAAG,KAAK,MAAM;AAAA,cACjC,GAAG,CAAC,CAAC;AACL,2BAAa,cAAc;AAC3B,sBAAQ,aAAa;AAAA,YACvB,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM;AACzB,2BAAa,cAAc;AAC3B,qBAAO,IAAI;AAAA,YACb,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AACA,YAAI,kBAAkB;AACtB,iBAAS,oBAAoB,WAAW,UAAU;AAChD,mBAAS,cAAc,WAAW;AAChC,gBAAI,UAAU,cAAc,UAAU,WAAW,SAAS,GAAG;AAC3D,qBAAO,UAAU,WAAW,SAAS;AAAA,YACvC,OAAO;AACL,qBAAO,gCAAgC;AAAA,YACzC;AAAA,UACF;AACA,cAAI,aAAa,UAAU,aAAa;AACtC,gBAAI;AACF,kBAAI,MAAM,SAAS,WAAW,UAAU,YAAY,CAAC,EAAE,MAAM;AAC7D,kBAAI,CAAC,KAAK;AACR,sBAAM,IAAI,MAAM;AAAA,cAClB;AACA,qBAAO;AAAA,YACT,SAAShF,IAAG;AACV,kBAAI,OAAO,UAAU,gBAAgB,UAAU;AAC7C,uBAAO,SAAS,WAAW,UAAU,WAAW;AAAA,cAClD,OAAO;AACL,uBAAO,cAAc,QAAQ;AAAA,cAC/B;AAAA,YACF;AAAA,UACF,WAAW,aAAa,UAAU,YAAY;AAC5C,mBAAO,SAAS,WAAW,UAAU,UAAU;AAAA,UACjD,OAAO;AACL,mBAAO,cAAc,QAAQ;AAAA,UAC/B;AAAA,QACF;AACA,iBAAS,SAAS,YAAY,cAAc;AAC1C,iBAAO,SAAS,QAAQ;AACtB,gBAAI,aAAa,WAAW,OAAO,EAAE,KAAK,CAAC;AAC3C,gBAAI,WAAW,WAAW,YAAY,CAAC;AACvC,gBAAI,QAAQ,OAAO,OAAO,CAAC,GAAG,UAAU;AACxC,mBAAO,MAAM;AACb,gBAAI,OAAO,WAAW,QAAQ;AAC5B,kBAAI,QAAQ,SAAS,UAAU,MAAM,YAAY,CAAC,MAAM,QAAQ,OAAO,IAAI,GAAG;AAC5E,sBAAM,UAAU,oBAAoB,OAAO,MAAM,QAAQ;AAAA,cAC3D;AACA,kBAAI,CAAC,MAAM,SAAS;AAClB,sBAAM,UAAU,SAAS;AAAA,cAC3B;AAAA,YACF,OAAO;AACL,oBAAM,UAAU,OAAO,WAAW,eAAe,SAAS,OAAO,SAAS;AAAA,YAC5E;AACA,gBAAI,OAAO,MAAM,YAAY,YAAY;AACvC,oBAAM,UAAU,wBAAwB,MAAM,SAAS,OAAO,IAAI;AAAA,YACpE;AACA,qCAAyB,QAAQ,KAAK;AAAA,UACxC;AAAA,QACF;AACA,iBAAS,gBAAgB,YAAY;AACnC,cAAI,aAAa,IAAI,OAAO,KAAK,UAAU,CAAC;AAC5C,cAAI,YAAY,IAAI,OAAO,KAAK,SAAS,CAAC;AAC1C,cAAI,QAAQ,gBAAgB,IAAI,OAAO,OAAO,MAAM,WAAW,EAAE,KAAK,CAAC;AACvE,qBAAW,OAAO4H,eAAc,MAAM,QAAQ,CAAC,CAAC;AAChD,cAAI,eAAe,SAAS,YAAY,IAAI;AAC5C,cAAI,gBAAgB,SAAS,YAAY,KAAK;AAC9C,qBAAW,MAAM,QAAQ,SAAS,QAAQ;AACxC,mBAAO,IAAI,QAAQ,YAAY;AAC/B,mBAAO,IAAI,QAAQ,YAAY;AAC/B,mBAAO,KAAK,QAAQ,aAAa;AAAA,UACnC,CAAC;AACD,mCAAyB,YAAYA,eAAc,UAAU,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;AAAA,QACpF;AACA,YAAI,2BAA2B;AAC/B,iBAAS,iBAAiB,SAAS,UAAU;AAC3C,iBAAO,kCAAkC,SAAS,QAAQ;AAAA,QAC5D;AACA,YAAI,6BAA6B;AACjC,iBAAS,UAAU,OAAO,SAAS;AACjC,cAAI,SAAS,SAAS;AACtB,cAAI,iBAAiB,IAAI,UAAU,IAAI,OAAO,aAAa,IAAI,OAAO,aAAa,CAAC;AACpF,cAAI,QAAQ,eAAe,SAAS,KAAK,QAAQ,eAAe,SAAS,GAAG;AAC1E,sBAAU,QAAQ,WAAW,CAAC;AAC9B,sBAAU,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAE,OAAQ;AACvD,sBAAU,QAAQ,WAAW,CAAC;AAC9B,sBAAU,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAE,OAAQ;AACvD,sBAAU,QAAQ,OAAO,eAAe,OAAO,SAAS,KAAK;AAC3D,qBAAO,QAAQ,QAAQ,GAAG,MAAM;AAAA,YAClC,CAAC,CAAC;AAAA,UACJ,OAAO;AACL,sBAAU,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAE,OAAQ;AACvD,sBAAU,eAAe,OAAO,SAAS,KAAK;AAC5C,qBAAO,QAAQ,QAAQ,GAAG,MAAM;AAAA,YAClC,CAAC;AAAA,UACH;AACA,qBAAW,QAAQ,KAAK,SAAS,KAAK;AACpC,mBAAO,MAAM,KAAK,QAAQ,GAAG,MAAM;AAAA,UACrC,CAAC;AACD,cAAI,YAAY,QAAQ,WAAW,KAAK,MAAM,YAAY,OAAO;AAC/D,mBAAO,QAAQ,MAAM,SAAS,KAAK;AACjC,qBAAO,MAAM,KAAK,QAAQ,GAAG,MAAM;AAAA,YACrC,CAAC;AAAA,UACH,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AACA,iBAAS,cAAc,OAAO,UAAU,SAAS;AAC/C,cAAI,UAAU,QAAQ,WAAW,CAAC;AAClC,cAAI,eAAe,QAAQ,SAAS,CAAC,GAAG,MAAM,EAAE;AAChD,cAAI,MAAM,aAAa,CAAC,SAAS,MAAM;AACrC,mBAAO;AAAA,UACT,WAAW,QAAQ,SAAS,QAAQ;AAClC,mBAAO,QAAQ,OAAO,QAAQ,MAAM,EAAE,MAAM;AAAA,UAC9C,WAAW,eAAe,OAAO,YAAY,YAAY,WAAW;AAClE,mBAAO,YAAY;AAAA,UACrB,WAAW,QAAQ,SAAS,SAAS,QAAQ,QAAQ;AACnD,mBAAO,UAAU,OAAO,QAAQ,MAAM;AAAA,UACxC,OAAO;AACL,mBAAO,UAAU,OAAO,CAAC,CAAC;AAAA,UAC5B;AAAA,QACF;AACA,YAAI,0BAA0B;AAC9B,iBAAS,iBAAiB,MAAM,UAAU,aAAa;AACrD,cAAI,OAAO,YAAY,QAAQ,MAAM,aAAa;AAChD,mBAAO;AAAA,UACT;AACA,cAAI,YAAY,QAAQ,MAAM,MAAM;AAClC,mBAAO;AAAA,UACT;AACA,iBAAO,wBAAwB,MAAM,YAAY,QAAQ,CAAC;AAAA,QAC5D;AACA,iBAAS,gBAAgB,SAAS,aAAa;AAC7C,cAAI,CAAC,aAAa;AAChB,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,QAAQ,UAAU,KAAK;AAClC,cAAI,YAAY,KAAK;AACrB,cAAI,cAAc,4BAA4B,IAAI;AAClD,cAAI,cAAc,IAAI,SAAS,GAAG;AAChC,mBAAO,cAAc,IAAI,SAAS;AAAA,UACpC,WAAW,aAAa;AACtB,mBAAOrI,UAAS,cAAc,KAAK,QAAQ;AAC3C,kBAAM,KAAK,WAAW,EAAE,QAAQ,SAAS,MAAM;AAC7C,kBAAI,CAAC,iBAAiB,SAAS,KAAK,MAAM,WAAW,GAAG;AACtD,qBAAK,aAAa,KAAK,MAAM,KAAK,KAAK;AAAA,cACzC;AAAA,YACF,CAAC;AACD,0BAAc,IAAI,WAAW,IAAI;AAAA,UACnC;AACA,gBAAM,KAAK,QAAQ,UAAU,EAAE,QAAQ,SAAS,OAAO;AACrD,iBAAK,YAAY,gBAAgB,OAAO,WAAW,CAAC;AAAA,UACtD,CAAC;AACD,iBAAO;AAAA,QACT;AACA,YAAI,4BAA4B;AAChC,iBAAS,SAAS,QAAQ,OAAO;AAC/B,cAAI;AACJ,cAAI,OAAO,WAAW,GAAG;AACvB,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,SAAS,MAAM,QAAQ;AAChC,mBAAO;AACP,qBAAS;AACT,oBAAQ;AAAA,UACV;AACA,mBAAS,MAAM,GAAGsC,KAAI,MAAM,QAAQ,MAAMA,IAAG,OAAO;AAClD,gBAAI,CAAC,OAAO,SAAS,MAAM,GAAG,CAAC,GAAG;AAChC,qBAAO,KAAK,MAAM,GAAG,CAAC;AAAA,YACxB;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,iBAAS,eAAe,UAAU;AAChC,iBAAO,SAAS,OAAO,SAAS,KAAK,IAAI;AACvC,gBAAI,CAAC,IAAI,UAAU,CAAC,iBAAiB,IAAI,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG;AAC7D,kBAAI,KAAK,EAAE;AAAA,YACb;AACA,mBAAO;AAAA,UACT,GAAG,CAAC,CAAC;AAAA,QACP;AACA,iBAAS,OAAO,UAAU,UAAU;AAClC,cAAI,SAAS,CAAC;AACd,cAAI;AACJ,cAAI,IAAI,cAAc;AACpB,qBAASiC,KAAI,GAAGjC,KAAI,IAAI,aAAa,QAAQiC,KAAIjC,IAAGiC,MAAK;AACvD,kBAAI,OAAO,IAAI,aAAaA,EAAC;AAC7B,kBAAI,KAAK,aAAa,UAAU;AAC9B,uBAAO,KAAK;AAAA,cACd;AAAA,YACF;AAAA,UACF;AACA,cAAI,UAAU,yBAAS,UAAU;AAC/B,mBAAO,SAAS,MAAM;AACpB,qBAAO,2BAA2B,MAAM,QAAQ;AAAA,YAClD;AAAA,UACF,EAAE,QAAQ;AACV,cAAI,kBAAkB,eAAe,SAAS,OAAO;AACrD,mBAAS,MAAM,GAAG,MAAM,gBAAgB,QAAQ,OAAO;AACrD,wBAAY,gBAAgB,GAAG;AAC/B,qBAAS,SAAS,QAAQ,kCAAkC,WAAW,UAAU,OAAO,CAAC;AAAA,UAC3F;AACA,cAAI,IAAI,cAAc;AACpB,gBAAI,aAAa,KAAK;AAAA,cACpB;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AACA,iBAAO;AAAA,QACT;AACA,YAAIgH,kBAAiB;AACrB,iBAAS,UAAU,KAAKuG,MAAKC,OAAM;AACjC,cAAI,QAAQjS,SAAQ;AAClB,mBAAO,IAAI,OAAOiS,OAAMD,IAAG;AAAA,UAC7B,OAAO;AACL,gBAAI,YAAYA;AAChB,gBAAI,aAAaC;AAAA,UACnB;AAAA,QACF;AACA,iBAAS,eAAe,aAAa;AACnC,sBAAY,QAAQ,SAAS,QAAQ;AACnC,gBAAI,MAAM,OAAO,KAAKD,OAAM,OAAO,KAAKC,QAAO,OAAO;AACtD,mBAAO,UAAU,KAAKD,MAAKC,KAAI;AAAA,UACjC,CAAC;AAAA,QACH;AACA,YAAI,2BAA2B;AAC/B,iBAAS,UAAU1P,MAAK;AACtB,kBAAQA,QAAO,IAAI,KAAK,EAAE,QAAQ,WAAW,GAAG,EAAE,MAAM,GAAG;AAAA,QAC7D;AACA,YAAI,qBAAqB;AACzB,iBAAS,kBAAkB;AACzB,iBAAO,CAAE,UAAU,QAAQ,UAAU,OAAO,OAAO,SAAS,YAAY,QAAQ,SAAS,QAAQ,QAAQ,kBAAkB,UAAU,SAAS,SAAS,YAAY,SAAS,QAAQ,UAAU,SAAS,SAAS,QAAS;AAAA,QAC3N;AACA,YAAI,2BAA2B;AAC/B,YAAI,QAAQ,CAAE,EAAE,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,EAAE,CAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,EAAE,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,CAAE,GAAG,CAAE,EAAE,CAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAE,GAAG,CAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,E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YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,QAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,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",
  "names": ["global", "factory", "w", "window", "array", "toString", "hasOwn", "isFunction", "isWindow", "document", "i", "version", "jQuery", "len", "j", "copy", "target", "arr", "matches", "type", "support", "a", "b", "push", "slice", "indexOf", "rtrim", "rhtml", "rquickExpr", "e", "Sizzle", "seed", "m", "groups", "attrs", "docElem", "id", "node", "nodeName", "start", "dir", "text", "hash", "cached", "map", "filter", "find", "isXML", "truncate", "n", "elem", "self", "init", "root", "l", "_", "queue", "add", "index", "v", "value", "deferred", "process", "getData", "data", "hooks", "next", "unit", "show", "div", "selection", "on", "one", "event", "events", "t", "expectSync", "props", "remove", "html", "measure", "computed", "style", "emptyStyle", "name", "percent", "p", "length", "empty", "timer", "time", "timeout", "max", "location", "s", "val", "ct", "completed", "responseText", "top", "method", "proxy", "root", "factory", "global", "I18n", "number", "isObject", "type", "isFunction", "isArray", "isString", "isNumber", "isBoolean", "merge", "locale", "time", "date", "t", "matches", "placeholder", "s", "format", "i", "unit", "Rails", "ref", "m", "$", "CustomEvent", "matches", "event", "e", "target", "type", "toArray", "getData", "factory", "$", "div", "noop", "e", "query", "range", "filter", "q", "i", "groupBy", "html", "index", "children", "root", "undefined", "toString", "isString", "isArray", "isObject", "defaults", "map", "iterator", "i", "j", "format", "number", "VERSION", "defaults", "Datepicker", "date", "d", "o", "locale", "replacer", "str", "len", "i", "format", "type", "time", "min", "max", "top", "left", "event", "y", "m", "index", "keyCode", "e", "h", "d", "type", "html", "i", "date", "m", "y", "max", "dp", "e", "d", "html", "date", "type", "m", "y", "e", "date", "h", "m", "d", "e", "window", "global", "document", "_typeof", "obj", "target", "i", "o", "p", "_setPrototypeOf", "self", "e", "_getPrototypeOf", "props", "it", "F", "n", "s", "f", "len", "__create", "__defProp", "__getProtoOf", "__hasOwnProp", "__getOwnPropNames", "__getOwnPropDesc", "__markAsModule", "__commonJS", "module", "__export", "all", "__exportStar", "_loop", "get", "err", "__toModule", "exports", "c", "chr", "str", "l", "hex", "parse2", "_a", "path", "forEach", "create", "process2", "abs", "max", "bind", "index", "assign", "map", "isObject", "test", "generate", "isFunction", "d", "w", "set", "hasOwnProperty2", "on", "once", "type", "once2", "off", "emit", "naiveFallback", "global2", "id", "isString", "isArray", "j", "iterator", "toArray2", "resolveArgs", "ee", "del", "memoized", "has", "extDel", "callable", "byObserver", "Observer", "nextTick", "waiting", "isPromise", "onSuccess", "onFailure", "nextTickFailure", "timeout", "noop4", "min", "hit", "m", "def", "m2", "v", "unescape", "factory", "x", "_isArray", "asap", "asap2", "_", "P", "defineProp", "f2", "b", "ArrayBuffer", "ArrayBuffer2", "array", "start", "min2", "Float32Array", "Float64Array", "r", "DataView", "DataView2", "defineProperty", "constants", "group", "log", "AbstractVirtualNode", "utils_exports", "DqElement", "aggregate", "aggregateChecks", "aggregateNodeResults", "aggregateResult", "areStylesSet", "assert", "checkHelper", "clone", "clone_default", "closest", "collectResultsFromFrames", "contains", "deepMerge", "escapeSelector", "extendMetaData", "filterHtmlAttrs", "finalizeRuleResult", "findBy", "getAllChecks", "getBaseLang", "getCheckMessage", "getCheckOption", "getFlattenedTree", "getFriendlyUriEnd", "getNodeAttributes", "getNodeFromTree", "getRootNode", "getRule", "getScroll", "getScrollState", "getShadowSelector", "getStyleSheetFactory", "getXpath", "injectStyle", "isHidden", "isHtmlElement", "isNodeInContext", "isShadowRoot", "isValidLang", "isXHTML", "matches", "matchesSelector", "mergeResults", "nodeSorter", "parseCrossOriginStylesheet", "parseSameOriginStylesheet", "parseStylesheet", "performanceTimer", "preload", "preloadCssom", "preloadMedia", "processMessage", "publishMetaData", "querySelectorAll", "querySelectorAllFilter", "queue", "ruleShouldRun", "select", "select_default", "sendCommandToFrame", "setScrollState", "toArray", "tokenList", "uniqueArray", "uuid", "validInputTypes", "version", "_rng", "parse", "dt", "origin", "handler", "a", "impacts", "group2", "query", "hash", "xhtml", "at", "_loop2", "truncate", "frame", "data", "data2", "noop", "defaultFail", "q", "defer", "fn", "findElmsInContext", "findUp", "findUpVirtual", "getComposedParent", "getElementByReference", "getElementCoordinates", "getElementStack", "getScrollOffset", "getTabbableElements", "getTextElementStack", "getViewportSize", "hasContent", "hasContentVirtual", "idrefs", "insertedIntoFocusOrder", "isFocusable", "isHTML5", "isHiddenWithCSS", "isInTextBlock", "isModalOpen", "isNativelyFocusable", "isNode", "isOffscreen", "isOpaque", "isSkipLink", "isVisible", "isVisualContent", "reduceToElementsBelowFloating", "shadowElementsFromPoint", "urlPropsFromAttribute", "visuallyContains", "visuallyOverlaps", "root", "parentNode", "style", "transform", "filter", "y", "range", "rect", "ref", "point", "_loop3", "_i6", "config", "Color", "parseString", "g", "attribute", "VirtualNode", "attrs", "sum", "screen", "navigator", "location", "innerWidth", "event", "now", "mark", "measure", "reset", "value", "O", "k", "t", "isCallable", "toInteger", "number", "toLength", "C", "T", "A", "top", "left", "SerialVirtualNode", "allowedAttr", "arialabelText", "arialabelledbyText", "getAccessibleRefs", "getElementUnallowedRoles", "getExplicitRole", "getOwnedVirtual", "getRole", "getRoleType", "getRolesByType", "getRolesWithNameFromContents", "implicitNodes", "implicitRole", "isAccessibleRef", "isAriaRoleAllowedOnElement", "isUnsupportedRole", "isValidRole", "label", "labelVirtual", "lookupTable", "namedFromContents", "requiredAttr", "requiredContext", "requiredOwned", "validateAttr", "validateAttrValue", "cells", "getValue", "children", "accessibleText", "accessibleTextVirtual", "formControlValue", "hasUnicode", "isHumanInterpretable", "isIconLigature", "isValidAutocomplete", "labelText", "nativeElementType", "nativeTextAlternative", "nativeTextMethods", "removeUnicode", "sanitize", "subtreeText", "titleText", "unsupported", "visible", "visibleTextNodes", "visibleVirtual", "diff", "tagName", "isNull", "isNotNull", "condition", "implicit", "getAriaRolesByType", "getAriaRolesSupportingNameFromContent", "getElementSpec", "getElementsByContentType", "getGlobalAriaAttrs", "implicitHtmlRoles", "_loop4", "_i15", "getAllCells", "getCellPosition", "getHeaders", "getScope", "isColumnHeader", "isDataCell", "isDataTable", "isHeader", "isRowHeader", "toGrid", "traverse", "vNode", "centerPointOfRect", "elementHasImage", "elementIsDistinct", "filteredRectStack", "flattenColors", "getBackgroundColor", "getBackgroundStack", "getContrast", "getForegroundColor", "getOwnBackgroundColor", "getRectStack", "getTextShadowColors", "hasValidContrastRatio", "incompleteData", "_loop5", "_i20", "_loop6", "color", "standards", "text", "isAriaCombobox", "isAriaListbox", "isAriaRange", "isAriaTextbox", "isDisabled", "isNativeSelect", "isNativeTextbox", "commons", "nextSibling", "_loop7", "degrees", "z", "unit", "findMatch", "xhtml2", "timer", "mergeCheckLocale", "mergeRuleLocale", "mergeFailureMessage", "mergeFallbackMessage", "Audit", "locale", "defaultLocale", "normalizeOptions", "l2", "patch", "add", "plugin", "noop2", "noop3", "respond", "results", "err2", "naReporter", "noPassesReporter", "rawReporter", "rawEnvReporter", "v1Reporter", "addFailureSummaries", "v2Reporter", "url", "options", "Promise", "resolve", "reject", "request", "XMLHttpRequest", "keys", "all", "headers", "response", "ok", "status", "statusText", "responseURL", "text", "responseText", "json", "then", "JSON", "parse", "blob", "Blob", "clone", "entries", "get", "n", "toLowerCase", "has", "i", "open", "method", "onload", "getAllResponseHeaders", "replace", "m", "key", "value", "push", "onerror", "withCredentials", "credentials", "setRequestHeader", "send", "body", "window", "$", "toString", "type", "hasOwn", "e", "i", "isArray", "id", "_", "copy", "target", "len", "j", "q", "queue", "elem", "offsetParent", "factory", "global", "document", "undefined", "div", "performance", "array", "index", "start", "k", "p", "A", "B", "C", "f", "str", "dt", "a", "b", "c", "d", "initState", "path", "unit", "$2", "hex", "m", "r", "g", "tagName", "element", "property", "l", "processElement", "opts", "next", "callIndex", "delayComplete", "valueData", "endValue", "easing", "startValue", "axis", "x", "tweenDelta", "factory", "$", "f", "html", "e", "type", "s", "v", "i", "modules", "n", "item", "index", "text", "target", "module", "image", "transition", "t", "l", "p", "m", "st", "factory", "global", "window", "document", "undefined", "$", "i", "component", "effectName", "parentNode", "element", "injectFinalCallbacks", "root", "factory", "modules", "module", "exports", "component", "compose", "i", "l", "m", "k", "defineComponent", "c", "traverse", "path", "props", "log", "e", "type", "a", "b", "event", "index", "len", "array", "u", "timeout", "target", "attrs", "key", "origin", "r", "defaults", "t", "r", "e", "n", "o", "i", "s", "a", "u", "factory", "root", "jQuery", "S2", "require", "define", "makeMap", "waiting", "config", "hasOwn", "normalize", "i", "j", "map", "index", "plugin", "e", "$", "Utils", "m", "decoratedMethod", "d", "event", "len", "k", "id", "self", "s", "attrs", "matches", "c", "top", "bottom", "selection", "_", "placeholder", "path", "val", "children", "defaults", "item", "t", "params", "l", "text", "a", "style", "n", "select2", "global", "factory", "ie", "chrome", "e", "style", "i", "range", "start", "r", "addClass", "a", "b", "bind", "f", "target", "prop", "n", "self", "time", "array", "elt", "map", "props", "str", "len", "i$1", "type", "i$2", "j", "m", "at", "on", "index", "set", "div", "measure", "test", "l", "rt", "te", "text", "no", "h", "x", "copy", "st", "o", "mark", "p", "lineNo", "d", "estimateHeight", "group", "callbacks", "k", "id", "next", "top", "left", "get", "ch", "right", "partPos", "y", "widgetHeight", "part", "ltr", "ref", "add", "bottom", "extent", "w", "screen", "axis", "node", "Selection", "Range", "doc", "origin", "events", "event", "extend", "filter", "children", "min", "max", "line", "off", "CodeMirror", "t", "keyNames", "dir", "wrappedLineExtent", "moveInStorageOrder", "keyCode", "now", "repeat", "e2", "unit", "ranges", "g", "defaults", "optionHandlers", "find", "textNode", "topNode", "offset", "cm", "CodeMirror", "i", "CodeMirror", "CodeMirror", "CodeMirror", "config", "defaults", "type", "doctype", "next", "style", "tagName", "CodeMirror", "i", "info", "j", "CodeMirror", "mode", "f", "getType", "style", "i", "t", "type", "len", "s", "CodeMirror", "CodeMirror", "empty", "CodeMirror", "array", "start", "mark", "i", "CodeMirror", "config", "s", "self", "path", "i", "j", "e", "word", "k", "_len", "s", "a", "b", "config", "global", "factory", "target", "props", "i", "o", "n", "len", "it", "getEscapeReplacement", "html", "encode", "_", "e", "noopTest", "str", "cells", "c", "l", "b", "text", "Tokenizer", "list", "t", "def", "j", "k", "escape", "start", "link", "del", "mangle", "smartypants", "Lexer", "rules", "next", "inline", "get", "Renderer", "type", "TextRenderer", "Slugger", "slug", "unescape", "Parser", "parse", "top", "merge", "defaults", "done", "pending", "args", "_loop", "prop", "_loop2", "_loop3", "CodeMirror", "f", "a", "shortcuts", "text", "i", "line", "cm", "cur_start", "cur_end", "fenceCharsToInsert", "sel_multi", "start", "map", "type", "target", "extend", "m", "SimpleMDE", "self", "key", "e", "d", "h", "v", "x", "el", "item", "$", "computed", "w", "elm", "top", "undefined", "VERSION", "root", "e", "array", "index", "collection", "n", "props", "placeholder", "chr", "getValue", "iterator", "map", "transform", "set", "runInContext", "_", "Array", "Date", "Error", "Function", "Math", "Object", "RegExp", "String", "TypeError", "arrayProto", "hasOwnProperty", "uid", "Buffer", "Symbol", "Uint8Array", "DataView", "Map", "Promise", "Set", "WeakMap", "isArray", "isObject", "result", "start", "iteratee", "type", "computed", "size", "values", "isBuffer", "isTypedArray", "get", "number", "lower", "key", "setTimeout", "includes", "isFunction", "path", "object", "identity", "isPlainObject", "indexOf", "indexes", "toString", "clearTimeout", "id", "getData", "ary", "toNumber", "noop", "mergeData", "othValue", "flatten", "transforms", "concat", "remove", "uniq", "group", "toArray", "parent", "clone", "filter", "find", "forEach", "groupBy", "isString", "now", "bind", "bindKey", "debounce", "time", "once", "spread", "throttle", "gt", "isArrayBuffer", "isBoolean", "isDate", "isError", "isFinite", "isNaN", "isNumber", "isNative", "isRegExp", "isUndefined", "lt", "at", "create", "prototype", "defaults", "findKey", "has", "merge", "capitalize", "endsWith", "target", "pad", "parseInt", "repeat", "trim", "truncate", "unescape", "matches", "chain", "range", "add", "divide", "max", "maxBy", "mean", "min", "sum", "sumBy", "value", "set", "v", "n", "str", "map", "i", "len", "index", "hasOwnProperty", "a", "l", "start", "extend", "noop", "b", "c", "modules", "m", "e", "x", "y", "path", "target", "type", "r", "ref", "proxy", "factory", "_a", "get", "val", "fns", "on", "add", "remove", "createOnceHandler", "event", "def", "attrs", "props", "hash", "children", "iterator", "id", "identity", "key", "cached", "defaults", "p", "d", "Vue", "endTag", "j", "queue", "__assign", "s", "hooks", "style", "timeout", "component", "computed", "watch", "inject", "t", "styleValue", "plugin", "filter", "parentNode", "tagName", "text", "nodeOps", "isUnknownElement", "createComponent", "patch", "range", "_", "warn", "events", "number", "trim", "chr", "enter", "leave", "o", "h", "delimiters", "shouldDecodeNewlines", "re", "html", "isUnaryTag", "canBeLeftOpenTag", "next", "all", "isReservedTag", "root", "once", "isNative", "handler", "keyCode", "maybeComponent", "comment", "bind", "pad", "compileToFunctions", "baseCompile", "createCompiler", "baseOptions", "tip", "normalize", "transition", "Transition", "Set", "VNode", "has", "initProxy", "Dep", "Observer", "EffectScope", "Watcher", "vm", "CodegenState", "global", "factory", "e", "r", "t", "o", "target", "props", "i", "n", "len", "isNaN", "isNumber", "isPositiveNumber", "isUndefined", "isObject", "hasOwnProperty", "isPlainObject", "prototype", "isFunction", "toArray", "forEach", "assign", "style", "addClass", "removeClass", "getData", "once", "listener", "get", "set", "type", "event", "dispatchEvent", "location", "translateX", "translateY", "transform", "x2", "y2", "start", "str", "render", "preview", "left", "top", "events", "bind", "change", "right", "bottom", "range", "check", "p", "x", "y", "center", "setData", "Cropper", "init", "tagName", "done", "parentNode", "version", "Position", "Node", "o", "index", "_a", "k", "v", "n", "f", "nextSibling", "__extends", "extendStatics", "d", "b", "p", "jQuery", "DragAndDropHandler", "_a", "left", "top", "x", "y", "VisibleNodeIterator", "_", "i", "HitAreasGenerator", "group", "bottom", "DragElement", "n", "v", "ElementsRenderer", "children", "div", "__assign", "t", "s", "i", "n", "p", "DataLoader", "parentNode", "handleError", "_a", "KeyHandler", "e", "__assign", "t", "s", "i", "n", "p", "_a", "SimpleWidget", "defaults", "__extends", "extendStatics", "d", "b", "p", "e", "MouseWidget", "SaveStateHandler", "ScrollHandler", "top", "$el", "_i", "_a", "SelectNodeHandler", "id", "__extends", "extendStatics", "d", "b", "p", "NodeElement", "_a", "FolderElement", "BorderDropHint", "GhostDropHint", "__extends", "extendStatics", "d", "b", "p", "__assign", "t", "s", "i", "n", "jQuery", "JqTreeWidget", "e", "parentNode", "_a", "onFinished", "slide", "top", "event", "mustLoadOnDemand", "factory", "$", "show", "init", "defaults", "i", "event", "target", "x", "y", "r", "left", "top", "hex", "rgb", "a", "rgba", "min", "max", "h", "s", "v", "color", "module", "modules", "exports", "key", "getPrototypeOf", "next", "s", "i", "l", "a", "b", "at", "S", "index", "O", "add", "has", "P", "e", "options", "element", "callback", "style", "reporter", "value", "version", "v", "div", "all", "currentDir", "hasDocument", "document", "hasWindow", "window", "getDocumentDir", "direction", "dir", "getElementsByTagName", "getAttribute", "setDocumentDir", "html", "setAttribute", "addWindowEventListener", "event", "addEventListener", "removeWindowEventListener", "removeEventListener", "re", "str", "isObject", "it", "toString", "id", "T", "B", "h", "global", "isFunction", "lt", "gt", "create", "VueGridLayout", "GridLayout", "GridItem", "install", "Vue", "installed", "Object", "keys", "forEach", "name", "component", "plugin", "GlobalVue", "use", "uid", "Symbol", "generate", "provide", "self", "x", "y", "w", "containerHeight", "toObject", "A", "n", "noop", "j", "remove", "updateStyle", "len", "re2", "test", "type", "target", "C", "R", "hasOwnProperty", "K", "k", "max", "min", "def", "set", "getBreakpointFromWidth", "breakpoints", "width", "sorted", "sortBreakpoints", "matching", "length", "breakpointName", "getColsFromBreakpoint", "breakpoint", "cols", "Error", "findOrGenerateResponsiveLayout", "orgLayout", "layouts", "lastBreakpoint", "verticalCompact", "cloneLayout", "layout", "breakpointsSorted", "breakpointsAbove", "slice", "indexOf", "compact", "correctBounds", "generateResponsiveLayout", "sort", "Reflect", "c", "bottom", "bottomY", "newLayout", "Array", "cloneLayoutItem", "layoutItem", "JSON", "parse", "stringify", "collides", "l1", "l2", "minPositions", "compareWith", "getStatics", "sortLayoutItemsByRowCol", "out", "static", "compactItem", "push", "moved", "getFirstCollision", "minY", "bounds", "collidesWith", "getLayoutItem", "getAllCollisions", "filter", "moveElement", "isUserAction", "preventCollision", "oldX", "oldY", "movingUp", "reverse", "collisions", "collision", "moveElementAwayFromCollision", "itemToMove", "fakeItem", "Math", "undefined", "perc", "num", "setTransform", "top", "left", "height", "translate", "transform", "WebkitTransform", "MozTransform", "msTransform", "OTransform", "position", "setTransformRtl", "right", "setTopLeft", "setTopRight", "concat", "validateLayout", "contextName", "subProps", "keyArr", "isArray", "item", "autoBindHandlers", "el", "fns", "bind", "createMarkup", "obj", "result", "val", "hyphenate", "addPx", "IS_UNITLESS", "animationIterationCount", "boxFlex", "boxFlexGroup", "boxOrdinalGroup", "columnCount", "flex", "flexGrow", "flexPositive", "flexShrink", "flexNegative", "flexOrder", "gridRow", "gridColumn", "fontWeight", "lineClamp", "lineHeight", "opacity", "order", "orphans", "tabSize", "widows", "zIndex", "zoom", "fillOpacity", "stopOpacity", "strokeDashoffset", "strokeOpacity", "strokeWidth", "hyphenateRE", "replace", "toLowerCase", "findItemInArray", "array", "property", "findAndRemove", "splice", "m", "f", "trim", "getControlPosition", "offsetXYFromParentOf", "evt", "offsetParent", "body", "offsetParentRect", "getBoundingClientRect", "clientX", "scrollLeft", "clientY", "scrollTop", "createCoreData", "lastX", "lastY", "isStart", "isNum", "deltaX", "deltaY", "isNaN", "init", "win", "number", "Element", "navigator", "merge", "func", "find", "extend", "raf", "normalize", "t", "prefix", "p", "parentNode", "path", "edges", "origin", "defaults", "dt", "d", "events", "on", "_ProxyValues", "_ProxyMethods", "matches", "eventTarget", "curEventTarget", "map", "hold", "now", "axis", "browser", "start", "grid", "range", "_", "CheckName", "resizable", "topLevel", "bottomLevel", "process", "toNumber", "Number", "g", "styleId", "getStyle", "initState", "toArray", "listener", "callOnAdd", "isFinite", "$", "I18n", "key", "x", "map", "values", "i", "groups", "keyof", "index", "group", "max", "index", "sum", "index", "sum", "index", "x", "x", "y", "d", "tickFormat", "k", "transform", "axis", "format", "range", "selection", "path", "text", "p", "_", "i", "n", "_", "t", "T", "copy", "type", "c", "i", "document", "groups", "m", "j", "group", "n", "i", "x", "groups", "m", "j", "group", "n", "i", "groups", "m", "j", "group", "n", "i", "datum", "next", "x", "group", "enter", "i", "bind", "groups", "m", "j", "next", "enter", "selection", "m", "j", "n", "merge", "i", "groups", "j", "m", "group", "i", "next", "a", "b", "groups", "m", "j", "group", "n", "i", "groups", "j", "m", "group", "i", "n", "groups", "j", "m", "group", "i", "n", "v", "v", "v", "i", "n", "v", "v", "create", "create", "event", "parseTypenames", "t", "i", "on", "j", "m", "o", "n", "dispatchEvent", "type", "window", "event", "dispatch_default", "groups", "j", "m", "group", "i", "n", "groups", "dispatch_default", "select_default", "factory", "prototype", "format", "m", "l", "n", "r", "g", "b", "a", "o", "k", "h", "s", "min", "max", "n", "t", "i", "n", "t", "i", "constant_default", "x", "a", "d", "t", "b", "y", "y", "a", "b", "constant_default", "d", "y", "color", "rgb", "start", "r", "g", "b", "t", "n", "i", "a", "b", "n", "c", "i", "t", "x", "a", "b", "x", "c", "i", "t", "a", "b", "d", "t", "a", "b", "t", "a", "b", "i", "c", "k", "t", "b", "t", "a", "i", "s", "q", "o", "a", "b", "t", "c", "constant_default", "a", "b", "t", "identity", "a", "b", "c", "d", "e", "f", "m", "identity", "parse", "s", "translate", "q", "i", "a", "b", "t", "n", "o", "f", "time", "t", "e", "now", "time", "t", "id", "index", "group", "get", "set", "self", "start", "i", "j", "n", "o", "t", "empty", "i", "interrupt_default", "id", "set", "i", "n", "t", "get", "transition", "a", "b", "c", "attrRemove", "attrRemoveNS", "attrConstant", "attrConstantNS", "attrFunction", "attrFunctionNS", "attr_default", "i", "i", "t", "id", "get", "id", "set", "get", "id", "set", "get", "id", "v", "set", "filter_default", "groups", "m", "j", "group", "n", "i", "merge_default", "transition", "m", "j", "n", "merge", "i", "t", "i", "id", "set", "on", "on_default", "get", "id", "i", "remove_default", "select_default", "id", "groups", "m", "j", "group", "n", "i", "get", "selectAll_default", "id", "groups", "m", "j", "group", "n", "i", "children", "inherit", "get", "k", "l", "Selection", "selection_default", "styleRemove", "styleConstant", "styleFunction", "id", "event", "remove", "set", "on", "style_default", "i", "i", "t", "textConstant", "textFunction", "text_default", "i", "t", "groups", "m", "j", "group", "n", "i", "inherit", "get", "id", "set", "on", "groups", "id", "select_default", "selectAll_default", "filter_default", "merge_default", "selection_default", "on_default", "attr_default", "style_default", "text_default", "remove_default", "t", "id", "transition_default", "groups", "m", "j", "group", "n", "i", "interrupt_default", "transition_default", "max", "e", "x", "y", "t", "i", "f", "s", "date", "parse", "text", "N", "I", "n", "t", "eof", "j", "c", "format", "text_default", "init", "parse", "init", "text_default", "csv", "tsv", "x", "p", "i", "x", "i", "t", "j", "g", "i", "s", "n", "i", "x", "p", "d", "i", "n", "x", "p", "d", "x", "p", "identity_default", "x", "locale", "group", "identity_default", "percent", "zero", "trim", "type", "format", "i", "n", "c", "formatPrefix", "f", "e", "k", "value", "max", "ascending", "a", "b", "a", "b", "f", "ascending", "d", "x", "zero", "left", "a", "right", "center", "i", "number", "x", "ascending", "number", "start", "i", "n", "ticks", "p", "number", "n", "i", "start", "n", "i", "range", "range", "index", "range", "d", "i", "_", "n", "start", "i", "_", "x", "number", "x", "identity", "x", "a", "b", "t", "range", "j", "d", "r", "i", "target", "transform", "n", "y", "_", "number", "u", "start", "d", "start", "linear", "quantile", "range", "i", "n", "x", "y", "_", "d", "ascending", "xhtml", "namespaces_default", "namespace_default", "i", "namespaces_default", "creatorInherit", "document", "xhtml", "creatorFixed", "creator_default", "namespace_default", "none", "selector_default", "select_default", "selector_default", "groups", "m", "j", "group", "n", "i", "Selection", "x", "empty", "selectorAll_default", "arrayAll", "group", "selectAll_default", "selectorAll_default", "groups", "m", "j", "n", "i", "Selection", "matcher_default", "childMatcher", "find", "childFind", "childFirst", "selectChild_default", "childMatcher", "filter", "children", "childrenFilter", "selectChildren_default", "childMatcher", "filter_default", "matcher_default", "groups", "m", "j", "group", "n", "i", "Selection", "sparse_default", "enter_default", "Selection", "sparse_default", "EnterNode", "datum", "next", "constant_default", "x", "bindIndex", "group", "enter", "i", "EnterNode", "bindKey", "datum", "data_default", "bind", "groups", "constant_default", "m", "j", "next", "Selection", "exit_default", "Selection", "sparse_default", "join_default", "enter", "merge_default", "selection", "Selection", "m", "j", "n", "merge", "i", "order_default", "groups", "j", "m", "group", "i", "next", "sort_default", "ascending", "a", "b", "groups", "m", "j", "group", "n", "i", "Selection", "call_default", "nodes_default", "node_default", "groups", "j", "m", "group", "i", "n", "size_default", "empty_default", "each_default", "groups", "j", "m", "group", "i", "n", "attrRemove", "attrRemoveNS", "attrConstant", "attrConstantNS", "attrFunction", "v", "attrFunctionNS", "attr_default", "namespace_default", "window_default", "styleRemove", "styleConstant", "styleFunction", "v", "style_default", "styleValue", "window_default", "propertyRemove", "propertyConstant", "propertyFunction", "v", "property_default", "classArray", "classList", "ClassList", "i", "classedAdd", "n", "classedRemove", "classedTrue", "classedFalse", "classedFunction", "classed_default", "textRemove", "textConstant", "textFunction", "v", "text_default", "htmlRemove", "htmlConstant", "htmlFunction", "v", "html_default", "raise", "raise_default", "lower", "lower_default", "append_default", "create", "creator_default", "constantNull", "insert_default", "create", "creator_default", "selector_default", "remove", "remove_default", "selection_cloneShallow", "selection_cloneDeep", "clone_default", "datum_default", "contextListener", "event", "parseTypenames", "t", "i", "onRemove", "on", "j", "m", "o", "onAdd", "on_default", "n", "dispatchEvent", "type", "window", "window_default", "event", "dispatchConstant", "dispatchFunction", "dispatch_default", "iterator_default", "groups", "j", "m", "group", "i", "n", "root", "Selection", "groups", "selection", "selection_selection", "select_default", "selectAll_default", "selectChild_default", "selectChildren_default", "filter_default", "data_default", "enter_default", "exit_default", "join_default", "merge_default", "order_default", "sort_default", "call_default", "nodes_default", "node_default", "size_default", "empty_default", "each_default", "attr_default", "style_default", "property_default", "classed_default", "text_default", "html_default", "raise_default", "lower_default", "append_default", "insert_default", "remove_default", "clone_default", "datum_default", "on_default", "dispatch_default", "iterator_default", "selection_default", "noop", "dispatch", "i", "n", "_", "t", "Dispatch", "parseTypenames", "T", "get", "set", "copy", "type", "c", "dispatch_default", "frame", "timeout", "interval", "pokeDelay", "taskHead", "taskTail", "clockLast", "clockNow", "clockSkew", "clock", "setFrame", "f", "now", "clearNow", "Timer", "timer", "time", "sleep", "t", "timerFlush", "e", "wake", "nap", "poke", "timeout_default", "time", "t", "Timer", "emptyOn", "dispatch_default", "emptyTween", "CREATED", "SCHEDULED", "STARTING", "STARTED", "RUNNING", "ENDING", "ENDED", "schedule_default", "id", "index", "group", "create", "init", "get", "set", "self", "timer", "start", "i", "j", "n", "o", "timeout_default", "t", "interrupt_default", "empty", "i", "STARTING", "ENDING", "ENDED", "interrupt_default", "define_default", "factory", "prototype", "extend", "Color", "darker", "brighter", "reI", "reN", "reP", "reHex", "reRgbInteger", "reRgbPercent", "reRgbaInteger", "reRgbaPercent", "reHslPercent", "reHslaPercent", "named", "define_default", "color", "color_formatHex", "color_formatHsl", "color_formatRgb", "hslConvert", "format", "m", "l", "rgbn", "Rgb", "rgba", "hsla", "n", "r", "g", "b", "a", "rgbConvert", "o", "rgb", "extend", "k", "rgb_formatHex", "rgb_formatRgb", "hex", "h", "s", "Hsl", "min", "max", "hsl", "hsl2rgb", "basis", "basis_default", "n", "t", "i", "basisClosed_default", "n", "t", "i", "basis", "constant_default", "x", "linear", "a", "d", "t", "exponential", "b", "y", "gamma", "y", "nogamma", "a", "b", "exponential", "constant_default", "d", "linear", "rgb_default", "rgbGamma", "y", "color", "gamma", "rgb", "start", "r", "g", "b", "nogamma", "t", "rgbSpline", "n", "i", "rgbBasis", "basis_default", "rgbBasisClosed", "basisClosed_default", "number_default", "a", "b", "t", "reA", "reB", "zero", "b", "one", "t", "string_default", "a", "i", "s", "q", "number_default", "o", "degrees", "identity", "decompose_default", "a", "b", "c", "d", "e", "f", "svgNode", "parseCss", "m", "identity", "decompose_default", "parseSvg", "interpolateTransform", "parse", "s", "translate", "q", "i", "number_default", "a", "b", "t", "n", "o", "interpolateTransformCss", "parseCss", "interpolateTransformSvg", "parseSvg", "tweenRemove", "id", "set", "i", "n", "tweenFunction", "t", "tween_default", "get", "tweenValue", "transition", "interpolate_default", "a", "b", "c", "number_default", "color", "rgb_default", "string_default", "attrRemove", "attrRemoveNS", "attrConstant", "attrConstantNS", "attrFunction", "attrFunctionNS", "attr_default", "namespace_default", "i", "interpolateTransformSvg", "interpolate_default", "tweenValue", "attrInterpolate", "i", "t", "attrInterpolateNS", "attrTweenNS", "attrTween", "attrTween_default", "namespace_default", "delayFunction", "id", "init", "delayConstant", "delay_default", "get", "durationFunction", "id", "set", "durationConstant", "duration_default", "get", "easeConstant", "id", "set", "ease_default", "get", "easeVarying", "id", "v", "set", "easeVarying_default", "filter_default", "matcher_default", "groups", "m", "j", "group", "n", "i", "Transition", "merge_default", "transition", "m", "j", "n", "merge", "i", "Transition", "start", "t", "i", "onFunction", "id", "init", "set", "on", "on_default", "get", "removeFunction", "id", "i", "remove_default", "select_default", "id", "selector_default", "groups", "m", "j", "group", "n", "i", "schedule_default", "get", "Transition", "selectAll_default", "id", "selectorAll_default", "groups", "m", "j", "group", "n", "i", "children", "inherit", "get", "k", "l", "schedule_default", "Transition", "Selection", "selection_default", "styleNull", "styleValue", "styleRemove", "styleConstant", "styleFunction", "styleMaybeRemove", "id", "event", "remove", "set", "on", "style_default", "i", "interpolateTransformCss", "interpolate_default", "tweenValue", "styleInterpolate", "i", "t", "styleTween", "styleTween_default", "textConstant", "textFunction", "text_default", "tweenValue", "textInterpolate", "i", "t", "textTween", "textTween_default", "transition_default", "newId", "groups", "m", "j", "group", "n", "i", "inherit", "get", "schedule_default", "Transition", "end_default", "id", "set", "on", "id", "Transition", "groups", "transition", "selection_default", "newId", "selection_prototype", "select_default", "selectAll_default", "filter_default", "merge_default", "transition_default", "on_default", "attr_default", "attrTween_default", "style_default", "styleTween_default", "text_default", "textTween_default", "remove_default", "tween_default", "delay_default", "duration_default", "ease_default", "easeVarying_default", "end_default", "cubicInOut", "t", "defaultTiming", "cubicInOut", "inherit", "id", "transition_default", "Transition", "newId", "now", "groups", "m", "j", "group", "n", "i", "schedule_default", "selection_default", "interrupt_default", "transition_default", "k", "x", "y", "point", "location", "identity", "b", "copy", "target", "timeout", "timer", "next", "axeCore", "d", "b", "p", "__assign", "t", "s", "i", "n", "P", "e", "_", "t", "f", "y", "g", "n", "v", "o", "s", "m", "i", "n", "r", "e", "i", "l", "__read", "o", "n", "m", "i", "r", "e", "__spreadArray", "i", "l", "a", "b", "_i", "__spreadArray", "__read", "k", "_a", "Serializable", "Environment", "r", "XDomainTransport", "_a", "e", "XHRTransport", "e", "FetchTransport", "_a", "NodeTransport", "PushApi", "_a", "Span", "Queue", "_a", "Dispatcher", "queue", "time", "_a", "Appsignal", "_a", "plugin", "event", "__assign", "self", "event", "i", "d", "i", "l", "accounting", "str", "d", "e", "import_velocity_animate", "e", "event", "$", "o", "get", "tipsy", "enter", "leave", "a", "b", "e", "target", "i", "index", "event", "target", "t", "import_velocity_animate", "e", "text", "str", "i", "seed", "event", "index", "Turbolinks", "Rails", "import_select2", "import_devbridge_autocomplete", "import_magnific_popup", "import_turbolinks", "e", "Turbolinks", "SimpleMDE", "id", "index", "a", "_", "date", "i", "event", "e", "index", "linear", "select_default", "csv", "d", "v", "accounting", "csv", "d", "v", "a", "b", "format", "select_default", "i", "accounting", "color", "quantile", "c", "k", "a", "i", "j", "import_lodash", "import_lodash", "import_lodash", "left", "right", "next", "p", "q", "left", "right", "index", "a", "b", "r", "i", "epsilon", "i", "n", "j", "m", "index", "array", "start", "epsilon", "dc", "d", "epsilon2", "x", "y", "x", "y", "next", "epsilon", "d", "b", "epsilon", "epsilon2", "a", "b", "c", "extent", "x", "y", "edges", "i", "m", "j", "n", "e", "v", "v2", "date", "e", "x", "date", "index", "type", "number", "timeFormat", "time", "i", "re", "delimiters", "str", "len", "selection", "range", "e", "target", "event", "Util", "$", "window", "document", "undefined", "defaults", "event", "attribute", "index", "location", "name", "instance", "e", "_", "locale", "a", "b", "index", "index", "e", "locale", "index", "self", "i", "config", "id", "locale", "html", "date", "a", "e", "e", "i", "CodeMirror", "event", "i", "group", "e", "g", "_Utils", "bottom", "top", "left", "right", "copy", "target", "tagName", "type", "x", "isAsyncFn", "matches", "style", "p", "Event", "Range", "Utils", "range", "init", "event", "target", "e", "SlickEvent", "SlickEventHandler", "SlickRange", "Draggable", "SlickCellRangeDecorator", "start", "SlickEventData", "SlickCellRangeSelector", "i", "r", "range2", "k", "keyCode", "Utils", "_FloatEditor", "e", "BindingEventService", "ColAutosizeMode", "SlickEvent", "SlickEventData", "GlobalEditorLock", "GridAutosizeColsMode", "keyCode", "preClickClassName", "SlickRange", "RowSelectionMode", "ValueFilterMode", "Utils", "WidthEvalMode", "Draggable", "MouseWheel", "Resizable", "target", "event", "i", "plugin", "model", "e", "v", "div", "test", "m", "a", "b", "j", "k", "c", "children", "d", "x", "p", "h", "style", "r", "matches", "s", "len", "max", "id", "w", "ascending", "ne", "hash", "y", "range", "selection", "y2", "x2", "left", "right", "self", "e", "id", "i", "startYear", "startMonth", "data", "columns", "d", "o", "e", "e", "import_devbridge_autocomplete", "str", "d", "query", "div", "q", "e", "index", "uid", "dt", "Cropper", "e", "e", "event", "$tree", "userAgent", "pattern", "window", "navigator", "match", "IE11OrLess", "Edge", "FireFox", "Safari", "IOS", "ChromeForAndroid", "captureMode", "capture", "passive", "on", "el", "event", "fn", "addEventListener", "off", "removeEventListener", "matches", "selector", "substring", "msMatchesSelector", "webkitMatchesSelector", "_", "getParentOrHost", "host", "document", "nodeType", "parentNode", "closest", "ctx", "includeCTX", "_throttleTimeout", "R_SPACE", "toggleClass", "name", "state", "classList", "className", "replace", "css", "prop", "val", "style", "defaultView", "getComputedStyle", "currentStyle", "indexOf", "matrix", "selfOnly", "appliedTransforms", "transform", "matrixFn", "DOMMatrix", "WebKitCSSMatrix", "CSSMatrix", "MSCSSMatrix", "find", "tagName", "iterator", "list", "getElementsByTagName", "i", "n", "length", "getWindowScrollingElement", "scrollingElement", "documentElement", "getRect", "relativeToContainingBlock", "relativeToNonStaticParent", "undoScale", "container", "getBoundingClientRect", "elRect", "top", "left", "bottom", "right", "height", "width", "innerHeight", "innerWidth", "containerRect", "parseInt", "elMatrix", "scaleX", "a", "scaleY", "d", "isScrolledPast", "elSide", "parentSide", "parent", "getParentAutoScrollElement", "elSideVal", "parentSideVal", "getChild", "childNum", "options", "currentChild", "children", "display", "Sortable", "ghost", "dragged", "draggable", "lastChild", "last", "lastElementChild", "previousElementSibling", "index", "nodeName", "toUpperCase", "clone", "getRelativeScrollOffset", "offsetLeft", "offsetTop", "winScroller", "scrollLeft", "scrollTop", "includeSelf", "elem", "gotSelf", "clientWidth", "scrollWidth", "clientHeight", "scrollHeight", "elemCSS", "overflowX", "overflowY", "body", "isRectEqual", "rect1", "rect2", "Math", "round", "throttle", "callback", "ms", "args", "arguments", "_this", "this", "call", "apply", "setTimeout", "scrollBy", "x", "y", "Polymer", "$", "jQuery", "Zepto", "dom", "cloneNode", "setRect", "rect", "unsetRect", "expando", "Date", "getTime", "plugins", "defaults", "initializeByDefault", "pluginManager", "mount", "plugin", "option", "hasOwnProperty", "push", "pluginEvent", "eventName", "sortable", "evt", "eventCanceled", "cancel", "eventNameGlobal", "forEach", "pluginName", "initializePlugins", "initialized", "Object", "assign", "modified", "modifyOption", "getEventProperties", "eventProperties", "value", "modifiedValue", "optionListeners", "dispatchEvent", "rootEl", "targetEl", "cloneEl", "toEl", "fromEl", "oldIndex", "newIndex", "oldDraggableIndex", "newDraggableIndex", "originalEvent", "putSortable", "extraEventProperties", "onName", "charAt", "substr", "CustomEvent", "createEvent", "initEvent", "bubbles", "cancelable", "to", "from", "item", "pullMode", "lastPutMode", "allEventProperties", "PluginManager", "o", "data", "bind", "dragEl", "parentEl", "ghostEl", "nextEl", "lastDownEl", "cloneHidden", "dragStarted", "moved", "activeSortable", "active", "hideGhostForTarget", "_hideGhostForTarget", "unhideGhostForTarget", "_unhideGhostForTarget", "cloneNowHidden", "cloneNowShown", "dispatchSortableEvent", "_dispatchEvent", "info", "activeGroup", "tapEvt", "touchEvt", "lastDx", "lastDy", "tapDistanceLeft", "tapDistanceTop", "lastTarget", "lastDirection", "targetMoveDistance", "ghostRelativeParent", "awaitingDragStarted", "ignoreNextClick", "sortables", "pastFirstInvertThresh", "isCircumstantialInvert", "ghostRelativeParentInitialScroll", "_silent", "savedInputChecked", "documentExists", "PositionGhostAbsolutely", "CSSFloatProperty", "supportDraggable", "createElement", "supportCssPointerEvents", "cssText", "pointerEvents", "_detectDirection", "elCSS", "elWidth", "paddingLeft", "paddingRight", "borderLeftWidth", "borderRightWidth", "child1", "child2", "firstChildCSS", "secondChildCSS", "firstChildWidth", "marginLeft", "marginRight", "secondChildWidth", "flexDirection", "gridTemplateColumns", "split", "clear", "_prepareGroup", "toFn", "pull", "group", "otherGroup", "join", "originalGroup", "checkPull", "checkPut", "put", "revertClone", "preventDefault", "stopPropagation", "stopImmediatePropagation", "lastSwapEl", "nearestEmptyInsertDetectEvent", "nearest", "touches", "clientX", "clientY", "some", "threshold", "emptyInsertThreshold", "ret", "target", "_onDragOver", "_checkOutsideTargetEl", "_isOutsideThisEl", "toString", "animationCallbackId", "animationStates", "sort", "disabled", "store", "handle", "test", "swapThreshold", "invertSwap", "invertedSwapThreshold", "removeCloneOnHide", "direction", "ghostClass", "chosenClass", "dragClass", "ignore", "filter", "preventOnFilter", "animation", "easing", "setData", "dataTransfer", "textContent", "dropBubble", "dragoverBubble", "dataIdAttr", "delay", "delayOnTouchOnly", "touchStartThreshold", "Number", "devicePixelRatio", "forceFallback", "fallbackClass", "fallbackOnBody", "fallbackTolerance", "fallbackOffset", "supportPointer", "nativeDraggable", "_onTapStart", "get", "captureAnimationState", "slice", "child", "fromRect", "thisAnimationDuration", "childMatrix", "f", "e", "addAnimationState", "removeAnimationState", "splice", "arr", "obj", "key", "animateAll", "clearTimeout", "animating", "animationTime", "time", "toRect", "prevFromRect", "prevToRect", "animatingRect", "targetMatrix", "sqrt", "pow", "animate", "max", "animationResetTimer", "currentRect", "duration", "translateX", "translateY", "animatingX", "animatingY", "forRepaintDummy", "offsetWidth", "animated", "onMove", "dragRect", "targetRect", "willInsertAfter", "retVal", "onMoveFn", "draggedRect", "related", "relatedRect", "_disableDraggable", "_unsilent", "_generateId", "str", "src", "href", "sum", "charCodeAt", "_nextTick", "_cancelNextTick", "id", "prototype", "constructor", "contains", "_getDirection", "type", "touch", "pointerType", "originalTarget", "shadowRoot", "path", "composedPath", "root", "inputs", "idx", "checked", "button", "isContentEditable", "criteria", "trim", "_prepareDragStart", "dragStartFn", "ownerDocument", "nextSibling", "_lastX", "_lastY", "_onDrop", "_disableDelayedDragEvents", "_triggerDragStart", "_disableDelayedDrag", "_delayedDragTouchMoveHandler", "_dragStartTimer", "abs", "floor", "_onTouchMove", "_onDragStart", "selection", "empty", "getSelection", "removeAllRanges", "err", "_dragStarted", "fallback", "_appendGhost", "_nulling", "_emulateDragOver", "elementFromPoint", "ghostMatrix", "relativeScrollOffset", "dx", "dy", "b", "c", "cssMatrix", "appendChild", "_hideClone", "cloneId", "insertBefore", "_loopId", "setInterval", "effectAllowed", "_dragStartId", "revert", "vertical", "isOwner", "canSort", "fromSortable", "completedFired", "dragOverEvent", "_ignoreWhileAnimating", "completed", "elLastChild", "changed", "targetBeforeFirstSwap", "sibling", "differentLevel", "differentRowCol", "dragElS1Opp", "targetS1Opp", "side1", "scrolledPastTop", "scrollBefore", "isLastTarget", "mouseOnAxis", "targetLength", "targetS1", "targetS2", "invert", "dragIndex", "nextElementSibling", "after", "moveVector", "extra", "axis", "insertion", "_showClone", "_offMoveEvents", "_offUpEvents", "clearInterval", "removeChild", "save", "handleEvent", "dropEffect", "toArray", "order", "getAttribute", "items", "set", "destroy", "Array", "querySelectorAll", "removeAttribute", "utils", "is", "extend", "dst", "nextTick", "cancelNextTick", "detectDirection", "element", "create", "version", "lastMultiDragSelect", "multiDragSortable", "clonesFromRect", "clonesHidden", "multiDragElements", "multiDragClones", "initialFolding", "folding", "insertMultiDragClones", "elementsInserted", "sortableIndex", "removeMultiDragElements", "multiDragElement", "drop", "t", "toSortable", "changedTouches", "onSpill", "Revert", "Remove", "startIndex", "dragStart", "parentSortable", "scrollEl", "scrollRootEl", "lastAutoScrollX", "lastAutoScrollY", "pointerElemChangedInterval", "autoScrolls", "scrolling", "clearAutoScrolls", "autoScroll", "pid", "clearPointerElemChangedInterval", "isFallback", "scroll", "scrollCustomFn", "sens", "scrollSensitivity", "speed", "scrollSpeed", "scrollThisInstance", "scrollFn", "layersOut", "currentParent", "canScrollX", "canScrollY", "scrollPosX", "scrollPosY", "vx", "vy", "layer", "scrollOffsetY", "scrollOffsetX", "bubbleScroll", "AutoScroll", "_handleAutoScroll", "_handleFallbackAutoScroll", "dragOverCompleted", "dragOverBubble", "nulling", "ogElemScroller", "newElem", "RemoveOnSpill", "RevertOnSpill", "Swap", "swapClass", "dragOverValid", "swap", "prevSwapEl", "n1", "n2", "i1", "i2", "p1", "p2", "isEqualNode", "swapItem", "MultiDrag", "_deselectMultiDrag", "_checkKeyDown", "_checkKeyUp", "selectedClass", "multiDragKey", "multiDragKeyDown", "isMultiDrag", "delayStartGlobal", "delayEnded", "setupClone", "showClone", "hideClone", "dragStartGlobal", "multiDrag", "_this2", "dragOver", "clonesInserted", "insertMultiDragElements", "dragRectAbsolute", "clonesHiddenBefore", "dragOverAnimationCapture", "dragMatrix", "dragOverAnimationComplete", "originalEvt", "shiftKey", "lastIndex", "currentIndex", "multiDragIndex", "update", "nullingGlobal", "destroyGlobal", "shift", "select", "deselect", "oldIndicies", "newIndicies", "_this3", "clones", "toLowerCase", "e", "i", "index", "id", "event", "e", "i", "e", "selection", "defaults", "index", "import_cropperjs", "e", "target", "uid", "id", "x", "dt", "index", "Cropper", "text", "placeholder", "e", "index", "select2", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "text", "i", "index", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "square", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_script__", "range", "target", "__vue_render__", "style", "component", "h", "__vue_script__", "__vue_render__", "i", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "event", "__vue_render__", "ref", "id", "__vue_render__", "__vue_render__", "__vue_render__", "__vue_render__", "ref", "id", "index", "type", "__vue_render__", "__vue_render__", "filter", "e", "i", "__vue_render__", "import_vue_grid_layout", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "id", "target", "config", "__vue_render__", "ref", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "a", "b", "__vue_render__", "ref", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "transform", "x", "__vue_script__", "y2", "a", "b", "d", "__vue_render__", "ref", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "bind", "toString", "str", "type", "isArray", "isFunction", "isObject", "isBoolean", "isPlainObject", "prototype", "e", "i", "l", "len", "extend", "a", "b", "bind", "props", "filter", "toArray", "matches", "replacer", "m", "hasOwnProperty", "isRegExp", "define", "noop", "target", "callbacks", "config", "path", "i", "filter", "indexes", "index", "str", "replacer", "toString", "encode", "id", "h", "path", "i", "len", "path", "target", "index", "e", "isFormData", "isFileList", "transitional", "i", "str", "filter", "w", "self", "i", "format", "computed", "target", "prototype", "config", "transform", "config", "validateStatus", "min", "now", "i", "threshold", "timer", "now", "e", "origin", "path", "config", "target", "a", "b", "merge", "config", "config", "handleError", "event", "transitional", "timeout", "timer", "signal", "len", "iterator", "e", "done", "isFunction", "ReadableStream", "e", "str", "type", "config", "timeout", "fetch", "len", "i", "seed", "target", "map", "e", "adapter", "config", "i", "id", "s", "config", "adapter", "VERSION", "type", "i", "version", "VERSION", "validators", "config", "e", "transitional", "i", "len", "i", "config", "index", "c", "bind", "create", "VERSION", "Axios", "AxiosError", "CanceledError", "isCancel", "CancelToken", "VERSION", "all", "isAxiosError", "spread", "toFormData", "AxiosHeaders", "HttpStatusCode", "getAdapter", "mergeConfig", "id", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "x", "y", "i", "d", "type", "defaults", "id", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "self", "i", "top", "left", "x", "y", "target", "d", "__vue_render__", "ref", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "h", "__vue_script__", "__vue_render__", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "__vue_script__", "id", "event", "uid", "__vue_render__", "ref", "__vue_staticRenderFns__", "__vue_inject_styles__", "__vue_scope_id__", "__vue_module_identifier__", "__vue_is_functional_template__", "__vue_normalize__", "style", "component", "h", "__vue_component__", "h", "create"]
}
